要進行網頁授權,肯定要和微信合作,首先,要有一個自己的公眾號,而且必須要經過認證的公眾號.(如果沒有,可以去申請測試號)
訂閱號和服務號以及測試號:訂閱號專注的是推送消息,所以一些高級接口會沒有.服務號專注的是用戶交互,所以接口會比訂閱號多一點,相對的,推送消息的數(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已經獲取到了,其他好像沒什么問題了