OpenID与UnionID介绍
OpenID相对于开发者的应用而言是唯一的
UnionID相对于开发者同一个账号下的所有应用而言是唯一的
OpenID长度为28;UnionID长度为29
OpenID 是 微信号与公众平台APPID 加密后得到的用户标识;
UnionID 是 微信号与开放平台APPID 加密后得到的用户唯一标识
如果需要获取UnionID,需要将公众号绑定到微信开放平台账号下
获取用户的OpenID是无需用户同意的,但获取用户基本信息需要用户同意
公众号设置
- 点击右上角头像,选择功能设置
- 点击设置网页授权域名
- 下载点击后显示的txt文件,将其放在自己的项目中,并保证可以访问到该txt文件
- 完成第三步后将项目的域名配置上去
- 在左边菜单栏的基本配置中设置项目所在服务器的IP白名单
公众号网页授权
1. 用户进入授权页面同意授权, 获取code
a) 授权链接为:
参数说明:
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 公众号的唯一标识 |
redirect_uri | 是 | 授权后重定向的回调链接地址, 要 urlEncode 对链接进行处理 |
response_type | 是 | 返回类型,请填写code |
scope | 是 | 应用授权作用域 |
state | 是 | 重定向后会带上state参数,可以填写a-zA-Z0-9的参数值,最多128字节 |
#wechat_redirect | 是 | 无论直接打开还是做页面302重定向时候,必须带此参数 |
scope分为snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),和snsapi_userinfo (即使在未关注的情况下,只要用户授权,也能获取用户信息 )
b) 同意授权后,页面将跳转到:
redirect_uri/?code=CODE&state=STATE
code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
c) 效果图:
2. 通过code换取网页授权access_token
注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同
a) 请求方法:
获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_cod
参数说明:
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 公众号的唯一标识 |
secret | 是 | 公众号的appsecret |
code | 是 | 第一步获取的code参数 |
grant_type | 是 | 填写authorization_code |
返回的JSON格式:
{
"access_token":"ACCESS_TOKEN", //access_token
"expires_in":7200, //过期时间,单位秒
"refresh_token":"REFRESH_TOKEN", //用户刷新access_token
"openid":"OPENID", //openid
"scope":"SCOPE" //用户授权的作用域,使用逗号(,)分隔
}
3. 获取用户信息(需scope为 snsapi_userinfo)
a) 请求方法:
http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
参数说明:
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 网页授权接口调用凭证 |
openid | 是 | 用户的唯一标识 |
lang | 是 | 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 |
返回的JSON格式:
{
"openid":" OPENID", //openId
"nickname": NICKNAME, //用户昵称
"sex":"1", //用户性别,1男;2女;3未知
"province":"PROVINCE", //省份
"city":"CITY", //城市
"country":"COUNTRY", //国家
"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", //头像图片
"privilege":[ "PRIVILEGE1" "PRIVILEGE2" ], //用户特权
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" //unionid,需要绑定开放平台才能获取到
}