View Javadoc
1   package com.foxinmy.weixin4j.mp.message;
2   
3   import java.io.Serializable;
4   import java.util.HashMap;
5   import java.util.Map;
6   
7   import com.alibaba.fastjson.annotation.JSONCreator;
8   import com.alibaba.fastjson.annotation.JSONField;
9   import com.foxinmy.weixin4j.util.NameValue;
10  
11  /**
12   * 模板消息
13   *
14   * @className TemplateMessage
15   * @author jinyu(foxinmy@gmail.com)
16   * @date 2014年9月29日
17   * @since JDK 1.6
18   * @see <a href=
19   *      "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN">模板消息</a>
20   */
21  public class TemplateMessage implements Serializable {
22  
23      private static final long serialVersionUID = 7950608393821661436L;
24  
25      /**
26       * 用户的openid
27       */
28      @JSONField(name = "touser")
29      private String toUser;
30      /**
31       * 模板ID
32       */
33      @JSONField(name = "template_id")
34      private String templateId;
35      /**
36       * 点击消息跳转的url
37       */
38      private String url;
39      /**
40       * 头部信息(first第一行)
41       */
42      @JSONField(serialize = false)
43      private NameValue head;
44      /**
45       * 尾部信息(remark最后行)
46       */
47      @JSONField(serialize = false)
48      private NameValue tail;
49  
50      /**
51       * 跳小程序所需数据,不需跳小程序可不用传该数据
52       */
53      @JSONField(name = "miniprogram")
54      private Miniprogram miniprogram;
55      /**
56       * 数据项
57       */
58      @JSONField(name = "data")
59      private Map<String, NameValue> content;
60  
61      private final static String HEAD_KEY = "first";
62      private final static String TAIL_KEY = "remark";
63      private final static String DEFAULT_COLOR = "#173177";
64  
65      @JSONCreator
66      public TemplateMessage(@JSONField(name = "toUser") String toUser, @JSONField(name = "templateId") String templateId,
67              @JSONField(name = "url") String url) {
68          this.toUser = toUser;
69          this.templateId = templateId;
70          this.url = url;
71          this.content = new HashMap<String, NameValue>();
72      }
73  
74      public String getToUser() {
75          return toUser;
76      }
77  
78      public String getTemplateId() {
79          return templateId;
80      }
81  
82      public String getUrl() {
83          return url;
84      }
85  
86      public NameValue getHead() {
87          return head == null ? content.get(HEAD_KEY) : head;
88      }
89  
90      public NameValue getTail() {
91          return tail == null ? content.get(TAIL_KEY) : tail;
92      }
93  
94      public Map<String, NameValue> getContent() {
95          return content;
96      }
97  
98      /**
99       * 新增头部字段(默认颜色为#FF0000)
100      *
101      * @param text
102      *            字段文本
103      * @return
104      */
105     public TemplateMessage pushHead(String text) {
106         return pushHead("#FF0000", text);
107     }
108 
109     /**
110      * 新增头部字段
111      *
112      * @param color
113      *            文字颜色
114      * @param text
115      *            字段文本
116      * @return
117      */
118     public TemplateMessage pushHead(String color, String text) {
119         head = new NameValue(color, text);
120         content.put(HEAD_KEY, head);
121         return this;
122     }
123 
124     /**
125      * 新增尾部字段(默认颜色为#173177)
126      *
127      * @param text
128      *            字段文本
129      * @return
130      */
131     public TemplateMessage pushTail(String text) {
132         return pushTail(DEFAULT_COLOR, text);
133     }
134 
135     /**
136      * 新增尾部字段
137      *
138      * @param color
139      *            文字颜色
140      * @param text
141      *            字段文本
142      * @return
143      */
144     public TemplateMessage pushTail(String color, String text) {
145         tail = new NameValue(color, text);
146         content.put(TAIL_KEY, tail);
147         return this;
148     }
149 
150     /**
151      * 新增字段项(默认颜色为#173177)
152      *
153      * @param key
154      *            预留的字段名
155      * @param text
156      *            字段文本
157      * @return
158      */
159     public TemplateMessage pushItem(String key, String text) {
160         return pushItem(key, DEFAULT_COLOR, text);
161     }
162 
163     /**
164      * 新增字段项
165      *
166      * @param key
167      *            预留的字段名
168      * @param color
169      *            文字颜色
170      * @param text
171      *            字段文本
172      * @return
173      */
174     public TemplateMessage pushItem(String key, String color, String text) {
175         content.put(key, new NameValue(color, text));
176         return this;
177     }
178 
179     /**
180      * 设置所有字段项
181      *
182      * @param items
183      */
184     public void setItems(Map<String, NameValue> items) {
185         this.content = items;
186     }
187 
188     public Miniprogram getMiniprogram() {
189 		return miniprogram;
190 	}
191 
192 	public void setMiniprogram(String appid,String pagepath) {
193         this.miniprogram = new Miniprogram(appid, pagepath);
194     }
195 
196     @Override
197     public String toString() {
198         return "TemplateMessage [toUser=" + toUser + ", templateId=" + templateId + ", url=" + url + ", head="
199                 + getHead() + ", tail=" + getTail() + ", content=" + content + "]";
200     }
201     /**
202      * 小程序参数
203      * @className Miniprogram
204      * @author jinyu(foxinmy@gmail.com)
205      * @date 2018年5月4日
206      * @since JDK 1.7
207      * @see
208      */
209     static class Miniprogram{
210     	  /**
211          * 所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系)
212          */
213         private String appid;
214         /**
215          * 所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar)
216          */
217         private String pagepath;
218 		public Miniprogram(String appid, String pagepath) {
219 			this.appid = appid;
220 			this.pagepath = pagepath;
221 		}
222 		public String getAppid() {
223 			return appid;
224 		}
225 		public String getPagepath() {
226 			return pagepath;
227 		}
228     }
229 }