众所周知,微信有一个特别重要的一个功能就是自动回复,就是用户访问订阅号并发送消息,订阅号会根据用户输入字符回复用户,我写了自动回复文字,图片和图文。
每一个自动回复都是一个网页,分别是
<extend name="Common:base" />
<block name="body">
<h2>回复文本</h2>
<form class="layui-form" action="" style="padding-right: 10px;" method="post">
<div class="layui-form-item">
<label class="layui-form-label">回复关键词</label>
<div class="layui-input-block">
<input type="text" name="keyword" required lay-verify="required" placeholder="请输入关键词" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">回复内容</label>
<div class="layui-input-block">
<textarea name="content" required lay-verify="required" placeholder="请输入内容" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="SBT">提交</button>
<a href="{:U('keywords',['type'=>'text'])}" class="layui-btn layui-btn-primary">返回</a>
</div>
</div>
</form>
<script>
layui.use('form', function(){
var form = layui.form
form.on('submit(SBT)', function(data){
var load = layer.load();
$.post("{:U('replytext')}",data.field,function (res) {
layer.close(load);
layer.msg(res.msg,{time:1000},function () {
// window.location.href=res.url;
});
})
return false;
});
});
</script>
</block>
<extend name="Common:base" />
<block name="css">
<style type="text/css">
.meterial{
position: relative;
width: 120px;
height: 120px;
padding: 10px;
float: left;
}
.meterial img{
width: 100%;
height: 100%;
}
.select{
text-align: center;
vertical-align: middle;
opacity: 0.5;
color: #0f0;
background: rgba(0,0,0,0.8);
}
</style>
</block>
<block name="body">
<h2>回复图片</h2>
<form class="layui-form" action="" style="padding-right: 10px;" method="post">
<div class="layui-form-item">
<label class="layui-form-label">关键词</label>
<div class="layui-input-block">
<input type="text" name="keyword" required lay-verify="required" placeholder="请输入关键词" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">回复图片</label>
<div class="layui-input-block">
<input type="hidden" id="media_id" name="media_id">
<input type="hidden" id="url" name="url">
<img src="" id="img_logo" width="100" height="100" />
<button type="button" class="layui-btn" id="btn_upload">
<i class="layui-icon"></i>选择本地图片
</button>
<!-- <button type="button" class="layui-btn" id="btn_select">
<i class="layui-icon"></i>选择素材库中图片
</button> -->
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="SBT">提交</button>
<a href="{:U('keywords',['type'=>'image'])}" class="layui-btn layui-btn-primary">返回</a>
</div>
</div>
</form>
<script>
layui.use('form', function(){
var form = layui.form
form.on('submit(SBT)', function(data){
var load = layer.load();
$.post("{:U('replyimage')}",data.field,function (res) {
// if(res.status=='0'){
layer.close(load);
layer.msg(res.msg);
// }
// if(res.status=='1'){
// layer.close(load);
// layer.msg(res.msg,{time:1000},function () {
// window.location.href=res.url;
// });
// }
})
return false;
});
});
//图片上传
layui.use('upload', function(){
var upload = layui.upload;
//执行实例
var uploadInst = upload.render({
elem: '#btn_upload', //绑定元素
accept: 'images', //允许上传的文件类型
url: "{:U('upload')}", //上传接口
done: function(res){
//上传完毕回调
if(res.code=='0'){
var url ="__ROOT__" + res.url;
console.log(url);
$("#img_logo").attr("src",url);
$("#url").val(res.url);
}else{
layer.msg(res.msg);
}
},
error: function(){
//请求异常回调
}
});
});
$("#btn_select").click(function(){
layui.use('layer', function(){
var layer = layui.layer;
layer.open({
type: 2,
title: '永久素材',
shadeClose: true,
shade: 0.5,
area: ['680px', '300px'],
content: '{:U('common/selectImage')}',
btn:['确定','取消'],
yes: function(index, layero){
var body = layer.getChildFrame('body', index);
// console.log(body.html());
var img = body.find('.select').siblings('img');
$("#img_logo").attr('src',img.attr('src'));
$("#media_id").val(img.attr('media-id'));
$("#url").val(img.attr('url'));
layer.close(index);
}
});
});
})
</script>
</block><extend name="Common:base" />
<block name="css">
<style type="text/css">
.meterial{
position: relative;
width: 120px;
height: 120px;
padding: 10px;
float: left;
}
.meterial img{
width: 100%;
height: 100%;
}
.select{
text-align: center;
vertical-align: middle;
opacity: 0.5;
color: #0f0;
background: rgba(0,0,0,0.8);
}
</style>
</block>
<block name="body">
<h2>回复图片</h2>
<form class="layui-form" action="" style="padding-right: 10px;" method="post">
<div class="layui-form-item">
<label class="layui-form-label">关键词</label>
<div class="layui-input-block">
<input type="text" name="keyword" required lay-verify="required" placeholder="请输入关键词" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">回复图片</label>
<div class="layui-input-block">
<input type="hidden" id="media_id" name="media_id">
<input type="hidden" id="url" name="url">
<img src="" id="img_logo" width="100" height="100" />
<button type="button" class="layui-btn" id="btn_upload">
<i class="layui-icon"></i>选择本地图片
</button>
<!-- <button type="button" class="layui-btn" id="btn_select">
<i class="layui-icon"></i>选择素材库中图片
</button> -->
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="SBT">提交</button>
<a href="{:U('keywords',['type'=>'image'])}" class="layui-btn layui-btn-primary">返回</a>
</div>
</div>
</form>
<script>
layui.use('form', function(){
var form = layui.form
form.on('submit(SBT)', function(data){
var load = layer.load();
$.post("{:U('replyimage')}",data.field,function (res) {
// if(res.status=='0'){
layer.close(load);
layer.msg(res.msg);
// }
// if(res.status=='1'){
// layer.close(load);
// layer.msg(res.msg,{time:1000},function () {
// window.location.href=res.url;
// });
// }
})
return false;
});
});
//图片上传
layui.use('upload', function(){
var upload = layui.upload;
//执行实例
var uploadInst = upload.render({
elem: '#btn_upload', //绑定元素
accept: 'images', //允许上传的文件类型
url: "{:U('upload')}", //上传接口
done: function(res){
//上传完毕回调
if(res.code=='0'){
var url ="__ROOT__" + res.url;
console.log(url);
$("#img_logo").attr("src",url);
$("#url").val(res.url);
}else{
layer.msg(res.msg);
}
},
error: function(){
//请求异常回调
}
});
});
$("#btn_select").click(function(){
layui.use('layer', function(){
var layer = layui.layer;
layer.open({
type: 2,
title: '永久素材',
shadeClose: true,
shade: 0.5,
area: ['680px', '300px'],
content: '{:U('common/selectImage')}',
btn:['确定','取消'],
yes: function(index, layero){
var body = layer.getChildFrame('body', index);
// console.log(body.html());
var img = body.find('.select').siblings('img');
$("#img_logo").attr('src',img.attr('src'));
$("#media_id").val(img.attr('media-id'));
$("#url").val(img.attr('url'));
layer.close(index);
}
});
});
})
</script>
</block>
<extend name="Common:base" />
<block name="body">
<h2>回复图文</h2>
<form class="layui-form" action="" style="padding-right: 10px;" method="post">
<div class="layui-form-item">
<label class="layui-form-label">回复关键词</label>
<div class="layui-input-block">
<input type="text" name="keyword" placeholder="请输入关键词" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">标题</label>
<div class="layui-input-block">
<input type="text" name="title" placeholder="请输入标题" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">封面图</label>
<div class="layui-input-block">
<input type="hidden" id="media_id" name="media_id">
<input type="hidden" id="url" name="url">
<img src="" id="img_logo" width="100" height="100" />
<button type="button" class="layui-btn" id="btn_upload">
<i class="layui-icon"></i>选择本地图片
</button>
<!-- <button type="button" class="layui-btn" id="btn_select">
<i class="layui-icon"></i>选择素材库中图片
</button> -->
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">内容</label>
<div class="layui-input-block">
<textarea name="content" placeholder="请输入图文内容" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">原文地址</label>
<div class="layui-input-block">
<input type="text" name="content_source_url" placeholder="请输入原文地址如:http://xxxx.com/……" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="SBT">提交</button>
<a href="{:U('keywords',['type'=>'news'])}" class="layui-btn layui-btn-primary">返回</a>
</div>
</div>
</form>
<script>
layui.use('form', function(){
var form = layui.form
form.on('submit(SBT)', function(data){
var load = layer.load();
$.post("{:U('replynews')}",data.field,function (res) {
// if(res.status=='0'){
layer.close(load);
layer.msg(res.msg);
// }
// if(res.status=='1'){
// layer.close(load);
// layer.msg(res.msg,{time:1000},function () {
// window.location.href=res.url;
// });
// }
})
return false;
});
});
//图片上传
layui.use('upload', function(){
var upload = layui.upload;
//执行实例
var uploadInst = upload.render({
elem: '#btn_upload', //绑定元素
accept: 'images', //允许上传的文件类型
url: "{:U('upload')}", //上传接口
done: function(res){
//上传完毕回调
if(res.code=='0'){
var url ="__ROOT__" + res.url;
console.log(url);
$("#img_logo").attr("src",url);
$("#url").val(res.url);
}else{
layer.msg(res.msg);
}
},
error: function(){
//请求异常回调
}
});
});
$("#btn_select").click(function(){
layui.use('layer', function(){
var layer = layui.layer;
layer.open({
type: 2,
title: '永久素材',
shadeClose: true,
shade: 0.5,
area: ['680px', '300px'],
content: '{:U('common/selectImage')}',
btn:['确定','取消'],
yes: function(index, layero){
var body = layer.getChildFrame('body', index);
// console.log(body.html());
var img = body.find('.select').siblings('img');
$("#img_logo").attr('src',img.attr('src'));
$("#media_id").val(img.attr('media-id'));
$("#url").val(img.attr('url'));
layer.close(index);
}
});
});
})
</script>
</block>
而且注意的是上面的3个网页对应的是3个数据表,注意的是回复图片,是用media_id来返回图片,而回复图文是要的返回的url
<?php
namespace Home\Controller;
use Think\Controller;
use LaneWeChat\Core\Curl;
class AutoreplyController extends Controller {
private $mp;
public function _initialize(){
$mp=getCurrentMp();
if(empty($mp)){
$this->error('无使用公众号',U('index'));
}else{
$this->mp=$mp;
}
}
public function replytext(){
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=$this->mp;
$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'=>'添加成功'));
}else{
$this->ajaxReturn(array('msg'=>'添加失败'));
}
}
}
public function replyimage(){
if(IS_GET){
$this->display();
}else{
$url=I('post.url');//图片在本地服务器上的路径
//相对路径转换成绝对路径
$file=realpath('.'.$url);
// echo $file;
// exit;
$access_token=getAccess_token();
include APP_PATH.'LaneWeChat/lanewechat.php';
//永久素材
$url="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$access_token&type=image";
$data['media']=Curl::addFile($file);
$ret=Curl::callWebServer($url,$data,'post',true,false);
if(isset($ret['media_id'])){
$mp=getCurrentMp();
$data['url']=$ret['url'];
$data['media_id']=$ret['media_id'];
$reply_id=M('mp_reply_image')->add($data);
$keyword=I('post.keyword');
if(isset($reply_id)){
$data['mp_id']=$mp['id'];
$data['type']='image';
$data['keyword']=$keyword;
$data['reply_id']=$reply_id;
if($mp['is_use']==1){
$data['status']=1;
}else{
$data['status']=0;
}
M('mp_rule')->add($data);
$this->ajaxReturn(array('msg'=>'添加成功'));
}else{
$this->ajaxReturn(array('msg'=>'添加失败'));
}
}else{
$this->ajaxReturn(array('msg'=>'添加失败'));
}
// $this->ajaxReturn($ret);
}
}
public function replynews(){
if(IS_GET){
$this->display();
}else{
$keyword=I('post.keyword');
$title=I('post.title');
$description=I('post.content');
$link=I('post.content_source_url');
$url=I('post.url');//图片在本地服务器上的路径
//相对路径转换成绝对路径
$file=realpath('.'.$url);
// echo $file;
// exit;
$access_token=getAccess_token();
include APP_PATH.'LaneWeChat/lanewechat.php';
//永久素材
$url="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$access_token&type=image";
$data['media']=Curl::addFile($file);
$ret=Curl::callWebServer($url,$data,'post',true,false);
if(isset($ret['media_id'])){
$mp=getCurrentMp();
$data['title']=$title;
$data['description']=$description;
$data['picurl']=$ret['url'];
$data['url']=$link;
$reply_id=M('mp_reply_news')->add($data);
if(isset($reply_id)){
$data['mp_id']=$mp['id'];
$data['type']='news';
$data['keyword']=$keyword;
$data['reply_id']=$reply_id;
if($mp['is_use']==1){
$data['status']=1;
}else{
$data['status']=0;
}
M('mp_rule')->add($data);
$this->ajaxReturn(array('msg'=>'添加成功'));
}else{
$this->ajaxReturn(array('msg'=>'添加失败'));
}
}else{
$this->ajaxReturn(array('msg'=>'添加失败'));
}
}
}
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));
}
}
}