### 1、签名算法
**[(签名校验工具)](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=20_1)**
签名生成的通用步骤如下:
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
1. 参数名ASCII码从小到大排序(字典序);
2. 如果参数的值为空不参与签名;
3. 参数名区分大小写;
4. 验证调用返回或主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
5. 接口可能增加字段,验证签名时必须支持增加的扩展字段
第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
第三步,对发送的`数组`数据进行`json`化后`post`请求
**示例:**
假设传送的参数如下:
```
phone : 15890100000
amount : 100
panterid : 00002352
order_sn : 6998371888800015881
```
第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
~~~
stringA="amount=100&order_sn=6998371888800015881&panterid=00002352&phone=15890100000"
~~~
第二步:拼接API密钥:
```
stringSignTemp=stringA+"&key=9f6a2d"
sign=strtoupper(md5(stringSignTemp))="700D4E0883F6321482200011B4777FF2"
```
最终得到最终发送的数据:
```
{"phone":"15890100000","amount":"100","panterid":"00002352","order_sn":"6998371888800015881","sign":"700D4E0883F6321482200011B4777FF2"}
```