SpringCloud Alibaba 开发微信公众号 (模板消息管理)

简介: SpringCloud Alibaba 开发微信公众号 (模板消息管理)

上一篇讲了对用户与微信交互产生的各种事件的处理,这一篇讲模板消息管理。模板消息一般用于公众号向用户发送重要的服务通知,如在以下场景中(信用卡刷卡通知、商品购买成功通知等)。但是不支持广告营销等对用户造成骚扰的消息,具体注意事项可以参考接口文档。

下面就文档给出的接口进行代码实现并,测试。

1 设置所属行业

查看上送参数: access_token 接口调用凭证 industry_id1    公众号模板消息所属行业编号 (行业编号 1) industry_id2    公众号模板消息所属行业编号 (行业编号 2)

行业代码可以参考文档的行业代码表,这边以前两个IT科技互联网/电子商务、IT科技IT软件与服务 为例子 。

1.微信常量类新增设置所属行业URL WeCharConstant

/**
 * 模版服务相关-设置所属行业
 */
public static final String SET_INDUSTRY = "https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token=ACCESS_TOKEN";
复制代码
  1. 模版消息处理服务类TemplateService
import cn.org.spring.common.util.HttpClientUtils;
import com.ctsi.sddx.constants.WeCharConstant;
import org.springframework.stereotype.Service;
import java.io.IOException;
/**
 * @Author : lizzu
 * @create 2022/10/4 22:03
 * 模版消息处理服务类
 */
@Service
public class TemplateService {
    private final AccessTokenService accessTokenService;
    public TemplateService(AccessTokenService accessTokenService) {
        this.accessTokenService = accessTokenService;
    }
    /**
     * 设置行业信息
     *
     * @param body 请求对象
     * @return
     * @throws IOException
     */
    public String setIndustry(String body) throws IOException {
        return HttpClientUtils.post(WeCharConstant.SET_INDUSTRY.replace("ACCESS_TOKEN", accessTokenService.getAccessToken()),
                body);
    }
}
复制代码

3.模版消息处理控制类TemplateController

import com.ctsi.sddx.service.TemplateService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
/**
 * @Author : lizzu
 * @create 2022/10/4 22:05
 */
@RestController
@RequestMapping("/v1/weChar")
public class TemplateController {
    private final TemplateService templateService;
    public TemplateController(TemplateService templateService) {
        this.templateService = templateService;
    }
    @RequestMapping("/setIndustry")
    public String setIndustry(@RequestBody String body) throws IOException {
        return templateService.setIndustry(body);
    }
}
复制代码

4.发送测试:

网络异常,图片无法展示
|

5.注意:这个接口每个月只能修改一次,一个月内再次调用接口就会提示:更换模板太频繁

{
  "errcode": 43100,
  "errmsg": "change template too frequently rid: 633c4390-47cb6c24-79d91e15"
}
复制代码

2 获取设置的行业信息

查看上面接口设置的信息。 1.微信常量类获取所属行业信息URL WeCharConstant

/**
 * 获取所属行业信息
 */
public static final String GET_INDUSTRY = "https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=ACCESS_TOKEN";
复制代码
  1. 模版消息处理服务类TemplateService 新增获取行业信息getIndustry()方法
/**
 * 获取行业信息
 *
 * @return
 * @throws IOException
 */
public String getIndustry() throws IOException {
    return HttpClientUtils.get(WeCharConstant.GET_INDUSTRY.replace("ACCESS_TOKEN", accessTokenService.getAccessToken()));
}
复制代码

3.模版消息处理控制类TemplateController 新增/getIndustry接口

@RequestMapping("/getIndustry")
public String getIndustry() throws IOException {
    return templateService.getIndustry();
}
复制代码

4.发送测试:

网络异常,图片无法展示
|

3 获得模板ID

根据模板库中的模板编号进行模板id查询,我们新增模板直接可以在管理后台查看到,所以就暂时不测试此接口。

网络异常,图片无法展示
|

4 获取模板列表

