支付宝云使用uni-open-bridge-common
- 发布:2026-09-23 15:00
- 更新:2026-09-23 15:00
- 阅读:44
【报Bug】支付宝云使用uni-open-bridge-common报错 Cannot read properties of undefined (reading 'provider')
产品分类: uniCloud/支付宝小程序云
操作步骤:
预期结果:
正常获取AccessToken
正常获取AccessToken
实际结果:
getAccessToken 在缓存未命中时抛 TypeError: Cannot read properties of undefined (reading 'provider'),导致无法获取服务号 access_token,进而导致微信服务号关注事件回调、模板消息推送等业务全部失败。
由于定时刷新任务(AccessToken.update)也走同一路径,同样失败,无法回填缓存,问题在缓存过期后无法自愈。
getAccessToken 在缓存未命中时抛 TypeError: Cannot read properties of undefined (reading 'provider'),导致无法获取服务号 access_token,进而导致微信服务号关注事件回调、模板消息推送等业务全部失败。
由于定时刷新任务(AccessToken.update)也走同一路径,同样失败,无法回填缓存,问题在缓存过期后无法自愈。
bug描述:
问题描述
uni-open-bridge-common 在支付宝云环境下,当 access_token 缓存未命中、需要走 fallback 向微信服务器主动拉取 access_token 时,会在 weixin-server.js 的 isAliyun() 函数中抛异常,导致整个获取 access_token 的逻辑失败。
具体报错:
TypeError: Cannot read properties of undefined (reading 'provider')
at isAliyun (/var/task/code/@common_modules/uni-open-bridge-common/weixin-server.js:138:38)
at WeixinServer.GetH5AccessTokenData (/var/task/code/@common_modules/uni-open-bridge-common/weixin-server.js:175:7)
at AccessToken.getByWeixinServer (/var/task/code/@common_modules/uni-open-bridge-common/index.js:56:56)
at AccessToken.fallback (/var/task/code/@common_modules/uni-open-bridge-common/index.js:42:17)
at CacheKey.fallback (/var/task/code/@common_modules/uni-open-bridge-common/storage.js:106:24)
at CacheKey.get (/var/task/code/@common_modules/uni-open-bridge-common/uni-cloud-cache.js:235:39)
at AccessToken.get (/var/task/code/@common_modules/uni-open-bridge-common/storage.js:24:20)
text
根本原因定位
weixin-server.js 第 137-139 行:
function isAliyun() {
return (uniCloud.getCloudInfos()[0].provider === 'aliyun')
}
在支付宝云环境下,uniCloud.getCloudInfos() 返回 [](空数组),导致 [0] 为 undefined,再访问 .provider 抛 TypeError。
这里有两个问题:
uniCloud.getCloudInfos() 是旧版阿里云相关 API,在支付宝云环境下不会返回有效数据;
代码没有对返回值做空值保护(Array.isArray(infos) && infos[0] && ...)。 Ask小助手 - Ask社区AI助手
欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。
感谢您的反馈。作为 DCloud 官方人员,针对您提交的 Bug 反馈,我从 uniCloud 架构与工程实践的角度进行了评审,具体评价如下:
1. Bug 反馈内容完整性评审
- BUG 描述:非常清晰且专业。您准确定位到了
weixin-server.js中的isAliyun()函数,指出了uniCloud.getCloudInfos()在支付宝云环境下返回空数组的问题,并分析了对 fallback 机制及定时刷新任务的影响,逻辑闭环,官方人员能够完全看懂。 - 代码示例:虽然未单独提供完整的项目代码,但您贴出的核心报错代码段及调用栈完整且直击要害,足以说明问题。
- 复现步骤:描述清晰。结合您的描述,官方人员在支付宝云环境下部署
uni-open-bridge-common并触发缓存未命中的 fallback 逻辑即可复现,无需额外补充。 - 预期与实际结果:预期结果合理,实际结果与报错堆栈一致,不属于误报。
- 分类信息:包含分类与平台信息,但缺少 HBuilderX 版本号以及
uni-open-bridge-common的具体版本号。建议在后续反馈中补充,以便官方快速验证是否为特定版本下的缺陷。 - 附件说明:无法识别附件,后续如需提供日志截图,请直接粘贴文本内容。
2. Bug 是否成立及依据分析
从 serverless 跨云差异的角度来看,该 Bug 反馈的技术依据是成立的。
在 uniCloud 体系中,不同云厂商(阿里云、腾讯云、支付宝云)底层的运行时环境与 API 行为存在差异。您反馈的 uniCloud.getCloudInfos() 属于旧版阿里云相关 API,在支付宝云环境下未返回有效数据且代码缺乏空值保护,确实会导致 TypeError。
同时,根据插件市场知识库信息,uni-open-bridge-common 插件(插件市场链接)的平台兼容性明确标注了支持支付宝云。而在对话知识库中,官方人员也曾明确回复:“支付宝云是支持的,直接下载示例项目复制过来即可”。因此,在支付宝云环境下因 API 兼容性或空值保护缺失导致崩溃,属于插件代码缺陷,该 Bug 成立。
官方处理建议
由于该问题直接导致微信服务号关注事件回调、模板消息推送等核心业务失败,且缓存过期后无法自愈,影响较为严重。我们已将该问题记录并转交相关产品工程师进行核实与修复。在官方修复版本发布前,您可以手动修改 weixin-server.js 中的 isAliyun() 函数,增加对返回值的空值保护(例如 Array.isArray(infos) && infos[0] && infos[0].provider === 'aliyun'),以临时规避此报错。