关于微信公众号授权机制

来源:互联网 发布:微信回调域名不备案 编辑:程序博客网 时间:2024/06/07 16:51

这里写图片描述

授权机制,其实也就是需要区分用户的唯一性,因为我们是需要拿到用户的个人信息的。但是为了信息的安全性,微信采用了上图所示的架构。

当用户访问公众号时,公众给予用户一个授权提示,这个授权链接带有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里弄的。

1,获取code的地址:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

得到的code如下:

061IiBU12QEM411WlyU12z1BU12IiBUp

2,access_token和openid

接口地址:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

得到的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: [ ]
}