授权机制,其实也就是需要区分用户的唯一性,因为我们是需要拿到用户的个人信息的。但是为了信息的安全性,微信采用了上图所示的架构。
当用户访问公众号时,公众给予用户一个授权提示,这个授权链接带有appid参数(为了知道用户是登录的哪个公众号),当用户点击授权时,会跳转到公众号的回调url上,并带有code参数。
另外需要说明的是,openid是指用户在当前公众号的唯一标识,在其他公众号的openid是不同的。
为什么这里要返回一个code参数呢?
因为access_token和openid的安全系数比较高,所以微信规定不能发送到客户端的,所以微信发送给客户端的是一个code。
客户端拿到这个code之后,便自动带着code来访问公众号。开发者服务器接收到这个code之后,携带code,appid,secret去向微信请求access_token和openid。
而服务器拿到微信返回过来的access_token和openid后,就可以去请求用户的信息了。
需要注意的是,微信文档也提到了,这里的access_token和jssdk里的access_token 是不同的。
这里的是授权验证,那里的是调用接口用的。
其实小程序里面还有个token,那个token是需要返回到客户端的。
觉得有必要演示一下:
首先在
公众平台》开发 》开发者工具 》公众平台测试帐号
弄个测试账号
这里需要配置个回调URL,我这里是在新浪SAE里弄的。
得到的code如下:
061IiBU12QEM411WlyU12z1BU12IiBUp
2,access_token和openid
得到的access_token如下:
2VA7R-iUXPsa9KE5gDluVqXrhy8uKGPYwHEUMGHKvFMxZiLZ5DXYaY-qwcJkbYwo4MOKfwcjr0g6fEvKPmXul9ED8hjBagCglIzu_hr6M5Q
得到的openid如下:
oGcKi0QwomF452AP9AUu7kL3gbjY
3,拉取用户信息
接口地址:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
得到的返回如下:
{
openid: “oGcKi0QwomF452AP9AUu7kL3gbjY”,
nickname: “1”,
sex: 1,
language: “zh_CN”,
city: “”,
province: “马德里”,
country: “西班牙”,
headimgurl: “http://wx.qlogo.cn/mmhead/Q3auHgzwzM5b8CHNZa1v4Hic5WVa0ow6ZibhLzyCic2Gx142ib81Oge50g/0“,
privilege: [ ]
}