php微信公众平台接口(五)——微信网页授权
2017-11-24 17:12
288 查看
微信网页授权,就是在公众号打开自己的网页时,通过调用微信的接口把用户的信息发送给自己的服务器。
这里需要到官网登录自己的公众号账号设置授权回调域名,填写的是自己网页的域名。具体更多的作用有待发现。
1、获取code
code每次获取都不一样,而且只能用一次,用来换取网页access_token。
请求接口:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
请求方式:GET
APPID不解释;
redirect_uri就是重定向URL地址,就是请求者接口后浏览器会跳转到这个URL上,也就是微信会带参数code请求你的URL;
response_type 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息);
state 就是重定向跳去你的URL时带的参数,如填1的话,就会跳转http://your_url.com?code=CODE&state=1,这个可以不填;
注:这接口只能通过微信来请求
2、获取网页access_token
获取到code后,就可以根据code来请求微信接口来获取网页access_token和openid,通过这些就能获取用户信息,(为什么要搞这么复杂……),这个网页access_token和之前说的access_token不同,是不能共用的。
请求接口:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
请求方式:GET (为什么要用GET?这不就很容易暴露appid和secret么……)
参数部分不解释了。
这里有一个超级巨坑,(以下是吐槽,嫌太长可不看)当使用微信内置浏览器获取code后重定向去你的URL时,它会跳出“是否继续访问”类似的提示,此时其实微信已经请求过你的URL了,而当你点击“继续访问”这提示时,微信会再次请求你的URL,严重的话还会请求五六次以上。问题来了,这段期间微信每次请求带的参数code都是相同的,而code只能用一次,如果你的URL做了获取网页access_token的操作,那么多次请求的话就要炸了。网上查了下,目前没有找到很好的解决方法,大多数人都是把code保存在缓存中,用缓存是否存在来判断是否请求获取access_token接口。然后另一个问题来了,微信内置浏览器的缓存超有问题(也可能是我个人问题),使用cookie保存code,面对微信发送过来的多次请求,第一次请求确定把code保存到cookie里了,但第二次请求却检测不到cookie????试了很多次都不行。之后无奈之下我就使用了redis,成功解决微信多次请求的问题了。可是redis是把缓存保存在服务器中,这显然不合适,所以不推荐。
3、获取用户信息
scope是snsapi_userinfo的话就能请求这接口
请求接口:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
请求方式:GET
这个很简单,一般不会出什么问题,注意access_token有效时间和openid是否正确就行了。
这里需要到官网登录自己的公众号账号设置授权回调域名,填写的是自己网页的域名。具体更多的作用有待发现。
1、获取code
code每次获取都不一样,而且只能用一次,用来换取网页access_token。
请求接口:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
请求方式:GET
APPID不解释;
redirect_uri就是重定向URL地址,就是请求者接口后浏览器会跳转到这个URL上,也就是微信会带参数code请求你的URL;
response_type 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息);
state 就是重定向跳去你的URL时带的参数,如填1的话,就会跳转http://your_url.com?code=CODE&state=1,这个可以不填;
注:这接口只能通过微信来请求
2、获取网页access_token
获取到code后,就可以根据code来请求微信接口来获取网页access_token和openid,通过这些就能获取用户信息,(为什么要搞这么复杂……),这个网页access_token和之前说的access_token不同,是不能共用的。
请求接口:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
请求方式:GET (为什么要用GET?这不就很容易暴露appid和secret么……)
参数部分不解释了。
这里有一个超级巨坑,(以下是吐槽,嫌太长可不看)当使用微信内置浏览器获取code后重定向去你的URL时,它会跳出“是否继续访问”类似的提示,此时其实微信已经请求过你的URL了,而当你点击“继续访问”这提示时,微信会再次请求你的URL,严重的话还会请求五六次以上。问题来了,这段期间微信每次请求带的参数code都是相同的,而code只能用一次,如果你的URL做了获取网页access_token的操作,那么多次请求的话就要炸了。网上查了下,目前没有找到很好的解决方法,大多数人都是把code保存在缓存中,用缓存是否存在来判断是否请求获取access_token接口。然后另一个问题来了,微信内置浏览器的缓存超有问题(也可能是我个人问题),使用cookie保存code,面对微信发送过来的多次请求,第一次请求确定把code保存到cookie里了,但第二次请求却检测不到cookie????试了很多次都不行。之后无奈之下我就使用了redis,成功解决微信多次请求的问题了。可是redis是把缓存保存在服务器中,这显然不合适,所以不推荐。
3、获取用户信息
scope是snsapi_userinfo的话就能请求这接口
请求接口:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
请求方式:GET
这个很简单,一般不会出什么问题,注意access_token有效时间和openid是否正确就行了。
相关文章推荐
- php版微信公众平台之微信网页登陆授权示例
- PHP+TP框架实现微信网页授权,获取用户信息
- 【WEB开发】微信网页授权第三方登录接口(WEB登录)
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
- 微信接口开发之高级篇系列【网页授权详细说明【提供测试账号使用】】
- 微信网页授权获取用户基本信息--PHP
- [微信]微信网页授权用户基本信息接口文档
- 微信网页授权(OAuth2.0)PHP 源码简单实现
- 微信网页开发授权(获取用户信息) 微信公众平台开发教程(4)
- 微信网页授权(OAuth2.0) PHP 源码简单实现
- Java微信公众平台开发_05_微信网页授权
- 微信网页授权(OAuth2.0) PHP 源码简单实现
- 微信公众平台OAuth2.0网页授权php示例
- 夺命雷公狗---微信开发53----网页授权(oauth2.0)获取用户基本信息接口(3)实现世界留言版
- 微信网页授权获取用户基本信息--PHP
- c#关于微信网页授权,获取关注等接口调用
- 微信公众平台开发--微信网页授权
- 微信开发-业务域名、JS接口安全域名、网页授权域名