微信模板消息推送(内附工具类代码)
生活随笔
收集整理的这篇文章主要介绍了
微信模板消息推送(内附工具类代码)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
文章目录
- 前言
- 一、添加模板消息
- 1、进入微信公众号后台
- 2、模板消息
- 3、填写信息
- 4、审核通过后
- 二、开发步骤
- 1、依赖坐标
- 2.实体类
- 1)AccessToken
- 2、WxTemplate模板消息类
- 3、模板参数类
- 4、正式开发
- 三、总结
前言
记录一次微信公众号开发时,其中比较重要的一步,模板消息推送,同时附上详细的代码以供参考。
一、添加模板消息
1、进入微信公众号后台
找到功能菜单,找到按钮,添加功能插件,如下图:
2、模板消息
点击进入下一步:
3、填写信息
仔细看使用规范,填写信息并提交。
4、审核通过后
从模板库中选择自己需要的模板,如上面已经添加过得模板,详细内容如下:
上面是添加模板的步骤,下面直接进入开发。
二、开发步骤
1、依赖坐标
<dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier></dependency>2.实体类
1)AccessToken
/** * 这个类用来封装access_token的 */ public class AccessToken {private String token;private int expireIn;public String getToken() {return token;}public void setToken(String token) {this.token = token;}public int getExpireIn() {return expireIn;}public void setExpireIn(int expireIn) {this.expireIn = expireIn;} }2、WxTemplate模板消息类
public class WxTemplate {private String toUser;// 模板idprivate String templateId;// 模板消息详情链接private String url;// 消息顶部的颜色private String topColor;// 参数列表private List<TemplateParam> templateParamList;public String getToUser() {return toUser;}public void setToUser(String toUser) {this.toUser = toUser;}public String getTemplateId() {return templateId;}public void setTemplateId(String templateId) {this.templateId = templateId;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getTopColor() {return topColor;}public void setTopColor(String topColor) {this.topColor = topColor;}public List<TemplateParam> getTemplateParamList() {return templateParamList;}public void setTemplateParamList(List<TemplateParam> templateParamList) {this.templateParamList = templateParamList;}public String toJSON() {StringBuffer buffer = new StringBuffer();buffer.append("{");buffer.append(String.format("\"touser\":\"%s\"", this.toUser)).append(",");buffer.append(String.format("\"template_id\":\"%s\"", this.templateId)).append(",");buffer.append(String.format("\"url\":\"%s\"", this.url)).append(",");buffer.append(String.format("\"topcolor\":\"%s\"", this.topColor)).append(",");buffer.append("\"data\":{");TemplateParam param = null;for (int i = 0; i < this.templateParamList.size(); i++) {param = templateParamList.get(i);// 判断是否追加逗号if (i < this.templateParamList.size() - 1) {buffer.append(String.format("\"%s\": {\"value\":\"%s\",\"color\":\"%s\"},", param.getName(), param.getValue(), param.getColor()));} else {buffer.append(String.format("\"%s\": {\"value\":\"%s\",\"color\":\"%s\"}", param.getName(), param.getValue(), param.getColor()));}}buffer.append("}");buffer.append("}");return buffer.toString();} }3、模板参数类
public class TemplateParam {// 参数名称private String name;// 参数值private String value;// 颜色private String color;public TemplateParam(String name, String value, String color) {this.name = name;this.value = value;this.color = color;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}}4、正式开发
//只是部分包,读者仅供参考 import net.sf.json.JSONObject;import java.net.URL;import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils;public class WeiXinUtils {/*** Get请求,方便到一个url接口来获取结果** @param url* @return*/public static JSONObject doGetStr(String url) {DefaultHttpClient defaultHttpClient = new DefaultHttpClient();HttpGet httpGet = new HttpGet(url);JSONObject jsonObject = null;try {HttpResponse response = defaultHttpClient.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");jsonObject = JSONObject.fromObject(result);}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return jsonObject;}//accesstoken获取,这个在消息模板中是必须要的public static AccessToken getAccessToken() {AccessToken accessToken = new AccessToken();// public static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APP_ID+"&secret="+APP_SECRET+"";//读者如果要使用,请替换连接中的appid和secret。JSONObject jsonObject = doGetStr(ProjectConstant.ACCESS_TOKEN_URL);if (jsonObject != null) {accessToken.setToken(jsonObject.getString("access_token"));accessToken.setExpireIn(jsonObject.getInt("expires_in"));}return accessToken;}/*** 审核通知* @param auditDate 审核时间* @param openId 用户openId* @param msg 审核结果* * 方法说明,这里是根据我个人的业务需求,* 传入了审核的时间,审核结果说明,以及用户的openId。* 用户的OpenId在这里起至关重要的作用,每个公众号有唯一一个OpenId,* 通过OpenId程序知道我们要将这个消息推送给公众号下的那个用户*/public static void remind(String auditDate, String openId, String msg) {try {AccessToken access_token = getAccessToken();URL tmpurl = new URL("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token.getToken());WxTemplate tp = new WxTemplate();//这里存放消息模板Id,读者使用时注意替换tp.setTemplateId("模板消息Id");//设置颜色tp.setTopColor("#00DD00");//用户的OpenId,读者需要先获取,后使用tp.setToUser(openId);//这里设置的是推送模板后,点击推送的信息,会跳转到的地方,读者可结合自身需求跳转//比如我这个模板推送给用户以后,我想让用户点击以后跳到百度,我就在这里添加百度的url即可tp.setUrl("https://www.baidu.com");/*** {{first.DATA}}* 审核时间:{{keyword1.DATA}}* 审核结果:{{keyword2.DATA}}* {{remark.DATA}}*/List<TemplateParam> paras = new ArrayList<TemplateParam>();//这里的first 、keyword都是模板的参数,可以单独设置内容和颜色,读者结合自身需求设置即可paras.add(new TemplateParam("first", "您好,您参与的项目审核完毕!", "#173177"));paras.add(new TemplateParam("keyword1", auditDate, "#173177"));paras.add(new TemplateParam("keyword2", msg, "#173177"));paras.add(new TemplateParam("remark", "感谢您的使用。", "#173177"));tp.setTemplateParamList(paras);String response = PostUtil.sendPost(tmpurl, "application/x-www-form-urlencoded;charset=utf-8",tp.toJSON());} catch (Exception e) {System.out.println("消息模板推送发送错误");e.printStackTrace();}} // 测试方法public static void main(String[] args) {WeiXinUtils.remind("2021-2-31 18:36:45","模板消息Id","审核不通过!原因:1、缺少病历 2、图片未上传");}模板消息发送成功以后如下图展示:
如果读者设置了url,点击上图图片可直接跳转到相应的位置。
至此,消息推送的功能结束。
三、总结
微信消息模板的推送是一个重要但是并不复杂的功能,其中里面的一些小坑还是要避免的,比如获取access_token的时候,测试机的IP地址不在公众号配置的白名单获取不到,就会一直获取不到。诸如此类的问题大家只要细心排查就能解决。如文章有错误,请大家评论指正,谢谢!
总结
以上是生活随笔为你收集整理的微信模板消息推送(内附工具类代码)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 会计核算的基本前提
- 下一篇: 2021年10月考试总结