微信/易信公用平台開發(二):自訂菜單的PHP實現(提供源碼)

來源:互聯網
上載者:User

把公眾號分成訂閱號和服務號兩種,服務號可以自訂菜單, 菜單大大方便了使用者操作。

比如:公眾服務號 "中國南方航空" 的自訂菜單如:

 

點菜單就可以直接進入操作了,方便!

PS:服務號需要以單位身份註冊(需上傳單位證件等進行認證),個人身份只能註冊訂閱號(無自訂菜單)

PS:易信允許所有公眾號均可自訂菜單(還是易信好!)

 

 

但是,對於公用平台開發人員來說,定義、產生菜單還真有一點點麻煩。

我看了開發文檔,測試了3個小時,才算搞明白了。在此,寫點心得,並提供一個類,徹底簡化開發人員的編碼工作。

 

先講一下原理(詳見公用平台開發文檔):

1,註冊公眾號、開通開發人員模式時,平台將提供兩個參數 APPID,APPSECRET (對於的訂閱號,平台不提供; 易信所有公眾號均提供)

2,自訂菜單前,須向平台申請一個使用憑證(AccessToken), 方法如下:

      用GET方式讀取URL https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

  其中:APPID,APPSECRET 用實際參數值代入

  返回結果是一個JSON格式的文本,其中有AccessToken. (JSON是一種資料交換格式,不瞭解的同學要從頭學一下才能明白)

      AccessToken不是永久有效,返回結果中有一個失效時間,即過了XX秒後(一般是一天左右), AccessToken就會失效。

 

      對於易信平台,上述URL為

 

3,獲得有效AccessToken後,就可以進行自訂菜單建立、刪除操作了。

3.1 建立菜單

     用POST方式向這個URL提交菜單定義資料, URL:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

 其中: 用實際參數值代入

    菜單定義資料是一個JSON格式的文本 (開發文檔講得不是那麼清晰,讓我理解了好一會),做為POST方式的提交資料

 返回結果是一個JSON格式的文本,其中有操作成功碼和出錯資訊

 

 對於易信平台,建立菜單的URL為

 

3.2 刪除菜單

      用GET方式讀取URL https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN

  其中: 用實際參數值代入

  返回結果是一個JSON格式的文本,其中有AccessToken. (JSON是一種資料交換格式,不瞭解的同學要從頭學一下才能明白)

      AccessToken不是永久有效,返回結果中還有一個失效時間,即過了XX秒後(一般是一天左右), AccessToken就會失效。

 

      對於易信平台,上述URL為

 

上述過程需要開發人員非常瞭解 HTTP協議細節和JSON格式,對於一般開發人員來說,可能是個噩夢。

 

經本人編碼、測試,在此提供兩個類,徹底簡化開發人員的自訂菜單的開發工作 (開發人員無需再去理解HTTP協議、JSON和公用平台協議了)

 

結果如下:

 

開發語言: PHP 5.X

源碼: http://download.csdn.net/detail/c80486/6357873

檔案名稱:jostudio.wechatmenu.php   此處只講其使用。(感興趣的同學,可以看原始碼注釋)

檔案中定義了兩個類:

第一個類:WeChatMenu  用於菜單操作

第二個類:MenuDefine 用於菜單資料定義

 

用這兩個類實現的自訂菜單操作,常式檔案 test_menu.php

 

<?php
include_once 'jostudio.wechatmenu.php'; //包含WeChatMenu類

$AppId="9cXXXXXXXXXXXXXXXXXX";     //公用平台提供的AppId參數
$AppSecret="61XXXXXXXXXXXXXX"; //公用平台提供的AppSecret參數

//建立一個WeChatMenu類的執行個體
$object = new WeChatMenu("weixin",$AppId, $AppSecret);   //第一個參數 "weixin", 表明是針對平台的
//$object = new WeChatMenu("yixin",$AppId, $AppSecret); //第一個參數 "yixin", 表明是針對易信平台的

 

