UnionID 机制
如果开发者拥有多个移动应用,网站应用,公众号和小程序,可以通过UnionID
来区分用户的唯一性,因为只要是同一个微信开发平台账号下的移动应用,网站应用,公众号和小程序,用户的UnionID
是唯一的。换句话说,同一个用户,对同一个微信开发平台的不同应用,UnionID是唯一的。
UnionID获取途径
- 调用接口
getUserInfo
,从解密数据中获取UnionID
。本接口需要用户授权。 - 如果开发者账号下存在同主体的公共号,并且该用户已经关注该公众号。开发者可以直接通过
wx.longin + code2session
获取该用户UnionID
,无需用户再次授权。 - 如果开发者账号下存在同主体的公共号或移动应用,并且该用户已经授权登陆过该公共号或者移动应用。开发者可以直接通过
wx.login +code2Session
获取用户的UnionID
,无需再次授权。 - 小程序端调用云函数时,当满足
UnionID
获取条件时可在云函数中通过cloud.getWXContext
获取UnionID
.
小程序授权
- 用户点击授权按钮弹出授权提示框,如果用户允许授权,通过bindGetUserInfo 方法获取用户信息.
```js
bindGetUserInfo(e) {
let userInfo=e.mp.detail.userInfo;
}
```
获取完用户信息后通过wx.login
获取用户的code
临时登陆授权码,传给后台服务器调用code2session
获取用户的openid
(用户的唯一表识,保存本地)。然后将openid 和用户信息录入用户表,回调之后前端拿到录入用户的生成的userId,保存到本地。保存到本地的openid和userId会在用户卸载小程序后失效。如果失效,用户需要重新授权。
微信公众号
获取用户基本信息(包括UnionID机制)
开发者可通过OpenID来获取用户基本信息。请使用https协议。
http请求方式: GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
参数:
access_token: 调用接口凭证
openid: 普通用户的表识,对应当前公共号唯一
{
"subscribe": 1,
"openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M",
"nickname": "Band",
"sex": 1,
"language": "zh_CN",
"city": "广州",
"province": "广东",
"country": "中国",
"headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"subscribe_time": 1382694957,
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
"remark": "",
"groupid": 0,
"tagid_list":[128,2],
"subscribe_scene": "ADD_SCENE_QR_CODE",
"qr_scene": 98765,
"qr_scene_str": ""
}
subscribe:用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
unionid:只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
qr_scene:二维码扫码场景(开发者自定义)
获取access_token
公众号和小程序均可以使用AppID
和AppSecret
调用接口来获取access_token
。AppID
和AppSecret
可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功。小程序无需配置IP白名单。
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
appid:第三方用户唯一凭证
secret:第三方用户唯一凭证密钥,即appsecret
grant_type:获取access_token填写client_credential
{"access_token":"ACCESS_TOKEN","expires_in":7200}
access_token:获取到的凭证
expires_in:凭证有效时间,单位:秒