Android 微信小程序支付后跳转不回App的问题

最近做了一个跳转微信小程序支付的功能,但是发现支付完成后跳转不回原App。

一、产生原因

微信的SDK文档中要求在app主模块的包名目录下创建wxapi的文件夹,然后创建一个WXPayEntryActivity,但是我们的工程是一个组件化项目,只有商城shop模块才需要用到支付,并且app模块本来就是一个壳,塞这些微信的东西进去就很恶心。

二、解决办法

使用activity代理的方式重定向微信的Acticity。

app主模块的清单文件中使用代理:

kotlin 复制代码
<application    //放在application根节点中
    android:name="包名.base.BaseApplication"
    android:requestLegacyExternalStorage="true">
    ...
    <!-- WXEntryActivity的代理,用于微信支付跨组件调用 -->
    <activity-alias
        android:name="${applicationId}.wxapi.WXEntryActivity"
        android:exported="true"
        android:targetActivity="包名.shop.WXEntryActivity"/>   //这里的WXEntryActivity可以随便改名字,且不需要放在wxapi文件夹下
</application>

然后在shop模块定义一个代理的目标Activity即可。

kotlin 复制代码
<activity
    android:name=".WXEntryActivity"
    android:exported="true"
    android:launchMode="singleTask"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>

在代理Activity(名字随便取,但建议与WXEntryActivity同名好找好维护)中实现微信的回调逻辑即可:

kotlin 复制代码
class WXEntryActivity : BaseActivity<BaseViewModel, ActivityWxpayEntryBinding>(),
    IWXAPIEventHandler {

    private var api: IWXAPI? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        api = WXAPIFactory.createWXAPI(this, UnifyPayPlugin.getInstance(this).appId)
        api?.handleIntent(intent, this)
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        setIntent(intent)
        api?.handleIntent(intent, this)
    }

    override fun onReq(baseReq: BaseReq?) {
    }

    override fun onResp(baseResp: BaseResp?) {
        if (baseResp?.type == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {   //小程序回调
            //处理微信的结果回调
           ...
        }
        finish()
    }
}
相关推荐
35 分钟前
深度解析Compose中的BoxWithConstraints
android·kotlin·android jetpack
jolimark43 分钟前
MySQL--》如何在MySQL中打造高效优化索引
android·mysql·adb
book123_0_991 小时前
【MySQL】MySQL函数之JSON_EXTRACT
android·mysql·json
冬奇Lab2 小时前
ContentProvider与Uri权限:跨应用数据共享
android·源码阅读
峥嵘life2 小时前
Android16 【GTS】 GtsDevicePolicyTestCases 测试存在Failed项
android·linux·学习
aqi002 小时前
【送书活动】《鸿蒙HarmonyOS 6:应用开发从零基础到App上线》迎新送书啦
android·华为·harmonyos·鸿蒙
良逍Ai出海4 小时前
OpenClaw 新手最该先搞懂的 2 套命令
android·java·数据库
hindon4 小时前
一文读懂 ViewModel
android
程序员JerrySUN4 小时前
别再把 HTTPS 和 OTA 看成两回事:一篇讲透 HTTPS 协议、安全通信机制与 Mender 升级加密链路的完整文章
android·java·开发语言·深度学习·流程图
音视频牛哥4 小时前
Android平台GB28181设备接入模块架构解析、功能详解与典型应用场景分析
android·android gb28181·gb28181安卓端·gb28181对接·gb28181设备·gb28181语音广播·安卓gb28181设备对接