微信公眾平台自定義菜單響應事件 ------ click類型 (PHP版)


在開發微信公眾號時,有自定義菜單模塊的開發。

通過官方微信公眾號開發文檔:https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html

我們可以了解到定義菜單接口有多種類型按鈕,如下:

1、click:點擊推事件用戶點擊click類型按鈕后,微信服務器會通過消息接口推送消息類型為event的結構給開發者(參考消息接口指南),並且帶上按鈕中開發者填寫的key值,開發者可以通過自定義的key值與用戶進行交互;
2、view:跳轉URL用戶點擊view類型按鈕后,微信客戶端將會打開開發者在按鈕中填寫的網頁URL,可與網頁授權獲取用戶基本信息接口結合,獲得用戶基本信息。
3、scancode_push:掃碼推事件用戶點擊按鈕后,微信客戶端將調起掃一掃工具,完成掃碼操作后顯示掃描結果(如果是URL,將進入URL),且會將掃碼的結果傳給開發者,開發者可以下發消息。
4、scancode_waitmsg:掃碼推事件且彈出“消息接收中”提示框用戶點擊按鈕后,微信客戶端將調起掃一掃工具,完成掃碼操作后,將掃碼的結果傳給開發者,同時收起掃一掃工具,然后彈出“消息接收中”提示框,隨后可能會收到開發者下發的消息。
5、pic_sysphoto:彈出系統拍照發圖用戶點擊按鈕后,微信客戶端將調起系統相機,完成拍照操作后,會將拍攝的相片發送給開發者,並推送事件給開發者,同時收起系統相機,隨后可能會收到開發者下發的消息。
6、pic_photo_or_album:彈出拍照或者相冊發圖用戶點擊按鈕后,微信客戶端將彈出選擇器供用戶選擇“拍照”或者“從手機相冊選擇”。用戶選擇后即走其他兩種流程。
7、pic_weixin:彈出微信相冊發圖器用戶點擊按鈕后,微信客戶端將調起微信相冊,完成選擇操作后,將選擇的相片發送給開發者的服務器,並推送事件給開發者,同時收起相冊,隨后可能會收到開發者下發的消息。
8、location_select:彈出地理位置選擇器用戶點擊按鈕后,微信客戶端將調起地理位置選擇工具,完成選擇操作后,將選擇的地理位置發送給開發者的服務器,同時收起位置選擇工具,隨后可能會收到開發者下發的消息。
9、media_id:下發消息(除文本消息)用戶點擊media_id類型按鈕后,微信服務器會將開發者填寫的永久素材id對應的素材下發給用戶,永久素材類型可以是圖片、音頻、視頻、圖文消息。請注意:永久素材id必須是在“素材管理/新增永久素材”接口上傳后獲得的合法id。
10、view_limited:跳轉圖文消息URL用戶點擊view_limited類型按鈕后,微信客戶端將打開開發者在按鈕中填寫的永久素材id對應的圖文消息URL,永久素材類型只支持圖文消息。請注意:永久素材id必須是在“素材管理/新增永久素材”接口上傳后獲得的合法id。
11、miniprogram:跳轉到小程序頁面。

在開發文檔中有相關的前端創建菜單請示實例,但是缺少這些自定義菜單響應事件的例子,在百度上搜索到一段不錯的代碼,有利於我們理解和開發自定義菜單響應事件。可以結合自己公眾號的消息回復進行理解去開發。這個例子主要對click類型進行說明。

/**
 * 相關回復
 */
public function responseMsg()
{
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//返回回復數據
    if (!empty($postStr))
    {
        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        $fromUsername = $postObj->FromUserName;//發送消息方ID
        $toUsername = $postObj->ToUserName;//接收消息方ID
        $keyword = trim($postObj->Content);//用戶發送的消息
        $times = time();//發送時間
        $MsgType = $postObj->MsgType;//消息類型
        $msgType = "text";

        if($MsgType=='event')
        {
            $MsgEvent = $postObj->Event;//獲取事件類型
            if ($MsgEvent=='subscribe')
            {
                //訂閱事件
            }
            elseif ($MsgEvent=='CLICK')
            {
                //點擊事件
                $EventKey = $postObj->EventKey;//菜單的自定義的key值,可以根據此值判斷用戶點擊了什么內容,從而推送不同信息
                switch($EventKey)
                {
                    case "V1001_TODAY_MUSIC" :
                        //要返回相關內容
                        break;
                    case "V1001_TODAY_SINGER" :
                        //要返回相關內容
                        break;
                    case "V1001_HELLO_WORLD" :
                        //要返回相關內容
                        break;
                    case "V1001_GOOD" :
                        //要返回相關內容
                        break;
                }
                 
            }
        }
        $textTpl = "<xml>
       <ToUserName><![CDATA[%s]]></ToUserName>
       <FromUserName><![CDATA[%s]]></FromUserName>
       <CreateTime>%s</CreateTime>
       <MsgType><![CDATA[%s]]></MsgType>
       <Content><![CDATA[%s]]></Content>
       <FuncFlag>0</FuncFlag>
       </xml>";
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $times, "text", "這里是要說的內容");

    }
    else
    {
        echo '沒有任何消息傳遞';
    }
}

 









 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM