1.首先在微信開放平臺(tái)去申請(qǐng)賬號(hào)開通微信支付功能,并創(chuàng)建新應(yīng)用獲取APPID
2.填寫項(xiàng)目包名和正式包簽名(建議使用官方提供的獲取簽名工具)
3.集成sdk
//微信支付
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
4.必須在項(xiàng)目包名下創(chuàng)建wxapi文件和WXPayEntryActivity類,否則無(wú)法調(diào)起微信支付,這里參照demo里面的WXPayEntryActivity類就可以
注意:這里必須是在包名下,而且文件名和類名也要一致,不然支付回調(diào)不起作用

這里有個(gè)小坑,demo里的WXPayEntryActivity類,
api = WXAPIFactory.createWXAPI(this, UrlConstants.WXAPPID);
api.handleIntent(getIntent(), this);
這兩行代碼是放在onCreate()方法的,但是我在測(cè)試支付的時(shí)候,支付成功后沒(méi)調(diào)用回調(diào)方法,
查了一下,解決方案是把這兩行代碼放在onStart()方法里,so解決問(wèn)題
還有一個(gè)關(guān)于支付回調(diào)的細(xì)節(jié),就是在manifest文件注冊(cè)時(shí)最好是文件全路徑,不然支付回調(diào)也可能不起作用

5.獲取prepayid由服務(wù)器調(diào)用統(tǒng)一下單接口獲取
注意:如果服務(wù)端開發(fā)文檔跟客戶端demo里的參數(shù)不一樣,以demo里的參數(shù)為準(zhǔn),
?否則服務(wù)器傳過(guò)來(lái)的參數(shù)無(wú)法調(diào)起微信支付!?。?/p>
6.注冊(cè)appId,在發(fā)起支付的activity的onCreate里面注冊(cè)即可
final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
msgApi.registerApp("wxxxxxxxxxxx8f4f");
7.發(fā)起支付

發(fā)起支付根據(jù)req.checkArgs()和api.sendReq(req)的結(jié)果判斷
如果req.checkArgs()為false,說(shuō)明請(qǐng)求參數(shù)有誤,需要檢查請(qǐng)求參數(shù)是否和demo中給出的一致,
再就是sign,可以根據(jù)服務(wù)器返回的參數(shù)去官方的簽名校驗(yàn)工具檢查一下簽名是否正確
一般req.checkArgs()為true,api.sendReq(req)也會(huì)是true,其他情況沒(méi)碰到過(guò)
只有eq.checkArgs()和api.sendReq(req)都為true時(shí)才可以正常發(fā)起支付,進(jìn)行付款.
8.支付回調(diào)

回調(diào)方法根據(jù)code的值進(jìn)行相關(guān)處理就可以了,code=-1時(shí),一般就是簽名問(wèn)題,需檢查簽名是否正確
補(bǔ)充:
1.Android系統(tǒng)是否支持微信雙開
舉例華為和vivo系統(tǒng),如果使用了微信雙開,點(diǎn)擊其中一個(gè)會(huì)出現(xiàn)支付窗口閃一下消失的情況,點(diǎn)另一個(gè)就可以正常調(diào)起支付,具體原因不明
2.服務(wù)端在調(diào)用統(tǒng)一下單接口前后都需要進(jìn)行簽名,總共需要兩次簽名