哔哩哔哩视频传送门
点击前往b站观看视频讲解
本文基于 wechat-public-account-push 编写,点击链接即可浏览此项目 
不多bb,直接开始
项目作者给出了五种可行的方式来实现微信每日推送功能,分别是:
- 方式一:使用网页工具自动生成Github-Action配置(不准时,排队执行,胜在免费)
- 方式二:使用Github-Action(不准时,排队执行,胜在免费)
- 方式三:使用Gitee-go(定时任务收费,前200分钟免费,非常准时)
- 方式四:下载程序包到本地或服务器运行(需要有自己的服务器,使用系统的定时任务非常准时)
- 方式五:使用云函数运行(需要使用运营商提供的付费云函数功能,非常准时)
由于我有空闲的服务器,所以在此我仅以方式四来给大家做演示,为方便小白同志更好的理解,我尽可能将每一步都描述地很详细,有任何问题欢迎在页面底部留言给我,或者你也可以 点击这里 加入项目群组,第一时间获取可能得到的帮助。
准备工作
- 准备一台服务器,选用Linux操作系统,在此我以 Centos 7 为例给大家作演示,其他开源操作系统也可以,不必纠结于此。
- 点击这里 进行微信公众平台接口测试帐号申请。
没有服务器怎么办?
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
【腾讯云】双十一同价!云服务器等爆品抢先购,低至4.2元/月
【腾讯云】领 11111元代金券大礼包,购后抽奖100%中奖,开团冲榜赢iPhone 14 Pro
开始!
首先
确保服务器的时间与你本地时间(北京时间)同步,否则推送任务在运行时会有时间偏差。
输入时间同步命令,同步北京时间:
timedatectl set-timezone Asia/Shanghai
或者,来个高级点儿的同步时间:
ntpdate cn.pool.ntp.org
同步时间后,输入date查看当前时间:
date
请确保输出结果与北京时间同步。
开始操作
安装项目所需的 Nodejs 与 git 环境:
在服务器内执行以下命令:
cd ~
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
yum install -y nodejs
yum install -y git
安装完成后,接下来在你注册好的微信公众平台内进行设置:
记录下 appID 与 appsecret
让你想要接收到推送内容的用户扫描关注你的测试公众号,在关注之后页面会自动显示已关注的账号,并记录其在此显示微信号。
点击“新增消息模板”
模板标题任意填写,模板内容可以参考 这里
此处以一个简单的模板为例,给大家作演示:
{{date.DATA}}
城市:{{city.DATA}}
天气:{{weather.DATA}}
最低气温: {{min_temperature.DATA}}
最高气温: {{max_temperature.DATA}}
今天是我们恋爱的第{{love_day.DATA}}天
今天是我们结婚的第{{marry_day.DATA}}天
{{birthday_message.DATA}}
{{one_talk.DATA}} -- {{talk_from.DATA}}
{{note_en.DATA}}
{{note_ch.DATA}}
当然,发送消息的内容完全是自定义的,你可以自己参考文档进行改动。
保存后,记录下此模板的模板ID:
至此,微信公众平台这一部分的配置完毕,接下来我们前往服务器进行配置。
安装项目
cd ~ && git clone https://github.com/wangxinleo/wechat-public-account-push.git
cd ~/wechat-public-account-push
如果你的服务器在中国内地,执行这一步,速度更快
npm install -g cnpm --registry=https://registry.npm.taobao.org && cnpm install && cnpm install pm2 -g
如果是国外服务器,则执行这一步
npm install && npm install pm2 -g
如果有任何报错,请自行排查原因。一般情况下是不会有问题的
修改发送内容
vim ~/wechat-public-account-push/config/index.cjs
如果报错,请执行
yum install -y vim
如果你觉得在命令行窗口内改动内容很不方便,那么你可以把这个文件从服务器上下载下来,在本地改好之后再上传回去,安装 lrzsz :
yum install lrzsz -y
sz ~/wechat-public-account-push/config/index.cjs
将index.cjs下载下来后,你就可以在本地编辑它!
在修改内容时务必仔细认真不马虎地阅读此文件的每一处注释,严格遵循代码规则。
在对应位置填写好在前面保存的重要内容,例如 appID, appseceret等,修改完毕,保存并上传到服务器:
cd ~/wechat-public-account-push/config
rm index.cjs -f
rz
选择文件并上传即可。
设置定时发送
vim ~/wechat-public-account-push/config/server-config.js
// 此时间为每天的早上8点,*为匹配任意一个
// 这里的时间是中国时间 秒 分 时 日 月 年
const cornTime = '0 0 8 * * *'
export default cornTime
例如,如果你想修改为每天早上9点30分发送推送消息,那么你应该这样设置:
// 此时间为每天的早上8点,*为匹配任意一个
// 这里的时间是中国时间 秒 分 时 日 月 年
const cornTime = '0 30 9 * * *'
export default cornTime
修改完成,先按 Esc, 然后输入 :wq 进行保存。
运行定时推送任务
cd ~/wechat-public-account-push && npm run pm2start
运行任务后,我们就能在微信端接受到来自服务器的推送内容了:
PS:写这篇文章的时候是12:15,为了第一时间接收到推送,我修改推送时间为12:17,并非为服务器延时推送。
调试
查看输出日志
pm2 log @wechat-push
清空日志
pm2 flush
至此,微信自动推送项目已搭建完成,如果有什么疑问,欢迎留言或者加入页面底部的群组进行讨论。
(文章在收到反馈后随时会更新内容)
按照这个来失败了
0|@wechat- | /root/wechat-public-account-push/config/index.cjs:52
0|@wechat- | module.exports = USER_CONFIG
0|@wechat- | ^
0|@wechat- |
0|@wechat- | SyntaxError: Unexpected token '.'
0|@wechat- | at Object.compileFunction (node:vm:360:18)
0|@wechat- | at wrapSafe (node:internal/modules/cjs/loader:1084:15)
0|@wechat- | at Module._compile (node:internal/modules/cjs/loader:1119:27)
0|@wechat- | at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
0|@wechat- | at Module.load (node:internal/modules/cjs/loader:1033:32)
0|@wechat- | at Function.Module._load (node:internal/modules/cjs/loader:868:12)
0|@wechat- | at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:169:29)
0|@wechat- | at ModuleJob.run (node:internal/modules/esm/module_job:193:25)
0|@wechat- | at async Promise.all (index 0)
0|@wechat- | at async ESMLoader.import (node:internal/modules/esm/loader:526:24)
运行时的目录正确吗?
服务器怎么弄啊
搞到服务器后,开机,然后跟着教程来就OK,基本上没啥问题。