利用公众号的模板消息把评论/留言推送到微信
看了一眼后,完美!是提供了的。那就可以动起手来了!

参考CommentToMail插件
1、主要是插件目录/usr/plugins/CommentToMail下的Action.php文件,是定时推送邮件的主要文件。
2、CommentToMail插件大致上有俩个版本,一个是需要设置网站监控,另一个是修改版,不需要设置网站监控。
3、我的是监控版本,每隔几分钟会定时执行一遍,并推送出邮件。地址大致如下:
https://博客地址/action/comment-to-mail?do=deliverMail&key=你的密钥
借鉴CommentToMail插件
它的执行机制,简单来说,就是定时去sql查询数据库mail表中,是否有邮件尚未发送(字段:send),有则发送,没有就不管。发送邮件后,send变为1。 那么,我微信推送的话,也是借助这张表。首先,自定义一个接口,定时任务定时访问,查询出微信尚未推送的消息,然后调用微信的模板消息接口,最后改变状态。
公众号配置模板消息的内容模板
我使用的是微信公众号的测试号,正常订阅号是只能选择内置模板的,调用方法一样。
如下图所示,当然,测试号可以随意设置。

数据库增加字段
邮件发送状态使用的是send字段,这个无法重复用,所以新增一个wxsend字段。
ALTER TABLE `typecho_mail` ADD `wxsent` TINYINT(1) NULL DEFAULT '0' COMMENT '微信推送状态' AFTER `sent`;
借助时光机的微信发送系统
1、安装及其他的,这个参照之前的文章:用iOS的Siri语音助手快速发布“说说” 和 用微信公众号快速发布“说说”
2、找到微信发送系统的根目录,主要文件是server.php和cross.php两个文件。
3、server.php拷贝一份重命名为WeChatServer.php。(也可以按你的想法自定义)。然后修改内容为:
<?php
require __DIR__ . '/vendor/autoload.php';
include 'config.php';
require('WeChatTemplate.php');
use EasyWeChat\Factory;
<!--INLINEMATH0-->config);
$app->server->push(WeChatTemplateHandler::class);
<!--INLINEMATH1-->app->server->serve();
// 将响应输出
$response->send();
注意
require('WeChatTemplate.php');和$app->server->push(WeChatTemplateHandler::class);是要修改的部分。
4、新增一个php文件,命名为WeChatTemplate.php。
部分代码如下:
class WeChatTemplateHandler implements EventHandlerInterface
{
public function handle($message = null)
{
global $config;
$db = new Db();
$openid = 'xxxxxxxxx';//自己的openid
<!--INLINEMATH2-->db->query("SELECT id,content FROM `typecho_mail` WHERE wxsent = 0")->fetchAll();
if(sizeof($mailQueue)>0){
<!--INLINEMATH3-->config);
foreach(<!--INLINEMATH4-->mail)
{
<!--INLINEMATH5-->mail['id'];
<!--INLINEMATH6-->mail['content']));
<!--INLINEMATH7-->mailInfo->authorId;
<!--INLINEMATH8-->mailInfo->ownerId;
//print_r($mailInfo);
// 不推送自己的消息
if(<!--INLINEMATH9-->ownerId){
// 发送模板信息
if ($mailInfo)
{
if (send_template(<!--INLINEMATH10-->config,<!--INLINEMATH11-->access_token))
{
<!--INLINEMATH12-->mailId");
}
}
}
}
}
return push(1);
}
}
/** * 功能:获取access_token * * @param $code * @return mixed */
function get_access_token($config)
{
<!--INLINEMATH13-->config['app_id'];
<!--INLINEMATH14-->config['secret'];
<!--INLINEMATH15-->appid.'&secret='.$appsecret;
<!--INLINEMATH16-->url));//返回的json数组转换成array数组
if($data->errcode){
return '';
}
return $data->access_token;
}
// 发送模板消息
function send_template(<!--INLINEMATH17-->config,<!--INLINEMATH18-->access_token)
{
<!--INLINEMATH19-->access_token;
//定义消息模板JSON
<!--INLINEMATH20-->openid, '你的template_id',
<!--INLINEMATH21-->mailInfo->title,<!--INLINEMATH22-->mailInfo->mail,$mailInfo->text);
//发送POST请求
list(<!--INLINEMATH23-->returnContent) = http_post_json(<!--INLINEMATH24-->json_template);
//打印日志(JSON格式)
echo '发送结果如下:' . $returnContent . '\n';
return true;
}
注意,新增的文件名和上面的require('WeChatTemplate.php');一致。修改的class名和$app->server->push(WeChatTemplateHandler::class);一致。
增加定时任务
如同CommentToMail插件一样,增加网站监控功能。地址为:
http://时光机地址/WeChatServer.php
最终效果
