前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TNW-公众号发送模板消息

TNW-公众号发送模板消息

作者头像
Javen
发布2019-07-09 01:06:26
7390
发布2019-07-09 01:06:26
举报
文章被收录于专栏:酷玩时刻酷玩时刻

TNW-发送模板消息

简介

TNW: TypeScript(The) + Node.js(Next) + WeChat 微信公众号开发脚手架,支持 http 模块扩展、支持任何 Node.js 的服务端框架(Express、NestJS、Egg、Koa 等)

概述

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

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

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

获取 access_token 详细介绍请参考之前写的文章

TNW-获取公众号的 access_token CSDN

TNW-获取公众号的 access_token 开源中国

TNW-获取公众号的 access_token 掘金

TNW 中已实现的接口

代码语言:javascript
复制
export class TemplateApi {
    public static sendTemplateUrl = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s'
    private static setIndustryUrl = 'https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token=%s';
    private static getIndustryUrl = 'https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=%s';
    private static getTemplateIdUrl = 'https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=%s';
    private static delTemplateUrl = 'https://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=%s';
    private static getAllTemplateUrl = 'https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=%s';

    /**
     * 发送模板消息
     * @param tempJson 
     */
    public static async send(tempJson: string) {
        let accessToken = await AccessTokenApi.getAccessToken();
        let url = util.format(this.sendTemplateUrl, (<AccessToken>accessToken).getAccessToken);
        return HttpKit.getHttpDelegate.httpPost(url, tempJson);
    }
    /**
     * 设置所属行业
     * @param industry_id1 公众号模板消息所属行业编号
     * @param industry_id2 公众号模板消息所属行业编号
     */
    public static async setIndustry(industry_id1: string, industry_id2: string) {
        let accessToken = await AccessTokenApi.getAccessToken();
        let url = util.format(this.setIndustryUrl, (<AccessToken>accessToken).getAccessToken);
        return HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
            "industry_id1": industry_id1,
            "industry_id2": industry_id2
        }));
    }
    /**
     * 获取设置的行业信息
     */
    public static async getIndustry() {
        let accessToken = await AccessTokenApi.getAccessToken();
        let url = util.format(this.getIndustryUrl, (<AccessToken>accessToken).getAccessToken);
        return HttpKit.getHttpDelegate.httpGet(url);
    }
    /**
     * 获取模板列表
     * @param templateIdShort 模板库中模板的编号
     */
    public static async getTemplateId(templateIdShort: string) {
        let accessToken = await AccessTokenApi.getAccessToken();
        let url = util.format(this.getTemplateIdUrl, (<AccessToken>accessToken).getAccessToken);
        return HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
            "template_id_short": templateIdShort
        }));
    }
    /**
     * 删除模板
     */
    public static async delTemplate() {
        let accessToken = await AccessTokenApi.getAccessToken();
        let url = util.format(this.delTemplateUrl, (<AccessToken>accessToken).getAccessToken);
        return HttpKit.getHttpDelegate.httpGet(url);
    }
    /**
     * 获取模板列表
     */
    public static async getAllTemplate() {
        let accessToken = await AccessTokenApi.getAccessToken();
        let url = util.format(this.getAllTemplateUrl, (<AccessToken>accessToken).getAccessToken);
        return HttpKit.getHttpDelegate.httpGet(url);
    }

发送模板消息

Express 示例如下:

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

Nest 示例如下:

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

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

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

开源推荐

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.07.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 概述
  • TNW 中已实现的接口
  • 发送模板消息
  • 开源推荐
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档