主要流程
出于安全的考虑,目前在微信小程序端,是无法直接拿到用户的手机号。需要几步安全校验。整体流程大概是:
- 在微信后台生成appid & secret
- 用户登录微信小程序授权访问手机号,获得手机号获取凭证code
- 调取使用appid & secret,获得接口调用凭证 access_token
- 使用接口调用凭证 access_token 与手机号获取凭证code调用微信服务获得用户手机号信息
 简单讲即:用户授权 & 调用两次微信服务
小程序端
使用微信的内置组件 <button/>,设置open-type 的值设置为 getPhoneNumber, 当用户点击并同意之后,通过 bindgetphonenumber 事件获取回调信息;
代码如:
| 1 | <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button> | 
| 1 | Page({ | 
获取用户小程序服务端流程如下
sequenceDiagram
    participant user as 微信小程序客户端
    participant api as 后端服务
    participant wechat as 微信服务
    user->>api: 授权手机号获取凭证code
    rect rgb(255, 255, 200)
    api->>wechat: ask access_token
    wechat->>api: access_token
    end
    rect rgb(255, 150, 230)
    api->>wechat: access_token
手机号获取凭证code
    wechat->>api: 用户手机号信息
    end
其他
在开发微信小程序过程中,我们可能需要涉及到以下相关的凭证
| 生成 | 作用 | 如何获得 | 过期时间 | 执行端 | 
|---|---|---|---|---|
| appid | 与微信服务交互的凭证 | 管理后台生成 | 永久 | 微信开发者管理后台 | 
| secret | 与微信服务交互的凭证 | 管理后台生成 | 永久(如果不在后台重建) | 微信开发者管理后台 | 
| 手机号获取凭证code | 加密后的手机号 | 用户授权后可以拿到 | 一次性,被拿去校验成功之后就失效 | 小程序 | 
| 接口调用凭据 access token | 用来解密手机号code以此获得手机号 | 通过appid与secret调微信的接口拿到 | 获取2h后失效,期间都可以使用 | 服务端 | 
| 登录凭证 code | 跟微信服务获取openid | 每次登录的时候 | 一次性,被拿去校验成功之后就失效 | 小程序 | 
| openid | 使用 login code拿到,用户的唯一身份 | 无法直接获取 | 永久 | 服务端 |