• 微信回复文本消息和图文消息


    微信自动回复,我的理解,大体可以分为:

    1、关注平台后自动回复。

    2、用户推送了文本,我们回复消息。包括文本消息,单图文消息和多图文消息等等。

    3、click事件,响应事件后回复消息。

    我们先写一个判断类型的函数:

    public function responseMsg()
        {
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
            if (!empty($postStr)){
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $RX_TYPE = trim($postObj->MsgType);
    
                //用户发送的消息类型判断
                switch ($RX_TYPE)
                {
                    case "text":
                        $result = $this->receiveText($postObj);
                        break;
                    case "image":
                        $result = $this->receiveImage($postObj);
                        break;
                    case "event":
                        $result = $this->receiveEvent($postObj);
                        break;
                    default:
                        $result = "unknow msg type: ".$RX_TYPE;
                        break;
                }
                echo $result;
            }else {
                echo "";
                exit;
            }
        }

    一、先谈谈关注微信公众平台后自动回复消息吧。

    首先,他们得关注我们的平台,方式我们都不用管了,就是关注微信公众平台后,发出一段消息。

    关注平台,我们要记得一个关键字是:“subscribe”,这个词可以判断关注与否。先写一个回复文本消息的方法,如下:

    /*
     * 回复文本消息
     */
     private function transmitText($object, $content){
     $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 receiveEvent($object){
        $contentStr = "";
        switch ($object->Event)
        {
            case "subscribe":
                 $contentStr = "欢迎关注***平台"."
    "."
    是换行符";
                 break;
            default:
                break;
       }
        $result = $this->transmitText($object, $contentStr);
        return $result;
    }

    关注平台后,即可回复一个文本消息。消息内容是:

    欢迎关注***平台
    是换行符
    二、用户推送了文本,我们回复消息。
    同样,先给他写好各种方法,其中有如何回复单文本消息,回复图片消息 ,回复图文消息。
    /*
     * 回复文本消息
    */
    private function transmitText($object, $content){
     $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 transmitImage($object, $imageArray){
    $itemTpl = "<Image>
        <MediaId><![CDATA[%s]]></MediaId>
      </Image>";
      $item_str = sprintf($itemTpl, $imageArray['MediaId']);
      $textTpl = "<xml>
      <ToUserName><![CDATA[%s]]></ToUserName>
      <FromUserName><![CDATA[%s]]></FromUserName>
      <CreateTime>%s</CreateTime>
      <MsgType><![CDATA[image]]></MsgType>
      $item_str
      </xml>";
      
    $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } /* * 回复图文消息 */ private function transmitNews($object, $arr_item){   if(!is_array($arr_item)) return;   $itemTpl = "<item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item>"; $item_str = ""; foreach ($arr_item 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($arr_item));     return $result;
    }

    然后给回复

      /*
         *回复文本消息
         *编码时间:2015-09-21
        */
        private function receiveText($object)
        {
            $keyword = trim($object->Content);
    
            if($keyword == "公司"){
                //回复文本消息
                //回复单图文消息
                $content = array();
                $content[] = array("Title"=>"公司介绍", 
                                    "Description"=>"公司各种东西。", 
                                    "PicUrl"=>"图片地址", 
                                    "Url" =>"链接;
                $result = $this->transmitNews($object, $content);
            }
            else if($keyword == "地址"||$keyword=="电话"||$keyword =="联系方式"||$keyword == "邮箱"){
                //回复多图文消息
                $content = array();
                $content[] = array("Title"=>"公司", "Description"=>"", "PicUrl"=>"图片地址", "Url" =>"链接地址");
                $content[] = array("Title"=>"公司地址", "Description"=>"","PicUrl"=>"",  "Url" =>"");
                $content[] = array("Title"=>"公司联系方式:", "Description"=>"","PicUrl"=>"",  "Url" =>"");
                $content[] = array("Title"=>"公司邮箱:", "Description"=>"", "PicUrl"=>"","Url" =>"");
                $result = $this->transmitNews($object, $content);
               
            }
           else if(!empty($keyword)){
                 //回复文本消息
                //回复单图文消息
                $content = array();
                $content[] = array("Title"=>"hello", 
                                    "Description"=>"hello 你好等等"
                                    );
                $result = $this->transmitNews($object, $content);
            }
          
            
            return $result;
        }

    三、click事件回复消息

    click事件,首先要提到写个json,来做一系列的按钮。如下:

    {
         "button":[     
          {
               "type":"click",
                "name":"click事件",
                "key":"text_click"
          }
          ]
     }

    点击click事件,执行如下代码:

    private function receiveEvent($object){
        $contentStr = "";
        switch ($object->Event){
          
    case "CLICK": switch ($object->EventKey){ case "text_click":
             $contentStr = "click事件响应!"; break;
        }
    break;
        default: break; }
        $result = $this->transmitText($object, $contentStr);
        return $result; }

    就OK了。

    附源码:http://pan.baidu.com/s/1i30cOnz

  • 相关阅读:
    request相关
    C#请求接口
    qml_base
    web
    entry
    listbox
    Canvas
    pickle
    c#枚举
    数据结构——树
  • 原文地址:https://www.cnblogs.com/invban/p/4914659.html
Copyright © 2020-2023  润新知