复现问题描述
我们遇到一个稳定可复现的问题:同一台设备安装整包 1.6.4 时,微信提现功能正常;升级到热更新包 1.6.10.wgt 后,调用 uni.requestMerchantTransfer 报错 is not a function。
复现步骤
- 安装整包 1.6.4(HBuilderX 5.24 打包)。
- 进入提现页面,调用微信提现,功能正常。
- 下发并安装 1.6.10 的 wgt 热更新包。
- 再次进入提现并调用,报错:
uni.requestMerchantTransfer is not a function. (In 'uni.requestMerchantTransfer({mchId:i,appId:"wx074b893eda4920ab",package:o,success: ()=>{uni.hideLoading(),uni.showToast({title:n("reindeer.common.transferSuccess"),icon:"none"}),uni.navigateTo( {url:`${qa}?orderNo=${e}`})},fail:e=>{uni.hideLoading();let t=e.errMsg;"requestMerchantTransfer:fail cancel"===t&&(t=n("reindeer.common.transferCancel") ),uni.showToast({title:t,icon:"none"}),C("error",", at components/pages/reindeer/withdraw/hooks/ useWXTransfer.ts:44","转账失败",e),a(e)},complete: ()=>{t.value=!1}})', 'uni.requestMerchantTransfer' is undefined)
实际结果
热更新后微信提现失败,uni.requestMerchantTransfer 在运行时为 undefined。
期望结果
整包 1.6.4 已可用的前提下,升级同项目同链路 wgt 后,uni.requestMerchantTransfer 仍应可用,不应变为 undefined。
已确认信息
- 项目内已安装 uni-requestMerchantTransfer(src/uni_modules/uni-requestMerchantTransfer 存在)。
- manifest 中已配置 oauth.weixin、payment.weixin。
- 整包可用,仅 wgt 后异常。
环境信息
- HBuilderX:5.24
- 平台:App(iOS)
- Appid:UNIBC9C094
报错代码
const requestMerchantTransfer = (
orderNo: string,
mchId: string,
packageInfo: string,
) => {
return new Promise<void>((resolve, reject) => {
uni.requestMerchantTransfer({
mchId,
appId: WX_TRANSFER_APP_ID,
package: packageInfo,
success: () => {
uni.hideLoading();
uni.showToast({
title: t('reindeer.common.transferSuccess'),
icon: 'none',
});
uni.navigateTo({
url: `${RouterEnum.ReindeerWithdrawDetail}?orderNo=${orderNo}`,
});
resolve();
},
fail: (err) => {
uni.hideLoading();
let errMsg = err.errMsg;
if (errMsg === 'requestMerchantTransfer:fail cancel') {
errMsg = t('reindeer.common.transferCancel');
}
uni.showToast({ title: errMsg, icon: 'none' });
咨询问题
- 在“整包可用、wgt 后失效”的场景下,官方建议的排查顺序/修复方案是什么?
- 是否有已知版本或配置可规避该问题?
1 个回复
Ask小助手 - Ask社区AI助手
根据您描述的场景(整包正常,仅 wgt 热更新后 API 丢失),这是典型的 wgt 热更新与原生插件/uts 插件不兼容 问题。以下是官方建议的排查顺序与修复方案:
一、问题根因分析
1. wgt 热更新的本质限制
wgt 热更新仅更新前端 JS/CSS/页面资源,不包含原生 SDK、uts 插件编译产物或 Info.plist 等原生配置的更新。
uni.requestMerchantTransfer是 uni ext api,属于依赖原生环境的 uts 插件。根据知识库记载,App 平台在旧版本中确实存在 "wgt热更新后无法调用 uts 加密插件" 的 Bug(参见 4.06 版本修复记录),同类机制可能导致uni-requestMerchantTransfer在热更新后无法被正确注册。2. 版本匹配机制
wgt 包升级意味着编译 wgt 的 HBuilderX 版本与手机端已存在的整包版本可能不匹配。如果
uniRuntimeVersion(手机端)与uniCompileVersion(wgt 包)不一致,会导致 API 注册异常(参考 wgt热更新造成的版本差异)。二、官方排查顺序与修复方案
第一步:确认插件引入方式
uni.requestMerchantTransfer(...)全局调用(在 wgt 场景下易丢失)// 使用
requestMerchantTransfer({
mchId: "mchId",
appId: "微信开发者平台对应app的APPID",
package: "package",
success: (res) => { console.log(res) },
fail: (res) => { console.log(res.errMsg) }
})
要回复问题请先登录或注册
公告
更多>相关问题