1.首先導(dǎo)入微信支付依賴
//wx 支付依賴(包含統(tǒng)計(jì)功能)
implementation'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
2.依賴導(dǎo)入以后在包后面創(chuàng)建 wxapi 包 (注意:wxapi包一定要放在根目錄下面)
3.在wxapi包下創(chuàng)建 WXPayEntryActivity 接收微信支付結(jié)果回調(diào)的類(類名必須一致)

image
4.在清單文件中配置微信支付 (android:exported="true" 必須加)
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 這里填寫你申請的app id -->
<data android:scheme="你申請的appid" />
</intent-filter>
</activity>
5.以上的準(zhǔn)備工作完成以后開始調(diào)起微信支付,以下是調(diào)起微信支付的方法
IWXAPI api = WXAPIFactory.createWXAPI(this, "你申請的wxappID", false);//填寫自己的APPIDapi.registerApp("wxAPPID");//填寫自己的APPID,注冊本身APPPayReq req = new PayReq();//PayReq就是訂單信息對象
//建議動態(tài)監(jiān)聽微信啟動廣播進(jìn)行注冊到微信
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 將該app注冊到微信
api.registerApp("你申請的wxappID");
}
}, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP));
//訂單信息后臺都會返回,直接拿來用即可
PayReq req = new PayReq();//PayReq就是訂單信息對象
req.appId = "你申請的wxappID";//你的微信appid
req.partnerId = " "; //商戶號
req.prepayId = " " ; //預(yù)支付交易會話ID
req.nonceStr = " "; //隨機(jī)字符串
req.timeStamp =" "; //時(shí)間戳
req.packageValue = "Sign=WXPay"; //擴(kuò)展字段,這里固定填寫Sign=WXPay
req.sign = " ";//簽名
api.sendReq(req);//將訂單信息對象發(fā)送給微信服務(wù)器,即發(fā)送支付請求
6.在 WXPayEntryActivity 中處理支付結(jié)果
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
private static final String TAG = "WXPayEntryActivity";
private String app_id = "你申請的qppid";//微信開發(fā)后臺申請的app_id
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, app_id);
api.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
switch (resp.errCode) {
case 0://支付成功
Toast.makeText(this, "支付成功", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onResp: resp.errCode = 0 支付成功");
break;
case -1://錯誤,可能的原因:簽名錯誤、未注冊APPID、項(xiàng)目設(shè)置APPID不正確、注冊的APPID與設(shè)置的不匹配、其他異常等
Toast.makeText(this, "支付錯誤" + resp.errCode, Toast.LENGTH_SHORT).show();
Log.d(TAG, "onResp: resp.errCode = -1 支付錯誤");
break;
case -2://用戶取消,無需處理。發(fā)生場景:用戶不支付了,點(diǎn)擊取消,返回APP。
Log.d(TAG, "onResp: resp.errCode = -2 用戶取消");
Toast.makeText(this, "用戶取消支付" , Toast.LENGTH_SHORT).show();
break;
}
finish();//這里需要關(guān)閉該頁面
}
}
}
7.這就是微信支付的全部流程,在android 11版本會出現(xiàn)調(diào)不起來,只需在清單文件加入以下內(nèi)容就可適配android 11
<queries>
<package android:name="com.tencent.mm" />
</queries>
如果在使用中出現(xiàn)了在android studio中可以調(diào)起微信支付,但是在打包以后調(diào)不起來,這種問題絕對是簽名問題,因?yàn)閐ebug版的應(yīng)用簽名和release版的應(yīng)用簽名不一致,此時(shí)一定要把簽名改成統(tǒng)一
signingConfigs {
//這里是簽名配置信息
release {
keyAlias 'key0' //jks別名
keyPassword '123456' //密碼
storeFile file('D:\\Login\\app\\test.jks') //jks路徑
storePassword '123456' //密碼
}
buildTypes {
//這里是release版的簽名配置
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
//這里是debug版的簽名配置
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
}
}
這里配置完成以后下載微信官方提供的簽名文件apk,輸入項(xiàng)目的包名,就可生成應(yīng)用簽名,然后把應(yīng)用簽名同步到微信開放平臺的應(yīng)用簽名,這樣就可以在debug和release版都可以調(diào)起微信支付
