uniapp微信授权手机号登录
时间: 2025-05-04 18:42:11 浏览: 28
### 实现 UniApp 中微信授权登录并获取手机号
#### 配置准备工作
为了使应用程序能够成功调用微信的OAuth2.0接口来完成用户的授权过程,在`manifest.json`文件中需设置好对应的`appid`,同时在源码视图里也要填写正确的`appsecret`[^2]。
#### 获取用户信息授权码 (Code)
当用户同意授权后,前端会收到一个临时票据即授权码(code),此code用于换取用户的唯一标识符(openid)[^3]。具体操作如下:
```javascript
uni.login({
provider: 'weixin',
success(loginRes) {
console.log('login code:', loginRes.code);
// 将 code 发送到服务器端交换 openid 和 session_key
}
});
```
#### 请求用户基本信息与手机号权限
对于新版API而言,需要分别请求两个不同的code:一个是用来获取用户公开资料(头像昵称等),另一个则是专门针对电话号码的特别许可。这涉及到两次独立的授权动作。
##### 用户信息授权
```javascript
uni.getUserProfile({
desc: "用于完善会员资料",// 这个字符串用于向用户解释为何要读取其个人数据
success(res){
const userInfo = res.userInfo;
console.log(userInfo);
// 处理获得的信息...
},
fail(err){
console.error("获取用户信息失败:", err);
}
})
```
##### 手机号授权
```javascript
uni.getPhoneNumber({
success(phoneInfo){
let encryptedData = phoneInfo.encryptedData,
iv = phoneInfo.iv;
// 把加密后的数据发送到服务端解析得到真实手机号
sendToServer({encryptedData, iv});
function sendToServer(data){
uni.request({
url:'https://yourserver.com/api/decryptPhone',// 替换成实际的服务地址
method:"POST",
data:data,
success(response){
console.log("解密结果:", response.data.phoneNumber);
},
fail(error){
console.error("网络错误或解密失败:", error);
}
})
}
},
fail(){
console.warn("用户拒绝提供手机号");
}
})
```
#### 后端处理逻辑
接收到从前端传递过来的数据之后,后台利用官方提供的工具类或者SDK对接收的数据进行解密,从而拿到明文形式下的手机号以及其它必要的身份验证参数。
阅读全文
相关推荐
















