Android接入微信支付只能调起一次

接入微信支付

项目里需要接入支付宝及微信支付,鹅厂sdk的质量嘛,大家都懂的。果不其然在接入微信支付的过程中遇到了一些问题,下面简单记录一下。

接入微信支付的流程

首先需要明确的一点,支付宝和微信支付绝大部分的业务逻辑是在服务器端完成的,在app端需要完成的工作其实很少。

微信支付的流程参考官方文档:

https://pay.weixin.qq.com/wiki/doc/api/app/app_sl.php?chapter=8_5

此处需要特别注意的是注册应用时填入的签名,必须是app的Release签名文件的32位md5字符串,将其中的冒号去掉并且将大写字母全部替换成小写。

具体到app的工作,在添加依赖后需要做的是:

1、获取微信支付的7个必备的参数,然后使用appid进行注册;
2、使用这7个参数调用微信支付的api,拉起微信支付界面;
3、在用户完成支付操作(不管有没有支付)后获取对应的结果,作出相应的提示;

在这里插入图片描述

关于微信支付的错误码

在这里插入图片描述

请务必记住上面这个-1,我们遇到的这个问题就在这个-1上面。

遇到的问题

1、参考官方文档接入微信支付后,在app中只能成功拉起微信支付一次;第一次不管支付有没有成功,第二次都再也无法拉起微信支付的界面,支付结果返回-1;除非将微信的数据清空,再次登录才可以再成功拉起微信支付一次。

2、支付完成后,获取不到结果;

解决的办法

先说第二个问题

微信支付给出的官方demo我没跑起来,里面的代码不知道是哪年写的,导入AS后一堆资源的错误。耐着性子一个个解决之后,发现请求支付数据的url拿不到任何数据,等于忙活了半天忙了个寂寞。

但是恶心的是,微信支付成功后的回调界面必须参考这个demo中写的,手动添加包和界面,即.wxapi.WXPayEntryActivity。
AndroidManifest中注册的代码如下:

        <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"/>

这个界面没啥好说的了,照猫画虎就成,最后可以在onResp(BaseResp resp)方法中获取到支付的结果。

回过头来说说第一个问题

前面我们说了,app端的业务逻辑其实很简单,代码量也很少。
出现微信支付界面只能拉起一次的问题,首先检查下app代码和从服务器获取到的几个参数是不是对的,有没有拼写错误或者参数缺失;
以上问题确认后,再去微信平台上检查填写的包名和签名是不是跟app的保持完全一致,尤其是md5字符串。
我遇到的这个问题,就是将md5发给小伙伴后,他在将原始的md5字符串中的冒号去掉并且大写改小写的时候,不小心漏掉了两位数。一个低级的错误,白白浪费了大量的时间,我跟服务器的同事排查了N次代码。

吐槽一下

不得不说,鹅厂的sdk真是让人无语,对比一下某宝的平台差距还是很大的。真心希望鹅厂能走点心,让苦逼的程序猿们多留几根头发吧!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值