欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

微信模板消息推送(内附工具类代码)

发布时间:2023/12/20 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 微信模板消息推送(内附工具类代码) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 前言
  • 一、添加模板消息
      • 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地址不在公众号配置的白名单获取不到,就会一直获取不到。诸如此类的问题大家只要细心排查就能解决。如文章有错误,请大家评论指正,谢谢!

总结

以上是生活随笔为你收集整理的微信模板消息推送(内附工具类代码)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。