签名生成的通用步骤如下:
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序)
第二步,将ASCII排序后的参数取参数值拼接起来(即<b style="color:#F00">value1</b><b style="color:#00F">value2</b><b style="color:#F00">value3</b>)拼接成字符串stringA。
特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
第三步,在stringA拼接上payKey得到stringSignTemp字符串,并对stringSignTemp进行MD5运算(32位小写),将结果赋值给Sign。
◆ payKey获取路径:ISPAY商户平台(<a href="https://www.ispay.cn" target="_blank">https://www.ispay.cn</a>)-->开发者-->应用配置-->商户密钥
举例:
假设传送的参数:
~~~
payId:10000
payChannel:wxpay
Subject:测试标题
Money:100
orderNumber:201702080118441263011007
attachData:test
~~~
第一步:按照参数名ASCII字典序排序:
~~~
Money:100
Subject:测试标题
attachData:test
orderNumber:201702080118441263011007
payChannel:wxpay
payId:10000
~~~
第二步:将ASCII字典序排序后的参数取参数值依次拼接成字符串:
~~~
stringA = "100测试标题test201702080118441263011007wxpay10000"
~~~
第三步:拼接商户密钥(payKey)并完成MD5加密:
~~~
stringSignTemp = stringA + payKey //注:payKey为商户密钥在后台获取
Sign = md5(stringSignTemp)
~~~
得到最终发送的数据:
~~~
payId:10000
payChannel:wxpay
Subject:测试标题
Money:100
orderNumber:201702080118441263011007
attachData:test
Sign:d03a67eda097c2ecfaceb170a8527035
~~~