模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。对于一般的服务号而言,模板ID行业之类会事先配置好,所以用代码控制的只有发送了。
准备工作:已通过认证的服务号或者测试公众号
一、使用规则
- 所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口
- 需要选择公众账号服务所处的2个行业,每月可更改1次所选行业
- 在所选择行业的模板库中选用已有的模板进行调用
- 每个账号可以同时使用25个模板
- 当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制,以公众号MP后台开发者中心页面中标明的数字为准
二、接口文档规范
- 模板消息调用时主要需要模板ID和模板中各参数的赋值内容
- 模板中参数内容必须以".DATA"结尾,否则视为保留字
- 模板保留符号"{{ }}"
测试公众号可以随意定义,正式的必须用模板库中的
三、 封装模板消息
以下是我使用的模板消息示例
{{first.DATA}} 旅行活动名称:{{keyword1.DATA}} 订单金额:{{keyword2.DATA}} 旅行时间:{{keyword3.DATA}} 参与人数:{{keyword4.DATA}} {{remark.DATA}}
发送模板消息的接口:https://api.weixin.qq.com/cgi-bin/message/template/send (?access_token=ACCESS_TOKEN)
POST数据示例如下:
{ "touser":"OPENID", "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY", "url":"http://weixin.qq.com/download", "miniprogram":{ "appid":"xiaochengxuappid12345", "pagepath":"index?foo=bar" }, "data":{ "first": { "value":"恭喜你购买成功!", "color":"#173177" }, "keynote1":{ "value":"巧克力", "color":"#173177" }, "keynote2": { "value":"39.8元", "color":"#173177" }, "keynote3": { "value":"2014年9月22日", "color":"#173177" }, "remark":{ "value":"欢迎再次购买!", "color":"#173177" } } }
package com.phil.wechatmsg.model.template.req; import java.util.TreeMap; import com.phil.common.annotation.NotRequire; /** * 模板消息 * @author phil * @date 2017年7月2日 * */ public class WechatTemplateMsg { private String touser; //接收者openid private String template_id; //模板ID @NotRequire//只是个标识 private String url; //模板跳转链接 // "miniprogram":{ 未加入 // "appid":"xiaochengxuappid12345", // "pagepath":"index?foo=bar" // }, private TreeMap<String, TreeMap<String, String>> data; //data数据 public String getTouser() { return touser; } public void setTouser(String touser) { this.touser = touser; } public String getTemplate_id() { return template_id; } public void setTemplate_id(String template_id) { this.template_id = template_id; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public TreeMap<String, TreeMap<String, String>> getData() { return data; } public void setData(TreeMap<String, TreeMap<String, String>> data) { this.data = data; } /** * 参数 * @param value * @param color 可不填 * @return */ public static TreeMap<String, String> item(String value, String color) { TreeMap<String, String> params = new TreeMap<String, String>(); params.put("value", value); params.put("color", color); return params; } }
四、发送模板消息
/** * */ package com.phil.wechatmsg.service.impl; import java.util.TreeMap; import org.springframework.stereotype.Service; import com.phil.common.config.WechatConfig; import com.phil.common.util.HttpReqUtil; import com.phil.common.util.JsonUtil; import com.phil.wechatmsg.model.template.resp.TemplateMsgResult; import com.phil.wechatmsg.service.WechatTemplateMsgService; /** * 模板消息接口实现类 * @author phil * @date 2017年7月31日 * */ @Service public class WechatTemplateMsgServiceImpl implements WechatTemplateMsgService { /** * 发送模板消息 * @param accessToken * @param data * @return 状态 */ @Override public TemplateMsgResult sendTemplate(String accessToken, String data) { TemplateMsgResult templateMsgResult = null; TreeMap<String,String> params = new TreeMap<String,String>(); params.put("access_token", accessToken); String result = HttpReqUtil.HttpsDefaultExecute(HttpReqUtil.POST_METHOD, WechatConfig.SEND_TEMPLATE_MESSAGE, params, data); templateMsgResult = JsonUtil.fromJson(result, TemplateMsgResult.class); return templateMsgResult; } }
package com.phil.wechatmsg.model.template.resp; import com.phil.common.result.ResultState; /** * 模板消息 返回的结果 * @author phil * @date 2017年6月30日 * */ public class TemplateMsgResult extends ResultState { /** * */ private static final long serialVersionUID = 3198012785950215862L; private String msgid; // 消息id(发送模板消息) public String getMsgid() { return msgid; } public void setMsgid(String msgid) { this.msgid = msgid; } }
package com.phil.common.result; import java.io.Serializable; /** * 微信API返回状态 * * @author phil * @date 2017年7月2日 * */ public class ResultState implements Serializable { /** * */ private static final long serialVersionUID = 1692432930341768342L; //@SerializedName("errcode") private int errcode; // 状态 //@SerializedName("errmsg") private String errmsg; //信息 public int getErrcode() { return errcode; } public void setErrcode(int errcode) { this.errcode = errcode; } public String getErrmsg() { return errmsg; } public void setErrmsg(String errmsg) { this.errmsg = errmsg; } }
工具类参考,详情点击
五、根据业务调用方法
一般注册成功、支付成功、支付失败等等情况下会用到,以下只是个示例controller
package com.phil.wechatmsg.controller; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import com.phil.common.util.JsonUtil; import com.phil.wechatmsg.model.template.req.WechatTemplateMsg; import com.phil.wechatmsg.model.template.resp.TemplateMsgResult; import com.phil.wechatmsg.service.WechatTemplateMsgService; /** * 模板消息示例,只是个示例 * @author phil * @date 2017年8月1日 * */ @Controller public class WechatTemplateMsgController { public static final Logger logger = Logger.getLogger(WechatTemplateMsgController.class); @Autowired private WechatTemplateMsgService wechatTemplateMsgService; public TemplateMsgResult sendTemplate(HttpServletRequest request, HttpServletResponse response){ TemplateMsgResult templateMsgResult = null; TreeMap<String,TreeMap<String,String>> params = new TreeMap<String,TreeMap<String,String>>(); //根据具体模板参数组装 params.put("first",WechatTemplateMsg.item("您的户外旅行活动订单已经支付完成,可在我的个人中心中查看", "#000000")); params.put("keyword1",WechatTemplateMsg.item("8.1发现尼泊尔—人文与自然的旅行圣地", "#000000")); params.put("keyword2",WechatTemplateMsg.item("5000元", "#000000")); params.put("keyword3",WechatTemplateMsg.item("2017.1.2", "#000000")); params.put("keyword4",WechatTemplateMsg.item("5", "#000000")); params.put("remark",WechatTemplateMsg.item("请届时携带好身份证件准时到达集合地点,若临时退改将产生相应损失,敬请谅解,谢谢!", "#000000")); WechatTemplateMsg wechatTemplateMsg = new WechatTemplateMsg(); wechatTemplateMsg.setTemplate_id("Ub2oYYFPf8ofmA17H31Zqu9Z_HLycZ7MC-Dx_Se1Nkw"); wechatTemplateMsg.setTouser("241235134"); wechatTemplateMsg.setUrl("http://music.163.com/#/song?id=27867140"); wechatTemplateMsg.setData(params); String data = JsonUtil.toJson(wechatTemplateMsg); templateMsgResult = wechatTemplateMsgService.sendTemplate("accessToken", data); return templateMsgResult; } }
相关推荐
主要介绍了java实现微信公众平台发送模板消息的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
以订单推送为例,主要为大家详细介绍了java实现微信公众号发送模版消息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
3. 微信公众平台开发之Struts2 (免费) 25:31 4. 微信公众平台开发之Spring MVC 27:12 5. 识别微信浏览器 24:40 6. 限制只允许微信浏览器访问 23:30 7. 一套程序服务多个账号---原始ID 17:46 8. 一套程序服务多个账号...
模板消息,带参数二维码接口的调用,免去复杂的学习过程简单粗暴,对于刚上手微信api接口开发的,可以很方面的上手开发,做到真正免去学习研究api的复杂流程,即用即会,调用代码简单易懂,带中文文档以及中文注释,...
EggJS插件之微信公众平台基本服务源码.zip 微信小程序 小程序登录 小程序授权 小程序支付 推送模板消息 检测是否含有敏感词 生成二维码/小程序码 接入在线客服消息 微信服务号 网页授权 发送模板消息 获取...
今天我们给大家分享一个使用微信消息模板每日定时推送早安问候语和天气预报的功能,学会了,块给你女朋友安排上吧 功能点: 1、微信公众平台申请账号及微信开放接口的调用。 2、百度地图天气API接口的调用。 3、...
Java微信公众平台开发,基于springMVC技术和xstream,json等技术。
jwx是开源的java公众号开发MVC框架,基于spring配置文件和微信消息或事件注解,通过微信上下文处理一个或多个微信公众号服务请求。目的主要有两个,其一生封装微信请求xml消息为java实体对象,将返回对象转换为xml...
微信开发即微信公众平台开发,将企业信息、服务、活动等内容通过微信网页的方式进行表现,用户通过简单的设置,就能生成微信3G网站。通过微信公众平台将企业品牌展示给微信用户,减少宣传成本,建立企业与消费者、...
微信公众号开发时需要替换 jdk 中的两个 jar 包,否则会抛出 AesException
根据whallan的功能完善了用户列表获取和用户详细...功能包括:获取所有用户列表(含fakeid),用户详细信息(微信号,昵称,省市区等),循环群发消息。 原版地址:http://download.csdn.net/detail/whallan/6259611
微信公众账号 java 模板,自动回复,图文回复,声音回复
微信公众号的开发文档是微信公众平台为开发者提供的一份详细指南,旨在帮助开发者了解公众平台的开发规则、API接口、开发流程和最佳实践等。以下是对微信公众号开发文档的主要内容和特点的概述: 一、开发文档概述 ...
微信服务号是一个为企业和组织提供更强大的业务服务与用户管理能力的公众平台,它允许开发者通过API接口实现各种功能,例如自定义菜单、消息推送、用户管理等。本教程将深入探讨如何利用Java实现这些功能。 首先,...
首先,在微信公众平台开通消息推送功能,并添加消息模板。可以从模板库选择模板也可以创建一个模板,模板添加之后,模板ID我们接下来要用的。 发送模板消息需要用到accesstoken、formId和openID。accesstoken获取及...
及时和用户进行沟通以及反馈也是微信公众号开发的一个重要内容,那么微信客服和模板就解决了这个问题,本套课程带领大家一起去学习客服消息和模板消息
需要进入微信小程序后台,进入订阅消息 模块,选用公共模板库→一次性消息订阅→订单支付成功提醒,选择自己需要的模板行内容。 本项目依次选用了5个选项: 订单编号 店铺名称 付款金额 付款日期 备注 进入项目 ...
使用maven管理,基于spring boot开发,数据库使用的mysql,对数据操作使用的是spring boot jpa,页面使用的是thymeleaf模板引擎,并用spring-boot-devtools做了热部署,项目中做了开发文档(和参考微信公众平台应用...