首先,当确定你的app要接入微信支付后,请提早申请好相关资料。
微信开放平台地址:点击打开链接
按照要求登录注册后,申请新应用,拿到需要的数据,方便后续开发。
在接入的过程中,官网的文档还是很清楚的。关键在于对于错误的返回值描述太过笼统。不方便调试,这里记录遇到的一些坑。
添加好微信依赖包。发起支付
IWXAPI payApi = WXAPIFactory.createWXAPI(this,weChatBean.getAppid(),false);
payApi.registerApp(weChatBean.getAppid());
PayReq payReq = new PayReq();
payReq.appId = weChatBean.getAppid();
payReq.partnerId = weChatBean.getPartnerid();
payReq.prepayId = weChatBean.getPrepayid();
payReq.packageValue = "Sign=WXPay";
payReq.nonceStr = weChatBean.getNoncestr();
payReq.timeStamp = weChatBean.getTimestamp();
payReq.sign = weChatBean.getSign();
payApi.sendReq(payReq);
如果发现不能调起微信支付,返回error code = -1,请按照以下步骤认真检查:
1.首先检查包名,签名与注册网站上是否一致。
为了方便测试,网站上填写的签名可以先使用AndroidStudio直接运行的app,然后用微信取签名工具取到的签名,不影响调试。最后打包时候在进行更换。
2.检查拼写sign的参数大小写是否区分。手动拼接sign参数的顺序注意要一致,否则生成后的md5不对。一般发起支付需要的参数都是从服务端直接获取。如果服务端不靠谱,请细致检查参数问题。
微信支付接口调试工具点击打开链接,查看对应参数拼装的sign是否正确。
3.如果来回切换签名发起支付进行调试,请考虑清楚微信缓存,或者退出重新登录。有可能已经被记录导致发起失败。
这样下来正常都可以发起。
关于弹出支付后不进app回调的问题。
1.检查manifest里WXPayEntryActivity配置是否有问题,直接复制。
<activity android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
2.确认build.gradle里applicationId。对应微信类需要在applicationId.wxapi下
假如包名为com.example.zy , WXPayEntryActivity类必须为com.example.zy.wxapi下。否则进不了回调。另外确认包名与网站上申请一致。
3.如果还有问题,请考虑关闭activity相关的跳转动画。
再此记录一下遇到的坑、