如今微信登陆是一个网站、APP的标配,因此微信受权登陆是咱们应该要掌握的。微信受权登陆有4种方式:php
一、经过微信开放平台
二、经过认证的微信服务号
三、经过认证的微信订阅号
四、经过微信小程序曲线救国html
今天咱们就讲解的是微信服务号,经过OAuth2.0机制网页受权登陆,获取用户基本信息。数据库
一、获取code
二、获取access_token
三、获取用户基本信息json
经过如下接口便可得到,参数说明:小程序
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
以上连接进行配置后,进行点击访问或跳转。微信小程序
配置例子:api
https://open.weixin.qq.com/connect/oauth2/authorize?appid=你公众号的APPID&redirect_uri=你服务器的接收code的页面连接&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
点击容许,将会开始获取code,而且跳转到你的redirect_uri,redirect_uri就是你要接收code的页面。浏览器
redirect_uri代码能够这样写,getcode.php缓存
<?php header("Content-type:text/html;charset=utf-8"); $code = $_GET["code"]; echo $code; ?>
例如你的服务器域名是www.abc.com,你的代码放在服务器的wx目录下,那么你的redirect_uri应该是:服务器
http://www.abc.com/wx/getcode.php
最后,你在微信内点击上面获取code的连接,那么就会弹窗问你是否容许获取用户信息的了。
容许后,就跳转到getcode.php进行下一步的操做。
经过如下接口能够得到,参数说明:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
上面所需的参数基本都有,APPID、APPSECRET是你服务号的,CODE上面已经获取到了,那么直接请求接口,就能得到access_token了。
下面getcode.php页面的:
<?php header("Content-type:text/html;charset=utf-8"); $code = $_GET["code"]; $appid = "你公众号的APPID"; $appsecret = "你公众号的APPSECRET"; $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code "; //发起请求 $getopenid = file_get_contents($url); $getopenid_arr = json_decode($getopenid, true); $openid = $getopenid_arr["openid"]; $access_token = $getopenid_arr["access_token"]; ?>
以上代码直接就能够返回openid和access_token了,接下来直接经过另外一个接口,就能够得到用户基本信息。
经过如下接口便可得到,参数说明:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
代码我就不上了,跟上面的请求方式是同样的。
咱们上一步得到的access_token须要进行缓存,由于它是会失效的,咱们应该进行缓存到服务器或者数据库,openid也是要储存到数据库。
一、在储存到数据库前,先查询数据库是否存在这个用户的openid,若是有,直接更新这个用户的信息,而且返回登陆成功。若是没有,则初始化一条数据进去。
二、而后浏览器轮询这条数据的登陆状态,若是用户扫码登陆,得到头像和昵称,那么就把头像和昵称更新到刚才初始化的数据当中,若是尚未扫码登陆,则一直在轮询,直到扫码登陆后就中止轮询,建议设置一个过时时间,防止轮询时间过长形成服务器的不良。
Author:TANKING
Date:2020-2-20
Web:LIKEYUNBA.COMWeChat:face6009