Android 接入微信支付

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章