Android项目实战(五十):微信支付 坑总结
大部分app必备需求,使用总结
android接入文章在此:
文档很简单,android分为四步:
1、后台配置
2、android 内 注册appid
3、android 内 调起支付
4、android 内 支付结果回调
详细流程总结:
1、后台配置
这个让服务器同事去做就行,记得把项目app的包名和签名文件给他
包名在app目录下的build.gradle文件中可以查看,为applicationid 键的值
签名就用微信官方给的签名工具获取
注:有文章说这个工具获取的签名是错误的,经测试是正确的,所以放心用。
2、android 内 注册appid
这个比较简单,就是两行代码 , 放在发起支付的那个activity的oncreate里面注册即可
final iwxapi msgapi = wxapifactory.createwxapi(context, null); // 将该app注册到微信 msgapi.registerapp("wxd930ea5d5a258f4f");
注:有文章说createwxapi(content,null) 写成 createwxapi(content,false)
实际上第二个参数null或者false都没关系,检测办法就是看一下msgapi.registerapp返回是不是true ,经测试,都为true
3、android 内 调起支付
iwxapi api; payreq request = new payreq(); request.appid = "wxd930ea5d5a258f4f"; request.partnerid = "1900000109"; request.prepayid= "1101000000140415649af9fc314aa427",; request.packagevalue = "sign=wxpay"; request.noncestr= "1101000000140429eb40476f8896f4c9"; request.timestamp= "1398746574"; request.sign= "7ffecb600d7157c5aa49810d2d8f28bc2811827b"; api.sendreq(request);
操作一般为:
客户端发送订单数据给服务器, 服务器进行处理之后,返回微信支付需要的这几个参数,客户端用这几个参数调起支付
这个就是调起支付的操作,执行sendreq之后即可。
注意:最好数据都由服务器返回,尽量不要在客户端写死。
4、android 内 支付结果回调
涉及一个activity名为wxpayentryactivity
这个activity可以从官方下载的demo中获取:
注意:
1、需要将这个activity放到自己的项目中,放置的位置为包名.wxapi.wxpayentryactivity.java
加入你的包名为com.aaa.wx ,则在目录com-aaa-wx下有一个wxapi的包 包里为这个wxpayentryactivity文件
结果目录就为:com.aaa.wx.wxapi.wxpayentryactivity
这个位置一定要写对,否则调起支付调不出支付窗口
2、将wxpayentryactivity放到自己的项目中的时候,需要在androidmanifest.xml中注册一下
有文章说要写<intent-filter></intent-filter> , 经测试 现在的版本不需要也是可以的,跟调起支付失败没有关系
以上四步实现,正常来说就可以实现支付功能了,
支付结果从wxpayentryactivity中的onresp方法中回调
publicvoidonresp(baserespresp){ if(resp.gettype()==constantsapi.command_pay_by_wx){ log.d(tag,"onpayfinish,errcode="+resp.errcode); alertdialog.builderbuilder=newalertdialog.builder(this); builder.settitle(r.string.app_tip); } }
--------------------------------------------------------------------微信支付排坑总结------------------------------------------------------------------------
1、签名
后台配置的签名要为release包的签名
客户端检查的时候,需要打成release包,注意直接编译的debug包是没有签名的,所以会调取失败。
检查方法:获取已经集成好微信支付的app(测试微信支付的app)的签名(用官方的签名获取app),和后台配置的对比,不一致导致支付调起失败。
2、wxpayentryactivity
这个activity从官方demo中获取,放到自己的项目中,放置的位置必须为你的包名.wxapi下 , 具体查看上面集成第四步
androidmanifest.xml文件需要注册这个wxpayentryactivity
3、包名
检查项目包名和后台配置的包名是否一致
4、payreq 对象参数错误
服务器原因,导致返回的payreq对象需要的参数出现问题,导致调起支付失败
检测办法,对比ios端,如果ios也不可以发起支付,极有可能是服务器的问题,如果ios端可以发起支付,则仍为客户端集成问题
5、微信客户端端缓存
当你反复检查代码就是认为没有问题的时候,极有可能是微信缓存的问题。
去手机设置---应用管理---微信---清除数据/缓存
再发起支付就可以正常发起支付了。
(该问题一般是一开始代码有问题,调起支付失败,这时候微信账号上有订单缓存,然后你修改代码之后,代码正确了,仍然调起支付失败,就时这个订单缓存导致的)
注意:
打印wxpayentryactivity的onresp方法的resp.errcode
如果没有打印,说明可能是上述第二个和第四个问题
如果打印值为-1 , 异常错误,则考虑为 第1 、 3 、5个问题
上一篇: What's new in C# 7.0
下一篇: colspan和rowspan合并单元格