1.首先在微信開放平臺去申請賬號開通微信支付功能,并創(chuàng)建新應用獲取APPID
2.填寫項目包名和正式包簽名(建議使用官方提供的獲取簽名工具)
3.集成sdk
//微信支付
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
4.必須在項目包名下創(chuàng)建wxapi文件和WXPayEntryActivity類,否則無法調(diào)起微信支付,這里參照demo里面的WXPayEntryActivity類就可以
注意:這里必須是在包名下,而且文件名和類名也要一致,不然支付回調(diào)不起作用
這里有個小坑,demo里的WXPayEntryActivity類,
api = WXAPIFactory.createWXAPI(this, UrlConstants.WXAPPID);
api.handleIntent(getIntent(), this);
這兩行代碼是放在onCreate()方法的,但是我在測試支付的時候,支付成功后沒調(diào)用回調(diào)方法,
查了一下,解決方案是把這兩行代碼放在onStart()方法里,so解決問題
還有一個關(guān)于支付回調(diào)的細節(jié),就是在manifest文件注冊時最好是文件全路徑,不然支付回調(diào)也可能不起作用
5.獲取prepayid由服務器調(diào)用統(tǒng)一下單接口獲取
注意:如果服務端開發(fā)文檔跟客戶端demo里的參數(shù)不一樣,以demo里的參數(shù)為準,
?否則服務器傳過來的參數(shù)無法調(diào)起微信支付T诅汀!蛋铆!
6.注冊appId,在發(fā)起支付的activity的onCreate里面注冊即可
final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
msgApi.registerApp("wxxxxxxxxxxx8f4f");
7.發(fā)起支付
發(fā)起支付根據(jù)req.checkArgs()和api.sendReq(req)的結(jié)果判斷
如果req.checkArgs()為false,說明請求參數(shù)有誤,需要檢查請求參數(shù)是否和demo中給出的一致,
再就是sign,可以根據(jù)服務器返回的參數(shù)去官方的簽名校驗工具檢查一下簽名是否正確
一般req.checkArgs()為true,api.sendReq(req)也會是true,其他情況沒碰到過
只有eq.checkArgs()和api.sendReq(req)都為true時才可以正常發(fā)起支付,進行付款.
8.支付回調(diào)
回調(diào)方法根據(jù)code的值進行相關(guān)處理就可以了,code=-1時,一般就是簽名問題,需檢查簽名是否正確
補充:
1.Android系統(tǒng)是否支持微信雙開
舉例華為和vivo系統(tǒng),如果使用了微信雙開,點擊其中一個會出現(xiàn)支付窗口閃一下消失的情況,點另一個就可以正常調(diào)起支付,具體原因不明
2.服務端在調(diào)用統(tǒng)一下單接口前后都需要進行簽名,總共需要兩次簽名