当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。
自定义回复图文是自定义回复文本,图片,图文中最为复杂的,所以就以图文为例。
//回复文本
public function reply_news(){
$keyword=I('post.keyword');
$media_id=I('post.media_id');
$title=I('post.title');
$url=I('post.url');
$content=I('content');
$content_source_url=I('post.content_source_url');
if(empty($keyword) || empty($url)){
$this->ajaxReturn(array('status'=>0,'msg'=>'必须输入关键字和选择图片'));
exit;
}
//选择本地图片,需上传到公众平台
if (empty($media_id)) {
$accessToken=getAccess_token();
include APP_PATH . 'LaneWeChat/lanewechat.php';
//上传永久图片
$api="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$accessToken&type=image";
$file=realpath('.' . $url);
// $data['media']=Curl::addFile($file);
$data['media']='@'.$file;
$ret=Curl::callWebServer($api,$data,'post',1,0);
//上传成功
if (isset($ret['media_id'])) {
$media_id=$ret['media_id'];
$url=$ret['url'];
}else{
$ret['fail']='本地图片上传公众平台失败';
$this->ajaxReturn(array('status'=>1,'msg'=>$ret));
exit;
}
$data['url']=$content_source_url;
$data['picurl']=$url;
$data['title']=$title;
$data['description']=$content;
$data['url']=$url;
$reply_id=M('mp_reply_news')->add($data);
$mp=getCurrentMp();
$arr['mp_id']=$mp['id'];
$arr['type']='news';
$arr['keyword']=$keyword;
$arr['reply_id']=$reply_id;
$ret=M('mp_rule')->add($arr);
if ($ret) {
$this->ajaxReturn(array('status'=>1,'msg'=>'添加成功','url'=>U('replynews')));
}else{
$this->ajaxReturn(array('status'=>1,'msg'=>'添加失败'));
}
}
}
1.首先需要写回复图文的方法,如上,其实回复图文是回复文本与回复图片的结合,只要会了文本与图片自然也会回复文本的。当然不要忘了写上传代码,如下,这两段代码要放到一个控制器当中
//接受文件上传
public function upload(){
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = './Uploa