微信开发---被动回复用户消息

当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。

目录

1 回复文本消息

// 上传回复文本信息到数据库	
public function addtext(){
		$keyword = I('post.keyword');
		$text = I('post.content');
		$replytext = array();

		if (!empty($keyword) && !empty($text)){
			$mp = getCurrentMp();
			$mp_id = $mp['id'];			
			$data2['mp_id'] = $mp_id;
			$data1['text'] = $text;
			$data2['type'] = 'text';
			$data2['keyword'] = $keyword;
			M('mp_reply_text')->add($data1);
			$map['text']=$text;
			$rt = M('mp_reply_text')->where($map)->find();
			$data2['reply_id'] = $rt['reply_id'];
			M('mp_rule')->add($data2);
			$this->ajaxReturn(array('msg'=>'上传成功!','url'=>'replytext'));
		}else{
			$this->ajaxReturn(array('msg'=>$ret));

		}

	}

2 回复图片消息

	// 关键字回复图片
	public function addimage(){
		$mp = $this->mp;
		$url = I('post.url');
		$file = realpath('.' . $url);
		include APP_PATH . 'LaneWeChat/lanewechat.php';
		// 获取access_token
		$access_token = getAccess_token();
		// 上传永久url
		$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);
		// print_r($arr);
		// $this->ajaxReturn($ret);
		// print_r($ret);
		$reply_id = M('mp_reply_image')->add($ret);
		$arr = array();		
		$arr['type'] = 'image';
		$arr['keyword'] = I('post.keyword');
		$arr['mp_id'] = $mp['id'];
		$arr['reply_id'] = $reply_id;
		$result = M('mp_rule')->add($arr);
		if($result){
			$this->ajaxReturn(array('msg'=>"上传成功"));
		}else{
			$this->ajaxReturn(array('msg'=>$result));
		}
	}

3 回复图文消息

	// 回复图文信息
	public function addNews(){
		$mp = $this->mp;
		$url = I('post.url');
		$file = realpath('.' . $url);
		include APP_PATH . 'LaneWeChat/lanewechat.php';
		// 获取access_token
		$access_token = getAccess_token();
		// 上传永久
		$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);
		// print_r($ret);
		// exit;
		$arr['title'] = I('post.title');
		$arr['description'] = I('post.content');
		$arr['picurl'] = $ret['url'];
		$arr['url'] = I('post.content_source_url');
		// print_r($arr);
		// exit;
		$reply_id = M('mp_reply_news')->add($arr);
		$arr1['mp_id'] = $mp['id'];
		$arr1['reply_id'] = $reply_id;
		$arr1['keyword'] = I('post.keyword');
		$arr1['type'] = "news";
		$result = M('mp_rule')->add($arr1);
		if($result){
			$this->ajaxReturn(array('msg'=>'提交成功!'));
		}else{
			$this->ajaxReturn(array('msg'=>$result));
		}
	}
	// 上传图片
	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{// 上传成功
			// $this->success('上传成功!');
			$file = '/Uploads/' . $info['savepath'] . $info['savename'];
			$this->ajaxReturn(array('code'=>0,'msg'=>"上传成功",'url'=>$file));
		}
	}
以上是被动回复控制器的方法,除此之外还要判断下被动信息是文本、图片还是图文,做出判断之后再回复相应信息。
 //判断   
 public static function text(&$request){
        // $content = '收到文本消息';
        // return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
        // 获取发送请求的公众号
        $mpid = $_GET['id'];
        $content = $request['content'];
        $where['mpid'] = $mpid;
        $where['keyword'] = $content;
        // 查询发送过来的关键字的
        $data = M('mp_rule')->where($where)->find();
        if($data){
            $reply_id = $data['reply_id'];
            $type = $data['type'];
            if($type == "text"){
                $reply = M('mp_reply_text')->find($reply_id);
                $reply_text = $reply['content'];
                return ResponsePassive::text($request['fromusername'], $request['tousername'], $reply_text);
            }else if($type == "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);
                }
            }else if($type == "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);
                }
            }
        }else{
            return "success";
        }
    }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值