目录
- 所需环境
- 数据库设计
- 界面实现
- think-queue队列任务
- 调用think-queue任务
- 通过supervisord将think-queue任务常驻后台
所需环境
安装EasyWeChat(第三方微信sdk工具)、think-queue、redis、supervisord(进程守护)
数据库设计
界面实现
首先用一键curd把模板消息配置表生成到后台
接下来我们要实现图中红框以外的内容,就是单发、批量发、群发的功能按钮
需要到publicassetsjsbackend表名称.js(这个就是curd自动生成的js)
在columns配置项中添加 field: 'buttons',文档地址中第15条内容
通过上述设置即可实现截图中的界面
think-queue队列任务
在application目录下新建一个job目录,在目录下新建一个Task.php,这个就是我们的队列程序了
Task.php代码如下
<?phpnamespace appjob;// 引用EasyWeChatuse EasyWeChatFactory;use thinkDb;use thinkqueueJob;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; }}
调用think-queue任务
在你的业务程序中加入以下代码,以下代码就不详细解释了
public function job($jobData) { $jobHandlerClassName = 'appjobTask'; $jobQueueName = 'task'; $isPushed = Queue::push($jobHandlerClassName, $jobData, $jobQueueName); if ($isPushed !== false) { return '队列插入成功'; } else { return '队列插入失败'; } }
通过supervisord将think-queue任务常驻后台
安装好supervisord
cd /etc/supervisord.d 进入目录
vi queue.ini 相当于新建一个queue.ini文件,里面就是常驻任务的指令
[program:wechat-queue]command=php '这里是fastadmin的根目录'/think queue:listen --queue taskautostart=true ;在 supervisord 启动的时候也自动启动autorestart=true ; 程序异常退出后自动重启user=root ;用哪个用户启动redirect_stderr=true ;把 stderr 重定向到 stdout,默认 falsestdout_logfile_maxbytes=20MB ;stdout 日志文件大小,默认 50MBstdout_logfile_backups=20 ;stdout 日志文件备份数stderr_logfile=/worker_err.log ; 错误日志文件,自己配置错误目录stdout_logfile=/worker.log ;输出日志文件,自己配置输出目录
编辑好后:wq保存文件,然后在终端中执行下面命令就完工了
supervisorctl update
supervisord -c /etc/supervisord.conf
第一次写文章,排版和说明肯定都有些问题请见谅
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。