当前位置: 代码迷 >> Android >> 微信大众号-开发者-自定义菜单-CLICK事件处理
  详细解决方案

微信大众号-开发者-自定义菜单-CLICK事件处理

热度:587   发布时间:2016-04-28 00:58:31.0
微信公众号-开发者-自定义菜单-CLICK事件处理

  想点击菜单,推送消息。功能很简单,坑了我一天时间。在此笔记。

菜单代码:

{     "button":[     {              "type":"click",          "name":"今日歌曲",          "key":"V1001_TODAY_MUSIC"      },      {           "name":"菜单",           "sub_button":[           {                   "type":"view",               "name":"搜索",               "url":"http://www.soso.com/"            },            {               "type":"view",               "name":"视频",               "url":"http://v.qq.com/"            },            {               "type":"click",               "name":"赞一下我们",               "key":"V1001_GOOD"            }]       }] }

 

菜单生成好了以后,如何处理“赞一下我们”相应事件呢?

引用方倍工作室的代码修改如下:

<?php/*    方倍工作室    CopyRight 2014 All Rights Reserved*/define("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();if (!isset($_GET['echostr'])) {    $wechatObj->responseMsg();}else{    $wechatObj->valid();}class wechatCallbackapiTest{    //验证签名    public function valid()    {        $echoStr = $_GET["echostr"];        $signature = $_GET["signature"];        $timestamp = $_GET["timestamp"];        $nonce = $_GET["nonce"];        $token = TOKEN;        $tmpArr = array($token, $timestamp, $nonce);        sort($tmpArr);        $tmpStr = implode($tmpArr);        $tmpStr = sha1($tmpStr);        if($tmpStr == $signature){            echo $echoStr;            exit;        }        $siteURL='http://210.14.148.180/kdjy/';    }    public function responseMsg()    {        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];        if (!empty($postStr)){            $this->logger("R ".$postStr);            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);            $RX_TYPE = trim($postObj->MsgType);            $result = "";            switch ($RX_TYPE)            {                case "event":                    $result = $this->receiveEvent($postObj);                    break;                case "text":                    $result = $this->receiveText($postObj);                    break;            }            $this->logger("T ".$result);            echo $result;        }else {            echo "";            exit;        }    }    private function receiveEvent($object)    {        switch ($object->Event)        {            case "subscribe":                $content = "欢迎关注方倍工作室 ";            //------------------- 赞一下 start ------------------------            case "CLICK":   //这里是大写‘CLICK’                $content = $object->EventKey; // 获取key                if($content=='V1001_GOOD'){                                        $content = '谢谢支持!!!';                }            //------------------- 赞一下 end ------------------------                break;        }        $result = $this->transmitText($object, $content);        return $result;    }    private function receiveText($object)    {        $keyword = trim($object->Content);                    $url = "http://apix.sinaapp.com/weather/?appkey=".$object->ToUserName."&city=".urlencode($keyword);             $output = file_get_contents($url);            $content = json_decode($output, true);            $result = $this->transmitNews($object, $content);                return $result;    }    private function transmitText($object, $content)    {        if (!isset($content) || empty($content)){            return "";        }        $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>";        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);        return $result;    }    private function transmitNews($object, $newsArray)    {        if(!is_array($newsArray)){            return "";        }        $itemTpl = "    <item>        <Title><![CDATA[%s]]></Title>        <Description><![CDATA[%s]]></Description>        <PicUrl><![CDATA[%s]]></PicUrl>        <Url><![CDATA[%s]]></Url>    </item>";        $item_str = "";        foreach ($newsArray as $item){            $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);        }        $newsTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>%s</ArticleCount><Articles>$item_str</Articles></xml>";        $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));        return $result;    }        private function logger($log_content)    {          }}?>
View Code

加入如下代码,注意CLICK是大写。

微信api:http://mp.weixin.qq.com/wiki/2/5baf56ce4947d35003b86a9805634b1e.html#.E7.82.B9.E5.87.BB.E8.8F.9C.E5.8D.95.E6.8B.89.E5.8F.96.E6.B6.88.E6.81.AF.E6.97.B6.E7.9A.84.E4.BA.8B.E4.BB.B6.E6.8E.A8.E9.80.81

PS:为找这个key,找了半天,我是小学生,官方不能写个demo吗?

 

  相关解决方案