微信支付开发的一些问题,获取到prepayId之后仍然无法H5调起支付的问题

     微信支付需要我们在商户平台设置一个key的值,用来签名的关键数值

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

的这种形式拼接成一个stringA,然后stringA&key=[设置的key]

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

     这里其实可以使用Java的集合TreeMap轻松做到,TreeMap遍历Key的时候就已经是从小到大排好的了

但是我在开发的时候犯了一个错,把key也放进TreeMap里面了,结果key也按照从小到大排列了

但是实际上规则要求key是在所有参数拼接之后,再拼接进行Hash的。

     微信支付首先第一个流程是获取prepayid这里需要进行一次Hash,然后如果你是H5支付的话,

那么H5支付的时候还需要进行第二次Hash,我这里犯的第二个错就是

在获取prepayid进行第一次Hash的时候,使用H5支付,并没有加入key做最后的Hash。

结果导致支付的时候,微信客户端闪了一下支付,然后就取消了。而微信并没有给予任何错误提示,是很难留意到自己是因为key的问题导致挂起支付失败的。一开始以为是微信支付配置那里的域名问题,结果并不是域名问题。微信的js api也已经ready状态成功了,js ticket也是成功的了。

     后来github上搜索到wechat4j看了人家的H5支付,发现原来是我这边少了一个key。

    总的来说就两个失误,第一个就是涉及微信支付的都必须Hash,Hash的时候最后面必须携带key,参与Hash的参数从小到大排序拼接。第二个就是key不参与参数的排序。

转载于:https://my.oschina.net/zxcholmes/blog/749949

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值