关于微信公众号授权机制
来源:互联网 发布:微信回调域名不备案 编辑:程序博客网 时间: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: [ ]
}
- 关于微信公众号授权机制
- 微信公众号授权
- java二次开发微信公众号授权
- 微信公众号授权问题总结
- 微信公众号授权及关注
- 微信公众号 授权登录 JAVA
- 微信公众号授权(前端)
- Java 微信公众号网页授权
- 微信公众号授权认证实现
- php实现微信公众号授权
- 开发微信公众号授权失败
- java微信公众号支付授权
- 微信公众号 网页授权开发
- 微信公众号授权登录
- 微信公众号 授权登录 JAVA
- 微信公众号支付(一)授权
- 基于Springboot的微信公众号接入、通过网页授权机制获取用户信息
- 微信公众号开发12公众号网页授权
- Mysql 使用函数SUM/GROUP_CONCAT 时与GROUP BY 子句
- 1156: 单数变复数
- linux中静态库和动态库的区别
- ubuntu装机必备+主题美化
- 部署Maven项目到tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderLi
- 关于微信公众号授权机制
- Java的基本循环结构
- 不用‘+’的Add函数
- 子集树与排列树
- Picasso框架的基本使用
- java方法 method
- 565. Array Nesting
- Android Studio 2.2 在已有项目中添加NDK
- Java:使用3层for循环遍历输出三维数组内容。