必须在 manifest.json 的 mp-weixin 配置块中添加 "requiredPrivateInfos": ["chooseAddress"],并重启项目;同时需在微信公众平台后台申请开通「获取用户收货地址」接口权限并通过审核。

uni.chooseAddress 报错 “the api need to be declared in the requiredPrivateInfos” 怎么办
必须在 manifest.json 的 mp-weixin 配置块里显式声明 requiredPrivateInfos,否则调用直接失败,且错误提示不带路径细节,容易误判为权限未授权。
常见错误现象:chooseAddress:fail the api need to be declared in the requiredPrivateInfos field in app.json/ext.json
-
manifest.json→ 源码视图 → 找到"mp-weixin"对象(没有就手动加) - 在里面插入:
"requiredPrivateInfos": ["chooseAddress"] - 改完必须重启 HBuilder X 或重新运行项目,热更新不生效
- 注意:不是
app.json—— uni-app 项目中由manifest.json编译生成app.json,直接改后者会被覆盖
调用前要不要先检查用户是否已授权 scope.address
要检查,但不能只靠 uni.getSetting 判断 scope.address 是否为 true;微信对地址授权做了特殊处理:首次调用 uni.chooseAddress 时,即使没授权也会弹出授权框,但若用户点“拒绝”,后续再调就会静默失败,且 getSetting 返回的 scope.address 是 undefined 而非 false。
- 建议逻辑:先
uni.getSetting,若authSetting['scope.address'] === undefined,说明从未授权,可引导用户去设置页(uni.openSetting) - 若已是
true,直接调用uni.chooseAddress - 若为
false(极少见),说明用户明确拒绝过,只能提示“请前往小程序设置开启地址权限”
uni.chooseAddress 返回字段和实际可用字段有哪些
微信文档写得模糊,实际返回对象字段名与文档不完全一致,且部分字段在 iOS / Android 表现不同。别直接用 res.provinceName 这类字段拼地址,容易空值报错。
- 稳定可用字段(全平台):
userName、telNumber、provinceName、cityName、countyName、detailInfo -
postalCode字段几乎总是空字符串,别依赖 -
nationalCode和errCode属于内部字段,不建议提取使用 - 拼接示例:
${res.userName} ${res.telNumber} ${res.provinceName}${res.cityName}${res.countyName} ${res.detailInfo},注意各段之间加空格或连接符,避免粘连
为什么真机调试能用,体验版/正式版却失败
因为微信平台侧还有额外审核要求:必须在 微信公众平台后台 的【开发管理 → 接口设置】中,手动申请并开通「获取用户收货地址」接口权限,且需通过审核。
- 未开通时,开发版和体验版可能仍能调通(灰度策略),但正式版必定拦截
- 开通后,需等待微信审核完成(通常 1–3 个工作日),状态变为“已开通”才真正生效
- 上线后若被用户投诉或滥用,该权限可能被平台回收,需重新申请
最常被忽略的是后台权限申请这一步——配置写了、代码写了、重启了,唯独忘了去 mp.weixin.qq.com 提交审核。



















