首先我们要创建两个数据库rh_mp_rule、rh_mp_reply_image前者用来存储关键字和正在使用公众号的mp_id以及上传文件的类型;后者用来存储图片的media_id和url路径;两个表之间定义reply_id用来连接
1.在控制器中我们先创建一个upload方法讲图片上传,其代码如下:
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->error($upload->getError());
$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));
}
}
在前台js中进行相应的修改使图片得以显示。
2.我们要将本地图片上传到微信平台,并且是永久图片接口,其代码如下:
//选择本地图片需上传到微信平台
if(empty($media_id)){
$accessToken=getAccess_token();
include APP_PATH . "LaneWeChat/lanewechat.php";
//上传永久图片接口
$file=realpath('.'.$url);
// echo $file;
// exit;
$api="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$accessToken&type=image";
$data['media']='@' . $file;
$ret=Curl::callWebServer($api,$data,'post',1,0);
// $this->ajaxReturn($ret);
// exit;
// 上传成功
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=getCurrentMp();
$arr['mpid']=$mp['id'];
$arr['reply_id']=$reply_id;
$arr['type']='image';
$arr['keyword']=$keyword;
$ret=M('mp_rule')->add($arr);
if($ret){
$this->ajaxReturn(array('status'=>1,'msg'=>'添加成功'));
}else{
$this->ajaxReturn(array('status'=>1,'msg'=>'添加失败'));
}
创建一个replyimage方法将两个代码合起来,就实现了数据库和图片的上传
3.在wechatrequest.lib.php方法中使用switch语句实现图片的关键字回复,其代码如下
case '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);
}
break;
4.将其对应的数据库及代码传入阿里云平台,在微信公众号进行配置即可