fastadmin开发微信模板消息后台

Php   2025-11-09 09:24   86   0  

目录

  1. 所需环境

  2. 数据库设计

  3. 界面实现

  4. think-queue队列任务

  5. 调用think-queue任务

  6. 通过supervisord将think-queue任务常驻后台

所需环境

安装EasyWeChat(第三方微信sdk工具)、think-queue、redis、supervisord(进程守护)

数据库设计

界面实现

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


接下来我们要实现图中红框以外的内容,就是单发、批量发、群发的功能按钮
需要到public\assets\js\backend\表名称.js(这个就是curd自动生成的js)
在columns配置项中添加 field: 'buttons'
通过上述设置即可实现截图中的界面

think-queue队列任务

在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;
    }
}

调用think-queue任务

在你的业务程序中加入以下代码,以下代码就不详细解释了

public function job($jobData)
    {
        $jobHandlerClassName = 'app\job\Task';
        $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 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