汇聚,杉德,微信原生支付,支付宝成功/失败回调记录

2021-01-07  本文已影响0人  一个冬季

目录

1、微信第一次成功,后面都是回调失败
2、微信原生支付回调
3、汇聚,杉德小程序支付
4、支付宝支付
微信第一次成功,后面都是回调失败

1、清除微信缓存,清除微信存储空间,重新登录微信
2、如果有更换包名,有更换签名文件信息,清除编译器缓存clean Project 、Invalidate Caches/Restart,并确保包名,签名没错

微信原生支付回调
/**
 * @date 创建时间:2020/7/2 0002
 * @auther gaoxiaoxiong
 * @Descriptiion 微信原生支付
 **/
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
    private IWXAPI mWXApi;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mWXApi = WxApiUtils.getInstance().getmWXApi();
        mWXApi.handleIntent(getIntent(),this);
    }
    @Override
    public void onReq(BaseReq baseReq) {
    }
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        mWXApi.handleIntent(intent,this);
    }
   
    @Override
    public void onResp(BaseResp baseResp) {
        if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {//微信结果返回
            if (baseResp.errCode==0){//立即支付-输入密码-成功返回商家
               支付成功
            }else if (baseResp.errCode==-2){//调起微信,点击左上角的X。其它情况都不触发
               取消支付
            }else {//没有发现有情况会触发
               支付失败
            }
          //Todo 可以发送广播,让其他页面进行轮训请求,是否真的成功。
        }
        overridePendingTransition(0, 0);
        finish();
    }
}

额外补充说一句,无论是否支付成功、失败,最好都是轮训请求后端进行一个验证操作。所以对结果是怎么样的,我们都可以不用关心

汇聚,杉德小程序支付

/**
 * 微信分享,微信授权,  汇聚小程序支付成功失败回调
 */
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    private IWXAPI mWXApi;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mWXApi = WxApiUtils.getInstance().getmWXApi();
        mWXApi.handleIntent(getIntent(),this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        mWXApi.handleIntent(intent,this);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        mWXApi.handleIntent(data, this);
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    如果直接点击小程序的右边的关闭,是不会走onResp
    @Override
    public void onResp(BaseResp baseResp) {
        Log.e("WXEntryActivity","支付回调");
        Log.e("WXEntryActivity","baseResp.getType() =" + baseResp.getType());
        if (baseResp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM){//杉德,汇聚小程序支付回调。用户点击返回商家按钮
            WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) baseResp;
            String extraData =launchMiniProResp.extMsg; // 对应JsApi navigateBackApplication中的extraData字段数据
            /**
             * 消费者支付成功返回 true,“返回商家”或其他操作返回 false
             * 对接人员可根据此参数做相应的业务处理
            
            //杉德下面逻辑无效,但是不会影响正常使用,所以这段代码,不要也罢
            Intent messageIntent = new Intent(PAY_STATE_BROADCAST);
            if("true".equalsIgnoreCase(extraData)){
                支付成功"
            }else {//出现密码框,点击X,返回商家。
                支付失败
            } */
        }else if (baseResp instanceof SendAuth.Resp){//登录授权
            switch (baseResp.errCode) {
                case BaseResp.ErrCode.ERR_OK://授权成功
                    SendAuth.Resp resp = (SendAuth.Resp) baseResp;
                    break;
                case BaseResp.ErrCode.ERR_USER_CANCEL://授权取消
                case BaseResp.ErrCode.ERR_AUTH_DENIED://授权被拒绝
                default://授权返回
                    this.finish();
                    break;
            }
        }
    }
}

杉德小程序支付,汇聚小程序支付,当你取消支付,点击小程序右边的关闭圆圈的时候,WXEntryActivity 界面会自动消失,但不会走finish,onDestroy。所以要做检测是否真的成功或者是否支付完成,需要自行在吊起微信支付页面或者待确认界面进行轮训请求后台,确定是否支付成功。

杉德小程序支付、汇聚小程序支付点击返回商户会走onResp,也会走finish,onDestroy

支付宝支付
 Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                PayTask alipay = new PayTask(activity);
                Map<String,String> result= alipay.payV2(jsonString, true);
                Message msg = aliHandler.obtainMessage();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                aliHandler.sendMessage(msg);
            }
        };
        Thread payThread = new Thread(payRunnable);       //必须异步调用
        payThread.start();


 /**
     * @date 创建时间:2020/6/18 0018
     * @auther gaoxiaoxiong
     * @Descriptiion 处理阿里支付类
     **/
    static class AliPayHandler extends Handler {
        WeakReference<PayStateActivity> weakReference;
        public AliPayHandler(PayStateActivity activity) {
            weakReference = new WeakReference<PayStateActivity>(activity);
        }
        @Override
        public void handleMessage(@NonNull Message msg) {
            if (weakReference.get() != null) {
              //Todo 自己逻辑
            }
        }
    }

支付宝支付,不像微信一样,当你取消支付,支付成功,支付宝会帮你回调handleMessage,所以你需要在这里处理你自己的逻辑

总结

1、原生微信APP支付,只能回调WXPayEntryActivity
2、汇聚、杉德小程序支付只能回调WXEntryActivity ,点击返回商户会走onResp,也会走正常的完整生命周期。如果点击的是小程序的圆圈关闭是不会走onResp,也就没有了WXEntryActivity 完结的生命周期,当你切回原来自己APP界面的时候,是直接在你发起小程序支付的界面了。

上一篇下一篇

猜你喜欢

热点阅读