微信支付签名规则详解:如何正确使用TreeMap避免常见错误

2025-01-19
来源:网络整理

微信支付需要我们在商户平台设置一个键值,这个键值就是用于签名的键值。

根据微信签名规则,所有提交给服务器的参数都需要使用key1=&key2=&......

这个形式拼接为一个,然后&key=[set key]

然后MD5,就可以得到一个。注意拼接参数时的顺序是从小到大。

这实际上可以使用 Java 集合轻松完成。遍历key的时候,它们已经从小到大排列好了。

微信支付prepayid_微信支付设置在哪里_微信支付密码在哪里修改

但是我开发的时候犯了一个错误,把按键放进去了,结果按键也是从小到大排列的。

但实际上规则要求所有参数拼接在一起后对key进行哈希处理。

微信支付的第一个流程是获取Hash,然后如果你是用H5支付,

那么H5需要进行第二次哈希处理。我在这里犯的第二个错误是

获取第一个hash时使用H5支付,最终hash不添加key。

微信支付设置在哪里_微信支付密码在哪里修改_微信支付prepayid

结果支付时,微信客户端闪现支付,然后又取消了。但微信并没有给出任何错误提示,因此很难注意到因关键问题导致待付款失败。一开始以为是微信支付配置中的域名问题,结果发现不是域名问题。微信的js api也成功了,js也成功了。

后来网上搜了一下别人的H5支付,发现少了一把钥匙。

一般来说,有两个错误。第一个是凡是涉及微信支付的东西都必须有一个哈希。散列时,密钥必须放在最后。哈希涉及的参数从小到大排序拼接。二是key不参与参数的排序。

分享