微信支付分享回调

//分享回调

WXEntryActivity

package com.example.gaowen38.wxapi;
import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Message;

import androidx.annotation.RequiresApi;

import com.example.gaowen38.Base.MyBaseActivity;
import com.example.gaowen38.globel.App;
import com.example.gaowen38.utils.CommunUtils;
import com.example.gaowen38.utils.HandlerUtil;
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;


public class WXEntryActivity  extends MyBaseActivity implements IWXAPIEventHandler {

    private IWXAPI wxApi;
    HandlerUtil handler = new HandlerUtil(){
        @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 1:
                    CommunUtils.toast("分享成功");
                    break;
                case 2:
                    CommunUtils.toast("取消分享");
                    break;
            }
        }
    };
        @Override
        protected void onCreate (Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            // 获取IWXAPI的实例
            wxApi = App.getWxApi();
            wxApi.handleIntent(getIntent(), this);
        }
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        wxApi.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq baseReq) {

        finish();
    }

    @Override
    public void onResp(BaseResp resp) {
        String result = "";
       
        switch (resp.errCode) {
                case BaseResp.ErrCode.ERR_OK:
                    handler.sendHandlerMessage(1,"分享成功",0);
                    break;
                case BaseResp.ErrCode.ERR_USER_CANCEL:
                    handler.sendHandlerMessage(2,"取消分享",0);
                    break;
               /* case BaseResp.ErrCode.ERR_AUTH_DENIED:
                    result = "发送被拒绝";
                    sendMessage(USER_CANCEL, "分享被拒绝");
                    break;
                default:
                    result = "发送返回";
                    sendMessage(USER_CANCEL, "分享返回");
                    break;*/
            }
        finish();
    }
}
package com.example.gaowen38.utils;

import android.os.Build;
import android.os.Handler;
import android.os.Message;

import androidx.annotation.RequiresApi;

import com.tencent.mm.opensdk.utils.Log;

/**
 * Handler处理类
 *
 * @author zhangxiaoyang create at 2019/6/5
 * @Description 描述:
 */
public class HandlerUtil extends Handler {
    private final String TAG = Handler.class.getSimpleName();

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
    }

    /**
     * 发送Handler消息
     *
     * @param what
     * @param delayMillis
     */
    public void sendHandlerMessage(int what, int delayMillis) {
        Log.d(TAG,"sendHandle what == " + what);
        if (delayMillis > 0) {
            this.sendEmptyMessageDelayed(what, delayMillis);
        } else {
            this.sendEmptyMessage(what);
        }
    }

    /**
     * 清除Handler消息
     *
     * @param what
     */
    public void removeHandlerMessage(int what) {
        Log.d(TAG,"removeHandlerMessage what == " + what);
        if (this.hasMessages(what)) {
            this.removeMessages(what);
        }
    }

    /**
     * 清除Handler所有消息
     */
    public void removeAllHandlerMessage() {
        this.removeCallbacksAndMessages(null);
    }

    /**
     * 发送Handler消息
     *
     * @param what 类型
     * @param obj 参数
     * @param delayMillis 间隔时间
     */
    public void sendHandlerMessage(int what, int obj, int delayMillis) {
        Message message = new Message();
        message.what = what;
        message.obj = obj;
        sendHandlerMessage(message, delayMillis);
    }

    /**
     * 发送Handler消息
     *
     * @param what 类型
     * @param obj 参数
     * @param delayMillis 间隔时间
     */
    public void sendHandlerMessage(int what, String obj, int delayMillis) {
        Message message = new Message();
        message.what = what;
        message.obj = obj;
        sendHandlerMessage(message, delayMillis);
    }

    /**
     * 发送Handler消息
     *
     * @param what 类型
     * @param obj 参数
     * @param delayMillis 间隔时间
     */
    public void sendHandlerMessage(int what, Object obj, int delayMillis) {
        Message message = new Message();
        message.what = what;
        message.obj = obj;
        sendHandlerMessage(message, delayMillis);
    }

    /**
     * 发送Handler消息
     *
     * @param message 消息
     * @param delayMillis 间隔时间
     */
    private void sendHandlerMessage(Message message, int delayMillis) {
        if (message == null) {
            Log.d(TAG,"message == null");
            return;
        }

        if (delayMillis > 0) {
            this.sendMessageDelayed(message, delayMillis);
        } else {
            this.sendMessage(message);
        }
    }
}

//支付回调
WXPayEntryActivity

