前言

具体实现

前端

:getPhoneNumber 返回的 code 与 wx.login 返回的 code 作用是不一样的,不能混用。

总结成一句话就是:我们前端只要把getPhoneNumber获取到的code,传给后端就可以了。

2023年微信小程序获取手机号授权登录注册详细教程,包含服务端教程
代码示例

<view style="padding: 50rpx;">
    <button open-type="getPhoneNumber" type="primary" bindgetphonenumber="getPhoneNumber">微信账号一键登录</button>
</view>
Page({
  getPhoneNumber (e) {
        let detail = e.detail;
        console.log(detail);
        if (detail.errMsg === "getPhoneNumber:ok") {
            console.log('用户同意授权');
            let code = detail.code; // 动态令牌
            console.log(code);
            wx.request({
                url: '你的接口,比如登录',
                data: {
                    code
                },
                success(res) {
                    console.log(res.data); // 后端返回解析出的手机号,或者直接返回登录成功的信息
                }
            })
        } else {
            console.log('用户拒绝授权');
        }
  }
})

2023年微信小程序获取手机号授权登录注册详细教程,包含服务端教程

后端(服务端)

1. 获取请求参数code和access_token

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=换成你的APPID&secret=换成你的APPSECRET

2023年微信小程序获取手机号授权登录注册详细教程,包含服务端教程
然后我们就可以获取到access_token

{
"access_token":"ACCESS_TOKEN",
"expires_in":7200
} 

2. 获取手机号

最后使用我们上面提到的getPhoneNumber接口,请求参数为前端传过来的code和我们刚刚获取的access_token即可。

https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=ACCESS_TOKEN

请求参数

{
"code": "e31968a7f94cc5ee25fafc2aef2773f0bb8c3937b22520eb8ee345274d00c144"
}

注意access_token是放在URL里面code放body里面
返回的数据里面就包含了手机号


{
    "errcode":0,
    "errmsg":"ok",
    "phone_info": {
        "phoneNumber":"xxxxxx",
        "purePhoneNumber": "xxxxxx",
        "countryCode": 86,
        "watermark": {
            "timestamp": 1637744274,
            "appid": "xxxx"
        }
    }
}

然后后端获取到手机之后,可以顺便把其他业务逻辑处理了,比如登录

一句话总结

前端把getPhoneNumber获取到的code传给后端,后端获取access_token和前端传过来的code,请求getPhoneNumber服务端接口,即可获取到手机号。

❤如果觉得有用的话,请给我个三连

发表回复