用户信息
wx.getUserInfo(Object)
获取用户信息,需要首先调用wx.login接口,Object参数属性如下:
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
withCredentials | boolean | 否 | 是否带上登录态信息。当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData, iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData, iv 等敏感信息。 | |
lang | string | en | 否 | 显示用户信息的语言 |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
object.lang 的合法值
值 | 说明 | 最低版本 |
---|---|---|
en | 英文 | |
zh_CN | 简体中文 | |
zh_TW | 繁体中文 |
object.success 回调函数
属性 | 类型 | 说明 |
---|---|---|
userInfo | UserInfo | 用户信息对象,不包含 openid 等敏感信息 |
rawData | string | 不包括敏感信息的原始数据字符串,用于计算签名 |
signature | string | 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,详见 用户数据的签名验证和加解密 |
encryptedData | string | 包括敏感数据在内的完整用户信息的加密数据,详见 用户数据的签名验证和加解密 |
iv | string | 加密算法的初始向量,详见 用户数据的签名验证和加解密 |
示例代码如下:
wx.getUserInfo({
success:function(res){
const userInfo = res.userInfo
const nickName = res.nickName
const avatarUrl = res.avatarUrl
const gender = userInfo.gender
const province = userInfo.province
const city = userInfo.city
const country = userInfo.country
}
})
对encrypteData解密后可以得到完整的用户信息,解密算法解压后的json结构如下:
{
"openId":"OPENID",
"nickName":"NICKNAME",
"gender":GENDER,
"city":"CITY",
"province":"PROVINCE",
"country":"COUNTRY",
"avataUrl":"AVATARURL",
"unionId":"UNIONID",
"watermark":{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
其中unionId用于区分不同应用下的用户身份,它在同一微信开放平台账号下的移动应用、网站应用和公共账号(包括小程序)是全局唯一的,而openId只在同一应用体系中是唯一的,即在不同公众号下的openId可能重复,但unionId不会重复。即同一用户,对于应该微信开放平台下的不同应用,登陆后unionId是相同的,openId是不同的。获取unionId首先需要将小程序介入微信开放平台,开发者可以登陆威胁你开放平台进行开发者资质认证。
本例获取用户信息实例代码演示如下:
<!--如果只是展示用户头像昵称,可以使用<open-data/>组件-->
<open-data type ="userAvatarUrl"></open-data>
<open-data type = "userNickName"></open-data>
<!--需要使用button来授权登陆-->
<button
wx:if="{{canIUse}}"
open-type='getUserInfo'
bindgetuserinfo='bindGetUserInfo'>授权登陆</button>
<view wx:else>请升级微信版本</view>
Page({
data:{
canIUse:wx.canIUse('button.open-type.getUserInfo')
},
onLoad(){
//查看是否授权
wx.getSetting({
success(res){
if(res.authSetting['scope.userInfo']){
//已授权,可以直接调用getUserInfo获取头像昵称
wx.getUserInfo({
success(res){
console.log(res.userInfo)
}
})
}
}
})
},
bindGetUserInfo(e){
console.log(e.detail.userInfo)
}
})
执行结构如下: