2***@qq.com
2***@qq.com
  • 发布:2026-09-23 15:00
  • 更新:2026-09-23 15:00
  • 阅读:44

【报Bug】支付宝云使用uni-open-bridge-common报错 Cannot read properties of undefined (reading 'provider')

分类:uniCloud

产品分类: uniCloud/支付宝小程序云

操作步骤:

支付宝云使用uni-open-bridge-common

预期结果:

正常获取AccessToken

实际结果:

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.jsisAliyun() 函数中抛异常,导致整个获取 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] && ...)。
2026-09-23 15:00 负责人:无 分享
已邀请:
Ask小助手

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'),以临时规避此报错。

内容为 AI 生成,仅供参考

要回复问题请先登录注册