微信公眾號點擊菜單即可開啟並登入微站的實現方法,公眾_PHP教程

來源:互聯網
上載者:User

公眾號點擊菜單即可開啟並登入微站的實現方法,公眾


本文執行個體講述了公眾號點擊菜單即可開啟並登入微站的實現方法。分享給大家供大家參考。具體分析如下:

總體來說,公眾號點擊菜單即可開啟並登入微站實現步驟比較複雜,但很多微站在己用上了,本文對此進行整理歸納,相信可以給大家帶來一定的參考借鑒價值。

現在大部分微站都通過使用者的openid來實現自動登入。在我之前的開發中,使用者通過點擊一個菜單,公眾號返回一個圖文,使用者點擊這個圖文才可以自動登入微站。但是如果你擁有進階介面,就可以實現點擊菜單,開啟網頁就能擷取這個openid,實現自動登入。
這裡已經提到,必須要擁有進階介面的許可權(服務號、企業號),開啟了開發人員模式。

1.設定回調地址

在公眾平台後台“開發人員中心”中找到“進階介面”下的“OAuth2.0網頁授權”,後面有一個“修改”,點擊之後就會彈出填寫回調地址的對話方塊。具體如何授權,請點擊這裡學習。只有獲得進階介面許可權後,才能出現這個地方的“修改”。
注意,這裡填寫的是網域名稱,不是帶的網址,而且解釋中很清楚,“授權回調網域名稱配置規範為全網域名稱”,也就是說帶www和不帶是不同的兩個網域名稱。因此我這裡要填寫如中的網域名稱。

2. 建立菜單

建立菜單可以通過你的微站後台建立,如果沒有開啟開發人員模式,也可以通過公眾平台後台建立。
菜單使用點擊開啟連結的模式,也就是view模式。如果你是使用開發人員模式,通過向提交如下代碼,即可建立公眾號菜單(開發人員文檔):
複製代碼 代碼如下:{
"button":[
{
"type":"view",
"name":"登入微站",
"url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid={在公眾平台後台擷取這個APPID}&redirect_uri={你填寫的回調網域名稱下的地址}&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
}]
}
代碼1 要提交的菜單代碼,下面要用到
APPID的擷取位置就是上面你填寫回調地址的那個“開發人員中心”。下面我們用PHP來實現一下菜單提交:
複製代碼 代碼如下:<?php
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(應用密鑰),這個也是在公眾平台後台開發人員中心找
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('建立自訂菜單成功!');
}
else {
die('建立自訂菜單失敗!');
}
}
else {
die('建立失敗,AppId或AppSecret填寫錯誤');
}
}
create_menu();
?>
代碼2 用PHP來建立公眾號菜單

代碼2其實有點冗餘了,核心部分用紅色標出來了。就這樣,你的公眾號中應該很快就可以看到建立了一個“登入微站”的菜單。點擊這個菜單就可以實現登入微站了。
如果你不需要PHP,可以直接在公眾平台背景菜單自訂中寫連結就可以了。

在中的這個地方,選擇開啟連結的方式建立菜單。OK,接下來把上面那個連結放進去:

https://open.weixin.qq.com/connect/oauth2/authorize?appid={在公眾平台後台擷取這個APPID}&redirect_uri={你填寫的回調網域名稱下的地址}&response_type=code&scope=snsapi_base&state=1#wechat_redirect

建立菜單就可以了。
當然,你也有可能只需要在你自己的管理後台加入這個連結就可以了。

3.在回調頁擷取openid

細心的你可能已經發現了,上面的連結地址中含有參數scope=snsapi_base,而非scope=snsapi_userinfo,因為使用前者不需要使用者點擊一個授權按鈕,直接跳轉到回調頁面,而後者需要點擊授權按鈕,不過點擊授權按鈕有好處,一是可以在沒有關注公眾號的情況下也可以授權,二是授權後可以獲得使用者的一些資訊,如暱稱、性別、所在地。但是我們是為了利用openid進行登入,所以直接選擇前者就可以了。

點擊菜單之後,經過authorize的處理,會跳轉到你提交的回調地址(這裡需要提醒,回調地址最好不要帶參數,例如xxx/?callback=from_weixin,因為跳轉到你的回調地址也要帶參數,而這個參數就你需要的)。跳轉到如下URL:
回調地址/?code=CODE&state=1

上面代碼可以通過$_GET['code']獲得一個CODE值,利用這個CODE值和appid,可以獲得openid和access_token。
下面再用PHP來實現以下:
複製代碼 代碼如下:if($_GET['code']) {
$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,利用這些值,我們還可以利用公眾平台的擷取使用者基本資料api介面擷取使用者基本資料。

希望本文所述對大家基於PHP的公眾號開發有所協助。

http://www.bkjia.com/PHPjc/911901.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/911901.htmlTechArticle公眾號點擊菜單即可開啟並登入微站的實現方法,公眾 本文執行個體講述了公眾號點擊菜單即可開啟並登入微站的實現方法。分享給大...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.