微信支付细节说明(服务商版本)

官方文档

统一下单: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=9_1
查单: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=9_2
签名: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=4_3
工具: https://pay.weixin.qq.com/wiki/tools/signverify/

统一下单

根据上面列出的统一下单文档,将必填的参数准备就绪后,计算出一个签名sign,就可以发送到微信服务器了。

计算签名sign就开始有些坑了,请先参考签名文档。如下是一些注意点:

  • 字段排序是靠key的ascii编码来排序的
  • 没有值的字段不参与签名,比如拼接后的字符串为xxx=&yyy=1&qqq=2,那么应该将xxx字段去掉。
  • 计算签名用的是二进制,而且是经过utf8编码的(如果不含中文、特殊字符,一般没编码问题)
  • 参与计算的key应该看好是哪个(我使用小程序支付,所以用的小程序的密钥)
  • 支付类型trade_type别选错,小程序就是JSAPI
  • 每个字段要看好别填错了,特别是appidmch_idsub_mch_id

查单

根据上面列出的查单文档,将必填的参数准备就绪后,计算出一个签名sign,就可以发送到微信服务器了。

请求的数据中,sign的计算方式和统一下单的请求是一样的。但是响应报文在校验签名时有些注意点:

  • 响应报文中的数据编码是ISO-8859-1,所以签名的时候要用这种编码来计算(别用utf8了,巨坑)
  • 微信发的nonce_str和你发过去的'nonce_str'是不一致的,不要混淆了
  • 微信响应的xml中已经含有sign字段,得先去掉,再计算签名
  • 微信响应的xml中有些字段的值是空的,要去掉这些字段后才能计算签名(巨坑)
posted @ 2020-10-28 15:31  xcw0754  阅读(244)  评论(0编辑  收藏  举报