uni-app获取用户手机号

7,053 阅读1分钟

先决条件

  1. 小程序的主体为企业(正式上线),测试版不受此限制
  2. 小程序appId
  3. 小程序秘钥SECRET

具体步骤

  1. 下载解密脚本 WXBizDataCrypt.js微信官方下载地址
  2. 解压开后,把node文件夹下WXBizDataCrypt.js拉入项目目录
  3. 在具体需要获取手机号的页面引入脚本文件 import WXBizDataCrypt from '@/static/WXBizDataCrypt.js' 根据自己的项目具体目录写路径

变量定义

login_code : '',

WX_AUTH_URL:'api.weixin.qq.com/sns/jscode2…', 固定的解析地址

APPID:'自己小程序的appid',

SECRET:'自己小程序的SECRET',

页面按钮

<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"> 获取电话号码

相关方法

在onLoad生命周期中调用uni.login进行登录

onLoad: function() {  
	            var that = this;  
	            uni.login({    
	                success: function(res) {    
	                    // 获取code    
	                    console.log(JSON.stringify(res));   
	                    that.login_code = res.code;  
	                }  
	            });  
	        },  

获取手机号方法

        methods: {  
            getPhoneNumber: function(e) {    
                console.log(e);  
                    var that = this
                if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {    
                    console.log('用户拒绝提供手机号');  
                } else {    
                    console.log('用户同意提供手机号');  

                    var encryptedData = e.detail.encryptedData;  
                    var iv = e.detail.iv;  
                    var JSCODE = this.login_code;  
                    var APPID = this.APPID;  
                    var SECRET = this.SECRET;  
                        var wx_author_url = this.WX_AUTH_URL + '?appid=' + APPID+'&secret=' + SECRET + '&js_code=' + JSCODE + '&grant_type=authorization_code';  
        
                    uni.request({  
                        url : wx_author_url,  
                        success(re){  
                            console.log( 'session_key:' + re.data.session_key );  

                            var appId = APPID;  
                            var sessionKey = re.data.session_key;  

                            var pc = new WXBizDataCrypt(appId, sessionKey);  
                            var data = pc.decryptData(encryptedData, iv);  

                            console.log('------------------->');  
                            console.log('解密后 data: ', data); 
			    // 拿到的手机号相关信息都在data中
                                // 数据对象:{  countryCode: "86"
                                phoneNumber: "158xxxx5818"
                                purePhoneNumber: "158xxxx5818"
                                watermark:{
                                appid: "wxc294xxxxx6fbc318"
                                timestamp: 1649318087
                                   }
                                 }
                            // console.log('解密后 data: ', JSON.stringify(data));  
                            console.log('------------------->');  

                        }  
                    });  

                }    

            },  

        }