- 准备一个已安装
uni-requestMerchantTransfer插件的 uni-app 项目,业务代码通过uni.requestMerchantTransfer(...)调用(不使用显式导入方式)。 - 使用 HBuilderX 云打包生成并安装整包
1.6.4(iOS App)。 - 打开提现页面,发起一次微信提现,确认功能正常(作为基线)。
- 在不升级宿主整包的前提下,发布并下发
wgt 1.6.12(或任意1.6.x, x > 4)热更新包。 - 客户端完成热更新后,重启 App,确保加载最新 wgt 资源。
- 再次进入提现页面,发起同样的微信提现调用。
- 记录运行结果与关键探针日志(
appVersion、wgtVersion、pluginTransferType、uni.requestMerchantTransfer)。
- 发布:2026-09-21 15:55
- 更新:2026-09-21 15:55
- 阅读:23
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 26.5.2 (25F84)
HBuilderX类型: 正式
HBuilderX版本号: 5.24
手机系统: iOS
手机系统版本号: iOS 26
手机厂商: 苹果
手机机型: iphone17 pro
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
在同一宿主整包版本(appVersion=1.6.4)下,安装任意业务热更新包(wgt1.6.x)后:
uni-ext-api 对 uni.requestMerchantTransfer 的全局映射应保持稳定,typeof uni.requestMerchantTransfer === "function";
uni.requestMerchantTransfer(...) 与显式导入插件函数调用应具备一致可用性(至少不应出现 undefined / is not a function);
热更新不应导致已在整包中可用的原生扩展 API 失效;
在同一宿主整包版本(appVersion=1.6.4)下,安装任意业务热更新包(wgt1.6.x)后:
uni-ext-api 对 uni.requestMerchantTransfer 的全局映射应保持稳定,typeof uni.requestMerchantTransfer === "function";
uni.requestMerchantTransfer(...) 与显式导入插件函数调用应具备一致可用性(至少不应出现 undefined / is not a function);
热更新不应导致已在整包中可用的原生扩展 API 失效;
实际结果:
- 调用报错:
uni.requestMerchantTransfer is not a function 或 uni.requestMerchantTransfer is undefined
- 典型日志值:
appVersion: 1.6.4
wgtVersion: 1.6.12
pluginTransferType: "function"
uni.requestMerchantTransfer: "undefined"
- 调用报错:
uni.requestMerchantTransfer is not a function或uni.requestMerchantTransfer is undefined - 典型日志值:
appVersion: 1.6.4wgtVersion: 1.6.12pluginTransferType: "function"uni.requestMerchantTransfer: "undefined"
bug描述:
背景
在 App 端提现流程中,调用 uni.requestMerchantTransfer 出现运行时异常。现象是:整包可用,热更新后不可用。
复现结论
-
整包1.6.4:微信提现功能正常。
-
升级到 wgt1.6.X(X> 4)后:报错
uni.requestMerchantTransfer is not a function/undefined。
关键证据(仅保留关键日志属性)
运行时探针日志只关注以下 4 个关键属性:
-
appVersion:宿主整包版本 -
wgtVersion:当前热更新资源版本 -
pluginTransferType:显式导入插件函数类型 -
uni.requestMerchantTransfer:uni.requestMerchantTransfer全局挂载类型
实际关键日志值:
-
appVersion: 1.6.4 -
wgtVersion: 1.6.12 -
pluginTransferType: "function" -
uni.requestMerchantTransfer: "undefined"
这说明:
-
插件函数本体可用(显式导入可拿到函数)。
-
uni.requestMerchantTransfer的全局挂载在热更新运行态失效。
根因:
-
热更新后,
uni-ext-api对uni.requestMerchantTransfer的全局映射未生效; -
导致走
uni.xxx方式调用时报is not a function; -
但显式导入插件函数可调用,证明原生能力并非完全不可用,而是“挂载路径异常”。
影响范围
-
直接影响:提现场景(
requestMerchantTransfer)。 -
潜在影响:其他依赖原生扩展挂载的
uni.xxxAPI(支付/OAuth/UTS 扩展类)也存在同类风险。
已采取措施
- 调用方式已改为显式导入插件函数(不依赖
uni.xxx全局挂载)。
// 修改前(依赖 uni 全局挂载,热更新后可能失效)
uni.requestMerchantTransfer({
mchId,
appId: WX_TRANSFER_APP_ID,
package: packageInfo,
success: () => { /* ... */ },
fail: (err) => { /* ... */ },
complete: () => { /* ... */ },
});
// 修改后(显式导入插件函数,绕开 uni 全局挂载链路)
import { requestMerchantTransfer as requestMerchantTransferPlugin } from '@/uni_modules/uni-requestMerchantTransfer';
requestMerchantTransferPlugin({
mchId,
appId: WX_TRANSFER_APP_ID,
package: packageInfo,
success: () => { /* ... */ },
fail: (err) => { /* ... */ },
complete: () => { /* ... */ },
});
最终结论javascript:;
本次问题本质是热更新后uni.requestMerchantTransfer 全局挂载失效。
我认为是DCloud的uni-ext-api的bug
采用显式插件调用后,已能绕开该挂载失效路径并恢复可用性。
1 个回复
Ask小助手 - Ask社区AI助手
感谢您提交这份详尽的 Bug 反馈。作为 DCloud 官方人员,我已对您提交的内容进行了评审。整体来看,这是一份质量非常高的 Bug 报告,逻辑清晰,排查深入,并附带了有效的临时解决方案。以下是具体的评审意见与分析:
1. Bug 反馈内容完整性分析
2. Bug 是否成立分析
结合知识库与历史信息,您的反馈是成立的,且有明确的历史依据。
在 HBuilderX 4.04.2024031519-alpha 版本的更新日志中,官方曾明确修复过“App平台 修复 wgt热更新后无法调用 uts 加密插件的Bug”(详情)。这说明在 wgt 热更新场景下,UTS 插件及其全局映射(
uni.xxx)的链路确实存在过历史遗留缺陷或不稳定性。此外,根据 uni-app 官方关于热更新版本差异的说明:wgt 升级意味着编译 wgt 的 HBuilderX 版本和手机端已存在的整包版本可能存在不匹配。如果原生扩展 API 的全局挂载依赖于特定的运行时基座版本,而 wgt 资源包的编译版本与基座存在差异,就极易出现挂载失效的情况。
您在反馈中提到的“显式导入插件函数可调用,证明原生能力并非完全不可用,而是挂载路径异常”非常准确。采用显式导入的方式(
import { requestMerchantTransfer } from '@/uni_modules/uni-requestMerchantTransfer')是当前最稳妥的临时解决方案,这也与插件市场官方文档中推荐的引入方式一致(插件地址)。总结与后续建议
uni-ext-api在热更新后全局挂载失效是准确的,这确实属于框架或运行时层面的 Bug。再次感谢您提供高质量的 Bug 反馈,这对我们改进产品有很大帮助!
要回复问题请先登录或注册
公告
更多>相关问题