如今微信登陸是一個網站、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