阅读 936

Android关于微信支付一波三折的那些坑

        最近做微信和支付宝支付,感觉很蛋疼,支付宝对接很顺利,在开放平台把资料申请好后,App 除了填写AppID和AlipayUtil外其他的不需要,和后台联调调用发起支付接口,调起客户端进行支付,然后根据回调通知前端刷新界面,半小时搞定.然而微信支付虽然接过很多次了,只有2015年那会是自己申请的账号,签名和包那些信息都是亲自填的,除了验证签名话费的时间比较多,其他的都比较顺利,很快就接好了,这次真是刷新了我的认识,本来官网资料杂乱,demo还是很老的版本,下载后运行起来一堆报错,还需要各自key和密钥,验证签名也是在前端,现在都是在后台进行验证签名,于是就果断删除,凭借之前的经验和官网资料一一查找,最终花了一天时间搞定了。

说下在对接过程中遇到的问题:

1.微信客户端调不起来

解决方法:登录微信开放平台,查看包名和签名,发现我们有2个一模一样的App,由于我们有手机端和TV端,所以之前的同事填写的资料是TV端的包名,而且签名不知道从哪里找来随便填写的,于是把App打包,通过一下命令查看签名:

C:\Users\lwx>keytool -list -v -keystore D:\study\apk\release.jks

然后用微信的签名工具输入包名(如com.test.pay)后核对签名信息,发现是一致的.果断修改包名和签名信息,修改完不到1分钟就弹出微信支付弹框,然后沾沾自喜,以为就这样完事了。然而,小伙子还是太年轻,直接来了一个"APPID未关联PaySignKey".

问题截图如下:

一脸蒙蔽,什么情况???去官网查找资料,说是没有配置支付密钥,登录官网商户后台,发现支付密钥和证书都配置了,因为现在的微信支付都是调用V3接口,所以还得在V3那些配置一个V3的支付密钥。

2.配置好这些环境第二次发起支付,这次又出现一个问题,支付签名验证失败,仔细检查参数,发现后台有几个参数没有返回:

从上图可以看出,App发起支付需要appid、noncestr、package、partnerid、prepayid、timestamp、sign七个必传参数,而后台少了商户号、sign、prepayid。于是和后台讨论查看文档后让他加上,再次发起支付,发现还是提示支付签名验证失败,再次检查,发现后台返回的参数timeStamp、nonceStr这2个参数有大写字母,多方查找资料核对官方文档,发现有明确说明这几个参数必须是小写,然后让后台修改,对接新的参数,再次运行发起支付发现微信支付客户端终于调起来了,激动恨不得跳起来,很多小伙伴以为这里就完事了,毕竟支付成功了,但是程序有一次无情的打击了我,支付成功和失败都没有走回调WXPayEntryActivity接口,还是查找资料,发现有遇到类似问题的小伙伴,都是项目Manifest下包名为(如com.test.example)、在App的build.gradle目录下的包名又是另外一个如(com.yinyue.xxxx),这两个根本都是错误的配置好嘛~~难怪支付不走回调,这里有2种方法可以解决此问题修改manifest文件里面的包名和applicationId一样,还有一种就是新建一个以applicationId为目录的WXAPi目录,把WXPayEntryActivity放到此目录下,当然也要注册,配置好之后再次运行,支付回调果然走了,这里还有最后一步,根据支付状态刷新界面,这里用广播、rxbus、eventbus等等都可以,只要能实现,不纠结实现方式.这里重要的事说三遍!!!

出现支付签名验证失败,一定要根据官方文档仔细核对每个参数,不能有遗漏。

出现支付签名验证失败,一定要根据官方文档仔细核对每个参数,不能有遗漏。

出现支付签名验证失败,一定要根据官方文档仔细核对每个参数,不能有遗漏。

3.客户端调起微信客户端的方法如下:

4.支付回调WXPayEntryActivity关键代码和Manifast配置如下:切记,支付完成或发生错误时都要发送广播或者rxbus去刷新界面.


如果遇到支付成功但是不走回调一定要检查manifest的包名和applicationId是否一致。

随便举个例子:从以下两个图可以看出包名一致,把wxapi放到包名目录下,在manifest配置好后一定会走支付回调.

5.以上就是一波三折的微信支付,有人会问为啥后台会这么不小心不仔细,参数多次配置错误,这里如果一个人同时开发三个项目,一天写20个接口,还要联调你就会发现,有些细节根本没时间去查看,当然支付是一个比较重要的功能,不能这么随意,要严谨,后期都是和收益挂钩的,出问题就是大问题,需要多方联调测试.记录一下此次过程,虽然有很多曲折,但终究一片光明.


文章分类
Android
文章标签