学习微信二次开发已经有一段时间了,现在我们学习了微信中的关键词自动回复,学习它的都知道不管回复图片、回复图文、音乐、还有视频。这些都属于媒体,上传到微信服务器后都会生成一个MediaID,相当于每个文件的"身份证"。今天就说下回复图文的,因为回复图片和文本结合起来就是图文。
我们需要准备两个数据表来进行对图文信息的存储,另外一个是对图文中的标题、内容、图片信息的存储。
有了数据表接下来就是把表单的信息存储到数据库中了。_initialize()方法确认哪个公众号在使用中。(特别注意下永久图片接口每天只能运行10次,大家慎用)。
public function _initialize()
{ //_initialize()进行初始化,并对公众号的使用状态进行判断
$mp = getCurrentMp();
if (empty($mp)) {
$this->error('无此公众号',U('mp/index'));
}else{
$this->mp=$mp;
}
}
public function news_addkey()
{
$mp = $this->mp;
$mp_id = $mp['id'];//获取公众号的状态
$url = I('post.url');
$file = realpath('.' . $url);//将本地路径图片改为绝对路径
$title = I('post.title');
$content = I('post.content');
$content_source_url = I('post.content_source_url');//获取表单信息
$access_token = getAccess_token();
include APP_PATH . 'LaneWeChat/lanewechat.php';
$api = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$access_token&type=image";
$data['media'] = "@" . $file;
$ret = Curl::callWebServer($api,$data,'post',true,false);//运用LaneWeChat框架
$news['picurl'] = $ret['url'];
$news['title'] = $title;
$news['description'] = $content;
$news['url'] = $content_source_url;
//将信息插入到数据库中并获取$reply_id
$reply_id = M('mp_reply_news')->add($news);
$key['reply_id'] = $reply_id;
$key['keyword'] = I('post.keyword');
$key['type'] = 'news';
$key['mp_id'] = $mp_id;
//将信息插入到数据库
$ret = M('mp_rule')->add($key);
if ($ret) {
$this->ajaxReturn(array('msg'=>'添加成功'));
}else{
$this->ajaxReturn(array('msg'=>'shibai '));
}
}
信息成功添加到数据库中之后,就要考虑如何能在微信中能自动回复啦。这是运用的LaneWeChat框架。(注意下:$item[]输出的是数组)
public static function text(&$request){
$mp_id = $_GET['id'];//获取正在使用的公众号
$content = $request['content'];
$where['mp_id'] = $mp_id;
$where['keyword'] = $content;
$data = M('mp_rule')->where($where)->find();//查询到那个公众号中的关键词
if ($data) {
$reply_id = $data['reply_id'];//进行数据表连接
$type = $data['type'];//获取type判断回复类型
//判断回复类型
switch ($type) {
case 'news':
$reply=M('mp_reply_news')->find($reply_id);
if($reply){
$item[] = ResponsePassive::newsItem($reply['title'],$reply['description'],$reply['picurl'],$reply['url']);
//多图文
// $item[] = ResponsePassive::newsItem($reply['title'],$reply['description'],$reply['picurl'],$reply['url']);
// $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;
.................
}
}else{
return 'success';
}
}
这样基本就能成功了!