//分享回调
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); } }