自动回复图片、文本、图文

一:回复文本消息

<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[fromUser] ]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> <Content>< ![CDATA[你好] ]></Content> </xml>

参数是否必须描述
ToUserName接收方帐号(收到的OpenID)
FromUserName开发者微信号
CreateTime消息创建时间 (整型)
MsgTypetext
Content

回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)

代码如下:
public function addkeyword(){
if (IS_GET) {
$this->display();
}else{
$content = I('post.content');
$keyword = I('post.keyword');
$model = M('mp_reply_text');
$data['content'] = $content;
$reply_id = $model->add($data);
if (isset($reply_id)) {
$mp = getCurrentMp();
$data['mp_id'] = $mp['id'];
$data['type'] = 'text';
$data['keyword'] = $keyword;
$data['reply_id'] = $reply_id;
M('mp_rule')->add($data);
$this->ajaxReturn(array('msg'=>'添加成功'));

}
}

二:回复图片消息

<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[image] ]></MsgType><Image><MediaId>< ![CDATA[media_id] ]></MediaId></Image></xml>
参数是否必须说明
ToUserName接收方帐号(收到的OpenID)
FromUserName开发者微信号
CreateTime消息创建时间 (整型)
MsgTypeimage
MediaId通过素材管理中的接口上传多媒体文件,得到的id。
代码如下:
public function replyimage(){
if (IS_GET) {
$this->display();
}else{ 
$keyword = I('post.keyword');
$media_id = I('post.media_id');
$url = I('post.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);
$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['media_id'] = $media_id;
$data['url'] = $url;
$reply_id = M('mp_reply_image')->add($data);


$mp = $this->mp;
$arr['mp_id'] = $mp['id'];
$arr['type'] = 'image';
$arr['keyword'] = $keyword;
$arr['reply_id'] = $reply_id;
$ret = M('mp_rule')->add($arr);
if ($ret) {
$this->ajaxReturn(array('status'=>1,'msg'=>'添加成功','url'=>U('autoreply/keywordsimage')));
}else{
$this->ajaxReturn(array('status'=>1,'msg'=>'添加失败'));
}
}


}

三:回复图文消息

<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[news] ]></MsgType><ArticleCount>2</ArticleCount><Articles><item><Title>< ![CDATA[title1] ]></Title> <Description>< ![CDATA[description1] ]></Description><PicUrl>< ![CDATA[picurl] ]></PicUrl><Url>< ![CDATA[url] ]></Url></item><item><Title>< ![CDATA[title] ]></Title><Description>< ![CDATA[description] ]></Description><PicUrl>< ![CDATA[picurl] ]></PicUrl><Url>< ![CDATA[url] ]></Url></item></Articles></xml>
参数是否必须说明
ToUserName接收方帐号(收到的OpenID)
FromUserName开发者微信号
CreateTime消息创建时间 (整型)
MsgTypenews
ArticleCount图文消息个数,限制为8条以内
Articles多条图文消息信息,默认第一个item为大图,注意,如果图文数超过8,则将会无响应
Title图文消息标题
Description图文消息描述
PicUrl图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200
Url点击图文消息跳转链接
代码如下:
 public function replynews(){
    // $this->display();
    if (IS_GET) {
$this->display();
}else{
   $title =I('post.title');
$keyword =I('post.keyword');
$description=I('post.content');
$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;
$picurl=$ret['url'];
$url =I('post.content_source_url');


$data['title']=$title;
$data['description']=$description;
$data['picurl']=$picurl;
$data['url']=$url;
$reply_id=M('mp_reply_news')->add($data);


$mp=$this->mp;
$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('autoreply/keywordsnews')));
}else{
$this->ajaxReturn(array('status'=>1,'msg'=>'添加失败'));
}
 }
    }



注意:

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

微信服务器在将用户的消息发给公众号的开发者服务器地址(开发者中心处配置)后,微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。

如果开发者希望增强安全性,可以在开发者中心处开启消息加密,这样,用户发给公众号的消息以及公众号被动回复用户消息都会继续加密(但),详见被动回复消息加解密说明

假如服务器无法保证在五秒内处理并回复,必须做出下述回复,这样微信服务器才不会对此作任何处理,并且不会发起重试(这种情况下,可以使用客服消息接口进行异步回复),否则,将出现严重的错误提示。详见下面说明:

1、直接回复success(推荐方式) 2、直接回复空串(指字节长度为0的空字符串,而不是XML结构体中content字段的内容为空)

一旦遇到以下情况,微信都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”:

1、开发者在5秒内未回复任何内容 2、开发者回复了异常数据,比如JSON数据等

另外,请注意,回复图片(不支持gif动图)等多媒体消息时需要预先通过素材管理接口上传临时素材到微信服务器,可以使用素材管理中的临时素材,也可以使用永久素材。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值