微信公众号自动回复

1.回复文本
    (1)首先在数据库中创建一个text表以及rule表,并添加需要的字段,设置字段类型。
    (2)再建一个自动回复的控制器,添加回复文本的方法,在前台页面上js代码中跳转到回复文本的方法上。以下为代码:
 public function replyText(){
       	$data['content']=I('post.content');
       	$result=M('text')->add($data);

       	$keyword=I('post.keyword');
       	
        if (isset($result) ){
        	    $mp=$this->mp;
        	    $mp_id=$mp['id'];
    			$arr['reply_id']=$result;
    			$arr['keyword']=$keyword;
    			$arr['mp_id']=$mp_id;
    			$arr['type']='text';
    			if ($mp['is_use']==1) {
    				$arr['status']=1;
    			}else{
    				$arr['status']=0;
    			}
	    		M('rule')->add($arr);
	    		$this->ajaxReturn(array('msg'=>'添加成功'));
    	}else{
    		$this->ajaxReturn(array('msg'=>'添加失败'));
    	}
       }
首先在方法中先把前台输入的关键字以及内容添加到数据表中,再在wechatrequest.lib.php中的text方法中添加跟公众号连接的代码。以下为代码
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('rule')->where($where)->find();
        if ($data) {
          // 发送消息中有这个关键字
            $reply_id = $data['reply_id'];
            $type = $data['type'];
            if ($type == 'text') {
                $reply = M('text')->find($reply_id);
                $reply_text = $reply['content'];
                //获取哪个公众号发过来的请求
                return ResponsePassive::text($request['fromusername'],$request['tousername'],$reply_text);
            }else if ($type == 'image') {
                $reply =  M('image')->find($reply_id);
                $media_id=$reply['media_id'];
                return ResponsePassive::image($request['fromusername'],$request['tousername'],$media_id);
            }else if($type=='news'){
                $reply =  M('news')->find($reply_id);
                if($reply){
                  $item[]=ResponsePassive::newsItem($reply['title'],$reply['descrpition'],$reply['url'],$reply['picurl']);
                  return ResponsePassive::news($request['fromusername'],$request['tousername'],$item);
                }else{
                    $reply_text="出错啦";
                }
            }else{
                return 'success';
            }
        }
    }
2.回复图片
    (1)首先在数据库中创建一个image表,并添加需要的字段,设置字段类型。
    (2)在控制器中添加回复图片的方法,在前台页面上js代码中跳转到回复图片的方法上。
    (3)添加一个上传图片的方法使图片可以在页面上传的时候显示以及能够正常上传。以下为代码
public function upload(){
      $upload = new \Think\Upload();// 实例化上传类
      $upload->maxSize = 3145728 ;// 设置附件上传大小
      $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
      $upload->rootPath = './Uploads/'; // 设置附件上传根目录
      $upload->savePath = ''; // 设置附件上传(子)目录
      // 上传文件
      $info = $upload->uploadOne($_FILES['file']);
      if(!$info) {// 上传错误提示错误信息
      $this->ajaxReturn(array('code'=>1,'msg'=>$upload->getError()));
      }else{// 上传成功
      $file='/Uploads/'.$info['savepath'].$info['savename'];
      $this->ajaxReturn(array('code'=>0,'msg'=>'上传成功','url'=>$file));
           }
    }
public function replyImage(){
      if (IS_GET) {
       $this->display();
      }else{    
            $url = I('post.url'); //图片路径
            $file = realpath('.' . $url); //相对路径转绝对路径

            $access_token = getAccess_token();
            include APP_PATH .'LaneWeChat/lanewechat.php';

            $url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$access_token&type=image";
            $data['media'] = '@'.$file;
            $ret = Curl::callWebServer($url,$data,'post',true,false);
        // dump($ret['media_id']);
        // exit;
        if(isset($ret['media_id'])){
              $mp=getCurrentMp();
              $data['url']=$url;
              $data['media_id']=$ret['media_id'];
              $res=M('image')->add($data);
    	}else{
    		$this->ajaxReturn(array('msg'=>$ret));
    	}

        $keyword=I('post.keyword');
     if (isset($res) ){
              $mp=$this->mp;
              $mp_id=$mp['id'];
              $arr['reply_id']=$res;
              $arr['keyword']=$keyword;
              $arr['mp_id']=$mp_id;
              $arr['type']='image';
          if ($mp['is_use']==1) {
            $arr['status']=1;
          }else{
            $arr['status']=0;
          }
          M('rule')->add($arr);
          $this->ajaxReturn(array('msg'=>'添加成功'));
      }else{
        $this->ajaxReturn(array('msg'=>$res));
      }
    }
}

这句话是为了得到media_id 因为要把media_id和url插入到image表中,同时也要根据media_id查询它所对应的消息的图片
 
 
 
 
$data['media']='@'.$file;
$ret=Curl::callWebServer($api,$data,'post',true,false);
这行代码返回的$res是一个主键的值。
$res=M('image')->add($data);

猜你喜欢

转载自blog.csdn.net/qq_41860519/article/details/79995493