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

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

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

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

而后MD5,就能够获得一个signaure,注意参数拼接的时候顺序为从小到大排列。服务器

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

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

可是实际上规则要求key是在全部参数拼接以后,再拼接进行Hash的。排序

     微信支付首先第一个流程是获取prepayid这里须要进行一次Hash,而后若是你是H5支付的话,开发

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

在获取prepayid进行第一次Hash的时候,使用H5支付,并无加入key作最后的Hash。域名

结果致使支付的时候,微信客户端闪了一下支付,而后就取消了。而微信并无给予任何错误提示,是很难留意到本身是由于key的问题致使挂起支付失败的。一开始觉得是微信支付配置那里的域名问题,结果并非域名问题。微信的js api也已经ready状态成功了,js ticket也是成功的了。

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

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

相关文章
相关标签/搜索