'sign字段不允许参与']; // 没有随机字符串 if( !isset($data['nonce']) ) $data['nonce'] = (string) random_int(100000,999999); // 时间戳 if( !isset($data['timestamp']) ) $data['timestamp'] = time(); // 组合参数 $data['appid'] = $appid ? $appid :'ald930ea5d5a258f4f'; // 组合参数 $appkey = $appkey ? $appkey :'192006250b4c09247ec02edce69f6a2d'; // 键名字典排序 ksort($data); // 空字符串 $param = ''; // 循环参数对象,拼接url字符串 foreach ( $data as $key => $value ) { // 如果键值为空(空字符串 空数组 空集合 空对象 字符串0 数字0 NULL FALSE),此参数省略;另 '000' 这类0组成的字符串 不为空 if( strtolower($value) == 'false' || strtolower($value) == 'null' || empty($value) || ( is_numeric($value) && $value == 0 && substr_count($value,'.') == 1 ) ) continue; // 判断键值是否是数组,对象 ,如果是的话,键值转json字符串 if( is_array( $value ) || is_object($value) ) $value = json_encode($value,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); // 如果键值为真则 键值转md5加密(此处小写) 为假则直接拼接,0特殊处理 $param .= '&'.$key.'='.$value; } // 转码 $param = ltrim($param,'&'); // 解码 $param = rawurldecode($param); // 拼接私钥数据 $param .= '&key='.$appkey; // 数据加密(MD5后转大写) $data['sign'] = strtoupper(md5($param)); // 验签通过 return $data; } }