推送模板消息之前需要设置模板,设置的模板是有限制的,允许发送的模板消息必须是用户接受过账号主体提供过服务的(已关注的用户),严禁用户未接受服务而向其推送模板消息。发送的内容不涉及广告营销骚扰用户。 我们可以下载允许发的模板实例,然后使用模板示例的内容来设置我们的模板。

网络异常,图片无法展示
|
设置模板:

网络异常,图片无法展示
|

设置模板编号后就可以通过接口获取模板列表了。

1.微信常量类新增 获取所有模板信息URL WeCharConstant

/**
 * 获取所有模版信息
 */
public static final String GET_ALL_PRIVATE_TEMPLATE = "https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=ACCESS_TOKEN";
复制代码
  1. 模版消息处理服务类TemplateService 新增获取微信公众平台全部模版消息getTemplateList()方法
/**
 * 获取微信公众平台全部模版消息
 *
 * @return
 * @throws IOException
 */
public String getTemplateList() throws IOException {
    return HttpClientUtils.get(WeCharConstant.GET_ALL_PRIVATE_TEMPLATE.replace("ACCESS_TOKEN", accessTokenService.getAccessToken()));
}
复制代码

3.模版消息处理控制类TemplateController 新增/getTemplateList接口

@RequestMapping("/getTemplateList")
public String getTemplateList() throws IOException {
    return templateService.getTemplateList();
}
复制代码

4.发送测试:

网络异常,图片无法展示
|

5 删除模板

1.微信常量类新增 获取所有模板信息URL WeCharConstant

/**
 * 删除模版信息
 */
public static final String DELETE_PRIVATE_TEMPLATE = "https://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=ACCESS_TOKEN";
复制代码
  1. 模版消息处理服务类TemplateService 新增删除微信公众平台模版消息deleteTemplateList()方法
/**
 * 删除微信公众平台模版消息
 *
 * @return
 * @throws IOException
 */
public String deleteTemplateList(String body) throws IOException {
    return HttpClientUtils.post(WeCharConstant.DELETE_PRIVATE_TEMPLATE.replace("ACCESS_TOKEN", accessTokenService.getAccessToken()),body);
}
复制代码

3.模版消息处理控制类TemplateController 新增/deleteTemplateList接口

@RequestMapping("/deleteTemplateList")
public String deleteTemplateList(@RequestBody String body) throws IOException {
    return templateService.deleteTemplateList(body);
}
复制代码

4.发送测试:

网络异常,图片无法展示
|

可以发现原来的 签到确认通知 已经删除了

6 发送模板消息

1.微信常量类新增 获取所有模板信息URL TEMPLATE_SEND

/**
 * 发送模版消息
 */
public static final String TEMPLATE_SEND = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
复制代码
  1. 模版消息处理服务类TemplateService 新增发送模版消息send()方法
/**
 * 发送模版消息
 *
 * @param body 请求数据
 * @return
 * @throws IOException
 */
public String send(String body) throws IOException {
    return HttpClientUtils.post(WeCharConstant.TEMPLATE_SEND.replace("ACCESS_TOKEN", accessTokenService.getAccessToken()), body);
}
复制代码

3.模版消息处理控制类TemplateController 新增/send接口

@RequestMapping("/send")
public String send(@RequestBody String body) throws IOException {
    return templateService.send(body);
}
复制代码

4.发送测试:

( 说明:

touser: 接收者openid 在用户列表中找要推送的用户微信号id即可。
复制代码

网络异常,图片无法展示
|
template_id: 模板ID miniprogram: 跳小程序所需数据,不需跳小程序可不用传该数据 这块没有小程序就不传了 ) 测试报文:

