关注回复和自定义回复(tp3.2)

注意:无论关注还是关键词回复 触发的都是咱们最开始填写的那个服务器地址
流程:
	1.当我们进行关注或者在公众号中发送消息的时候,微信服务器填写的地址都会接收到,并且把信息传送到我们填写的服务器地址
	2.我们在类中写一个方法用于接收他们的信息
	3.对接收的信息进行处理查看是那种类型情况是关注还是事件
	4.对不同的事件对数据库进行查找并返回给微信端即可,微信端会根据你的返回和携带的xml等数据返回给用户不同回应
代码如下:
	/*下面的代码不仅试用于关注和自定义关键字回复也试用于菜单的*/
	//  直接通过连接调用相应的方法即可
	 public function handleEvent($object)  
    {  
        $contentStr = "";  
        switch ($object->Event)  
        {  
            case "subscribe":  
            // 这个是关注事件m先触发客服接口,然后在输出自动回复的内容  
                //$to = $this->actoken($object->FromUserName); 
                $wxid = $_GET['wxid']; 
                $res = M('replayset')->where('wxid = '.$wxid .'  and replaytypeid = 1')->find();
                if(!empty($res['imgtext']) && $res['imgtext'] != 0){
                    $getData = M('imgtext')->field("title,description,picurl,url")->where('mark ="'.$res['imgtext'].'"')->select();
                    $articleCount = count($getData);// 个数超过十个不允许
                    $resultStr = $this->responseImgtext($object,$articleCount,$getData);  
                    return $resultStr;  
                    exit();
                }else{
                    $contentStr = /*$object->FromUserName.*/$res['text'];  
                }
                break;  
            case "CLICK":
                $EventKey = $object->EventKey;
                $sql = 'wxid ='.$_GET['wxid'].'  and keyMark ="'. $EventKey .'"  and type = 1';
                $res = M('menu')->where($sql)->find();
      
                if(!empty($res['imgtextMark']) && $res['imgtextMark'] != 0){
                    // 去查此时的内容
                    // 1526361251_NgrGcqU9
                    $getData = M('imgtext')->field("title,description,picurl,url")->where('mark ="'.$res['imgtextMark'].'"')->select();
                
                    $articleCount = count($getData);// 个数超过十个不允许
                    $resultStr = $this->responseImgtext($object,$articleCount,$getData);  
                    return $resultStr;  
                    exit();
                }else{
                    $contentStr = $res['menudata'];
                }
               
                break;
            default :  
                // 再次进入公众号的时候会触发这条信息
               // $contentStr = "Unknow Event: ".$object->Event;  
                exit;
                break;  
        }  
        $resultStr = $this->responseText($object, $contentStr);  
        return $resultStr;  
    }  

	// 自定义回复设置
    public function replayAuto(){
        $postStr = file_get_contents('php://input');// php7 用这个方法否则获取不到
        if (!empty($postStr)){  
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);  
                $RX_TYPE = trim($postObj->MsgType);  
                switch($RX_TYPE)  
                {  
                    case "text":  
                        $resultStr = $this->handleText($postObj);  
                        break;  
                    case "event":  
                        $resultStr = $this->handleEvent($postObj);  
                        break;  
                    default:  
                        $resultStr = "Unknow msg type: ".$RX_TYPE;  
                        break;  
                }  
                echo $resultStr;  
        }else {  
            echo "";  
        }  

    }
     public function handleText($postObj)  
    {  
        $fromUsername = $postObj->FromUserName;  
        $toUsername = $postObj->ToUserName;  
        $keyword = trim($postObj->Content);  
        $time = time();  
        $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>";               
        if(!empty( $keyword ))  
        {  
            $msgType = "text";  
            // 说明有客户输入
            // 则直接去查找此时的后台配置信息进行处理
            $data = M('replayset')->where('wxid='.$_GET['wxid'].'   and  replaytypeid =2' )->select();
            $contentStr = "我们的联系电话:18201383130";

            // 默认是文本,这个位置上进行判断是否是图文回复如果是图文回复则优先图文
            foreach($data as $key=>$value){
                if($value['keyword'] == $keyword){
                    // 图文
                    if(!empty($value['imgtext'])){
                        $getData = M('imgtext')->field("title,description,picurl,url")->where('mark ="'.$value['imgtext'].'"')->select();
                        $articleCount = count($getData);// 个数超过十个不允许
                        $resultStr = $this->responseImgtext($postObj,$articleCount,$getData); 
                        echo $resultStr;  
                        exit(); 
                    }
                    // 文本
                    else{
                        $contentStr = $value['text'];
                    }
                   
                    break;
                }
            }
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
            echo $resultStr;  
        }else{  
            echo "Input something...";  
        }  
    }  
     // 图文信息回复
    public function responseImgtext($object,$articleCount,$content, $flag=0){
        $ToUserName = $object->FromUserName;
        $fromUsername = $object->ToUserName;
        $imgText =  "<xml> 
                        <ToUserName><![CDATA[".$ToUserName."]]></ToUserName>  
                        <FromUserName><![CDATA[".$fromUsername."]]></FromUserName>  
                        <CreateTime>".time()."</CreateTime>  
                        <MsgType><![CDATA[news]]></MsgType> 
                        <ArticleCount><![CDATA[".$articleCount."]]></ArticleCount>
                        <Articles>";
                    foreach($content as $key=>$vaule){
                        $imgText .= "
                            <item>
                                <Title><![CDATA[".$vaule['title']."]]></Title> 
                                <Description><![CDATA[".$vaule['description']."]]></Description>
                                <PicUrl><![CDATA[".$vaule['picurl']."]]></PicUrl>
                                <Url><![CDATA[".$vaule['url']."]]></Url>
                            </item>
                        ";
                    }
                        
        $imgText .=     "</Articles>
                    </xml>"; 
        $resultStr =  $imgText;
         //$resultStr = sprintf($imgText, $object->FromUserName, $object->ToUserName, time(), 1,'this is a demo','gao is demo','https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1526019694278&di=2688fd1d8e0685be4f30d729589b2f7a&imgtype=0&src=http%3A%2F%2Fimg.bimg.126.net%2Fphoto%2FVANc10nr7f7GxevHxi3JNg%3D%3D%2F5788251421878021509.jpg','www.baidu.com',$flag);  
        return $resultStr;  
    }

后台设置:

客户端效果:



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gjanuary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值