优化模版消息代码,添加默认构造方法

This commit is contained in:
Binary Wang 2017-12-16 12:46:15 +08:00
parent cae504b6bd
commit ce281bea32
5 changed files with 60 additions and 36 deletions

View File

@ -1,24 +1,28 @@
package cn.binarywang.wx.miniapp.bean; package cn.binarywang.wx.miniapp.bean;
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
import lombok.Builder; import lombok.*;
import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* 模板消息.
* 参考 https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#接口说明 模板消息部分 * 参考 https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#接口说明 模板消息部分
* *
* @author <a href="https://github.com/binarywang">Binary Wang</a> * @author <a href="https://github.com/binarywang">Binary Wang</a>
*/ */
@Data @Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder @Builder
public class WxMaTemplateMessage implements Serializable { public class WxMaTemplateMessage implements Serializable {
private static final long serialVersionUID = 5063374783759519418L; private static final long serialVersionUID = 5063374783759519418L;
/** /**
* 接收者用户 openid.
* <pre> * <pre>
* 参数touser * 参数touser
* 是否必填 * 是否必填
@ -28,6 +32,7 @@ public class WxMaTemplateMessage implements Serializable {
private String toUser; private String toUser;
/** /**
* 所需下发的模板消息的id.
* <pre> * <pre>
* 参数template_id * 参数template_id
* 是否必填 * 是否必填
@ -37,6 +42,7 @@ public class WxMaTemplateMessage implements Serializable {
private String templateId; private String templateId;
/** /**
* 点击模板卡片后的跳转页面仅限本小程序内的页面.
* <pre> * <pre>
* 参数page * 参数page
* 是否必填 * 是否必填
@ -46,6 +52,7 @@ public class WxMaTemplateMessage implements Serializable {
private String page; private String page;
/** /**
* 表单提交场景下 submit 事件带上的 formId支付场景下为本次支付的 prepay_id.
* <pre> * <pre>
* 参数form_id * 参数form_id
* 是否必填 * 是否必填
@ -55,16 +62,17 @@ public class WxMaTemplateMessage implements Serializable {
private String formId; private String formId;
/** /**
* 模板内容不填则下发空模板.
* <pre> * <pre>
* 参数data * 参数data
* 是否必填 * 是否必填
* 描述 模板内容不填则下发空模板 * 描述 模板内容不填则下发空模板
* </pre> * </pre>
*/ */
@Builder.Default private List<Data> data;
private final List<Data> data = new ArrayList<>();
/** /**
* 模板内容字体的颜色不填默认黑色.
* <pre> * <pre>
* 参数color * 参数color
* 是否必填 * 是否必填
@ -74,6 +82,7 @@ public class WxMaTemplateMessage implements Serializable {
private String color; private String color;
/** /**
* 模板需要放大的关键词不填则默认无放大.
* <pre> * <pre>
* 参数emphasis_keyword * 参数emphasis_keyword
* 是否必填 * 是否必填
@ -82,6 +91,15 @@ public class WxMaTemplateMessage implements Serializable {
*/ */
private String emphasisKeyword; private String emphasisKeyword;
public WxMaTemplateMessage addData(Data datum) {
if (this.data == null) {
this.data = new ArrayList<>();
}
this.data.add(datum);
return this;
}
public String toJson() { public String toJson() {
return WxMaGsonBuilder.create().toJson(this); return WxMaGsonBuilder.create().toJson(this);
} }

View File

@ -66,7 +66,7 @@ public class WxMaMsgServiceImplTest {
.templateId(config.getTemplateId()) .templateId(config.getTemplateId())
.emphasisKeyword("keyword1.DATA") .emphasisKeyword("keyword1.DATA")
.build(); .build();
//templateMessage.addData( new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177"));
this.wxService.getMsgService().sendTemplateMsg(templateMessage); this.wxService.getMsgService().sendTemplateMsg(templateMessage);
} }

View File

@ -1,7 +1,6 @@
package me.chanjar.weixin.mp.bean.template; package me.chanjar.weixin.mp.bean.template;
import lombok.Builder; import lombok.*;
import lombok.Data;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.io.Serializable; import java.io.Serializable;
@ -9,46 +8,56 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* 模板消息.
* 参考 http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN 发送模板消息接口部分 * 参考 http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN 发送模板消息接口部分
*
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/ */
@Data @Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder @Builder
public class WxMpTemplateMessage implements Serializable { public class WxMpTemplateMessage implements Serializable {
private static final long serialVersionUID = 5063374783759519418L; private static final long serialVersionUID = 5063374783759519418L;
/** /**
* 接收者openid * 接收者openid.
*/ */
private String toUser; private String toUser;
/** /**
* 模板ID * 模板ID.
*/ */
private String templateId; private String templateId;
/** /**
* 模板跳转链接.
* <pre> * <pre>
* 跳小程序所需数据不需跳小程序可不用传该数据
* url和miniprogram都是非必填字段若都不传则模板无跳转若都传会优先跳转至小程序 * url和miniprogram都是非必填字段若都不传则模板无跳转若都传会优先跳转至小程序
* 开发者可根据实际需要选择其中一种跳转方式即可当用户的微信客户端版本不支持跳小程序时将会跳转至url * 开发者可根据实际需要选择其中一种跳转方式即可当用户的微信客户端版本不支持跳小程序时将会跳转至url
* </pre> * </pre>
*/ */
private String url; private String url;
/** /**
* 模板跳转链接 * 跳小程序所需数据不需跳小程序可不用传该数据.
* *
* @see #url * @see #url
*/ */
private MiniProgram miniProgram; private MiniProgram miniProgram;
/** /**
* 模板数据 * 模板数据.
*/ */
@Builder.Default private List<WxMpTemplateData> data;
private final List<WxMpTemplateData> data = new ArrayList<>();
public void addWxMpTemplateData(WxMpTemplateData datum) { public WxMpTemplateMessage addData(WxMpTemplateData datum) {
if (this.data == null) {
this.data = new ArrayList<>();
}
this.data.add(datum); this.data.add(datum);
return this;
} }
public String toJson() { public String toJson() {
@ -56,17 +65,13 @@ public class WxMpTemplateMessage implements Serializable {
} }
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
public static class MiniProgram implements Serializable { public static class MiniProgram implements Serializable {
private static final long serialVersionUID = -7945254706501974849L; private static final long serialVersionUID = -7945254706501974849L;
private String appid; private String appid;
private String pagePath; private String pagePath;
public MiniProgram(String appid, String pagePath) {
this.appid = appid;
this.pagePath = pagePath;
}
} }
} }

View File

@ -10,8 +10,9 @@ import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomStringUtils;
import org.testng.*; import org.testng.Assert;
import org.testng.annotations.*; import org.testng.annotations.Guice;
import org.testng.annotations.Test;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
@ -37,12 +38,12 @@ public class WxMpTemplateMsgServiceImplTest {
.getWxMpConfigStorage(); .getWxMpConfigStorage();
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
.toUser(configStorage.getOpenid()) .toUser(configStorage.getOpenid())
.templateId(configStorage.getTemplateId()).build(); .templateId(configStorage.getTemplateId())
templateMessage.addWxMpTemplateData( .url(" ")
new WxMpTemplateData("first", dateFormat.format(new Date()), "#FF00FF")); .build();
templateMessage.addWxMpTemplateData(
new WxMpTemplateData("remark", RandomStringUtils.randomAlphanumeric(100), "#FF00FF")); templateMessage.addData(new WxMpTemplateData("first", dateFormat.format(new Date()), "#FF00FF"))
templateMessage.setUrl(" "); .addData(new WxMpTemplateData("remark", RandomStringUtils.randomAlphanumeric(100), "#FF00FF"));
String msgId = this.wxService.getTemplateMsgService().sendTemplateMsg(templateMessage); String msgId = this.wxService.getTemplateMsgService().sendTemplateMsg(templateMessage);
Assert.assertNotNull(msgId); Assert.assertNotNull(msgId);
System.out.println(msgId); System.out.println(msgId);

View File

@ -1,8 +1,8 @@
package me.chanjar.weixin.mp.bean.template; package me.chanjar.weixin.mp.bean.template;
import org.testng.annotations.*; import org.testng.annotations.Test;
import static org.testng.AssertJUnit.*; import static org.testng.AssertJUnit.assertEquals;
/** /**
* <pre> * <pre>
@ -13,7 +13,7 @@ import static org.testng.AssertJUnit.*;
*/ */
public class WxMpTemplateMessageTest { public class WxMpTemplateMessageTest {
@Test @Test
public void testToJson() throws Exception { public void testToJson() {
WxMpTemplateMessage tm = WxMpTemplateMessage.builder() WxMpTemplateMessage tm = WxMpTemplateMessage.builder()
.toUser("OPENID") .toUser("OPENID")
.templateId("ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY") .templateId("ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY")
@ -21,9 +21,9 @@ public class WxMpTemplateMessageTest {
.url("http://weixin.qq.com/download") .url("http://weixin.qq.com/download")
.build(); .build();
tm.addWxMpTemplateData( tm.addData(
new WxMpTemplateData("first", "haahah", "#FF00FF")); new WxMpTemplateData("first", "haahah", "#FF00FF"));
tm.addWxMpTemplateData( tm.addData(
new WxMpTemplateData("remark", "heihei", "#FF00FF")); new WxMpTemplateData("remark", "heihei", "#FF00FF"));
assertEquals(tm.toJson(), "{\"touser\":\"OPENID\",\"template_id\":\"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY\",\"url\":\"http://weixin.qq.com/download\",\"miniprogram\":{\"appid\":\"xiaochengxuappid12345\",\"pagepath\":\"index?foo=bar\"},\"data\":{\"first\":{\"value\":\"haahah\",\"color\":\"#FF00FF\"},\"remark\":{\"value\":\"heihei\",\"color\":\"#FF00FF\"}}}"); assertEquals(tm.toJson(), "{\"touser\":\"OPENID\",\"template_id\":\"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY\",\"url\":\"http://weixin.qq.com/download\",\"miniprogram\":{\"appid\":\"xiaochengxuappid12345\",\"pagepath\":\"index?foo=bar\"},\"data\":{\"first\":{\"value\":\"haahah\",\"color\":\"#FF00FF\"},\"remark\":{\"value\":\"heihei\",\"color\":\"#FF00FF\"}}}");