微信支付,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 = "wxd930ea5d5a258f4f";
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 的權限。