评论

微信支付经常碰到的四个问题与解决方案

 微信支付第一个问题,数据加密的key。这个坑在于不细心,微信支付有很多key,包括我们微信绑定时候自己输入的key,还有微信给的随机字符key,而这里,在用于加密的key,并不是我们微信公众号中的 AppSecret,而是在微信支付商户后台设置的key,设置的位置为:key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 如果不是使用该Key,哪怕是你的算法写对了,数据传到用户那里,依然返回的是签名错误

     PS:微信官方给出了一个验证签名准确性的工具,该工具地址为https://pay.weixin.qq.com/wiki/tools/signverify/,AnyWay,正如刚才说了,如果key设置的不正确,比如说使用了AppSecret ,那么,你会发现,该工具的出的加密字符串和自己得出的一模一样,然后当你发送给微信服务端的时候,永远返回的是错误。

   

  微信支付第二个问题,post编码问题。当组装好数据后,需要通过POST的形式向微信服务器发送数据。可是,问题来了,微信的数据封装的完全正确,key也设置正确了,在官方的验证工具上验证出来也是正确的,可是,微信总是提示签名错误。这个问题出现在post请求的编码问题上,遇到这个问题的情况是,在封装数据的时候,xml里面加入了中文,然后每次请求就会报错,可是如果中文去掉,下单成功。最后才发现,原来POST的时候,没有设置编码,设置成为UTF8之后就没事了。可是,返回的签名错误,也真心难排查啊

     

  微信支付第三个问题,js-sdk调起支付控件。这一步时讲在微信里面H5调起支付控件的。需要注意的是要在H5上面调出支付控件,第一件事需要在微信公众要后台添加指定域名允许该域名调起控件,否则,是不能调起的。设置的教程在这:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3 。

     设置完成之后,接下来是通过js调起,在此吐槽一下,我第一次做的时候,是直接copy的官方的js下来改的,可是。。。。。。。官方的JS上面全角半角的字符混合,导致的别说是他的JS了,就是我自己写的JS最后都没调出来。。。。。然后,关于提示,,苹果版还好,安卓版的微信,如果调不出控件,它一点反应都不会有的。。相对而言,苹果版会有一个弹框提示,所以后期,只要出现问题,都先用苹果测测看看出了什么错。

     

  微信支付第四个问题,app端数据封装。能够统一下单了,这样一来就是对数据封装返回给前端了,这一部,还是需要进行签名,按理来说,前面和前面采用的是同样的方法,应该问题不大才对。确实,在web端和扫码支付都没多大问题,可是,app端问题来了。我在公司刚开始和安卓的同事调这个的时候,本来以为一个下午能搞定了。可是,却不如我们所想。我们全部采用的是官方给的要求进行封装的数据,我后台统一下单完成之后,给到安卓,结果安卓死活调不出支付控件,而且一直都返回-1的结果,该结果,可以说一点用处都没有。安卓端的同时调了好久,一直没有找到解决方案,值得一说的是,它官方给的Demo是可以调出结果界面,可是也是调不出支付控件的。而且,他的java文件,utf-8和GBK两种编码混在一起的。最后说一下,为啥app调不出支付控件。

图1

如图,图1为微信官方文档中安卓调起支付控件的示例代码,接下来为web端调起支付控件时候进行加密的算法,最后为解决问题后返回给APP数据时候数据封装的代码。问题所在就是在于,它数据的封装不像官网所说的使用驼峰法,app的时候,需要把所有的字符小写,,,小写,,,,,,,。还有,官方说的packageValue是错的,要用package,就是因为这些错,加密出来的数据是错的,所以app端才调不出支付控件。在此,为我那个调到奔溃的同事默哀。

最后一次编辑于  2018-12-19  
点赞 0
收藏
评论