码迷,mamicode.com
首页 > 微信 > 详细

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

时间:2015-10-27 17:34:15      阅读:520      评论:0      收藏:0      [点我收藏+]

标签:

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

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 = "欢迎关注***平台"."\n"."\n是换行符";
             break;
        default:
            break;
   }
    $result = $this->transmitText($object, $contentStr);
    return $result;
}

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

欢迎关注***平台\n是换行符
二、用户推送了文本,我们回复消息。
同样,先给他写好各种方法,其中有如何回复单文本消息,回复图片消息 ,回复图文消息。
/*
 * 回复文本消息
*/
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

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

标签:

原文地址:http://www.cnblogs.com/invban/p/4914659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!