多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## **数据格式说明及签名规则等** **数据格式:** - `为保证交易安全性,建议采用HTTPS传输` - `采用POST方法提交` - `提交数据格式:application/x-www-form-urlencoded` - `返回数据格式:text/xml` - `字符编码:统一采用UTF-8字符编码` - `签名算法:MD5` - `签名要求:请求和接收数据均需要校验签名` - `判断逻辑:先判断协议字段返回,再判断业务返回,最后判断交易状态` **请求数据:** ``` amount=1&merchant_id=9605008025&nonce_str=66318&pay_way=WXZF&service=get_tdcode& sign=8a7167c448baef94e2d22c4d78d4d07c&third_order_id=NL2019032218253280439 ``` **响应数据:** - `正常返回` ``` <leshua> <resp_code><![CDATA[0]]></resp_code> <merchant_id><![CDATA[9605008025]]></merchant_id> <sign><![CDATA[DB45DA9E55DD666C49F3963733D2602E]]></sign> <result_code><![CDATA[0]]></result_code> <third_order_id><![CDATA[NL2019032218253138930]]></third_order_id> <nonce_str><![CDATA[rzmkrvsvprjjoqgjpzrmubbdeovjhrcu]]></nonce_str> <td_code><![CDATA[weixin://wxpay/bizpayurl?pr=kZF1s1X]]></td_code> <pay_way><![CDATA[WXZF]]></pay_way> <leshua_order_id><![CDATA[0003495002500081]]></leshua_order_id> </leshua> ``` - `业务级错误返回` ``` <leshua> <resp_code><![CDATA[0]]></resp_code> <merchant_id><![CDATA[9605008025]]></merchant_id> <sign><![CDATA[22B542D7A1EE3EACE9DD90537B5D8D68]]></sign> <result_code><![CDATA[1]]></result_code> <third_order_id><![CDATA[NL2019032218253291474]]></third_order_id> <pay_way><![CDATA[WXZF]]></pay_way> <nonce_str><![CDATA[acvlgvqgwekjujypttfhulneqsgubnvc]]></nonce_str> <error_msg><![CDATA[超出单笔支付限额,无法支付]]></error_msg> <error_code><![CDATA[-1041]]></error_code> </leshua> ``` **数字签名:** - 为了保证数据传输过程中的数据真实性和完整性,我们需要对数据进行数字签名,在接收签名数据之后进行签名校验。 - 签名有两个步骤,先按一定规则拼接要签名的原始串,再选择具体的算法和密钥计算出签名结果。 - 原始串中,字段名和字段值都采用原始值,不进行URL Encode。 - 平台返回的应答或通知消息可能会由于升级增加参数,请验证应答签名时注意允许这种情况。 **签名方法:** - 设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 - 在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。 **签名样例:** - 假设需要传递的参数如下: ``` server:query_status merchant_id:1234567890 third_order_id:12345678901 nonce_str:12345678901 ``` - 对参数按照key=value的格式,并按照参数名ASCII字典序排序如下 ``` stringA=merchant_id=1234567890&nonce_str=12345678901&server=query_status&third_order_id=12345678901 ``` - 拼接商户秘钥key ``` stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d" //注:key为商户密钥key ``` - 计算签名 ``` 交易报文MD5计算:sign=MD5(stringSignTemp).toUpperCase() 通知报文MD5计算:sign=MD5(stringSignTemp).toLowerCase() ``` **特别注意:** - 请求数据验签方法 ``` 除sign、leshua、resp_code字段外,其他参数按照签名方法验签,空值不传递,不参与签名组串。 ``` - 应答数据验签方法 ``` 除sign、leshua、resp_code字段外,其他参数按照签名方法验签,空值参与签名组串。 ```