微信支付,Android端集成,不得不说,真的是没有支付宝接入的舒服。
首先,还是看官方提供的文档 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
这里面会提供你一个可以查看自己MD5 签名 的工具app,但是,你以为能直接拿来用的吗,大概是在做梦了,这个app 获得的签名是小写的字母,小写的,而实际你要填写的是大写的MD5签名,不如你直接用命令行打开签名拿到你的签名值:
keytool -v -list -keystore testdemo.jks,然后replaceAll (“ :”,“”),不然你直接用工具里的签名,你会沉醉在 支付永远返回-1 的痛苦中。
对,我们先讲讲集成微信支付,集成微信支付:
如果你使用的Android studio, 可以直接使用gradle形式 直接下载依赖,
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
可以在https://bintray.com/wechat-sdk-team/maven 下查询到最新的版本
比如
这里你就可以写
// 以下2个版本任选一个就好了
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.1.6'
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.3.1'
随后你就可以开始写微信支付的代码了
第一步:注册你的微信 的APPID
final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
// 将该app注册到微信 ,这里的appid 是你们申请微信审核成功后的微信给你们地方appid
msgApi.registerApp("你的appid");
第二步:请求你们的后台拿到你需要拉起微信的 值,这里我就直接赋值微信官方提供的ex了,
IWXAPI api;
PayReq request = new PayReq();
request.appId = "wxd930ea****258f4f";
request.partnerId = "1900000109";
request.prepayId= "1101000000140415649af9fc314aa427",;
request.packageValue = "Sign=WXPay";
request.nonceStr= "1101000000140429eb40476f8896f4c9";
request.timeStamp= "1398746574";
request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";
api.sendReq(request);
第三步:写微信支付拉起后的回调:
WXPayEntryActivity extend acitivity implements IWXAPIEventHandler
重写 onResp() 方法
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
EventBus.getDefault().post(new PayEvent(resp.errCode));
// ToastUtils.showShort(mContext, resp.errCode == 0 ? "支付成功" : "支付失败");
finish();
}
}
我这里使用 的EventBus 通知页面消息,你也可以使用其他方法通知页面,这都没什么关系
这里的errorCode 只有 3种状态 0 - 成功, -1 支付失败(可能性很多,需要自己排查),-2,用户自己手动取消。
正常的微信支付就结束,但是,你你会不经意之间就发现微信支付的问题,,并且很难受,排查起来太困难,所以我不怎么喜欢微信,微信从随便发朋友圈,到要顾及到好友列表中的人,到要开始屏蔽好友,到要用微信进行工作交流,感觉微信越来越像qq 靠拢,越来越没意思了。
这里说几个微信接入需要注意的地方:
1:微信支付测试需要你正式生成app 签名过的那种, debug 版本 是拉不起 微信支付的
2:微信支付,拉起后你未登录微信的话,点击返回,你的activity 会在200ms内完成2次 onStart 的方法,这应该是Android直接打开栈顶的activity 了;
3:微信支付回掉是是 通过 Intent 拉起你的实现IWXAPIEventHandler 的activity,所以需要你 的WXPayEntryActivity必须在微信指定的包名下,也就是你提供给微信的包名.wxapi下;错了你就拉不起你的回掉,并且此activity 需要在 AndroidManifest中设置android:exported="true",保证微信有拉起你app 的权限。