公众平台: 服务号/订阅号/小程序
开放平台: 移动应用/网站应用/公众帐号开发/第三方平台开发

  • OpenID = 用户微信号 & 公众平台 APPID (两个数据加密得到的字符串)
  • UnionID = 用户微信号 & 开放平台 APPID(两个数据加密得到的字符串)
  • 同一用户,对同一个微信开放平台帐号下的不同应用,UnionID 是相同的。

1.获取登录凭证(code)

1
2
3
4
5
wx.login({
success(res) {
// res = {code}
}
});

res.code: 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 auth.code2Session,使用 code 换取 openid 和 session_key 等信息

2. 授权

1
2
3
<button open-type="getUserInfo" bindgetuserinfo="getUserInfoHandler">
<button />
</button>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
getUserInfoHandler(e){
// 用户拒绝授权
//e.detail.errMsg = "getUserInfo:fail auth deny"
// 同意授权
{
UserInfo: {
nickName,
avatarUrl,
gender, // [0, 1, 2]
country,
province,
city,
language // [en, zh_CN, zh_TW]
},
rawData, // 不包括敏感信息的原始数据字符串,用于计算签名
signature,
encryptedData, // 包括敏感数据在内的完整用户信息的加密数据
iv, //加密算法的初始向量
cloudID, //敏感数据对应的云 ID,开通云开发的小程序才会返回
}
}

3. 服务端解密 unionId

( code, encryptedData, iv)
||
code => session_key
||
||
服务端解密
||

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"openId": "OPENID",
"nickName": "NICKNAME",
"gender": GENDER,
"city": "CITY",
"province": "PROVINCE",
"country": "COUNTRY",
"avatarUrl": "AVATARURL",
"unionId": "UNIONID",
"watermark": {
"appid": "APPID",
"timestamp": TIMESTAMP
}
}