package com.example.gaowen38.wxapi;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Looper;
import android.os.Message;
import android.widget.PopupWindow;

import com.example.gaowen38.AppConstant;
import com.example.gaowen38.Base.MyBaseActivity;
import com.example.gaowen38.R;
import com.example.gaowen38.data.bean.CreateOrderBean;
import com.example.gaowen38.data.bean.EventBusBean;
import com.example.gaowen38.data.bean.PayResultBean;
import com.example.gaowen38.data.remote.retrofit.DataService;
import com.example.gaowen38.globel.ActivityLifecycleHelper;
import com.example.gaowen38.globel.App;
import com.example.gaowen38.utils.CommunUtils;
import com.example.gaowen38.utils.SPUtils;
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.modelpay.PayResp;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import java.util.HashMap;
import java.util.Map;

import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
/**
 *
 * @作者 红鼻子小黑
 *@姓名 赵鑫乐
 * @创建日期 2019/8/5 17:29
 * 微信支付客户端与sdk衔接切换、登录、分享
 */
public class WXPayEntryActivity extends MyBaseActivity implements IWXAPIEventHandler {

    private int payStatus = -1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wxpay_entry);
        App.api.handleIntent(getIntent(),this);
//        EventBus.getDefault().register(this);
    }
    // 微信发送请求到第三方应用时,会回调到该方法
    @Override
    public void onReq(BaseReq baseReq) {
        CommunUtils.toast("openId" + baseReq.openId);
    }

    @Override
    public void onResp(BaseResp baseResp) {
        PayResp payResp = (PayResp)baseResp;
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("支付结果");
        builder.setOnDismissListener(new PoponDismissListener());

//            if(baseResp.errCode == -1){
//                builder.setMessage("支付失败");
//            }

        switch (baseResp.errCode) {
            case 0:
                inquer(payResp, builder);
                break;
            case -1:
                inquer(payResp, builder);
                break;
            case -2:
                // 用户取消
                CommunUtils.toast(baseResp.errStr);
                payStatus = AppConstant.WX_PAY_CANCEL;
                builder.setMessage("您已取消支付");
                builder.show();
                break;
        }
    }

    class PoponDismissListener implements DialogInterface.OnDismissListener {

        @Override
        public void onDismiss(DialogInterface dialog) {
            sendPayEventMassge(payStatus);
            finish();
        }
    }

    public void sendPayEventMassge(int type){
        EventBusBean eventBusBean = new EventBusBean();
        eventBusBean.setEventId(AppConstant.WX_PAY_SUCCESS);
        EventBus.getDefault().postSticky(eventBusBean);
    }

    public void inquer(PayResp payResp, AlertDialog.Builder builder ){
        // 成功 - 成功之后跑一下后台 验证是否真正支付完成 接口
        String[] tokens = SPUtils.getTokens(this);
        String extData = payResp.extData;

        Observable<PayResultBean> createOrderBeanObservable;

        Map<String, String> stringStringHashMap = new HashMap<>();
        stringStringHashMap.put(AppConstant.TOKEN, tokens[1]);

        if(extData != null && extData.contains("UserApply")){
            stringStringHashMap.put("transaction_id",payResp.extData);
            createOrderBeanObservable = DataService.getService(this, false).inquirePayResult(stringStringHashMap);
        }else {
            stringStringHashMap.put("orderInfoId", payResp.extData);
            createOrderBeanObservable = DataService.getService(this, false).inquirePayResult(stringStringHashMap);
        }

        createOrderBeanObservable.observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .subscribe(new Observer<PayResultBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(PayResultBean createOrderBean) {
                        if(createOrderBean != null){
                            if(createOrderBean.getState() == 1){
                                payStatus = AppConstant.WX_PAY_SUCCESS;
                            }else {
                                payStatus = AppConstant.WX_PAY_FILED;
                            }
                        }else {

                        }
                        builder.setMessage(createOrderBean.getData()
                                .getTrade_state_desc());
                        builder.show();
                    }

                    @Override
                    public void onError(Throwable e) {
                        CommunUtils.toast(e.getMessage());
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void eventDataMassge(int eventMassge){

    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        String action = intent.getAction();
        CommunUtils.toast(action);
    }

    @Override
    protected void onDestroy() {
        payStatus = -1;
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}
原创文章 63 获赞 7 访问量 6272

猜你喜欢

转载自blog.csdn.net/weixin_42416789/article/details/99945146