微信公众平台网页授权
最近要做一个功能,用户扫描二维码,获取用户信息,判断他是否关注了公众号,来进行一系列操作;
其中需要获取用户信息,微信有几种方式获取用户信息,这边我了解如下几种可以:
1.通过网页授权获取用户的openid,通过openid再调用用户基本信息接口;
2.用户关注公众号,通过微信事件推送,可以获取用户的openid,通过openid再调用用户基本信息接口;
这边用户通过扫描二维码,来获取用户信息的话,使用微信网页授权的方式更合适。下面来具体的看一下如何实现:
先读一遍微信网页授权开发文档:点击打开链接
第一步:用户同意授权,获取code
第二步:通过code换取网页授权access_token
第一步:用户同意授权,获取code
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
尤其注意:由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问
参考链接(请在微信客户端中打开此链接体验):
scope为snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdap
ter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_bas
e&state=123#wechat_redirect
scope为snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=
code&scope=snsapi_userinfo&state=STATE#wechat_redirect
尤其注意:跳转回调redirect_uri,应当使用https链接来确保授权code的安全性。
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 公众号的唯一标识 |
redirect_uri | 是 | 授权后重定向的回调链接地址,请使用urlEncode对链接进行处理 |
response_type | 是 | 返回类型,请填写code |
scope | 是 | 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息) |
state | 否 | 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节 |
#wechat_redirect | 是 | 无论直接打开还是做页面302重定向时候,必须带此参数 |
下图为scope等于snsapi_userinfo时的授权页面:
用户同意授权后
如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
第二步:通过code换取网页授权access_token
首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。
尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。
请求方法
获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 公众号的唯一标识 |
secret | 是 | 公众号的appsecret |
code | 是 | 填写第一步获取的code参数 |
grant_type | 是 | 填写为authorization_code |
返回说明
正确时返回的JSON数据包如下:
{ "access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE" }
参数 | 描述 |
---|---|
access_token | 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同 |
expires_in | access_token接口调用凭证超时时间,单位(秒) |
refresh_token | 用户刷新access_token |
openid | 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID |
scope | 用户授权的作用域,使用逗号(,)分隔 |
错误时微信会返回JSON数据包如下(示例为Code无效错误):
{"errcode":40029,"errmsg":"invalid code"}
以上是微信官方文档说明;
注意点:
1.请求url顺序不能写错。
2.别忘了去公众平台基本配置中配置ip白名单,不配置请求不通。
3.别忘了去公众平台开发者工具-->公众平台测试账号-->修改下回调域名(这边本地测试可以使用花生壳内网穿透)。
微信公众平台网页授权相关推荐
- 微信公众平台网页授权两次重定向问题
调用微信授权接口,微信服务器多次请求本地本地服务器接口,前几天做公众号分享功能,然后调用授权接口API 时一直都是两次. 会出现{'errcode':40029,'errmsg':'invalid c ...
- 微信公众平台-网页授权域名 遇到的坑
1.准备工作 首先要有个通过 域名备案的网址, 解析域名 跟你的服务器ip对应起来. 2.修改服务器tomcat配置 把port改为80 3.把文件下载到本地 4.将该文件上传至 服务器tomcat ...
- 在做微信公众号网页授权的时候,有时会重定向两次网页(302问题)
在做微信公众平台网页授权时,发现每次请求授权链接 https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_ ...
- mp.weixin.php,GitHub - temberature/mp-php-sdk: 微信公众平台第三方授权php开发包, weixin mp developer SDK....
mp-php-sdk 微信公众平台第三方授权php开发包, weixin mp developer SDK. 依赖https://github.com/dodgepudding/wechat-php- ...
- 微信公众号网页授权思路解析及具体代码
微信公众号网页授权思路解析及具体代码 微信开发文档 实现方式也是两种: 1.静默授权登录 授权登录以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静 ...
- 微信公众号网页授权登录的超简单实现步骤
微信开放平台为第三方移动程序提供分享.传播的接口, 使用户可将第三方程序的内容发布给好友或分享至朋友圈, 下面这篇文章主要给大家介绍了关于微信公众号网页授权登录的超简单实现方法, 需要的朋友可以参考下 ...
- 微信公众号网页授权40163问题【php】
微信公众号网页授权40163问题 tp5为例,emmmm-一直报40163或40029问题,翻遍了各大网站都没找到合适我的办法. 如图: 解决之后如图: 因为重定向所以请求了两次code,所以一直报4 ...
- php微信授权没有code返回,解决关于微信公众号网页授权获取code参数的问题
解决关于微信公众号网页授权获取code参数的问题 发布时间:2018-07-24 23:21, 浏览次数:3327 , 标签: code * 在微信网页授权过程中,需要获取code参数,因为我用的是公 ...
- 微信公众号网页授权--前端获取code及用户信息(vue)
前段时间开发微信公众号网页授权,虽然网上已经有很多关于这方面的博客或者教程,但是第一次开发还是遇到挺多坑的,以下分享一下我的踩坑填坑之路. 一.测试号相关配置 首先在你公司申请的测试号上配置好相关信息 ...
最新文章
- Matlab2013a安装简单教程以及遇到的问题解决(反复提示激活问题)
- php iconv lanti1,字符编码转换iconv
- 更改结构体的内存字节对齐方式--经典
- android获取毫秒,Android 日期转为为毫秒,毫秒转化为日期,获取当期日期年、月、日...
- Angular应用只执行指定单元测试的小技巧
- (转ORCLE导入导出命令)
- mysql批量插入 增加参数_MySql 的批量操作,要加rewriteBatchedStatements参数
- ApacheCN 数据科学译文集 20210313 更新
- 指针用完了怎么办_墙体里水管漏水怎么办?瞧瞧这个,轻松搞定,滴水不漏
- Spring Data Jpa 报错org.hibernate.LazyInitializationException: could not initialize proxy
- JavaScript学习(六十一)—json字符串的解析和JS 对象的序列化
- html实现点赞效果,js实现点赞效果
- 2021大厂Java面试真题(分布式 )
- 【Dam Dadi Doo】MMD镜头+动作打包下载.zip
- 百度之星 大搬家 递推
- LDF转Excel;LDF转位定义;Excel转LDF;Excel转位定义;MatrixCreat(四)之工具使用
- ffmpeg视频特效
- 分页器-DRF-自定义分页器给APIView视图类使用
- 消除QTreeWidgetItem外层虚线框
- 微信小程序 - 音频播放进度条和点击拖动的控制,支持自定义音乐播放控件样式布局(wx.createAudioContext)解决各种 InnerAudioContext.onTimeUpdate不执行