微信公眾號里的PHP網站進行網頁授權

要進行網頁授權,肯定要和微信合作,首先,要有一個自己的公眾號,而且必須要經過認證的公眾號.(如果沒有,可以去申請測試號)

訂閱號和服務號以及測試號:訂閱號專注的是推送消息,所以一些高級接口會沒有.服務號專注的是用戶交互,所以接口會比訂閱號多一點,相對的,推送消息的數(shù)量就會比訂閱號少一點.而測試號,什么接口都有,但測試號,你懂得,用不時間長.

本文的教程僅僅是微信入門教程,如有錯誤,歡迎指正!!!

我要說的是微信的網頁授權功能.如果要開發(fā)網頁授權功能,就需要一個服務號,服務號,服務號. 因為進行網頁授權的時候,必須要填一個網頁授權域名,這個網頁授權域名在訂閱號里面沒有,不支持.所以要用服務號
功能設置

填好網頁授權域名后,就可以進行代碼的開發(fā)了.我這用的是PHP,思路都一樣,具體代碼差異,請找度娘............................

大致思路是:你先創(chuàng)建一個網頁,讓用戶同意,當用戶同意后,微信會帶一個code參數(shù)來訪問你填的網頁授權域名底下的文件,比如:
http://授權域名/index.html、http://授權域名/index.php
這個文件是你自己建的,名字你自己起(沒錯,這個網頁授權就是上面說的網頁授權),然后我們在index.html或index.php里會獲得微信傳過來的code,然后拿這個code和Appid等換取信息,這個信息就是用戶的信息咯


下面說代碼:
嗯.......進行網頁授權,第一步需要先創(chuàng)建一個頁面,這個頁面是給用戶授權的.比如你進微信公眾號網站,他會彈出來一個界面,問你是否授權用微信號登錄這個網站.創(chuàng)建這個頁面的代碼:

$AppId = "你的Appid";
$Redirect_Uri = urlencode('域名/index.html');//這里是code參數(shù)來訪問你填的網頁授權域名,
底下的文件,這里是index.html//這個$Url 的scope 可以根據(jù)需求自己更改,我用的是snaapi_base,
這個意思就是用戶只要關注了這個公眾號,就不需要再手動去確認授權了,直接就訪問微信公眾號里的網頁了
$Url = "https://open.weixin.qq.com/connect/oauth2/authorize
appid=$AppId&redirect_uri=$Redirect_Uri&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";//跳到這個$Url
header("Location:" .$Url);

這個授權界面弄好了,接下來就是再創(chuàng)建一個文件用來接收微信發(fā)的code了,再說一遍,你創(chuàng)建的這個文件就是上面代碼里$Redirect_Uri 里域名后的那個文件.

你可以創(chuàng)建一個php文件,用$_Get["code"] 來獲取code的信息.然后用code和APPid等去換取用戶信息

但是,在這里,我用的是html文件,html 文件怎么去獲取code呢?就要用js..... 這里,就要用到js函數(shù)了.

這個函數(shù)是獲得Code的

function GetCode(name) {    
   var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 
   var r = window.location.search.substr(1).match(reg);
   if (r != null) return unescape(r[2]);
   return null;
}

然后: 在前臺html代碼里執(zhí)行js的GetUserInfo函數(shù):

<script> GetUserInfo();</script>

這是js里GetUserInfo()函數(shù)的代碼,這里是用GetCode函數(shù)取得code,然后通過ajax把他傳入后臺php文件里

function GetUserInfo() {    
  var code = GetCode("code"); //獲得code
  $.ajax({
    url: "Controller/GetUserInfo.php",
    type: "GET",
    dataType: "json",
    data: {code:code},
    success: function (data) {},
    error: function () {
      alert("服務器連接錯誤:獲取用戶信息失敗!...");
    }
  });
}

接下來,是PHP后臺了:

$Code = $_GET['code']; //這里獲取到Code
$Wx = new GetWxUserData();//這里通過Code和appid獲得用戶信息的過程我是寫在
//GetWxUserData()類里的GetOpenid($code) 這個函數(shù)里的 
$Result = $Wx->GetOpenid($Code);
$Openid = $Result["openid"]; //這里的$Openid就是用戶的openid,
//可以把他通過echo json_encode($Openid) 返回到前臺,就是前面

js里GetUserInfo()的ajax里的success(data) {},這個data就是echo json_encode($Openid) 返回的數(shù)據(jù).也可以把用戶的openid運用在后臺,比如存數(shù)據(jù)庫之類的,反正隨便你怎么用

接下來,就是這個GetWxUserData類了,類的代碼我不發(fā)了,我只發(fā)GetOpenid($Code)這個函數(shù)就行了:

private $AppId = "你的Appid";
private $Secret = "你的secret,就是開發(fā)者密碼";
public function GetOpenid($Code) {
    $Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$this->AppId&secret=$this->Secret&code=$Code&grant_type=authorization_code";
    $Result = $this->https_request($Url);
    return json_decode($Result, true);//因為返回來的數(shù)據(jù)是json數(shù)據(jù),所以要把他轉化一下
}
public function https_request($Url, $Data = null) {
    $Curl = curl_init();
    curl_setopt($Curl, CURLOPT_URL, $Url);
    curl_setopt($Curl, CURLOPT_SSL_VERIFYPEER, FALSE);        
    curl_setopt($Curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($Data)) {
        curl_setopt($Curl, CURLOPT_POST, 1);
        curl_setopt($Curl, CURLOPT_POSTFIELDS, $Data);
    }    
   curl_setopt($Curl, CURLOPT_RETURNTRANSFER, 1);
   $Output = curl_exec($Curl);
   curl_close($Curl);
   return $Output;}

好了,到這里就可以了,openid已經獲取到了,其他好像沒什么問題了

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容