之前公司做微信支付的时候,负责这一模块的同事,天天抱怨微信支付的各种坑还有文档的不清晰,最近帮朋友做了一个app,里面就有这一功能,看了一上午文档,瞬间发现我的语文也没学好,各种看不懂就算了,提供的代码居然还有错误,我可以骂人吗???!!!还有更恶心的就是第一次调试的时候可以唤醒微信,以后就一直返回-1,相信会有很多朋友和我遇到同样的问题。
先从申请微信支付说起,需要提供的包名和签名,包名这块肯定没问题了,只要从manifest中拷贝出来就可以了,签名这块文章就多了,之前同事搞了两天,主要原因就是因为签名这块出了问题,当时申请的时候让我提供签名,没跟我说需要什么格式,我提供的签名是如下这种方式:
由于没读过微信支付提供的那个高深文档,不知道微信提供了获取签名的一个app,如下:
好了,现在签名的问题解决了,但是如果换签名的时候,这里还需要重新填写。
PS:回调返回-1错误,经常是签名错了或者换签名的时候忘记后台修改。
接下来就是对接了,对接所提供的代码,我可以骂人吗???!!!好吧,咱是文明国家的文明人,只做文明事,TMD,写的什么吊玩意,提供什么吊代码,官网提供可参考的三个SDK,解压后的文件夹如下:
这个看不出什么要吐槽的,丫的,打开文件夹后我瞬间懵逼了,微信你几个意思啊,提供一年前的就算了,还TM提供四年前的jar,微信没钱招人维护了吗?微信支付开始收费了,多收点,多招个人去维护文档吧,满足下广大开发者的小小需求,有图有真相,上图:
毫无疑问,我肯定选最新的jar了,接下来再看对接文档,IOS中的一个字段是“request.package = @”Sign=WXPay”;”,Android中是”request.packageValue = “Sign=WXPay”;“,在Java里面,package 是关键字没法做字段名称,真的就不能两个名称都写成packageValue 吗?多了五个字母,微信码字员收费很高吗?多了五个字母,我出五毛好不好?这五个字母的钱,让我来付。。。
字段没统一我忍了,文档别写错可以吗?
丫的,上面是request 下面就是req 了,五毛我都不给你。。。
再下来就是一件很搞笑的事情,回调的时候,路径必须是“包名+wxapi.WXPayEntryActivity”,这是在打广告吗?我们用的就是微信支付,不打广告也知道的,哎,专业点好不好!!!
PS:此处如果名称不对应,将收不到回调。
返回-1的情况:
最常见的就是上述所说的签名的错误,此时最保险的方式就是从微信官网上下载获取签名的apk,通过那个apk去获取应用的签名。
appid错误,首先先检查app端和服务器端的appid是否与微信官方提供的一致。这次遇到的问题就是这个问题,搞了我两天,最后debug的时候,发现后台提供的appid和微信官网申请到的appid不一样,这是很奇怪的,相信微信不会给后台提供一个,app端提供另一个,带着这个疑问去debug之前的项目,从之前项目打印看出,两者一致的。
解决问题的过程中,发现网上也有和我一样的情况,第一次调用的时候可以唤醒微信,以后就没反应了,有的解决方案是清空缓存,这个方法就是胡扯,清理一次后,还是只能调用一次,总不能让客户每次支付完就去清空缓存吧,就算可以,这方式也是治标不治本,这些问题应该从根本上去解决。