前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用公众号的模板消息把评论/留言推送到微信

利用公众号的模板消息把评论/留言推送到微信

作者头像
目的地-Destination
发布2023-03-06 16:31:01
7780
发布2023-03-06 16:31:01
举报
文章被收录于专栏:目的地-Destination

话说,本系统使用了CommentToMail插件来实现:当游客评论留言时,会自动发送到邮箱通知。但是,又不是工作消息,谁天天去看邮件呢?自从前两天,做了-> 用iOS的Siri语音助手快速发布“说说”用微信公众号快速发布“说说” 之后呢,我就想,能不能借鉴他们的思路方法,调用公众号的模板消息接口来推送评论消息呢?就是不知道微信公众号的测试号支不支持模板消息的功能,因为我记得,订阅号也是要申请的。

看了一眼后,完美!是提供了的。那就可以动起手来了!

参考CommentToMail插件

1、主要是插件目录/usr/plugins/CommentToMail下的Action.php文件,是定时推送邮件的主要文件。

2、CommentToMail插件大致上有俩个版本,一个是需要设置网站监控,另一个是修改版,不需要设置网站监控。

3、我的是监控版本,每隔几分钟会定时执行一遍,并推送出邮件。地址大致如下:

代码语言:javascript
复制
https://博客地址/action/comment-to-mail?do=deliverMail&key=你的密钥

借鉴CommentToMail插件

它的执行机制,简单来说,就是定时去sql查询数据库mail表中,是否有邮件尚未发送(字段:send),有则发送,没有就不管。发送邮件后,send变为1。

那么,我微信推送的话,也是借助这张表。首先,自定义一个接口,定时任务定时访问,查询出微信尚未推送的消息,然后调用微信的模板消息接口,最后改变状态。

公众号配置模板消息的内容模板

我使用的是微信公众号的测试号,正常订阅号是只能选择内置模板的,调用方法一样。

如下图所示,当然,测试号可以随意设置。

数据库增加字段

邮件发送状态使用的是send字段,这个无法重复用,所以新增一个wxsend字段。

代码语言:javascript
复制
ALTER TABLE `typecho_mail` ADD `wxsent` TINYINT(1) NULL DEFAULT '0' COMMENT '微信推送状态' AFTER `sent`; 

借助时光机的微信发送系统

1、安装及其他的,这个参照之前的文章:用iOS的Siri语音助手快速发布“说说”用微信公众号快速发布“说说”

2、找到微信发送系统的根目录,主要文件是server.phpcross.php两个文件。

3、server.php拷贝一份重命名为WeChatServer.php。(也可以按你的想法自定义)。然后修改内容为:

代码语言:javascript
复制
<?php
require __DIR__ . '/vendor/autoload.php';
include 'config.php';
require('WeChatTemplate.php');

use EasyWeChat\Factory;

$app = Factory::officialAccount($config);
$app->server->push(WeChatTemplateHandler::class);

$response = $app->server->serve();

// 将响应输出
$response->send();

注意require('WeChatTemplate.php');$app->server->push(WeChatTemplateHandler::class);是要修改的部分。

4、新增一个php文件,命名为WeChatTemplate.php

部分代码如下:

代码语言:javascript
复制
class WeChatTemplateHandler implements EventHandlerInterface
{
    public function handle($message = null)
    {
        global $config;
        $db = new Db();
        $openid = 'xxxxxxxxx';//自己的openid
        
        $mailQueue = $db->query("SELECT id,content FROM `typecho_mail` WHERE wxsent = 0")->fetchAll();
        if(sizeof($mailQueue)>0){
            $access_token = get_access_token($config);
            foreach($mailQueue as &$mail)
            {
                $mailId = $mail['id'];
                $mailInfo = unserialize(base64_decode($mail['content']));
                $authorId = $mailInfo->authorId;
                $ownerId = $mailInfo->ownerId;
                //print_r($mailInfo);
                // 不推送自己的消息
                if($authorId != $ownerId){
                    // 发送模板信息
                    if ($mailInfo)
                    {
                        if (send_template($mailInfo,$config,$openid,$access_token))
                        {
                            $db->query("update `typecho_mail` set  wxsent = 1 WHERE id = $mailId");
                        }
                    }
                }
            }
        }
        return push(1);
    }
}

/** * 功能:获取access_token * * @param $code * @return mixed */
function get_access_token($config)
{ 
    $appid = $config['app_id'];
    $appsecret = $config['secret'];
    $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
    $data = json_decode(file_get_contents($url));//返回的json数组转换成array数组
    if($data->errcode){
        return '';
    }
    return $data->access_token;
}

// 发送模板消息
function send_template($mailInfo,$config,$openid,$access_token)
{ 
    $url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$access_token;
    //定义消息模板JSON
    $json_template = json_tempalte($openid, '你的template_id',
    $mailInfo->permalink,$mailInfo->title,$mailInfo->author,$mailInfo->mail,$mailInfo->text);
    //发送POST请求
    list($returnCode, $returnContent) = http_post_json($url, $json_template);
    //打印日志(JSON格式)
    echo '发送结果如下:' . $returnContent . '\n';
  return true;
}

注意,新增的文件名和上面的require('WeChatTemplate.php');一致。修改的class名和$app->server->push(WeChatTemplateHandler::class);一致。

增加定时任务

如同CommentToMail插件一样,增加网站监控功能。地址为:

代码语言:javascript
复制
http://时光机地址/WeChatServer.php

最终效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年12月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考CommentToMail插件
  • 借鉴CommentToMail插件
  • 公众号配置模板消息的内容模板
  • 数据库增加字段
  • 借助时光机的微信发送系统
  • 增加定时任务
  • 最终效果
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档