首先必须是企业认证账号,自己是个人认证账号,折腾了好半天没找到地方。代码测试来测试去都是授权失败。
其次才是按规矩文档配置好
要开通微信小程序的 `wx.getPhoneNumber` 权限(实际上是手机号快速验证组件),需要确保小程序满足相关前提条件,并进行相应的配置。以下是基于官方文档的详细步骤和要求:
### 1. **前提条件**
- 小程序必须是非个人开发者主体,且已完成微信认证(企业、组织等主体)。个人开发者无法开通此权限。境外主体目前仅限部分国家/地区开放。
- 该组件使用时,平台会基于中国三大运营商的底层能力验证号码,但不保证实时性。开发者需合理使用,避免强制要求用户提供手机号,否则可能违反平台规范导致小程序被处理。
### 2. **权限开通与付费配置**
- **微信认证**:在微信公众平台(mp.weixin.qq.com)登录小程序账号,进入“设置” > “基本设置” > “微信认证”,完成认证流程(需提供主体资质证明等)。未认证的小程序调用时会报错如 “getPhoneNumber:fail no permission”。
- **开通付费能力**:自 2023 年 8 月 28 日起,该组件需付费使用(标准单价每次调用成功收费 0.03 元)。在微信公众平台进入“付费管理”,购买资源包。每个小程序有 1000 次体验额度(正式版、体验版、开发版共用,超额后收费)。
- **免费规则**:如果小程序主体类型为政府、非营利组织、事业单位(政务民生类目)、公立医疗机构或学历教育(学校)类目,则使用不收费。查询方式:在公众平台查看“小程序信息” > “基本信息” > “微信认证主体类型”。
- **集采模式**:支持批量采购资源包后分配给多个小程序。
- **额度查询与扣费**:用户点击按钮时查询额度,若不足会返回错误码 1400001(可自定义提示)。扣费发生在成功回调时。
### 3. **代码配置(前端组件)**
- 在小程序页面中使用 `<button>` 组件:
- 设置 `open-type="getPhoneNumber"`。
- 绑定事件 `bindgetphonenumber`,用于处理回调。
- 示例代码:
```xml
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button>
```
在 Page 方法中处理:
```javascript
getPhoneNumber(e) {
if (e.detail.errMsg === "getPhoneNumber:ok") {
const code = e.detail.code; // 动态令牌,传给后端
} else {
// 处理失败,如权限不足
}
}
```
- 注意:如果额度不足,用户侧会提示“该功能使用次数已达当前小程序上限”,可通过 `phone-number-no-quota-toast` 属性自定义。
### 4. **后端配置(解密手机号)**
- 前端获取的 `code`(动态令牌,有效期 5 分钟,只能用一次)需传给服务器。
- 在服务器端调用微信的 `phonenumber.getPhoneNumber` 接口(HTTPS 或云调用):
- 接口地址:`POST https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=ACCESS_TOKEN`。
- 请求参数:JSON 对象,包括 `code`(必填),可选 `openid`。
- 需要小程序的 `access_token`(通过 `appid` 和 `secret` 获取),且 `appid` 必须匹配获取 `code` 的小程序。
- 对于第三方开发:需获得权限集 ID 为 18 的授权,使用 `authorizer_access_token`。
- 示例返回:包含 `phone_info` 对象,如 `purePhoneNumber`(纯手机号)。
### 注意事项
- `getPhoneNumber` 返回的 `code` 与 `wx.login` 的 `code` 不同,不能混用。从基础库 2.21.2 开始,无需提前调用 `wx.login`。
- 测试时,确保小程序在开发版或体验版中已上线认证版本。
- 如果遇到权限问题,检查认证状态和付费额度。建议参考微信开发者社区或官方支持获取最新更新。
如果你的小程序主体不符合条件,可考虑切换主体或咨询微信客服。