所需环境
数据库设计
界面实现
think-queue队列任务
调用think-queue任务
通过supervisord将think-queue任务常驻后台
安装EasyWeChat(第三方微信sdk工具)、think-queue、redis、supervisord(进程守护)


首先用一键curd把模板消息配置表生成到后台

接下来我们要实现图中红框以外的内容,就是单发、批量发、群发的功能按钮
需要到public\assets\js\backend\表名称.js(这个就是curd自动生成的js)
在columns配置项中添加 field: 'buttons'
通过上述设置即可实现截图中的界面
在application目录下新建一个job目录,在目录下新建一个Task.php,这个就是我们的队列程序了
Task.php代码如下
<?php
namespace app\job;
// 引用EasyWeChat
use EasyWeChat\Factory;
use think\Db;
use think\queue\Job;
class Task
{
public function fire(Job $job, $data)
{
// 尝试执行任务,如果出错则删除任务,data可根据自己需要传递参数
try {
$rt = $this->doJob($data);
$job->delete();
} catch (\Exception $e) {
$job->delete();
}
}
public function doJob($jobData)
{
//输出queue执行日志
print("<info>任务在" . date('Y-m-d H:i:s') . "执行了" . "</info> \n");
// 配置easywechat参数
$config = [
'app_id' => '微信appid',
'secret' => '微信后台获取的secret',
'response_type' => 'array',
];
$app = Factory::officialAccount($config);
// 获取后台微信模板消息的配置信息
$mbxx = Db::table('fa_wxmb')->where('id', $jobData['ids'])->find();
// 通过esaywechat发送模板消息,配置信息微信openid,模板id,模板内容等
$app->template_message->send([
//这里的会员信息是从数据库中获取的,这里就不贴出来了
'touser' => $hyxx['openid'],
'template_id' => $mbxx['templateId'],
'url' => $mbxx['url'],
'data' => [
'first' => array(
'value' => $mbxx['detailContent'],
),
'keyword1' => array(
'value' => $mbxx['serviceOrder'],
),
'keyword2' => array(
'value' => $mbxx['serverTheme'],
'color' => $mbxx['serverThemeColor'],
// 'color' => "#127942",
),
"keyword3" => array(
"value" => $mbxx['serverStatus'],
),
"keyword4" => array(
"value" => $mbxx['processTm'],
),
],
]);
// 将发送成功的消息记录到数据库中,包含的信息有:模板id,会员id,会员openid,发送时间
Db::table('fa_wxmblog')->data(['wxmbid' => $jobData['ids'], 'wyid' => $jobData['vipno'], 'openid' => $hyxx['UNIONID'], 'createtime' => date('Y-m-d H:i:s')])->insert();
print($result);
return true;
}
}
在你的业务程序中加入以下代码,以下代码就不详细解释了
public function job($jobData)
{
$jobHandlerClassName = 'app\job\Task';
$jobQueueName = 'task';
$isPushed = Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
if ($isPushed !== false) {
return '队列插入成功';
} else {
return '队列插入失败';
}
}
安装好supervisord
cd /etc/supervisord.d 进入目录
vi queue.ini 相当于新建一个queue.ini文件,里面就是常驻任务的指令
[program:wechat-queue] command=php '这里是fastadmin的根目录'/think queue:listen --queue task autostart=true ;在 supervisord 启动的时候也自动启动 autorestart=true ; 程序异常退出后自动重启 user=root ;用哪个用户启动 redirect_stderr=true ;把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes=20MB ;stdout 日志文件大小,默认 50MB stdout_logfile_backups=20 ;stdout 日志文件备份数 stderr_logfile=/worker_err.log ; 错误日志文件,自己配置错误目录 stdout_logfile=/worker.log ;输出日志文件,自己配置输出目录
编辑好后:wq保存文件,然后在终端中执行下面命令就完工了
supervisorctl update supervisord -c /etc/supervisord.conf