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。(这代码稍作改动,可以在浏览器上运行)

运行即可发送消息。