微信公众号开发——向指定用户发送模板消息

😊 @ 作者: 一恍过去
💖 @ 主页: https://blog.csdn.net/zhuocailing3390
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: 微信公众号开发——向指定用户发送模板消息
⏱️ @ 创作时间: 2022年12月14日

目录

  • 准备工作
  • 1、定义消息模板
  • 2、定义模板消息发送请求实体类
  • 3、定义订单模板消息实体雷
  • 4、配置RestTemplate请求
  • 5、请求工具类
  • 6、发送模板消息示例

在这里插入图片描述

准备工作

1、调用微信公众号接口,需要实现获取AccessToken,参考《获取AccessToken接口调用凭据》
2、在本地进行联调时,为让微信端能够访问到本地服务,需要进行内网穿透,参考《本地服务器内网穿透实现(NATAPP)》
3、配置微信接口配置信息,用于告诉微信接收消息的回调地址
在这里插入图片描述

1、定义消息模板

微信公众号定义消息模板是指在微信公众平台上,公众号可以预先定义一些消息模板,用于向用户发送特定类型的消息。这些消息模板可以包含固定的文本内容和可替换的变量,用于个性化地向用户发送消息。

在定义消息模板时,公众号需要提供模板标题、模板关键词(用于辅助公众号管理)、模板内容和模板示例。

  • 模板标题:给模板起一个简洁明了的标题,用于在发送消息时进行区分和选择。
  • 模板关键词:为模板设置关键词,方便公众号管理员进行分类和管理。
  • 模板内容:在模板中可以设置固定的文本内容,同时使用变量来指定可替换的部分。变量使用双花括号{{}}包裹,例如{{first.DATA}}、{{keyword1.DATA}}等。这些变量将在实际发送消息时根据具体情况进行替换。

比如新增一个用于订单的模板消息:

在这里插入图片描述

订单编号:{{orderId.DATA}} 订单金额:{{amount.DATA}} 订单时间:{{time.DATA}}

2、定义模板消息发送请求实体类

SendMessageRep:

@EqualsAndHashCode(callSuper = true)
@Data
public class SendMessageRep extends BaseRep {/*** 接收者openid*/private String touser;/*** 模板ID*/private String template_id;/*** 模板跳转链接(海外帐号没有跳转能力),非必须*/private String url;/*** 防重入id。对于同一个openid + client_msg_id, 只发送一条消息,10分钟有效,超过10分钟不保证效果。若无防重入需求,可不填*/private String client_msg_id;/*** 跳小程序所需数据,不需跳小程序可不用传该数据,非必须*/private Miniprogram miniprogram;/*** 模板数据*/private OrderMessageDataRep data;/*** 跳小程序所需数据*/@Datapublic class Miniprogram {/*** 所需跳转到的小程序appid(该小程序 appid 必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏)*/private String appid;/*** 所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar),要求该小程序已发布,暂不支持小游戏,非必须*/private String pagepath;}
}

SendMessageDataRep:

@Data
public class SendMessageDataRep {/*** 模板数据*/private String value;/*** 模板内容字体颜色,不填默认为黑色*/private String color;
}

在这里插入图片描述

3、定义订单模板消息实体雷

业务实体类需要根据实际清情况进行定义

OrderMessageDataRep:

/*** @Description: 推送的订单数据,模板消息,具体字段根据定义的模块来设置* 订单编号:{{orderId.DATA}} 订单金额:{{amount.DATA}} 订单时间:{{time.DATA}}**/
@Data
public class OrderMessageDataRep {/*** 订单编号*/private SendMessageDataRep orderId;/*** 订单金额*/private SendMessageDataRep amount;/*** 订单时间*/private SendMessageDataRep time;
}

4、配置RestTemplate请求

@Component
public class RestHttpRequest {private final RestTemplate restTemplate;public RestHttpRequest(RestTemplate restTemplate) {this.restTemplate = restTemplate;}public Map doHttp(String url, HttpMethod method, Object obj) {HttpHeaders headers = new HttpHeaders();HttpEntity entity = new HttpEntity(obj, headers);ResponseEntity<Map> exchange = restTemplate.exchange(url, method, entity, Map.class);return exchange.getBody();}
}

5、请求工具类

public class MapUtils {/*** 将Map参数转换为字符串** @param map* @return*/public static String mapToString(Map<String, Object> map) {StringBuffer sb = new StringBuffer();map.forEach((key, value) -> {sb.append(key).append("=").append(value.toString()).append("&");});String str = sb.toString();str = str.substring(0, str.length() - 1);return str;}/*** 将Bean对象转换Url请求的字符串** @param t* @param <T>* @return*/public static <T> String getUrlByBean(T t) {String pre = "?";Map<String, Object> map = entityToMap(t);return pre + mapToString(map);}
}

6、发送模板消息示例

说明:

