签名说明

## 签名算法 #### 第一步: 设所有发送或者接收到的数据为集合`M`,将集合`M`内非空参数值的参数按照参数名`ASCII`码从小到大排序(字典序),使用`URL`键值对的格式(即key1=value1&key2=value2…)拼接成字符串`stringA`。 特别注意以下重要规则: >d ◆ 参数名ASCII码从小到大排序(字典序); ◆ 如果参数的值为空不参与签名; ◆ 参数名区分大小写; #### 第二步: 在`stringA`最后拼接上`key`得到`stringSignTemp`字符串,并对`stringSignTemp`进行`MD5`运算,再将得到的字符串所有字符转换为大写,得到sign值。 >w key是指你的商户秘钥 注意不要泄露,妥善保存 ## 举例: 假设传送的参数如下: appid:wxd930ea5d5a258f4f mch_id:10000100 device_info:1000.00 body:test nonce_str:ibuaiVcKdpRxkhJA 第一步:对参数按照`key=value`的格式,并按照参数名ASCII字典序排序如下: `$stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA"` 第二步:拼接API密钥: `$stringSignTemp = $stringA . "&key=192006250b4c09247ec02edce69f6a2d"` `$sign = strtoupper(md5($string_sign_temp));` ## 代码示例 ```PHP public function makeSign($data) { // 去空 $data = array_filter($data); //签名步骤一:按字典序排序参数 ksort($data); $string_a = http_build_query($data); $string_a = urldecode($string_a); //签名步骤二:在string后加入KEY $config = $this->config; $string_sign_temp = $string_a . "&key=" . $config['KEY']; //签名步骤三:MD5加密 $sign = md5($string_sign_temp); // 签名步骤四:所有字符转为大写 $result = strtoupper($sign); return $result; } ```