//定義一個菜單資料
$menu = new MenuDefine();   //建立一個MenuDefine執行個體

$menu->menuStart();  //菜單開始

$menu->addMenu("娛樂天地");
$menu->addMenuItem("猜謎語", "riddle");
$menu->addMenuItem("講笑話", "joke");
$menu->addMenuItem("聽音樂", "music");
$menu->addMenuItem("看電影", "movie");
$menu->addMenuItem("看小說", "novel");

$menu->addMenu("工具 + 生產力");
$menu->addMenuItem("找美食", "food");
$menu->addMenuItem("城市天氣", "weather");
$menu->addMenuItem("翻譯", "translate");

$menu->menuEnd(); //菜單定義結束, 則此時$menu->str中有菜單定義資料(JSON格式)

 

//產生菜單
echo "<h2>Create Menu</h2>";
if ($object->createMenu($menu->str))  //$menu->str中有菜單定義資料(JSON格式)
 echo "Create menu OK";
else
 echo "Create menu failure:".$menuObject->errmsg;
echo "<hr>";


//擷取當前菜單資料
echo "<h2>Get Menu: the menu json data is</h2>";
echo $object->getMenu();
echo "<hr>";

/*
//刪除菜單
echo "<h2>Delete Menu</h2>";
echo $object->deleteMenu();
echo "<hr>";
*/

?>

 

代碼說明:

 

1,首先: include_once 'jostudio.wechatmenu.php'; //包含WeChatMenu類

2,$AppId, $AppSecret是平台提供的兩個參數,請修改代碼,填入真實的值

3,建立一個WeChatMenu類的執行個體

  $object = new WeChatMenu($platform, $AppId, $AppSecret);   

        第一個參數(文本型) $platform 指明是針對哪個平台,平台為"weixin", 易信平台為"yixin"

 

4, 定義菜單資料

4.1首先,建立一個MenuDefine執行個體

      $menu = new MenuDefine();   //建立一個MenuDefine執行個體

 

4.2然後加入菜單

    $menu->addMenu($name);  //一級菜單, $name為菜單名

 

4.3再加入功能表項目

          $menu->addMenuItem($name, $key); //二級菜單

         $name為功能表項目名稱

         $key是菜單的鍵值,使用者點擊該功能表項目時,將產生一個click訊息, 訊息中有這個key值,標明是哪個菜單被點擊了

 

4.4如此類推,逐個加入。

     上述常式中,共定義了兩個一級菜單

 

4.5菜單定義結束,用  $menu->menuEnd();  結束菜單定義, 則此時$menu的str變數中已產生了菜單定義資料(JSON格式)

     MenuDefine這個類是用於簡化菜單定義的,最後產生的JSON格式的資料,儲存在 $menu->str中。

 

5, 調用WeChatMenu類的createMenu($menu_data)方法建立自訂菜單

     代碼為:  $object->createMenu($menu->str)) 

     createMenu() 將自動完成原理介紹中的所有過程

     如成功建立菜單, createMenu()將返回true

     如建立菜單失敗, createMenu()將返回false, 錯誤碼和錯誤資訊分別記錄在 $object->errcode 和 $object->errmsg 兩個變數中

 

6, 調用WeChatMenu類的getMenu()方法可以讀取當前平台上的菜單定義資料, 返回結果是一個JSON格式的文本

 

7, 調用WeChatMenu類的deleteMenu()方法可以刪除平台上的菜單定義, 如成功則返回true

 

test_menu.php 這個常式檔案是完整可用的,根據需要修改一下,上傳到伺服器上,load一下即可完成自訂菜單操作

 

上述菜單的實際螢幕效果如下:

這是俺的易信公眾號的菜單效果。

由於俺的公眾號不是服務號、而是訂閱號,沒有自訂菜單功能,俺只能在易信中完成這個菜單了。

 

可以在易信中掃描以下二維碼,加一下易信公眾號“智能科技”,實際看看菜單效果

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.