PHP建站技术分享-从入门到精通PHP建站技术分享-从入门到精通PHP建站技术分享-从入门到精通

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > Fastadmin

用fastadmin开发微信模板消息后台

管理员 2024-12-14
Fastadmin
22

目录

  1. 所需环境
  2. 数据库设计
  3. 界面实现
  4. think-queue队列任务
  5. 调用think-queue任务
  6. 通过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修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部