html:
<button type='primary' open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">获取手机号</button>
onShow(){
    let that = this
	this.getLogin().then(res=>{//获取code
		that.weChatCode = res.code
	})
},    
methods: {
    // 只有已经认证的小程序才能获取手机号或者使用云函数获取加密数据解密
	getPhoneNumber(e){  
       // 参数e是绑定的授权方法自动传入过来的, 
       //主要是为了拿到vi和encryptedData值从后台换取用户联系方式
		if ("getPhoneNumber:ok" != e.detail.errMsg){
			wx.showToast({
				icon:'none',
				title: '快捷登陆失败'
			})
			return;
		}
		let iv = e.detail.iv;
		let encryptedData = e.detail.encryptedData;
		let code = this.data.wxCode;
		let _this = this;
		//调用后台接口获取用户手机号码
		let params = {
			encrypted: encryptedData,
			iv:iv,
			code:code
		}
    },
    // 序列化
	serializeParams(obj,lastKey){
		let params = ''
		for(let key in obj){
			if(key!=lastKey){
				params += `${key}=${obj[key]}&`
			}else{
				params += `${key}=${obj[key]}`
			}
		}
		return params
	},
	//前端自己获取
    clientGetOpenid(){
    	let data = {
			appid:"wx119d1b25f9d8e3",
			secret:"5ccce61346a63766e14d",
			js_code:res.code,
			grant_type:"authorization_code"
		}
		return new Promise((resolve, reject) => {
			// 获取session_key和openid
			uni.request({
				url:`https://api.weixin.qq.com/sns/jscode2session?${that.serializeParams(data,'grant_type')}`,
				method: 'GET',
				success(wxres) {
					resolve(wxres)
					if(wxres.data.errcode){
						uni.showToast({
							title: wxres.data.errmsg,
							icon: 'none',
							mask: true	
						})
					}else{
						uni.hideLoading()
						uni.switchTab({url:'/pages/home/index'})
					}
				},
				fail(err) {
					return uni.showToast({
						title: '服务器断开链接,稍后重试',
						icon: 'none',
						mask: true
					})
				}
			})
		})
	},
	getLogin() {
		return new Promise((resolve, reject) => {
			uni.login({
				success(res) {
					resolve(res)
				},
				fail: (err) => {
					reject(err)
				}
			})
		})
	},
    getUserInfo() {
		return new Promise((resolve, reject) => {
			uni.getUserProfile({
		 		lang: 'zh_CN',
		 		desc: '用户登录/注册', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,
		 		success: (res) => {
		 			console.log(res, 'resss')
		 			resolve(res.userInfo)
		 		},
		 		fail: (err) => {
		 			reject(err)
		 		}
		 	})
		})
    },


}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