文章目录

  • 微信测试号推送消息
  • 一、申请微信测试号
  • 二、下载nodeJs
    • 1.下载安装包
    • 2.检查是否安装成功
  • 三、设置测试号发送信息的模板
  • 四、编写发送消息代码(必须装好nodeJs)
    • 1、编写代码 通用模板-复制可用(白嫖党看这里)
    • 2、代码(成品)
  • 五、开始运行
    • 1、无依赖运行(会报错)
    • 2、装好依赖继续运行
  • 六、运行效果
  • 总结
    • 1、部署到青龙面板
    • 2、执行定时任务
    • 3、青龙面板发送消息成功

微信测试号推送消息

提示:这里可以添加本文要记录的大概内容:

前段时间在小红书、抖音都有刷到这个微信推送,看了一下网上的版本,基本上都是Python写的,但是我不会Python,学来不及了。

趁着自己会js,看了些php和python以及java的案例,无非就是请求传参,没啥区别。琢磨一下然后自己整出来


提示:以下是本篇文章正文内容,下面案例可供参考

一、申请微信测试号

测试号名字不能更改,

快捷入口:微信测试号官网,直接用微信扫码注册登录

注册进去之后,你会获取你的appID,以及secret密钥

记住这两个待会要用

二、下载nodeJs

如果有开发经验的就跳过这一步,直接进第三个

下载nodeJs主要是运行要用到它,待会是直接运行js文件的,基于nodeJs

1.下载安装包

nodeJs官网

下载左边的稳定版,安装过程无脑下一步就对了。

2.检查是否安装成功

按住win+R
调出cmd,在cmd中输入 node -v
显示版本号说明安装成功了

三、设置测试号发送信息的模板

参考我的
土味情话、舔狗日记、网易云都是调用的接口,生日倒计时和恋爱纪念日是我用js方法计算得出来的。

如果有js基础的话看起来一定很简单,如果是it小白的话也不要慌,直接拿去用就好了

今天是:{{date.DATA}}
土味情话:{{QingHua.DATA}}
距离生日还有:{{Birthday.DATA}} 天
今天是我们在一起第:{{jiNianDay.DATA}} 天
舔狗日记:{{tiangou.DATA}}
【网易云时间】:{{wangyiyun.DATA}}


在测试号界面点击添加测试模板,然后复制那个粘贴进去,保存。

四、编写发送消息代码(必须装好nodeJs)

基于nodeJs的脚本指令,所以必须装好node

除了nodeJs要安装之外,你还需要一个代码编辑器,这里推荐VSCode或者HBuilder X

作为在csdn游荡的程序员,这两个东西多多少少有吧。



当然,IDEA也行,只是编写代码而已,运行脚本还是可以走cmd的。

1、编写代码 通用模板-复制可用(白嫖党看这里)

打开VSCode,创建一个文件夹用来编写代码。
在这个文件夹里面创建一个js文件,名字叫sendMsg.js

代码模板

