模板消息

简介

TNWX: TypeScript + Node.js + WeiXin 微信系开发脚手架,支持微信公众号、微信支付、微信小游戏、微信小程序、企业号/企业微信。最最最重要的是能快速的集成至任何 Node.js 框架(Express、Nest、Egg、Koa 等)

概述

微信公众号模板消息的使用权限、设置所属行业、规则、申请、添加、删除以及大家问得比较多的问题可以参考之前写的一篇文章,此文章到目前为止(2019.4.28) 已有 8w+的阅读量 90+的评论 微信公众号开发之模板消息模板消息 - 图1

同时也可以参考官方模板消息接口文档 点击这里模板消息 - 图2

access_token 是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用 access_token

如何获取 access_token ?

TNWX 实现方案

  1. export class TemplateApi {
  2. public static sendTemplateUrl = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s'
  3. private static setIndustryUrl = 'https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token=%s';
  4. private static getIndustryUrl = 'https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=%s';
  5. private static getTemplateIdUrl = 'https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=%s';
  6. private static delTemplateUrl = 'https://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=%s';
  7. private static getAllTemplateUrl = 'https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=%s';
  8. /**
  9. * 发送模板消息
  10. * @param tempJson
  11. */
  12. public static async send(tempJson: string) {
  13. let accessToken = await AccessTokenApi.getAccessToken();
  14. let url = util.format(this.sendTemplateUrl, (<AccessToken>accessToken).getAccessToken);
  15. return HttpKit.getHttpDelegate.httpPost(url, tempJson);
  16. }
  17. /**
  18. * 设置所属行业
  19. * @param industry_id1 公众号模板消息所属行业编号
  20. * @param industry_id2 公众号模板消息所属行业编号
  21. */
  22. public static async setIndustry(industry_id1: string, industry_id2: string) {
  23. let accessToken = await AccessTokenApi.getAccessToken();
  24. let url = util.format(this.setIndustryUrl, (<AccessToken>accessToken).getAccessToken);
  25. return HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
  26. "industry_id1": industry_id1,
  27. "industry_id2": industry_id2
  28. }));
  29. }
  30. /**
  31. * 获取设置的行业信息
  32. */
  33. public static async getIndustry() {
  34. let accessToken = await AccessTokenApi.getAccessToken();
  35. let url = util.format(this.getIndustryUrl, (<AccessToken>accessToken).getAccessToken);
  36. return HttpKit.getHttpDelegate.httpGet(url);
  37. }
  38. /**
  39. * 获取模板列表
  40. * @param templateIdShort 模板库中模板的编号
  41. */
  42. public static async getTemplateId(templateIdShort: string) {
  43. let accessToken = await AccessTokenApi.getAccessToken();
  44. let url = util.format(this.getTemplateIdUrl, (<AccessToken>accessToken).getAccessToken);
  45. return HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
  46. "template_id_short": templateIdShort
  47. }));
  48. }
  49. /**
  50. * 删除模板
  51. */
  52. public static async delTemplate() {
  53. let accessToken = await AccessTokenApi.getAccessToken();
  54. let url = util.format(this.delTemplateUrl, (<AccessToken>accessToken).getAccessToken);
  55. return HttpKit.getHttpDelegate.httpGet(url);
  56. }
  57. /**
  58. * 获取模板列表
  59. */
  60. public static async getAllTemplate() {
  61. let accessToken = await AccessTokenApi.getAccessToken();
  62. let url = util.format(this.getAllTemplateUrl, (<AccessToken>accessToken).getAccessToken);
  63. return HttpKit.getHttpDelegate.httpGet(url);
  64. }

发送模板消息

Express 示例

  1. // 发送模板消息
  2. app.get('/sendTemplate', (req: any, res: any) => {
  3. let templateJson = new TemplateData().New().
  4. setToUser("ofkJSuGtXgB8n23e-y0kqDjJLXxk").
  5. setTemplateId("BzC8RvHu1ICOQfO4N7kp6EWz9VAbISJjV2fO5t7MiXE").
  6. setTemplateUrl("https://gitee.com/javen205/IJPay").
  7. add("first", "恭喜你购买成功!", "#743A3A").
  8. add("keyword1", "IJPay 让支付触手可及", "#0000FF").
  9. add("keyword1", "聚合支付公开课", "#0000FF").
  10. add("keyword2", "免费", "#0000FF").
  11. add("keyword3", "Javen205", "#0000FF").
  12. add("keyword4", "2019-03-12 13:14", "#0000FF").
  13. add("remark", "请点击详情直接看课程直播,祝生活愉快", "#008000").
  14. build();
  15. console.log("templateJson", templateJson);
  16. TemplateApi.send(templateJson).then(data => {
  17. res.send(data);
  18. });
  19. });

Nest 示例

  1. // 发送模板消息
  2. @Get('/sendTemplate')
  3. sendTemplate(@Req() req: Request, @Res() res: Response) {
  4. let templateJson = new TemplateData().New().
  5. setToUser("ofkJSuGtXgB8n23e-y0kqDjJLXxk").
  6. setTemplateId("BzC8RvHu1ICOQfO4N7kp6EWz9VAbISJjV2fO5t7MiXE").
  7. setTemplateUrl("https://gitee.com/javen205/IJPay").
  8. add("first", "恭喜你购买成功!", "#743A3A").
  9. add("keyword1", "IJPay 让支付触手可及", "#0000FF").
  10. add("keyword1", "聚合支付公开课", "#0000FF").
  11. add("keyword2", "免费", "#0000FF").
  12. add("keyword3", "Javen205", "#0000FF").
  13. add("keyword4", "2019-03-12 13:14", "#0000FF").
  14. add("remark", "请点击详情直接看课程直播,祝生活愉快", "#008000").
  15. build();
  16. console.log("templateJson", templateJson);
  17. TemplateApi.send(templateJson).then(data => {
  18. res.send(data);
  19. });
  20. };

上面是通过封装的实体类来构建发送模板消息需要的 JSON 数据,当然你也可从配置文件、数据库……中读取 JSON 数据。

默认 nest.js 底层也是使用的 express ,当然也可以替换成其他框架,nest.js 更多介绍请参考官方文档。

开源推荐