要進(jìn)行網(wǎng)頁(yè)授權(quán),肯定要和微信合作,首先,要有一個(gè)自己的公眾號(hào),而且必須要經(jīng)過(guò)認(rèn)證的公眾號(hào).(如果沒(méi)有,可以去申請(qǐng)測(cè)試號(hào))
訂閱號(hào)和服務(wù)號(hào)以及測(cè)試號(hào):訂閱號(hào)專(zhuān)注的是推送消息,所以一些高級(jí)接口會(huì)沒(méi)有.服務(wù)號(hào)專(zhuān)注的是用戶(hù)交互,所以接口會(huì)比訂閱號(hào)多一點(diǎn),相對(duì)的,推送消息的數(shù)量就會(huì)比訂閱號(hào)少一點(diǎn).而測(cè)試號(hào),什么接口都有,但測(cè)試號(hào),你懂得,用不時(shí)間長(zhǎng).
本文的教程僅僅是微信入門(mén)教程,如有錯(cuò)誤,歡迎指正!!!
我要說(shuō)的是微信的網(wǎng)頁(yè)授權(quán)功能.如果要開(kāi)發(fā)網(wǎng)頁(yè)授權(quán)功能,就需要一個(gè)服務(wù)號(hào),服務(wù)號(hào),服務(wù)號(hào). 因?yàn)檫M(jìn)行網(wǎng)頁(yè)授權(quán)的時(shí)候,必須要填一個(gè)網(wǎng)頁(yè)授權(quán)域名,這個(gè)網(wǎng)頁(yè)授權(quán)域名在訂閱號(hào)里面沒(méi)有,不支持.所以要用服務(wù)號(hào)填好網(wǎng)頁(yè)授權(quán)域名后,就可以進(jìn)行代碼的開(kāi)發(fā)了.我這用的是PHP,思路都一樣,具體代碼差異,請(qǐng)找度娘............................
大致思路是:你先創(chuàng)建一個(gè)網(wǎng)頁(yè),讓用戶(hù)同意,當(dāng)用戶(hù)同意后,微信會(huì)帶一個(gè)code參數(shù)來(lái)訪問(wèn)你填的網(wǎng)頁(yè)授權(quán)域名底下的文件,比如:
http://授權(quán)域名/index.html、http://授權(quán)域名/index.php
這個(gè)文件是你自己建的,名字你自己起(沒(méi)錯(cuò),這個(gè)網(wǎng)頁(yè)授權(quán)就是上面說(shuō)的網(wǎng)頁(yè)授權(quán)),然后我們?cè)趇ndex.html或index.php里會(huì)獲得微信傳過(guò)來(lái)的code,然后拿這個(gè)code和Appid等換取信息,這個(gè)信息就是用戶(hù)的信息咯
下面說(shuō)代碼:
嗯.......進(jìn)行網(wǎng)頁(yè)授權(quán),第一步需要先創(chuàng)建一個(gè)頁(yè)面,這個(gè)頁(yè)面是給用戶(hù)授權(quán)的.比如你進(jìn)微信公眾號(hào)網(wǎng)站,他會(huì)彈出來(lái)一個(gè)界面,問(wèn)你是否授權(quán)用微信號(hào)登錄這個(gè)網(wǎng)站.創(chuàng)建這個(gè)頁(yè)面的代碼:
$AppId = "你的Appid";
$Redirect_Uri = urlencode('域名/index.html');//這里是code參數(shù)來(lái)訪問(wèn)你填的網(wǎng)頁(yè)授權(quán)域名,
底下的文件,這里是index.html//這個(gè)$Url 的scope 可以根據(jù)需求自己更改,我用的是snaapi_base,
這個(gè)意思就是用戶(hù)只要關(guān)注了這個(gè)公眾號(hào),就不需要再手動(dòng)去確認(rèn)授權(quán)了,直接就訪問(wèn)微信公眾號(hào)里的網(wǎng)頁(yè)了
$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";//跳到這個(gè)$Url
header("Location:" .$Url);
這個(gè)授權(quán)界面弄好了,接下來(lái)就是再創(chuàng)建一個(gè)文件用來(lái)接收微信發(fā)的code了,再說(shuō)一遍,你創(chuàng)建的這個(gè)文件就是上面代碼里$Redirect_Uri 里域名后的那個(gè)文件.
你可以創(chuàng)建一個(gè)php文件,用$_Get["code"] 來(lái)獲取code的信息.然后用code和APPid等去換取用戶(hù)信息
但是,在這里,我用的是html文件,html 文件怎么去獲取code呢?就要用js..... 這里,就要用到j(luò)s函數(shù)了.
這個(gè)函數(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;
}
然后: 在前臺(tái)html代碼里執(zhí)行js的GetUserInfo函數(shù):
<script> GetUserInfo();</script>
這是js里GetUserInfo()函數(shù)的代碼,這里是用GetCode函數(shù)取得code,然后通過(guò)ajax把他傳入后臺(tái)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("服務(wù)器連接錯(cuò)誤:獲取用戶(hù)信息失敗!...");
}
});
}
接下來(lái),是PHP后臺(tái)了:
$Code = $_GET['code']; //這里獲取到Code
$Wx = new GetWxUserData();//這里通過(guò)Code和appid獲得用戶(hù)信息的過(guò)程我是寫(xiě)在
//GetWxUserData()類(lèi)里的GetOpenid($code) 這個(gè)函數(shù)里的
$Result = $Wx->GetOpenid($Code);
$Openid = $Result["openid"]; //這里的$Openid就是用戶(hù)的openid,
//可以把他通過(guò)echo json_encode($Openid) 返回到前臺(tái),就是前面
js里GetUserInfo()的ajax里的success(data) {},這個(gè)data就是echo json_encode($Openid) 返回的數(shù)據(jù).也可以把用戶(hù)的openid運(yùn)用在后臺(tái),比如存數(shù)據(jù)庫(kù)之類(lèi)的,反正隨便你怎么用
接下來(lái),就是這個(gè)GetWxUserData類(lèi)了,類(lèi)的代碼我不發(fā)了,我只發(fā)GetOpenid($Code)這個(gè)函數(shù)就行了:
private $AppId = "你的Appid";
private $Secret = "你的secret,就是開(kāi)發(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);//因?yàn)榉祷貋?lái)的數(shù)據(jù)是json數(shù)據(jù),所以要把他轉(zhuǎn)化一下
}
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已經(jīng)獲取到了,其他好像沒(méi)什么問(wèn)題了