// 微信测试号发送消息
const axios = require('axios');
// 设置跨域请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
// 定义post请求方法
const axiosPost = function (url, params) {return new Promise((resolve, reject) => {axios.post(url, params).then(res => {resolve(res);}).catch(err => {reject(err);});});
};
// 定义get请求方法
const axiosGet = function (url, params) {return new Promise((resolve, reject) => {axios.get(url, {params,}).then(res => {resolve(res);}).catch(err => {reject(err);});});
};
//  定义获取token方法
async function getToken() {const params = {grant_type: 'client_credential',appid: '', // 你的appid  1secret: '', // 你的secret 2};let res = await axiosGet('https://api.weixin.qq.com/cgi-bin/token', params);return res.data.access_token;
}async function templateMessageSend() {const token = await getToken();// 获取token// 如果需要加其他的api,仿写这个获取token的就行const url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' + token;const params = {touser: '', // 用户openid 3 就是扫码关注的那个微信号template_id: '', // 模板id 4 就是那个测试模板的ID// url: 'http://www.baidu.com', // 如果给了链接那么点击消息将会跳转进来,建议不加,不加点了无反应topcolor: '#FF0000',// 标题颜色data: {text1: {"value": "内容1","color": "#FCA60B"  // 颜色},text2: {"value": "内容2","color": "#FCA60B"  // 颜色},// 以此类推},};let res = await axiosPost(url, params);console.log('res: ', res.data);
}
//  执行发送订阅消息
templateMessageSend();

这个是没有添加任何api接口的简洁模板,其他的都是基于这个添加的。
如果你想自己编写,就复制这个拿去用,

发送内容的text1,text2就是之前模板里面这 双大括号里面的字段,DATA前面的那一段。看不懂的看下一节

2、代码(成品)

// 需要填写的地方已经标出
// 一共4个地方 appID、appsecret、模板ID、微信用户的openid
const axios = require('axios');
const moment = require('moment');
// 设置跨域请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
// 定义post请求方法
const axiosPost = function (url, params) {return new Promise((resolve, reject) => {axios.post(url, params).then(res => {resolve(res);}).catch(err => {reject(err);});});
};// 定义get请求方法
const axiosGet = function (url, params) {return new Promise((resolve, reject) => {axios.get(url, {params,}).then(res => {resolve(res);}).catch(err => {reject(err);});});
};//  定义获取token方法
async function getToken() {const params = {grant_type: 'client_credential',appid: '', // 你的appid  1secret: '', // 你的secret 2};let res = await axiosGet('https://api.weixin.qq.com/cgi-bin/token', params);return res.data.access_token;
}// 1、随机一句土味情话
async function getQingHua() {let res = await axiosGet('https://api.uomg.com/api/rand.qinghua?format=json')return res.data.content;
}// 2、舔狗日记
async function getTianGou() {let res = await axiosGet('http://api.weijieyue.cn/api/tgrj/api.php')return res.data;
}// 3、网易云热评
async function getWangYiYun() {let res = await axiosGet('https://keai.icu/apiwyy/api')return res.data;
}// 天气 暂时不可用
// async function getWeather() {//     let res = await axiosGet('https://api.vvhan.com/api/weather?city=长沙');
//     console.log(res,'4')
//     return res.data.info;
// }// 4、计算还有多少天过生日(公历)
function getDaysToBirthday(month, day) {let now = new Date();let thisYear = now.getFullYear();//今年的生日let birthday = new Date(thisYear, month - 1, day);if (birthday < now) {birthday.setFullYear(now.getFullYear() + 1);}let timeDec = birthday - now;let days = timeDec / (24 * 60 * 60 * 1000);return Math.ceil(days);
}
// 5、纪念日
function getJiNianDays(time) {let startTime = new Date(time).getTime()    // 开始时间let nowTime = new Date().getTime()          // 今天let duration = - moment(startTime).diff(nowTime) / (1000 * 3600 * 24)  // 时间戳转化为天数return Math.ceil(duration) // 取整数
}
// 6、当前时间
function getDays() {let date = new Date()// 获取时间:时分秒const hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours()const minute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()const secound = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds()// this.datetime = hour + ':' + minute + ':' + secound// 获取日期:年月日const year = date.getFullYear()const month = date.getMonth() + 1const day = date.getDate()// this.nowDate = month + "月" + day + "日"// this.nowYear = year + "年"// 获取星期几const weeks = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");// weeks[new Date().getDay()]; return (year + "年" + month + "月" + day + "日 " + hour + ':' + minute + ':' + secound + " " + weeks[new Date().getDay()])
}
// end定义发送消息模板
async function templateMessageSend() {// 加await是因为是异步请求,async await是配套使用的// es6语法,不会的没关系,function有async的时候使用时带上await就行const token = await getToken();const QingHua = await getQingHua();const tiangou = await getTianGou();const wangyyun = await getWangYiYun();const birthday = getDaysToBirthday(6, 8)   // 填入生日(公历)const nowTime = getDays()const jiNianDay = getJiNianDays('2018-11-25') // 按照格式填入 年-月-日// console.log('------------------------------------------')// console.log('打印消息: ',QingHua, '--', tiangou, '--', wangyyun, '--', birthday, '---', jiNianDay)// console.log('------------------------------------------')const url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' + token;const params = {touser: '', // 用户openid 3template_id: '', // 模板id 4// url: 'http://www.baidu.com',topcolor: '#FF0000',data: {date: {"value": nowTime,"color": "#FCA60B"},QingHua: {"value": QingHua,"color": "#ff1a75"},Birthday: {"value": birthday,"color": "#1E90FF"},jiNianDay: {"value": jiNianDay,"color": "#3399cc"},qinghua: {"value": QingHua,"color": "#33FF33"},tiangou: {"value": tiangou,"color": "#007f80"},wangyiyun: {"value": wangyyun.content + '-- by ' + wangyyun.user,"color": "#2B9D4A"},},};let res = await axiosPost(url, params);console.log('res: ', res.data);
}
//  执行发送订阅消息
templateMessageSend();

这个是跟我一开始编写的模板对应的,可以直接拿来使用。
api接口以及生日倒计时,纪念日计算,等等都是可以二次开发,期待网友开发出更好的成品,

测试号发的消息会有文字限制,超出显示…

五、开始运行

nodeJs的运行语句是node ***.js
我们还没装依赖,运行肯定会报错。因为没有node_modules这个文件

我先运行一遍哈

1、无依赖运行(会报错)


这里我们安装依赖

npm install 依赖名

例如:npm install axios

2、装好依赖继续运行

继续运行node ***.js文件
如果还出现缺少依赖,我们一样的重复上一节,npm install 依赖名,这个就是依赖的安装语句

继续安装moment,这是一个时间计算的js插件,缺什么装什么

六、运行效果

运行还报错的,出问题的。
看一下,你们的参数填了没有,总共四个

  1. 你的appid
  2. 你的secret
  3. 用户openid
  4. 模板id

    生日和纪念日在这里改,我这里已经填了我自己的

确保参数都没问题就是运行成功,会弹出消息通知


可以看到有消息通知来了、点进来看看吧


因为舔狗日记太长了,导致网易云没显示完整,这是一个弊端,微信做了限制吧,所以就这样了。

字数限制,没办法,后期不要舔狗日记也行,就推送纪念日,生日,天气啥的,天气我没找到稳定的接口,又不想出钱买,所以一直搁置着,干脆就没写了。


重新发了一条,就显示完整了。


总结

说难吧,也不难,我之前是在小红薯上看到作者【猪咪不是猪】写的,但是他写的是Python,想看源码,看不太明白,而且翻遍了全网没看到谁用js写,甚至关键字带上js都找不到这类型的文章,干脆自己搞一个js版,后面翻微信测试号的开发文档,自己在看了若干的axios请求的文章。做了个成品。
这个是基于nodeJs,在本地运行,我看到很多人都是github上的action自动运行,那个懒得搞。

我刚好有服务器,干脆丢服务器上做定时任务了,这不舒舒服服

1、部署到青龙面板


在脚本管理这里,点击加号,新增一个脚本文件,名字叫 sendWX.js,一定要带上js后缀。
然后把我的【成品】代码粘贴进去,注意不是模板。是成品

点击保存之后,来任务界面,新建一个定时任务

命令:task sendWX.js
时间:0 8 * * * 表示每天早上八点整运行

2、执行定时任务


因为是面板,所以也需要安装依赖
报错了,是因为没有依赖,青龙面板装依赖不难,很简单的。


不会的看我教程,最新的
青龙面板安装依赖教程

3、青龙面板发送消息成功


可以看到已经发送成功了

为啥这个舔狗日记会变成这样,这个我也不太清楚,可能是在青龙面板上执行的时候出问题了。又可能是访问次数太多了。刚刚一直调试就这样了。实在不行可以就把舔狗日记删了。土味情话也没出问题

【舔狗日记】字数多还不讨好。不如搞个保安日记哈哈。

教程非常保姆级,不会的就在评论区问吧

js版微信测试号推送消息、生日、纪念日、网易云热评、舔狗日记【JavaScript版】保姆级教程 青龙面板做微信测试号推送生日、纪念日相关推荐

  1. 【最新敲简单】浪漫微信早安推送 +页面总控,JAVA版本,一键部署运行——保姆级教程

    [最新敲简单]微信早安推送 +页面总控, JAVA版本,一键部署运行--保姆级教程 文章目录 [最新敲简单]微信早安推送 +页面总控, JAVA版本,一键部署运行--保姆级教程 一.项目简介 二.本地 ...

  2. 量化交易-利用同花顺量化平台supermind 5行代码搞定多条件选股并微信实时收消息-保姆级教程

    利用supermind 5行代码搞定多条件选股并在微信实时收消息-保姆级教程 前言 对大部分炒股的朋友来说,日常最耗时的就是盯着选股条件然后不停的选股,我经常苦恼于有无程序能自动化实现选股,然后选中之 ...

  3. 教程: nodejs 做微信公众号开发,回复 xml 消息

    教程: nodejs 做微信公众号开发,回复 xml 消息 首先需要你的后台跟服务器已经可以建立连接,这个不再冗述看官方教程就好 接入指南 .此篇介绍的是如何获取用户发来的信息,并回复它. 一.接收 ...

  4. 青龙面板之微信阅读 每日被动羊毛

    青龙面板之微信阅读 每日被动羊毛 搭建好青龙面板环境不会搭建的朋友可以自己百度搜索 也可以找我帮忙搭建 收益:自动体现 第一步:微信打开: https://zl1208224758-131480484 ...

  5. 推自己的镜像到网易云

    推送本地镜像 本文介绍如何将本地镜像推送至你的网易云私有镜像仓库,以便在网易云上部署容器或集群. 注:Docker 客户端版本要求 1.7 及以上. 1. 列出本地镜像 docker images 2 ...

  6. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)...

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  7. 前端涨薪必读,node.js入门保姆级教程

    Node.js保姆级教程 1. Node基本概念 2. 第一个node.js程序 3. node创建get请求 4. node创建post请求 1. Node基本概念 1.1 node.js是什么? ...

  8. 舔狗日记更新美化版源码

    我们是狗,舔狗.基于上一版中的数据,重新设计了舔狗日记. 人肉对每段数据的内容.标点符号进行纠错与优化(不一定标准):并按本人理解进行了划重点标记. 接入和风天气API,获取城市.气象.气温.免费版每 ...

  9. js对象、数组、字符串操作总结(保姆级教程)

    对象操作 1. 扩展运算符 作用是遍历某个对象或者数组 testMethod() {// 三个点 ... 俗称扩展运算符或延展运算符,需要注意的是扩展运算符在拷贝的时候只能深拷贝第一层,第二层及以下都 ...

最新文章

  1. 你有过这样的“反应”吗?
  2. Windows XP添加网络打印机的方法
  3. web service notes
  4. 随机数范围扩展方法总结
  5. 浪潮服务器测试文档,ESXI6.7注入浪潮服务器raid驱动测试
  6. javacript中的mvc设计模式
  7. 【tool】关于oracle数据库的安装与使用
  8. 如何在Java中创建内存泄漏?
  9. JAXB 遇到的问题
  10. .net mvc html使用方法,C# ASP.NET MVC HtmlHelper用法汇总
  11. Diango 框架起步
  12. 零基础学FPGA(二):FPGA生产厂家及产品(呕心沥血,小白如何选择板卡)
  13. 应用ImageJ对荧光图片进行半定量分析
  14. 数领科技|solidworks教程:如何打包solidworks工程文件
  15. ipa图片解密 php,ipa文件详解 - 如何提取App图片
  16. 洛谷P2178 [NOI2015]品酒大会 后缀数组+单调栈
  17. 个人项目(一)-- 音乐播放器
  18. Linux学习(六):proftpd搭建,完美解决vsftpd中文引号bug
  19. php支付宝聚合支付源码,ThinkPHP5.1聚合支付源码
  20. 浙江理工大学 我的编程之路 零基础学C/C++ 200题 标程/题解

热门文章

  1. SAP云产品部署方式及定价模型
  2. 管理系统:登录成功后可以选择自己的角色,并查看角色的工作任务(使用多态和抽象类来完成)...
  3. ctfmon 输入法消失了
  4. tensorflow中向量与矩阵相乘
  5. Linux入门篇01~~Linux的快速入门 (简洁,详细,基础)
  6. 【目标检测】60、MMYOLO | 如何使用 MMYOLO 训练模型
  7. iPhone5将于2011年9月7号发行
  8. Linux自学网站推荐
  9. EKLAVYA -- 利用神经网络推断二进制文件中函数的参数
  10. C语言进阶-第39讲:银行储蓄系统(二进制版)开发