zoukankan      html  css  js  c++  java
  • 微信公众号-开发者-自定义菜单-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吗?

  • 相关阅读:
    第十三周总结
    第十二周作业
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周&java实验报告四
    课程总结
    第二周课程总结
  • 原文地址:https://www.cnblogs.com/cssfirefly/p/4503663.html
Copyright © 2011-2022 走看看