微信公众号推送模板消息

微信支付成功之后需要将一些订单相关的信息发送到用户的微信上,这时候就需要使用微信【模板消息】

创建模板消息

进入【微信·公众平台】在【功能】->【添加功能插件】中找到【模板消息】,之后填入相关的信息并通过审核之后即可使用微信模板消息
这里写图片描述
先从【模板库】选择一个合适模板,之后添加到【我的模板】中
这里写图片描述
可以看到模板ID,接下来我们就需要使用这个ID去给指定的用户推送模板消息了

为指定的用户推送模板消息

执行此操作之前需要用户的openid和要用到的模板需要什么参数,这点可以通过模板的【详情】进行查看,我这里的模板需要三个参数first、orderMoneySum、orderProductName
这里写图片描述
接下来就需要进行推送信息了,首先我们需要获取用户的openid、模板ID、模板参数数据,将它们以JSON的格式放在String中,之后以POST的方式将这个String提交到https://api.weixin.qq.com/cgi-bin/message/template/send中,代码实现如下

//对该购买用户进行推送微信消息
//要推送的用户openId
String openId = tenant.getOpenId();
//订单支付成功推送信息模板ID
String templateId = "这是你的模板ID";
//点击之后的跳转页面,为空安卓不跳转、IOS空白页面
String url = "";
//首行信息-以下是一些推送信息
String first = "公寓房间【"+addr.getName()+room.getName()+"】订房成功";
//支付金额
String orderMoneySum = ""+indent.getMoney();
//商品信息
String startTime = (rent.getStartTime()+"");
startTime = startTime.substring(0, startTime.length()-2);
String endTime = rent.getEndTime() + "";
endTime = endTime.substring(0, endTime.length()-2);
//在推送信息中如果需要换行可以使用\\n(双斜杠n)来实现
String orderProductName = addr.getName()+room.getName()+"\\n大门密码:" + doorLock.getLockPwd() + "#\\n" + 
    "房门密码:" + roomLock.getLockPwd() + "#\\n" + 
    "密码有效期:" + startTime + "至" + endTime + "\\n" + 
    "还可以在这里写一些其他东西";

//将相关信息
String wxText = "{\"touser\":\""+openId+"\",\"template_id\":\""+templateId+"\",\"url\":\""+url+"\",\"data\":{\"first\":{\"value\":\""+first+"\",\"color\":\"#000000\"},\"orderMoneySum\":{\"value\":\""+orderMoneySum+"\",\"color\":\"#000000\"},\"orderProductName\":{\"value\":\""+orderProductName+"\",\"color\":\"#000000\"}}}";
//获取微信access_token
String accessToken = WxUtils.getAccess_token();
//发送post请求
String resultWx = AppTool.postJSON("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+accessToken, wxText);

实现效果
这里写图片描述

### 实现 Spring Boot 集成微信公众号模板消息推送 #### 准备工作 为了成功集成微信公众号模板消息推送功能到Spring Boot应用中,需完成一系列前置准备。这包括但不限于拥有一个已注册并审核通过的微信公众号账号以及熟悉官方提供的开发文档[^3]。 #### 创建配置类 创建名为`ConfigBean`的配置类用于初始化`RestTemplate`实例,该工具类有助于简化HTTP请求操作,在后续向微信公众平台发起POST请求时会用到此组件。具体代码如下所示: ```java @Configuration public class ConfigBean { @Bean RestTemplate restTemplate(){ return new RestTemplate(); } } ``` 上述代码片段定义了一个带有`@Configuration`注解的Java类,并提供了一种简单的方式来让Spring容器管理`RestTemplate`对象的生命週期[^2]。 #### 获取 Access Token 访问微信公众平台接口前,必须先获得有效的`access_token`参数。可以通过调用微信服务器上的特定URL来换取这个令牌,它对于验证身份至关重要。一般建议将这一过程封装在一个服务方法内部以便重复利用。 #### 组装模板消息数据结构体 设计专门的数据传输对象(DTO),用来承载待发送的信息内容及其属性设置。这些字段应严格遵循微信端所规定的格式要求。例如可以构建这样的POJO类: ```java @Data // Lombok annotation to generate getters and setters automatically. class TemplateMessage { private String touser; private String template_id; private String url; private Map<String, Data> data; static class Data { private String value; private String color; public Data(String value, String color){ this.value = value; this.color = color; } } // Constructors, Getters & Setters... } ``` 这里采用Lombok库减少样板代码量的同时也提高了可读性和维护效率;而静态内部类则代表了单条记录的具体样式描述[^4]。 #### 发送 POST 请求至微信服务器 最后一步便是实际执行网络通信动作——即把之前精心构造好的JSON字符串作为负载载荷传递给目标地址。考虑到安全性因素,推荐使用HTTPS协议连接方式。以下是可能涉及到的关键逻辑实现: ```java @Service @Slf4j public class WeChatService { private final RestTemplate restTemplate; @Autowired public WeChatService(RestTemplateBuilder builder) { this.restTemplate = builder.build(); } /** * Send a message using the configured template ID. */ void sendMessage(TemplateMessage msg, String accessToken) throws URISyntaxException{ URI uri = new URI("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken); ResponseEntity<WechatResponse> responseEntity = restTemplate.postForEntity(uri,msg,WechatResponse.class); log.info(responseEntity.getBody().toString()); } } // Assume there is an appropriate implementation of `WechatResponse`. ``` 这段程序展示了怎样借助于前面提到过的`RestTemplate`发出携带自定义实体的消息体,并处理来自远端的服务响应结果。注意这里的异常捕获机制同样重要,因为它能帮助开发者及时发现潜在错误并采取相应措施加以修正[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值