{
           "touser":"oITpR58LM-HJG0Fa4BY6MkOCG5lM",
           "template_id":"wteq1Q-OdlTEpXZiqpJ00jEHTWBKTsdsfJ9cl1eZodo",
           "url":"http://weixin.qq.com/download",  
        //    "miniprogram":{
        //      "appid":"xiaochengxuappid12345",
        //      "pagepath":"index?foo=bar"
        //    },
           "client_msg_id":"MSG_000001",
           "data":{
                   "first": {
                       "value":"尊敬的客户,您的订单已支付成功!",
                       "color":"#173177"
                   },
                   "keyword1":{
                       "value":"奇怪牌巧克力",
                       "color":"#173177"
                   },
                   "keyword2": {
                       "value":"20221005A001",
                       "color":"#173177"
                   },
                   "keyword3": {
                       "value":"66.89元",
                       "color":"#173177"
                   },
                   "keyword4": {
                       "value":"2022年10月5日 14:46",
                       "color":"#173177"
                   },
                   "remark":{
                       "value":"感谢您的光临,欢迎再次购买!",
                       "color":"#173177"
                   }
           }
       }
复制代码

网络异常,图片无法展示
|

效果:

网络异常,图片无法展示
|

7 事件推送

我们可以发现,当模板消息发送成功时,我们的后台会收到 Status: success 的成功事件推送

接收到微信返回的消息:<xml><ToUserName><![CDATA[gh_1e06f4c4ca61]]></ToUserName>
<FromUserName><![CDATA[oITpR58LM-HJG0Fa4BY6MkOCG5lM]]></FromUserName>
<CreateTime>1664951827</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>
<MsgID>2606500835203973120</MsgID>
<Status><![CDATA[success]]></Status>
</xml>
复制代码

送达由于用户拒收(用户设置拒绝接收公众号消息)而失败时,推送的 XML 如下:

<xml> 
  <ToUserName><![CDATA[gh_7f083739789a]]></ToUserName>  
  <FromUserName><![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]></FromUserName>  
  <CreateTime>1395658984</CreateTime>  
  <MsgType><![CDATA[event]]></MsgType>  
  <Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>  
  <MsgID>200163840</MsgID>  
  <Status><![CDATA[failed:user block]]></Status> 
</xml>
复制代码

送达由于其他原因失败时,推送的 XML 如下:

<xml> 
  <ToUserName><![CDATA[gh_7f083739789a]]></ToUserName>  
  <FromUserName><![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]></FromUserName>  
  <CreateTime>1395658984</CreateTime>  
  <MsgType><![CDATA[event]]></MsgType>  
  <Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>  
  <MsgID>200163840</MsgID>  
  <Status><![CDATA[failed: system failed]]></Status> 
</xml>
复制代码

至此模板消息管理完成。 下一篇: 网页授权获取用户基本信息



相关文章
|
2月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
16天前
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
16天前
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。
|
1月前
|
人工智能 自然语言处理 小程序
技术小白如何利用DeepSeek半小时开发微信小程序?
通过通义灵码的“AI程序员”功能,即使没有编程基础也能轻松创建小程序或网页。借助DeepSeek V3和R1满血版模型,用户只需用自然语言描述需求,就能自动生成代码并优化程序。例如,一个文科生仅通过描述需求就成功开发了一款记录日常活动的微信小程序。此外,通义灵码还提供智能问答模式,帮助用户解决开发中的各种问题,极大简化了开发流程,让普通人的开发体验更加顺畅。
861 11
技术小白如何利用DeepSeek半小时开发微信小程序?
|
1月前
|
小程序 JavaScript 前端开发
微信小程序开发全流程:从注册到上线的完整指南
这篇文章详细记录了微信小程序的完整开发到最终上线的每一个步骤。适合对小程序开发感兴趣的个人开发者或希望了解完整流程的学习者,涵盖了云开发、事件绑定、生命周期管理、组件使用等关键内容。
222 11
|
2月前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
563 1
|
1月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
1月前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
2月前
|
JSON 缓存 小程序
微信小程序组件封装与复用:提升开发效率
本文深入探讨了微信小程序的组件封装与复用,涵盖组件的意义、创建步骤、属性与事件处理,并通过自定义弹窗组件的案例详细说明。组件封装能提高代码复用性、开发效率和可维护性,确保UI一致性。掌握这些技能有助于构建更高质量的小程序。
|
2月前
|
人工智能 开发框架 机器人
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
3176 15
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程

热门文章

最新文章