微信公眾號(hào)點(diǎn)擊菜單即可打開(kāi)并登錄微站的實(shí)現(xiàn)方法
本文實(shí)例講述了微信公眾號(hào)點(diǎn)擊菜單即可打開(kāi)并登錄微站的實(shí)現(xiàn)方法。分享給大家供大家參考。具體分析如下:
總體來(lái)說(shuō),微信公眾號(hào)點(diǎn)擊菜單即可打開(kāi)并登錄微站實(shí)現(xiàn)步驟比較復(fù)雜,但很多微站在己用上了,本文對(duì)此進(jìn)行整理歸納,相信可以給大家?guī)?lái)一定的參考借鑒價(jià)值。
現(xiàn)在大部分微站都通過(guò)用戶的微信openid來(lái)實(shí)現(xiàn)自動(dòng)登錄。在我之前的開(kāi)發(fā)中,用戶通過(guò)點(diǎn)擊一個(gè)菜單,公眾號(hào)返回一個(gè)圖文,用戶點(diǎn)擊這個(gè)圖文才可以自動(dòng)登錄微站。但是如果你擁有高級(jí)接口,就可以實(shí)現(xiàn)點(diǎn)擊菜單,打開(kāi)網(wǎng)頁(yè)就能獲取這個(gè)openid,實(shí)現(xiàn)自動(dòng)登錄。
這里已經(jīng)提到,必須要擁有高級(jí)接口的權(quán)限(服務(wù)號(hào)、企業(yè)號(hào)),開(kāi)啟了開(kāi)發(fā)者模式。
1.設(shè)置回調(diào)地址
在微信公眾平臺(tái)后臺(tái)“開(kāi)發(fā)者中心”中找到“高級(jí)接口”下的“OAuth2.0網(wǎng)頁(yè)授權(quán)”,后面有一個(gè)“修改”,點(diǎn)擊之后就會(huì)彈出填寫(xiě)回調(diào)地址的對(duì)話框。具體如何授權(quán),請(qǐng)點(diǎn)擊這里學(xué)習(xí)。只有獲得高級(jí)接口權(quán)限后,才能出現(xiàn)這個(gè)地方的“修改”。
注意,這里填寫(xiě)的是域名,不是帶的網(wǎng)址,而且解釋中很清楚,“授權(quán)回調(diào)域名配置規(guī)范為全域名”,也就是說(shuō)帶www和不帶是不同的兩個(gè)域名。因此我這里要填寫(xiě)如下圖中的域名。
2. 創(chuàng)建菜單
創(chuàng)建菜單可以通過(guò)你的微站后臺(tái)創(chuàng)建,如果沒(méi)有開(kāi)啟開(kāi)發(fā)者模式,也可以通過(guò)微信公眾平臺(tái)后臺(tái)創(chuàng)建。
菜單使用點(diǎn)擊打開(kāi)鏈接的模式,也就是view模式。如果你是使用開(kāi)發(fā)者模式,通過(guò)向微信提交如下代碼,即可創(chuàng)建公眾號(hào)菜單(開(kāi)發(fā)者文檔):
"button":[
{
"type":"view",
"name":"登錄微站",
"url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid={在微信公眾平臺(tái)后臺(tái)獲取這個(gè)APPID}&redirect_uri={你填寫(xiě)的回調(diào)域名下的地址}&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
}]
}
代碼1 要提交的菜單代碼,下面要用到
APPID的獲取位置就是上面你填寫(xiě)回調(diào)地址的那個(gè)“開(kāi)發(fā)者中心”。下面我們用PHP來(lái)實(shí)現(xiàn)一下菜單提交:
function curl_info($appid,$secret) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
// curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Errno'.curl_error($ch);
}
curl_close($ch);
$arr= json_decode($tmpInfo,true);
return $arr;
}
function curl_menu($ACCESS_TOKEN,$data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$ACCESS_TOKEN);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Errno'.curl_error($ch);
}
curl_close($ch);
$arr= json_decode($tmpInfo,true);
return $arr;
}
function creat_menu() {
$ACCESS_LIST= curl_info(APP_ID,APP_SCR);//獲取到的憑證,你需要自己define APP_ID和APP_SCR(應(yīng)用密鑰),這個(gè)也是在微信公眾平臺(tái)后臺(tái)開(kāi)發(fā)者中心找
if($ACCESS_LIST['access_token']!='') {
$access_token = $ACCESS_LIST['access_token'];//獲取到ACCESS_TOKEN
$data = '把上面代碼1拷貝黏貼在這里';
$msg = curl_menu($access_token,preg_replace("#u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '1'))", $data));
if($msg['errmsg']=='ok') {
die('創(chuàng)建自定義菜單成功!');
}
else {
die('創(chuàng)建自定義菜單失敗!');
}
}
else {
die('創(chuàng)建失敗,微信AppId或微信AppSecret填寫(xiě)錯(cuò)誤');
}
}
create_menu();
?>
代碼2 用PHP來(lái)創(chuàng)建微信公眾號(hào)菜單
代碼2其實(shí)有點(diǎn)冗余了,核心部分用紅色標(biāo)出來(lái)了。就這樣,你的微信公眾號(hào)中應(yīng)該很快就可以看到創(chuàng)建了一個(gè)“登錄微站”的菜單。點(diǎn)擊這個(gè)菜單就可以實(shí)現(xiàn)登錄微站了。
如果你不需要PHP,可以直接在微信公眾平臺(tái)后臺(tái)的菜單自定義中寫(xiě)鏈接就可以了。
在上圖中的這個(gè)地方,選擇打開(kāi)鏈接的方式創(chuàng)建菜單。OK,接下來(lái)把上面那個(gè)鏈接放進(jìn)去:
https://open.weixin.qq.com/connect/oauth2/authorize?appid={在微信公眾平臺(tái)后臺(tái)獲取這個(gè)APPID}&redirect_uri={你填寫(xiě)的回調(diào)域名下的地址}&response_type=code&scope=snsapi_base&state=1#wechat_redirect
創(chuàng)建菜單就可以了。
當(dāng)然,你也有可能只需要在你自己的微信管理后臺(tái)加入這個(gè)鏈接就可以了。
3.在回調(diào)頁(yè)獲取openid
細(xì)心的你可能已經(jīng)發(fā)現(xiàn)了,上面的鏈接地址中含有參數(shù)scope=snsapi_base,而非scope=snsapi_userinfo,因?yàn)槭褂们罢卟恍枰脩酎c(diǎn)擊一個(gè)授權(quán)按鈕,直接跳轉(zhuǎn)到回調(diào)頁(yè)面,而后者需要點(diǎn)擊授權(quán)按鈕,不過(guò)點(diǎn)擊授權(quán)按鈕有好處,一是可以在沒(méi)有關(guān)注公眾號(hào)的情況下也可以授權(quán),二是授權(quán)后可以獲得用戶的一些信息,如昵稱、性別、所在地。但是我們是為了利用openid進(jìn)行登錄,所以直接選擇前者就可以了。
點(diǎn)擊菜單之后,經(jīng)過(guò)微信authorize的處理,會(huì)跳轉(zhuǎn)到你提交的回調(diào)地址(這里需要提醒,回調(diào)地址最好不要帶參數(shù),例如xxx/?callback=from_weixin,因?yàn)槲⑿盘D(zhuǎn)到你的回調(diào)地址也要帶參數(shù),而這個(gè)參數(shù)就你需要的)。微信跳轉(zhuǎn)到如下URL:
回調(diào)地址/?code=CODE&state=1
上面代碼可以通過(guò)$_GET['code']獲得一個(gè)CODE值,利用這個(gè)CODE值和appid,可以獲得openid和access_token。
下面再用PHP來(lái)實(shí)現(xiàn)以下:
$code = $_GET['code'];
$data = get_by_curl('https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSRC&code='.$code.'&grant_type=authorization_code');
$data = json_decode($data);
$openid = $data->openid;
$access_token = $data->access_token;
}
function get_by_curl($url,$post = false){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if($post){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
}
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
這樣可以就可以獲得openid和access_token,利用這些值,我們還可以利用微信公眾平臺(tái)的獲取用戶基本信息api接口獲取用戶基本信息。
希望本文所述對(duì)大家基于PHP的微信公眾號(hào)開(kāi)發(fā)有所幫助。
相關(guān)文章
PHP利用FFmpeg實(shí)現(xiàn)獲取遠(yuǎn)程視頻的時(shí)長(zhǎng)和截圖
這篇文章主要為大家詳細(xì)介紹了PHP如何利用FFmpeg實(shí)現(xiàn)獲取遠(yuǎn)程視頻的時(shí)長(zhǎng)和截圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2024-04-04Search File Contents PHP 搜索目錄文本內(nèi)容的代碼
這個(gè)類可以用來(lái)搜索在給定的文本目錄中的文件。它可以給定目錄遍歷遞歸查找某些文件擴(kuò)展名的文件。2010-02-02PHP學(xué)習(xí)筆記 IIS7下安裝配置php環(huán)境
PHP學(xué)習(xí)筆記 IIS7下安裝配置php環(huán)境,需要的朋友可以參考下2012-10-10php實(shí)現(xiàn)根據(jù)url自動(dòng)生成縮略圖的方法
這篇文章主要介紹了php實(shí)現(xiàn)根據(jù)url自動(dòng)生成縮略圖的方法,詳細(xì)講述了相關(guān)庫(kù)的使用、配置文件寫(xiě)法及類文件的用法示例,需要的朋友可以參考下2014-09-09用PHP實(shí)現(xiàn)瀏覽器點(diǎn)擊下載TXT文檔的方法詳解
本篇文章是對(duì)用PHP實(shí)現(xiàn)瀏覽器點(diǎn)擊下載TXT文檔的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP實(shí)現(xiàn)的mysql讀寫(xiě)分離操作示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的mysql讀寫(xiě)分離操作,簡(jiǎn)單講述了mysql讀寫(xiě)分離的原理,并結(jié)合實(shí)例形式給出了php針對(duì)mysql的讀寫(xiě)sql語(yǔ)句操作不同數(shù)據(jù)庫(kù)的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05在WordPress中實(shí)現(xiàn)評(píng)論頭像的自定義默認(rèn)和延遲加載
這篇文章主要介紹了在WordPress中實(shí)現(xiàn)評(píng)論頭像的自定義默認(rèn)和延遲加載,需要的朋友可以參考下2015-11-11