微信/易信公共平台开发(二):自定义菜单的PHP实现(提供源码)
微信把公眾號分成訂閱號和服務號兩種,服務號可以自定義菜單, 菜單大大方便了用戶操作。
比如:公眾服務號 "中國南方航空" 的自定義菜單如下圖:
?
點菜單就可以直接進入操作了,方便!
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為 https://api.yixin.im/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
?
3,獲得有效的AccessToken后,就可以進行自定義菜單創建、刪除操作了。
3.1 創建菜單
???? 用POST方式向這個URL提交菜單定義數據, URL:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
其中:ACCESS_TOKEN 用實際參數值代入
??? 菜單定義數據是一個JSON格式的文本 (開發文檔講得不是那么清晰,讓我理解了好一會),做為POST方式的提交數據
返回結果是一個JSON格式的文本,其中有操作成功碼和出錯信息
?
對于易信平臺,創建菜單的URL為 https://api.yixin.im/cgi-bin/menu/create?access_token=ACCESS_TOKEN
?
3.2 刪除菜單
????? 用GET方式讀取URL https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
其中:ACCESS_TOKEN 用實際參數值代入
返回結果是一個JSON格式的文本,其中有AccessToken. (JSON是一種數據交換格式,不了解的同學要從頭學一下才能明白)
??????AccessToken不是永久有效的,返回結果中還有一個失效時間,即過了XX秒后(一般是一天左右), AccessToken就會失效。
?
????? 對于易信平臺,上述URL為 https://api.yixin.im/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
?
上述過程需要開發者非常了解 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一下即可完成自定義菜單操作
?
上述菜單的實際屏幕效果如下:
這是俺的易信公眾號的菜單效果。
由于俺的微信公眾號不是服務號、而是訂閱號,沒有自定義菜單功能,俺只能在易信中完成這個菜單了。
?
可以在易信中掃描以下二維碼,加一下易信公眾號“智能科技”,實際看看菜單效果
?
?
?
總結
以上是生活随笔為你收集整理的微信/易信公共平台开发(二):自定义菜单的PHP实现(提供源码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义相机Camera,相机/视频实时滤
- 下一篇: 初中计算机学业水平考试知识点,初中信息技