//测试接口:/wechat/sendMsg(向指定用户发送模板消息)
//正常流程:用户在公众号进行操作(购物成功)后,向当前用户发送模板消息
//消息模板的定义如下:其中DATA为固定写法
订单编号:{{orderId.DATA}}
订单金额:{{amount.DATA}}
订单时间:{{time.DATA}}
//在推送完成后,微信服务器会向消息接口发送消息
//orderId、amount、time表示一个属性(名称任意),value为该属性的值,color为显示时的颜色
{	"touser":"OPENID","template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY","url":"http://weixin.qq.com/download",       "data":{"orderId": {"value":"xxxxxxxxxx","color":"#173177"},"amount": {"value":"33.33元","color":"#F6067A"},"time": {"value":"2022-12-12 12:12:12","color":"#FF6931"}}
}

示例代码 :

@Slf4j
@Controller
public class MessageController {/*** 发送模板消息* url和 miniprogram 都是非必填字段,若都不传则模板无跳转;* 若都传,会优先跳转至小程序。开发者可根据实际需要选择其中一种跳转方式即可。* 当用户的微信客户端版本不支持跳小程序时,将会跳转至url。*/@PostMapping(value = "/sendMsg")@ApiOperation(value = "发送模板消息", notes = "发送模板消息")@ResponseBodypublic Map sendMsg() {String url = wxBean.getApiUrl() + InterfaceConstant.SEND_MSG;SendMessageRep rep = new SendMessageRep();rep.setAccess_token(weChantService.getAccessToken());url = url + MapUtils.getUrlByBean(rep);rep.setTouser("推送给具体用户的openId");rep.setTemplate_id("定义的模板Id");rep.setUrl("http://weixin.qq.com");rep.setClient_msg_id(UUIDUtils.getUuId());OrderMessageDataRep orderMessage = new OrderMessageDataRep();// 封装模板数据SendMessageDataRep orderId = new SendMessageDataRep();orderId.setValue(String.valueOf(System.currentTimeMillis()));orderId.setColor("#173177");orderMessage.setOrderId(orderId);SendMessageDataRep amount = new SendMessageDataRep();amount.setValue("3.33");amount.setColor("#F6067A");orderMessage.setAmount(amount);SendMessageDataRep time = new SendMessageDataRep();time.setValue("2022-12-12 12:12:12");time.setColor("#FF6931");orderMessage.setTime(time);rep.setData(orderMessage);return restHttpRequest.doHttp(url, HttpMethod.POST, rep);}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/67254.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信公众号一次性订阅消息功能开发实践

截止到2021年6月10日&#xff0c;微信公众号测试号是不支持“微信公众号一次性订阅消息”的开发&#xff0c;必须用正式的微信公众号测试&#xff0c;那如何在不影响正式的微信公众号运营的情况下来开发这个小功能呢&#xff0c;请看看笔者的实践。 微信一次性订阅官方开发文档…

python实现微信公众号给你的重要用户推送消息

最近小红书上这个很火&#xff0c;觉得做起来应该也不会太难&#xff0c;捣鼓了两天有了初步成效&#xff0c;还有一些功能没实现&#xff08;比如定时推送&#xff09;&#xff0c;保姆级教程&#xff0c;大家可以借鉴&#xff0c;动手给自己重要的人做一个&#xff0c;或许可…

JAVA对接微信公众号(服务号、订阅号)实现模板消息推送功能

最近做了个需求要求对接微信公众号&#xff0c;使用模板进行消息推送&#xff0c;今天抽时间总结一下相关的逻辑。 大概逻辑分为四个步骤&#xff1a; 获取微信调用接口凭证access_token。获取微信模板列表。使用模板进行消息推送。公众号配置服务器URL。 我这里的实现没有使…

微信开发工具实现订阅消息功能

微信开发工具实现订阅消息功能 1、新建文件夹&#xff0c;取名为&#xff1a;push1 2、push1.wxml写下如下代码&#xff1a; <button bindtap"dingyue">订阅</button>3、push1.js写下如下代码&#xff1a; // pages/push1/push1.js Page({/*** 页面…

微信公众号 - Java推送小程序订阅消息给用户

不啰嗦&#xff0c;我们直接开始&#xff01; 本文使用体验版小程序进行调试。 一、开发前小程序准备&#xff1a; 1、登录微信公众平台 点开下面链接&#xff0c;使用微信扫码 微信公众平台 然后选择一个小程序并登录 2、在小程序后台找到Appid、AppSecret、Token、Encod…

微信公众号订阅号开发的学习(二):获取用户发送的消息、简单的自动回复、自定义菜单

获取用户发送的消息 基础 微信服务器会发送两种类型的消息给开发者服务器。 get请求 验证服务器的有效性post请求 微信服务器会将用户发送的数据转发到开发者服务器上 实现 基于微信公众号订阅号开发的学习&#xff08;一&#xff09;&#xff1a;基础知识 auth.js //引…

微信第三方平台集成公众号发送模板消息

最近老板下发了个任务&#xff0c;有一个业务是整合用户的微信公众号&#xff08;服务号&#xff09;&#xff0c;然后在我们的erp系统里给下家客户发送模板消息&#xff0c;找了一下发现微信第三方平台可以实现&#xff0c;那就干起来。 先在微信开放平台&#xff0c;申请一个…

元宇宙iwemeta:元宇宙数字人实践落地应用场景

把虚拟数字人装进你的手机&#xff01;百度、腾讯、讯飞盯准这条新赛道。 短短三个月内&#xff0c;几乎每一家拥有智能语音技术能力的大厂都在采取行动布局虚拟数字人。 百度、华为、阿里等都纷纷引入AI数字人入职&#xff0c;担任技术宣讲员、形象代言人&#xff1b;OPPO、…

考研人常说的“死亡211”和“984.5”是什么学校?

&#x1f603;这几所211院校&#xff0c;真香&#xff01;被称为984.5&#xff01;众所周知&#xff0c;985高校是国内最顶尖的一批名牌大学&#xff0c;每年报考的人都疯狂扎堆&#xff0c;分也很高&#xff0c;想去分一杯羹很难。但考个一般211吧&#xff0c;有时又不甘心&am…

华工计算机网络辅修,【JZT干货】双手献上华工辅修攻略

原标题&#xff1a;【JZT干货】双手献上华工辅修攻略 辅修进行了一个多月&#xff0c;相信小伙伴们也对辅修有了基本的了解。那么各课程的期末考试是怎样的&#xff1f;一些老师上课有什么特点&#xff1f;想了解吗&#xff0c;团仔在此献上纯干货给大家。 当然啦&#xff0c;涉…

z世代消费力白皮书_猫哥清华新传考研|如何让Z世代粉上你?

猫小菇/新传考研猫 不管愿不愿意承认&#xff0c;“Z世代”主宰的未来已经悄然来临了。 每个时代的年轻人都是品牌主最想触及的群体&#xff0c;因为他们代表着市场的未来。 当“千禧一代”仍然是当下消费重点群体时&#xff0c;“Z世代”已经带着与生俱来的敏感力和决策力进入…

本土网络安全公司——上讯信息的“老兵新传”

上讯信息&#xff0c;这个名字听起来很耳熟&#xff0c;但是很多人还是对这个公司有点儿陌生。其实就在今年年初&#xff0c;上讯信息获得了由ISCCC颁发的信息安全风险评估一级服务资质&#xff0c;以及信息安全应急处理二级服务资质&#xff0c;成为金融行业“年度信赖品牌”。…

社工库制作

项目结构 https://github.com/Collapsar-G/social_worker_library 后端使用以下模块&#xff1a; pymsql、flask 前端使用vue搭建 完成过程 在完成上参考了《“系统安全”课程项目&#xff1a;一个实用社工库的建设》&#xff0c;加入了一些自己的理解。 数据初始化 导出为c…

社工库2.0

#大题目 社工库2.0 ###环境 whoosh2.7jieba12306python3.7网上嫖来的网页模板(感谢站长之家 ###实现效果建立的索引文件 好看的页面 更快的查找速度 ###实现过程 具体的实现过程比较简易,毕竟whoosh已经封装的很好了第一步 建立索引并存储schema = Schema(zhanghao=TEXT(sto…

搭建社工库

成品大概是这样子&#xff0c;我把主要源码贴在下面 <!doctype html> <html> <head> <meta charset"utf-8"> <meta name"viewport" content"widthdevice-width,initialscale1"> <title>社工库</title&…

计算机专业的八字,生辰八字自动计算器软件 生辰八字在线计算器

大家对于计算器都很熟悉吧&#xff0c;一点也不陌生&#xff0c;与此同时&#xff0c;那么计算机是大家在日常生活中使用的一个简单软件&#xff0c;在使用的同时&#xff0c;既简单又方便&#xff0c;那么对于计算器大家都有所掌握 &#xff0c;所以这次小编将要给你介绍一下新…

html中如何做出生年月日,出生年月日怎么换成生辰八字

天干有 十个:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。 地支有十二个:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。 二者顺序配合可以产生六十个单位&#xff0c;叫六十甲子。那生出生的年、月、日、时分别用天干、地支配合来表示&#xff0c;正好有八个字&#xff0c;因…

生辰八字计算

年柱、月柱、日柱->根据阴历生日在万年历上查找 时柱计算根据日柱天干以及出生时辰在日上起时表查找 五行属性: 甲属木->阳 乙属木->阴 丙属火->阳 丁属火->阴 戊属土->阳 己属土->阴 庚属金->阳 辛属金->阴 壬属水->阳 癸属水->阴…

找不到电脑C盘下的AppData文件夹怎么办?

电脑C盘下的AppData文件夹消失的解决办法 1. 问题描述2. 解决方案(1) 第一步(2) 第二步(3) 第三步 1. 问题描述 如果找不到电脑C盘下的AppData文件夹&#xff0c;很有可能是该文件夹被隐藏了。 2. 解决方案 (1) 第一步 winR键调出运行框&#xff0c;输入【control folders】…

电脑版微信文件存储在哪个文件夹可以找到

对于办公人员来说电脑上的微信是必不可少的软件&#xff0c;我们通过电脑来传输文件会比手机要方便的多&#xff0c;那么我们的微信文件又存在电脑上的哪个文件夹呢&#xff1f;这类就和大家聊聊电脑版微信文件存储在哪个文件夹可以找到吧。 还有详细的一键重装系统方法 1、当…