微信支付需要我们在商户平台设置一个键值,这个键值就是用于签名的键值。
根据微信签名规则,所有提交给服务器的参数都需要使用key1=&key2=&......
这个形式拼接为一个,然后&key=[set key]
然后MD5,就可以得到一个。注意拼接参数时的顺序是从小到大。
这实际上可以使用 Java 集合轻松完成。遍历key的时候,它们已经从小到大排列好了。
但是我开发的时候犯了一个错误,把按键放进去了,结果按键也是从小到大排列的。
但实际上规则要求所有参数拼接在一起后对key进行哈希处理。
微信支付的第一个流程是获取Hash,然后如果你是用H5支付,
那么H5需要进行第二次哈希处理。我在这里犯的第二个错误是
获取第一个hash时使用H5支付,最终hash不添加key。
结果支付时,微信客户端闪现支付,然后又取消了。但微信并没有给出任何错误提示,因此很难注意到因关键问题导致待付款失败。一开始以为是微信支付配置中的域名问题,结果发现不是域名问题。微信的js api也成功了,js也成功了。
后来网上搜了一下别人的H5支付,发现少了一把钥匙。
一般来说,有两个错误。第一个是凡是涉及微信支付的东西都必须有一个哈希。散列时,密钥必须放在最后。哈希涉及的参数从小到大排序拼接。二是key不参与参数的排序。