微信小程序不存在真正的手机号自动填充,所谓“自动”仅指用户首次点击open-type="getphonenumber"按钮并授权后,后续登录可走无感流程;但每次仍需用户主动触发该按钮,且必须满足企业主体认证、平台开通权限、页面声明scope.phonenumber等硬性条件,前端仅获加密数据,须由后端结合code、encrypteddata和iv解密。

不能自动填充。微信小程序里没有“手机号自动填充”这回事,所谓“自动”只是用户点一次按钮、授一次权之后,后续登录走无感逻辑——但每次登录仍需用户主动触发 open-type="getPhoneNumber" 按钮。
button open-type="getPhoneNumber" 不弹窗的常见原因
不是代码写错了,而是权限或配置卡在微信侧:
-
manifest.json中mp-weixin.appid必须是企业/政府/媒体类主体的真实 AppID,个人号直接无权限 - 微信公众平台「开发管理 → 接口权限」必须手动开通「获取手机号」,且已提交审核通过
- 页面 JSON 配置里没声明
"scope.phoneNumber",首次点击静默失败,控制台无报错 - 按钮被
v-if动态控制、套在disabled父容器里、或内部无可见文本(比如只有 icon),微信不识别为合法授权入口
onGetPhoneNumber 回调里拿到的是加密数据,不是手机号
前端永远拿不到明文手机号,event.detail.encryptedData 和 event.detail.iv 必须连同 uni.login 拿到的 code 一起发给后端——三者缺一不可:
分析小程序项目源代码(含压缩/混淆),识别核心业务步骤,提取网络接口与 JSAPI 调用,生成符合 wx.modelContext 规范的技能分包(含原子接口 + 原子组件),并完成 app.json / project.config.json 配置集成。在以下场景触发:把小程序页面能力改造为小程序 AI 原子接口、生成 skills/ 分包代码、从源项目派生 MCP 工具、小程序 AI 的开发模式代码生成。仅负责静态生成,生成完成后必须交棒 wxa-skills-validate 做校验。
-
code要在uni.login成功回调里立刻传,5 分钟过期、仅能使用一次 - 不能把
code存起来等用户点按钮再用,大概率已失效,后端调https://api.weixin.qq.com/sns/jscode2session会返回errcode: 40029 -
event.detail.code字段是空的,旧教程里写的这个字段已废弃,真正有效的是event.detail.cloudID(云函数解密路径)或event.detail.encryptedData + iv(自建服务解密路径) - 用户拒绝授权时,
event.detail.errMsg是getPhoneNumber:fail user deny,不是fail:deny或其他变体,判断要写准
为什么不能用 uni.getPhoneNumber?
它已被微信彻底移除。自基础库 2.21.2 起,调用就报 getPhoneNumber is not a function。当前唯一合规路径只有:
- 用原生
<button open-type="getPhoneNumber"></button>触发 - 监听
@getphonenumber事件 - 把加密数据交给服务端解密
任何模拟点击、setTimeout 延迟触发、或试图绕过按钮的行为,都会导致 getPhoneNumber:fail not clickable 或直接无响应——这是微信强制要求的用户主动交互机制,绕不过。










