Android 微信支付用广播来封装回调

微信支付的回调 一般的做法有:

1、用单例类解决/静态函数

  • 需要注意回收
  • 如果有多个地方有支付,需要维护多个回调

2、Eventbus (这个比较常用)

  • 需要注册和接触注册
  • 支付的页面在有叠加的情况下
  • 如果需要准确的回调到对应的页面,那么需要每个页面都要做订单id判断

3、系统广播

  • 需要注册和解除注册

  • 用订单号来发广播不需要维护多个回调

  • 系统广播 + Lifecycle 封装后, 不需要每个页面都去注册和解除注册

  • WXPayEntryActivity 中的代码:

 @Override
    public void onResp(BaseResp resp) {
        AppPayHelper.sendWeiXinPayResp(this, resp);
        finish();
    }
  • 使用的时候代码:
    AppPayHelper.get(this).setCallback(object : AppPayHelper.OnPayCallback() {
   
        override fun onSuccess(prepayId: String) {
   
            loadingDialog.dismiss()
            finish()
        }

        override fun onCancel(prepayId: String) {
   
            loadingDialog.dismiss()
            ToastUtil.show("支付已取消")
        }

        override fun onError(prepayId: String, throwable: Throwable) {
   
            loadingDialog.dismiss()
            ToastUtil.show(throwable.message.toDefault(""))
        }

    }).onWeiXinPay(WeiXinUtil.WEIXIN_APP_ID, dto.noncestr, dto.partnerid, dto.prepayid, dto.pck, dto.timestamp, dto.sign)
  • 封装代码:
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.tencent.mm.opensdk.constants.ConstantsAPI
import com.tencent.mm.opensdk.modelpay.PayReq
import com.tencent.mm.opensdk.openapi.WXAPIFactory
import com.tencent.mm.opensdk.modelbase.BaseResp
import com.tencent.mm.opensdk.modelpay.PayResp

/**
 * 微信支付 帮助类
 */
object WxPayHelper {
   
    /**
     * 微信返回的参数 支付实体
     */
    private const val WX_PAY_RESP = "wx_pay_resp"

    private const val BROADCAST_PAY = "WxPayHelper"

    /**
     * 微信支付成功,通过发广播来回调给 发起支付的页面
     */
    @JvmStatic
    fun sendWeiXinPayResp(context: Context?, resp: BaseResp?) {
   
        context ?: return
        resp ?: return
        //这里只处理微信支付的回调
        if (resp.type != ConstantsAPI.COMMAND_PAY_BY_WX) {
   
            return
        }
        //将微信的baseResp 转成 payResp 能拿到 预订单id,
        //通过预订单id 发送对应的广播,保证发起支付对象的 预订单id,和 支付结果的 预订单id一致
        val payResp = (resp as? PayResp)
        //toDefault 使用来判空的
        val intent = Intent(BROADCAST_PAY + payResp?
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值