您的位置:首页 > 移动开发 > 微信开发

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是否正确就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息