UnionID机制:
假设开发者有多个移动应用、网站应用、公众号(包括小程序),通过使用UnionID来进去区分用户的唯一性。
总的来说,同一个用户,对同一个微信开放平台下的不同应用,UnionID是相同的。
这里是否可以理解为数据库中用户表中用户的ID是唯一的,我们从表中搜索信息的时候凭借UnionID来进行遍历,从何搜索到相应的信息,而不需要每次都进行填写。
获取途径:
1.调用接口wx.getUserinfo,从解密数据中获取UnionID,但是本接口需要用户授权,即我们平时登录小程序时的弹出界面:是否授权给XX应用等这类界面,就是进行获取UnionID的授权界面了。
wx.getUserInfo(Object object)函数参数如下:
object:
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
withCredentials | boolean | 否 | 是否戴上登录态信息。当withCredentials为true时,要求此前有调用过wx.login且登录态尚未过期,此时返回的数据会包含encyptedData,iv等敏感信息;当withCredentials为false时,不要求有登录态,范蝴蝶数据不包括encryptedData,iv等敏感信息 | |
lang | string | en | 否 | 显示用户信息的语言 |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(回调成功、失败都会执行) |
object.success的回调函数
参数Object res
属性 | 类型 | 说明 |
---|---|---|
userinfo | UserInfo | 用户信息对象,不包括openid等敏感信息 |
rawData | string | 不包括敏感信息的原始数据字符串,用于计算签名 |
signature | string | 使用sha1(rawData+sessionkey)得到字符串,用于校验用户信息,详见用户数据的签名验证和加解密 |
encryptedData | string | 包括敏感数据在内的完整用户信息的加密数据,详见用户数据的签名验证和加解密 |
object.lang的合法值
值 | 说明 |
---|---|
en | 英文 |
zh_CN | 简体中文 |
zh_TW | 繁体中文 |
在看完上面这些内容后,看到微信小程序开发文档中有写:接口调整说明
看了以后心情复杂,这里想配一张图
当然wx.getUserInfo接口都看到这里了,还能不看完么。。,下面是手册给的示例代码:
// 必须是在用户已经授权的情况下调用
wx.getUserInfo({
success(res) {
const userInfo = res.userInfo
const nickName = userInfo.nickName
const avatarUrl = userInfo.avatarUrl
const gender = userInfo.gender // 性别 0:未知、1:男、2:女
const province = userInfo.province
const city = userInfo.city
const country = userInfo.country
}
})
在用户已经授权的情况下进行数值的获取。
encryptedData解密后为以下json结构,详见加密数据解密算法
{
"openId": "OPENID",
"nickName": "NICKNAME",
"gender": GENDER,
"city": "CITY",
"province": "PROVINCE",
"country": "COUNTRY",
"avatarUrl": "AVATARURL",
"unionId": "UNIONID",
"watermark": {
"appid": "APPID",
"timestamp": TIMESTAMP
}
}
示例代码:
<!-- 如果只是展示用户头像昵称,可以使用 <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)
}
})
UserInfo(用户信息)
属性:
属性 | 类型 | 作用 |
---|---|---|
nickName | string | 用户昵称 |
avatarUrl | string | 用户头像图片的URL。URL最后一个数值代表正方形头像大小(有0,46,64,96,132数值可选,0代表640640的正方形头像,46表示4646的正方形头像,剩余数值以此类推,默认132),用户没有头像时该项为空。渃用户更换头像,原有头像URL将失效。 |
gender | number | 用户性别 |
country | string | 用户所在国家 |
province | string | 用户所在省份 |
city | string | 用户所在城市 |
language | string | 显示country、province、city所用的语言 |
language的合法值:
值 | 说明 |
---|---|
en | 英文 |
zh_CN | 简体中文 |
zh_TW | 繁体中文 |