1、导入依赖
//微信支付
//官方sdk下载文档:https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html
//官方集成文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+'
2、初始化微信33
/**
* 初始化微信
*/
private void initWechat() {
wxapi = WXAPIFactory.createWXAPI(getApplicationContext(), null);
wxapi.registerApp(Config.WECHAT_AK);//Config.WECHAT_AK表示App Id
}
3、微信支付
/**
* 处理微信支付
*
* @param data
*/
private void processWechat(WechatPay data) {
//把服务端返回的参数
//设置到对应的字段
PayReq request = new PayReq();
request.appId = data.getAppid();
request.partnerId = data.getPartnerid();
request.prepayId = data.getPrepayid();
request.nonceStr = data.getNoncestr();
request.timeStamp = data.getTimestamp();
request.packageValue = data.getPackageValue();
request.sign = data.getSign();
AppContext.getInstance().getWxapi().sendReq(request);
}
4、支付结果处理:包名下创建.wxapi.WXPayEntryActivity.java
/**
* 微信支付回调界面
*/
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = "WXPayEntryActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
setContentView(textView);
processIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
processIntent(intent);
}
/**
* 处理微信回调结果
*
* @param intent
*/
private void processIntent(Intent intent) {
AppContext.getInstance().getWxapi().handleIntent(intent, this);
}
/**
* 请求微信,会回调该方法
*
* @param baseReq
*/
@Override
public void onReq(BaseReq baseReq) {
}
/**
* 微信回调
*
* @param baseResp
*/
@Override
public void onResp(BaseResp baseResp) {
Timber.d("onResp %d %d %s", baseResp.getType(), baseResp.errCode, baseResp.errStr);
if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
//支付回调
//发送通知,支付界面处理
EventBus.getDefault().post(new WechatPayStatusChangedEvent(baseResp));
finish();
}
}
}
微信支付状态改变
/**
* 微信支付状态改变了
*
* @param event
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onWechatPayStatusChanged(WechatPayStatusChangedEvent event) {
if (BaseResp.ErrCode.ERR_OK == event.getData().errCode) {
//本地支付成功
showLoading(R.string.hint_pay_wait);
binding.primary.postDelayed(() -> {
checkPayStatus();
}, 3000);
} else if (BaseResp.ErrCode.ERR_USER_CANCEL == event.getData().errCode) {
//支付取消
} else {
//支付失败
}
}