uniapp 微信小程序授权获取手机号

2,925 阅读1分钟

创建getPhoneNumber按钮

先写一个button按钮,open-type 设为 getPhoneNumber

<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">唤起授权手机号</button>

wx.login 接口,获取code

uni.login({  
        success: (res) => {  
            if (res.code) {         //微信登录成功 已拿到code  
                // ...doSomething  
            } else {  
                console.log('登录失败!' + res.errMsg)  
            }  
        }  
    })  

用 code换取 session 和 openId

onload(){  
    uni.login({  
        success: (res) => {  
            if (res.code) {         //微信登录成功 已拿到code  
                this.jsCode=res.code        //保存获取到的code  
                uni.request({  
                    url: 'https://api.weixin.qq.com/sns/jscode2session',  
                    method:'GET',  
                    data: {  
                        appid: 'wx********',        //你的小程序的APPID  
                        secret: 'xxxxxxxxxx',       //你的小程序的secret,  
                        code: res.code              //wx.login 登录成功后的code  
                    },  
                    success: (cts) => {  
                        console.log(cts, 'login');
                        // 换取成功后 暂存这些数据 留作后续操作  
                        this.openid=cts.data.openid     //openid 用户唯一标识  
                        this.unionid=cts.data.unionid     //unionid 开放平台唯一标识  
                        this.session_key=cts.data.session_key     //session_key  会话密钥  
                    }  
                });  
            } else {  
                console.log('登录失败!' + res.errMsg)  
            }  
        }  
    })  
}

解密用户信息

(1) 安装 crypto-js

使用npm 安装 crypto-js

安装命令:

npm install crypto-js

(2)下载 WXBizDataCrypt.js 文件

WXBizDataCrypt.js微信官方下载地址 打开Node文件夹,把 WXBizDataCrypt.js 文件放入你的项目中。(比如我是放在我的utils文件夹下)

在需要解密的页面引用该文件

    import WXBizDataCrypt from "@/utils/WXBizDataCrypt.js";        //请以你的实际地址为准

按钮点击触发事件 onGetPhoneNumber

           getPhoneNumber(e) {
                      console.log(e, 'eeeeeee');
                      if (e.detail.errMsg == 'getPhoneNumber:ok') {
                                //允许授权
                                let pc = new WXBizDataCrypt('wx********', this.session_key); 
                                //wxXXXXXXX为你的小程序APPID
                                let data = pc.decryptData(e.detail.encryptedData, e.detail.iv);
                                
                                console.log(data); //data就是最终解密的用户信息
                                //后续操作。。。
                              
                            } else {
                              //用户决绝授权或授权失败
                              console.log(e.detail.errMsg)
                              //拒绝授权后弹出一些提示
                            }
                        },