PHP微信公衆號網頁受權登陸 掃碼登陸 獲取用戶基本信息

前言

如今微信登陸是一個網站、APP的標配,因此微信受權登陸是咱們應該要掌握的。微信受權登陸有4種方式:php

一、經過微信開放平臺
二、經過認證的微信服務號
三、經過認證的微信訂閱號
四、經過微信小程序曲線救國html

今天咱們就講解的是微信服務號,經過OAuth2.0機制網頁受權登陸,獲取用戶基本信息。數據庫

流程

一、獲取code
二、獲取access_token
三、獲取用戶基本信息json

獲取code

經過如下接口便可得到,參數說明:小程序

微信截圖_20200220181006.png

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

微信截圖_20200220181415.png

點擊容許,將會開始獲取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進行下一步的操做。

獲取access_token

經過如下接口能夠得到,參數說明:

image.png

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了,接下來直接經過另外一個接口,就能夠得到用戶基本信息。

獲取用戶基本信息(頭像、暱稱)

經過如下接口便可得到,參數說明:

微信截圖_20200220182814.png

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

相關文章
相關標籤/搜索