微信公众号二次开发实现自动回复文字,图片,图文功能

微信公众号二次开发实现自动回复文字,图片,图文功能

自动回复文字或图片:

      表单里需要有关键字和内容。但就这两个字段也需要在两个数据表里分别显示,因为要提前准备字段内容里有可能是图片,图文等等类型。所以数据库里需要建一个回复类型表:例如mp_reply_text,mp_reply_image,mp_reply_news....,另一个建立公众号响应规则表:例如mp_reply_rule。这两个表之间的关联是:(如果主键是自动增长型 成功后返回值就是最新插入的值(返回的是主键值) 。例如mp_reply_text里添加文字内容成功之后返回的主键值是reply_id。则在mp_reply_rule表里也建一个reply_id,让mp_reply_text表里的reply_id赋值给mp_reply_rule表里的reply_id。就此联系起来。

      具体代码如下:

    $content = I('post.content');
    $arr['content'] = $content;
    $replyid = M('mp_reply_text')->add($arr);
    if ($replyid) {
         $mp = getCurrentMp();
         $arr['mp_id'] = $mp['id'];
         $arr['type'] = 'text';
         $arr['keyword'] = I('keyword');
         $arr['reply_id'] = $replyid;
         $result =M('mp_rule')->add($arr);
    }

自动回复图文:

      在实现自动回复图文功能中,让我最晕的是获取图片在微信里的url而不是本地的url,所以对我来说这个需要注意。但也不是大问题。跟实现自动回复图文和文字的逻辑差不多。不同的就是自动回复图片需要获得的是微信中的media_id,而自动回复图文需要获得的是微信中图片的url。(还得调用use LaneWeChat\Core\Curl才可以获得微信公众平台里的media_id和url)。

 最后如果想要在公众号平台测试是否成功,还需要引用LaneWeChat文件夹里的WechatRequest类中的操作方法。

public static function text(&$request){
        // $content = '收到文本消息';
        // return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
        //获取那个公众号发过来的请求
        $mpid=$_GET['id'];
        $content=$request['content'];
        $where['mp_id']=$mpid;
        $where['keyword']=$content;
        $data=M('mp_rule')->where($where)->find();
        if($data){
            //发送请求中有这个关键字
            $reply_id=$data['reply_id'];
            $type=$data['type'];//回复类型

            //判断回复类型
            switch($type){
                case 'text':
                    $reply=M('mp_reply_text')->find($reply_id);
                    if($reply){
                        $reply_text=$reply['content'];
                    }else{
                        $reply_text='出错啦';
                    }
                    return ResponsePassive::text($request['fromusername'],$request['tousername'],$reply_text);
            
                    break;
                case 'image':
                    $reply = M('mp_reply_image')->find($reply_id);
                    if($reply){
                        $media_id = $reply['media_id'];
                        return ResponsePassive::image($request['fromusername'],$request['tousername'],$media_id);
                    }else{
                        $reply_text = "出错啦";
                        return ResponsePassive::text($request['fromusername'], $request['tousername'], $reply_text);
                    }
                    
                    break;
                case 'news':
                    $reply=M('mp_reply_news')->find($reply_id);
                    if($reply){
                        $item[]=ResponsePassive::newsItem($reply['title'],$reply['description'],$reply['picurl'],$reply['url']);
                         return ResponsePassive::news($request['fromusername'],$request['tousername'],$item);
                    }else{
                        $reply_text='出错啦';
                        return ResponsePassive::text($request['fromusername'],$request['tousername'],$reply_text);
                    }
                   break;

                default:
                
                    return 'success';
                    break;
              }
          }else{
            return 'success';
        }
    }

你可能感兴趣的:(微信开发)