2025-10-25 18:07:21 +08:00
|
|
|
|
package com.qxcm.qxlive.wxapi;
|
2025-10-24 17:55:15 +08:00
|
|
|
|
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
|
|
import android.content.Intent;
|
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
|
|
|
|
|
|
|
import com.blankj.utilcode.util.ToastUtils;
|
|
|
|
|
|
import com.tencent.mm.opensdk.constants.ConstantsAPI;
|
|
|
|
|
|
import com.tencent.mm.opensdk.modelbase.BaseReq;
|
|
|
|
|
|
import com.tencent.mm.opensdk.modelbase.BaseResp;
|
|
|
|
|
|
import com.tencent.mm.opensdk.openapi.IWXAPI;
|
|
|
|
|
|
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
|
|
|
|
|
|
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
|
|
|
|
|
|
import com.xscm.moduleutil.base.CommonAppContext;
|
|
|
|
|
|
import com.xscm.moduleutil.event.PayEvent;
|
|
|
|
|
|
|
|
|
|
|
|
import org.greenrobot.eventbus.EventBus;
|
|
|
|
|
|
|
|
|
|
|
|
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
|
|
|
|
|
|
private IWXAPI api;
|
|
|
|
|
|
public static final String APP_ID = CommonAppContext.getInstance().getCurrentEnvironment().getWxAppId();
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
|
|
api = WXAPIFactory.createWXAPI(this, APP_ID);
|
|
|
|
|
|
api.handleIntent(getIntent(), this); // 必须调用,否则无法接收回调
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void onNewIntent(Intent intent) {
|
|
|
|
|
|
super.onNewIntent(intent);
|
|
|
|
|
|
setIntent(intent);
|
|
|
|
|
|
api.handleIntent(intent, this);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void onReq(BaseReq baseReq) {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void onResp(BaseResp resp) {
|
|
|
|
|
|
// 支付结果回调(resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX)
|
|
|
|
|
|
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
|
|
|
|
|
|
switch (resp.errCode) {
|
|
|
|
|
|
case BaseResp.ErrCode.ERR_OK:
|
|
|
|
|
|
// 支付成功:这里需要调用后台接口确认支付状态(避免本地判断不可靠)
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BaseResp.ErrCode.ERR_USER_CANCEL:
|
|
|
|
|
|
checkPayResultFromServer();
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
// 支付失败
|
|
|
|
|
|
checkPayResultFromServer();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
finish(); // 处理完后关闭页面
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 关键:必须从后台确认支付状态(不能仅依赖前端回调)
|
|
|
|
|
|
private void checkPayResultFromServer() {
|
|
|
|
|
|
// 调用后台接口,传入订单号查询实际支付状态
|
|
|
|
|
|
// 用户取消支付
|
|
|
|
|
|
ToastUtils.showShort("支付取消");
|
|
|
|
|
|
PayEvent messageEvent = new PayEvent(-2, "支付取消");
|
|
|
|
|
|
EventBus.getDefault().post(messageEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|