Android微信支付集成,手把手教你,解决各种问题

坚持学习每一天
爱生活,爱分享 
如果您喜欢我的文章,可以点击关注,喜欢

年底正是公司产品收尾阶段,新增几十个页面要求一个月之内完成,包括一些自定义控件与动画,简直是要疯的节奏!!!
有个发红包功能涉及到微信支付,我知道微信支付坑有点多,没想到这次完全把我惹的生气了,就要给它硬刚!!!

说说常见的坑与解决办法

1、在微信平台填写的appid 是applicationId存在于你的主模块的build.gradle中如图

image.png

而不一定是这个package
image.png

2、应用签名
我建议不要下载微信提供的签名生成工具,直接自己生成!
微信支付只能在release版本调起,所以debug版一律不行!但是可以配置不必要每次都打包,麻烦
还看不到日志, 使用Release签名进行Debug
获取签名的步骤:
一般是进入C盘下的.android 获取,如果自己修改过路径无法获取,请使用jdk下面的keytool获取

Android微信支付集成,手把手教你,解决各种问题_第1张图片

进入cmd
image.png

Android微信支付集成,手把手教你,解决各种问题_第2张图片
image.png

换成自己的用户名
Android微信支付集成,手把手教你,解决各种问题_第3张图片
image.png

输入你正式签名文件存放地址
Android微信支付集成,手把手教你,解决各种问题_第4张图片
image.png

这个就是我们需要的东西
Android微信支付集成,手把手教你,解决各种问题_第5张图片
image.png
去掉冒号,全部改成小写,这个就是微信开放平台要的MD5签名;

3、Android集成
直接引用
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.1.6'
继续给微信建立一个霸道的专属回调文件

目录层级必须是这样的,这是一个新建项目
Android微信支付集成,手把手教你,解决各种问题_第6张图片
image.png

完成后的目录结构
Android微信支付集成,手把手教你,解决各种问题_第7张图片
image.png

WXPayEntryActivity 文件可以在微信支付Demo里拷贝,Demo下载后是打不开的,而且是eclipse格式,你用As重写一遍以后,能开但是支付一次以后就不能再次支付,errorcode全是-1,此为一大坑;下载了不能用,用了用不爽,浪费了开发者多少时间!

然后将WXPayEntryActivity 在manifest中注册

Android微信支付集成,手把手教你,解决各种问题_第8张图片
image.png
将主题设为透明,还可以选择禁止动画
编写支付请求代码
订单既可以在手机上完成也可以在服务端完成,一般安全起见都是服务端人员完成,然后再丢给我们。形式是一串字符串 {"appid":"wxb4ba3c02aa476ea1","partnerid":"1900006771","package":"Sign=WXPay","noncestr":"adcb165cd01d7c6968a7e98a3f082b27","timestamp":1546072240,"prepayid":"wx29163040218588b022f6928b1416250468","sign":"AF698557F1DA7BD29A65E4666A86BCAA}
Android微信支付集成,手把手教你,解决各种问题_第9张图片
image.png

在App端拿到这一串字符串后就可以开始发起支付请求:
PayBean payBean=new Gson().fromJson(pay,PayBean.class);//字符串转为自己定义的对象
Android微信支付集成,手把手教你,解决各种问题_第10张图片
image.png

IWXAPI api = WXAPIFactory.createWXAPI(this, "你的appid");
PayReq req = new PayReq();
req.appId = payBean.getAppid();
req.partnerId =payBean.getPartnerid();
req.prepayId = payBean.getPrepayid();
req.nonceStr = payBean.getNoncestr();
req.timeStamp =payBean.getTimestamp();
req.packageValue = payBean.getPackageX();
req.sign = payBean.getSign();
api.sendReq(req);//api为 IWXAPI
发起请求以后马上跳到支付页面,不过去,或者一闪而退,errorcode一直是-1;
这个errorcode没什么用
Android微信支付集成,手把手教你,解决各种问题_第11张图片
image.png

除了0和-2,出了错也不知道什么原因,忽悠这么多开发者,这又是一个大坑。
返回结果在WXPayEntryActivity里的onResp里查看
Android微信支付集成,手把手教你,解决各种问题_第12张图片
image.png

如果你出错了,恭喜你,errCode=-1,errSre=null;一脸懵逼,基本就是这样了,这么多人用的东西你不告诉我哪里错了,叫我自己去找,是不是有什么难言之隐。
别忘了权限
image.png

如果所有东西都配置的没问题,还是-1,可以选择重装微信,卸载APP,清楚缓存,测试的时候尽量不要用同一个订单号,使用的字符串已经被别人支付了,订单号过期。这些都可能影响到微信支付。
最后,以前没有把支付写成一个完整的工具类,现在写了一个通用的支付类与UI回调接口,有时间,我再完善一下,希望可以帮助各位小伙伴少受一点折磨!!!

你可能感兴趣的:(Android微信支付集成,手把手教你,解决各种问题)