nodejs:通过测试公众号给微信用户发送消息
记录一次踩坑之旅
微信偷偷改了以后,个人公众号已经不支持主动给单个用户发送消息了,所以要么用企业公众号,要么就用下面的方法。
背景
开发预警功能,服务端出现异常,能够发送消息给特定微信号
成品
https://github.com/font-size/wx-template-message
准备工作
开局:一个开发人员,一个微信号
需要:appID、appsecret、模板ID、微信用户的openid
申请微信测试号
访问 微信公众平台

用微信扫码登录,得到测试号appID、appsecret

配置关注公众号和配置模板
1:关注自己的测试公众号

关注后自动刷新用户列表,右边即是用户的openid
2:新增消息模板

代码开发
从上面的步骤,我们得到了appID、appsecret、模板ID、微信用户的openid
接下来是代码
// 需要填写的地方已经标出
// 一共4个地方 appID、appsecret、模板ID、微信用户的openid
const axios = require('axios');
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
const axiosPost = function (url, params) {
return new Promise((resolve, reject) => {
axios
.post(url, params)
.then(res => {
resolve(res);
})
.catch(err => {
reject(err);
});
});
};
const axiosGet = function (url, params) {
return new Promise((resolve, reject) => {
axios
.get(url, {
params,
})
.then(res => {
resolve(res);
})
.catch(err => {
reject(err);
});
});
};
async function getToken() {
const params = {
grant_type: 'client_credential',
appid: '', // 你的appid 1
secret: '', // 你的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();
const url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' + token;
const params = {
touser: '', // 用户openid 3
template_id: '', // 模板id 4
url: 'http://www.baidu.com',
topcolor: '#FF0000',
data: {
msg: {
value: 'hello!',
color: '#173177',
},
},
};
let res = await axiosPost(url, params);
console.log('res: ', res.data);
}
templateMessageSend();
代码是js,我的运行环境是node。(这代码稍作改动,可以在浏览器上运行)
运行即可发送消息。