微信支付开发的一些问题,获取到prepayId之后仍然无法H5调起支付的问题
2016-09-22 01:51
330 查看
微信支付需要我们在商户平台设置一个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不参与参数的排序。
根据微信签名的规则,所有提交到服务器的参数,需要使用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不参与参数的排序。
相关文章推荐
- 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题
- 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题
- 解决微信支付获取prepay_id时,商品描述body为中文时报签名错误的问题
- 微信支付:服务器(Java)统一下单获取prepay_id成功,前端公众号里调用jsapi提示支付验证签名失败
- 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题
- 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题
- 如何集成android微信支付及各种问题(-1,签名错误,无法获得预支付id)的解决办法。
- 微信支付获取 prepay id 偶尔失败问题【转】
- android google map 开发中的常见问题及解决(无法获取 google map apiKey 和Couldn't get connection factory client)
- android问题:控件id不能在R.java里自动创建,导致在Activity中无法获取控件
- 微信支付时body有中文无法支付出现签名错误问题
- 分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
- iOS开发bundle identifier修改不了(解决bundle ID无法修改的问题)
- magento - 开发motopay站内支付时碰到的在某些模板下无法下单的问题(validateCreditCard is not defined)
- 【微信支付】开发遇到的一些问题一些弯路
- 微信支付 该支付域名未获授权,无法发起该笔交易问题解决方案
- iOS 调起微信支付页面后,点击取消或支付成功无法返回原APP问题
- 微信支付V3版开发中遇到的一个问题及原因:缺少prepay_id
- 使用dojo declare(继承v102版本) 时出现无法根据id获取到对象的问题
- android google map 开发中的常见问题及解决(无法获取 google map apiKey 和Couldn't get connection factory client)