微信模板消息推送(内附工具类代码)
生活随笔
收集整理的這篇文章主要介紹了
微信模板消息推送(内附工具类代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、添加模板消息
- 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月考试总结