diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java
index 3adf883c..a838417e 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java
@@ -2,6 +2,7 @@ package cn.binarywang.wx.miniapp.api;
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
+import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage;
import me.chanjar.weixin.common.error.WxErrorException;
/**
@@ -14,6 +15,7 @@ import me.chanjar.weixin.common.error.WxErrorException;
public interface WxMaMsgService {
String KEFU_MESSAGE_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/custom/send";
String TEMPLATE_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send";
+ String UNIFORM_MSG_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send";
/**
*
@@ -32,4 +34,14 @@ public interface WxMaMsgService {
*
*/
void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException;
+
+
+ /**
+ *
+ * 下发小程序和公众号统一的服务消息
+ * 详情请见: 下发小程序和公众号统一的服务消息
+ * 接口url格式:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN
+ *
+ */
+ void sendUniformMsg(WxMaUniformMessage uniformMessage) throws WxErrorException;
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java
index 0a397125..e0403a51 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java
@@ -4,6 +4,7 @@ import cn.binarywang.wx.miniapp.api.WxMaMsgService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
+import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage;
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@@ -36,4 +37,13 @@ public class WxMaMsgServiceImpl implements WxMaMsgService {
}
}
+ @Override
+ public void sendUniformMsg(WxMaUniformMessage uniformMessage) throws WxErrorException {
+ String responseContent = this.wxMaService.post(UNIFORM_MSG_SEND_URL, uniformMessage.toJson());
+ JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
+ if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) {
+ throw new WxErrorException(WxError.fromJson(responseContent));
+ }
+ }
+
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateData.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateData.java
new file mode 100644
index 00000000..5eae34b1
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateData.java
@@ -0,0 +1,32 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ *
+ *
+ * Created by Binary Wang on 2018/9/23.
+ *
+ *
+ * @author Binary Wang
+ */
+@Data
+@NoArgsConstructor
+public class WxMaTemplateData {
+ private String name;
+ private String value;
+ private String color;
+
+ public WxMaTemplateData(String name, String value) {
+ this.name = name;
+ this.value = value;
+ }
+
+ public WxMaTemplateData(String name, String value, String color) {
+ this.name = name;
+ this.value = value;
+ this.color = color;
+ }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateMessage.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateMessage.java
index 6d2b7a62..5a674394 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateMessage.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateMessage.java
@@ -73,7 +73,7 @@ public class WxMaTemplateMessage implements Serializable {
* 描述: 模板内容,不填则下发空模板
*
*/
- private List data;
+ private List data;
/**
* 模板内容字体的颜色,不填默认黑色.
@@ -95,7 +95,7 @@ public class WxMaTemplateMessage implements Serializable {
*/
private String emphasisKeyword;
- public WxMaTemplateMessage addData(Data datum) {
+ public WxMaTemplateMessage addData(WxMaTemplateData datum) {
if (this.data == null) {
this.data = new ArrayList<>();
}
@@ -108,24 +108,4 @@ public class WxMaTemplateMessage implements Serializable {
return WxMaGsonBuilder.create().toJson(this);
}
- @lombok.Data
- @NoArgsConstructor
- public static class Data {
- private String name;
- private String value;
- private String color;
-
- public Data(String name, String value) {
- this.name = name;
- this.value = value;
- }
-
- public Data(String name, String value, String color) {
- this.name = name;
- this.value = value;
- this.color = color;
- }
-
- }
-
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaUniformMessage.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaUniformMessage.java
new file mode 100644
index 00000000..e58ad58a
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaUniformMessage.java
@@ -0,0 +1,108 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * 模板消息.
+ * 参考 https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#接口说明 模板消息部分
+ *
+ * @author Binary Wang
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class WxMaUniformMessage implements Serializable {
+ private static final long serialVersionUID = 5063374783759519418L;
+
+ /**
+ * 是否发送公众号模版消息,否则发送小程序模版消息.
+ */
+ private boolean isMpTemplateMsg;
+
+ /**
+ * 用户openid.
+ * 可以是小程序的openid,也可以是mp_template_msg.appid对应的公众号的openid
+ */
+ private String toUser;
+
+ /**
+ * 公众号appid,要求与小程序有绑定且同主体.
+ */
+ private String appid;
+
+ /**
+ * 公众号或小程序模板ID.
+ */
+ private String templateId;
+
+ /**
+ * 公众号模板消息所要跳转的url.
+ */
+ private String url;
+
+ /**
+ * 小程序页面路径.
+ */
+ private String page;
+
+ /**
+ * 小程序模板消息formid.
+ */
+ private String formId;
+
+ /**
+ * 公众号模板消息所要跳转的小程序,小程序的必须与公众号具有绑定关系.
+ */
+ private MiniProgram miniProgram;
+
+ /**
+ * 小程序模板数据.
+ */
+ private List data;
+
+ /**
+ * 模板需要放大的关键词,不填则默认无放大.
+ */
+ private String emphasisKeyword;
+
+ public WxMaUniformMessage addData(WxMaTemplateData datum) {
+ if (this.data == null) {
+ this.data = new ArrayList<>();
+ }
+ this.data.add(datum);
+
+ return this;
+ }
+
+ public String toJson() {
+ return WxMaGsonBuilder.create().toJson(this);
+ }
+
+ @Data
+ @NoArgsConstructor
+ @AllArgsConstructor
+ public static class MiniProgram implements Serializable {
+ private static final long serialVersionUID = -7945254706501974849L;
+
+ private String appid;
+ private String pagePath;
+
+ /**
+ * 是否使用path,否则使用pagepath.
+ * 加入此字段是基于微信官方接口变化多端的考虑
+ */
+ private boolean usePath = false;
+ }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaGsonBuilder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaGsonBuilder.java
index 21f48d3f..f01eb33d 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaGsonBuilder.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaGsonBuilder.java
@@ -1,6 +1,7 @@
package cn.binarywang.wx.miniapp.util.json;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
+import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaRetainInfo;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaUserPortrait;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaVisitDistribution;
@@ -18,6 +19,7 @@ public class WxMaGsonBuilder {
static {
INSTANCE.disableHtmlEscaping();
INSTANCE.registerTypeAdapter(WxMaTemplateMessage.class, new WxMaTemplateMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMaUniformMessage.class, new WxMaUniformMessageGsonAdapter());
INSTANCE.registerTypeAdapter(WxMaCodeCommitRequest.class, new WxMaCodeCommitRequestGsonAdapter());
INSTANCE.registerTypeAdapter(WxMaCodeVersionDistribution.class, new WxMaCodeVersionDistributionGsonAdapter());
INSTANCE.registerTypeAdapter(WxMaVisitDistribution.class, new WxMaVisitDistributionGsonAdapter());
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaTemplateMessageGsonAdapter.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaTemplateMessageGsonAdapter.java
index 0b4edee2..800a7e5a 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaTemplateMessageGsonAdapter.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaTemplateMessageGsonAdapter.java
@@ -1,13 +1,14 @@
package cn.binarywang.wx.miniapp.util.json;
+import java.lang.reflect.Type;
+
+import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
-import java.lang.reflect.Type;
-
/**
* @author Binary Wang
*/
@@ -26,10 +27,6 @@ public class WxMaTemplateMessageGsonAdapter implements JsonSerializerBinary Wang
+ */
+public class WxMaUniformMessageGsonAdapter implements JsonSerializer {
+
+ @Override
+ public JsonElement serialize(WxMaUniformMessage message, Type typeOfSrc, JsonSerializationContext context) {
+ JsonObject messageJson = new JsonObject();
+ messageJson.addProperty("touser", message.getToUser());
+ if (message.isMpTemplateMsg()) {
+ JsonObject msg = new JsonObject();
+ if (message.getAppid() != null) {
+ msg.addProperty("appid", message.getAppid());
+ }
+
+ msg.addProperty("template_id", message.getTemplateId());
+
+ if (message.getUrl() != null) {
+ msg.addProperty("url", message.getUrl());
+ }
+
+ final WxMaUniformMessage.MiniProgram miniProgram = message.getMiniProgram();
+ if (miniProgram != null) {
+ JsonObject miniProgramJson = new JsonObject();
+ miniProgramJson.addProperty("appid", miniProgram.getAppid());
+ if (miniProgram.isUsePath()) {
+ miniProgramJson.addProperty("path", miniProgram.getPagePath());
+ } else {
+ miniProgramJson.addProperty("pagepath", miniProgram.getPagePath());
+ }
+ msg.add("miniprogram", miniProgramJson);
+ }
+
+ if (message.getData() != null) {
+ JsonObject data = new JsonObject();
+ for (WxMaTemplateData templateData : message.getData()) {
+ JsonObject dataJson = new JsonObject();
+ dataJson.addProperty("value", templateData.getValue());
+ if (templateData.getColor() != null) {
+ dataJson.addProperty("color", templateData.getColor());
+ }
+ data.add(templateData.getName(), dataJson);
+ }
+ msg.add("data", data);
+ }
+
+
+ messageJson.add("mp_template_msg", msg);
+ return messageJson;
+ }
+
+ //小程序模版消息
+ JsonObject msg = new JsonObject();
+ msg.addProperty("template_id", message.getTemplateId());
+
+ if (message.getPage() != null) {
+ msg.addProperty("page", message.getPage());
+ }
+
+ if (message.getFormId() != null) {
+ msg.addProperty("form_id", message.getFormId());
+ }
+
+ JsonObject data = new JsonObject();
+ msg.add("data", data);
+
+ if (message.getData() != null) {
+ for (WxMaTemplateData templateData : message.getData()) {
+ JsonObject dataJson = new JsonObject();
+ dataJson.addProperty("value", templateData.getValue());
+ if (templateData.getColor() != null) {
+ dataJson.addProperty("color", templateData.getColor());
+ }
+ data.add(templateData.getName(), dataJson);
+ }
+ }
+
+ if (message.getEmphasisKeyword() != null) {
+ msg.addProperty("emphasis_keyword", message.getEmphasisKeyword());
+ }
+
+ messageJson.add("weapp_template_msg", msg);
+
+ return messageJson;
+ }
+
+}
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java
index d05c031e..eb671cda 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java
@@ -1,17 +1,20 @@
package cn.binarywang.wx.miniapp.api.impl;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.testng.annotations.*;
+
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
+import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
+import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage;
import cn.binarywang.wx.miniapp.test.ApiTestModule;
import cn.binarywang.wx.miniapp.test.TestConfig;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
import me.chanjar.weixin.common.error.WxErrorException;
-import org.testng.annotations.*;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
/**
* 测试消息相关接口
@@ -45,15 +48,33 @@ public class WxMaMsgServiceImplTest {
.formId("FORMID")
.page("index")
.data(Lists.newArrayList(
- new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177"),
- new WxMaTemplateMessage.Data("keyword2", dateFormat.format(new Date()), "#173177"),
- new WxMaTemplateMessage.Data("keyword3", "粤海喜来登酒店", "#173177"),
- new WxMaTemplateMessage.Data("keyword4", "广州市天河区天河路208号", "#173177")))
+ new WxMaTemplateData("keyword1", "339208499", "#173177"),
+ new WxMaTemplateData("keyword2", dateFormat.format(new Date()), "#173177"),
+ new WxMaTemplateData("keyword3", "粤海喜来登酒店", "#173177"),
+ new WxMaTemplateData("keyword4", "广州市天河区天河路208号", "#173177")))
.templateId(config.getTemplateId())
.emphasisKeyword("keyword1.DATA")
.build();
- //templateMessage.addData( new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177"));
+ //templateMessage.addData( new WxMaTemplateData("keyword1", "339208499", "#173177"));
this.wxService.getMsgService().sendTemplateMsg(templateMessage);
}
+ @Test
+ public void testSendUniformMsg() throws WxErrorException {
+ TestConfig config = (TestConfig) this.wxService.getWxMaConfig();
+ WxMaUniformMessage message = WxMaUniformMessage.builder()
+ .isMpTemplateMsg(false)
+ .toUser(config.getOpenid())
+ .page("page/page/index")
+ .templateId("TEMPLATE_ID")
+ .formId("FORMID")
+ .emphasisKeyword("keyword1.DATA")
+ .build();
+ message.addData(new WxMaTemplateData("keyword1", "339208499"))
+ .addData(new WxMaTemplateData("keyword2", "2015年01月05日 12:30"))
+ .addData(new WxMaTemplateData("keyword3", "腾讯微信总部"))
+ .addData(new WxMaTemplateData("keyword4", "广州市海珠区新港中路397号"));
+
+ this.wxService.getMsgService().sendUniformMsg(message);
+ }
}
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateMessageTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateMessageTest.java
index d4464312..51eb0e87 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateMessageTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateMessageTest.java
@@ -1,9 +1,10 @@
package cn.binarywang.wx.miniapp.bean;
+import org.testng.annotations.*;
+
import com.google.common.collect.Lists;
-import org.testng.annotations.Test;
-import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.*;
/**
* @author Binary Wang
@@ -17,10 +18,10 @@ public class WxMaTemplateMessageTest {
.formId("FORMID")
.page("index")
.data(Lists.newArrayList(
- new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177"),
- new WxMaTemplateMessage.Data("keyword2", "2015年01月05日12:30", "#173177"),
- new WxMaTemplateMessage.Data("keyword3", "粤海喜来登酒店", "#173177"),
- new WxMaTemplateMessage.Data("keyword4", "广州市天河区天河路208号", "#173177")))
+ new WxMaTemplateData("keyword1", "339208499", "#173177"),
+ new WxMaTemplateData("keyword2", "2015年01月05日12:30", "#173177"),
+ new WxMaTemplateData("keyword3", "粤海喜来登酒店", "#173177"),
+ new WxMaTemplateData("keyword4", "广州市天河区天河路208号", "#173177")))
.templateId("TEMPLATE_ID")
.emphasisKeyword("keyword1.DATA")
.build();
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/demo/WxMaDemoServer.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/demo/WxMaDemoServer.java
index bc4b13a1..fe886f4b 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/demo/WxMaDemoServer.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/demo/WxMaDemoServer.java
@@ -1,9 +1,20 @@
package cn.binarywang.wx.miniapp.demo;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
import cn.binarywang.wx.miniapp.bean.WxMaMessage;
+import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
import cn.binarywang.wx.miniapp.config.WxMaConfig;
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
@@ -14,15 +25,6 @@ import com.google.common.collect.Lists;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.servlet.ServletHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.concurrent.locks.ReentrantLock;
/**
* @author Binary Wang
@@ -96,7 +98,7 @@ public class WxMaDemoServer {
throws WxErrorException {
service.getMsgService().sendTemplateMsg(WxMaTemplateMessage.builder()
.templateId(templateId).data(Lists.newArrayList(
- new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177")))
+ new WxMaTemplateData("keyword1", "339208499", "#173177")))
.toUser(wxMessage.getFromUser())
.formId("自己替换可用的formid")
.build());
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/util/json/WxMaUniformMessageGsonAdapterTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/util/json/WxMaUniformMessageGsonAdapterTest.java
new file mode 100644
index 00000000..1541879c
--- /dev/null
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/util/json/WxMaUniformMessageGsonAdapterTest.java
@@ -0,0 +1,112 @@
+package cn.binarywang.wx.miniapp.util.json;
+
+import org.testng.annotations.*;
+
+import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
+import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage;
+import com.google.gson.JsonParser;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ *
+ *
+ * Created by Binary Wang on 2018/9/23.
+ *
+ *
+ * @author Binary Wang
+ */
+public class WxMaUniformMessageGsonAdapterTest {
+
+ @Test
+ public void testSerialize_mp() {
+ WxMaUniformMessage message = WxMaUniformMessage.builder()
+ .isMpTemplateMsg(true)
+ .toUser("OPENID")
+ .appid("APPID")
+ .templateId("TEMPLATE_ID")
+ .url("http://weixin.qq.com/download")
+ .miniProgram(new WxMaUniformMessage.MiniProgram("xiaochengxuappid12345", "index?foo=bar", false))
+ .build();
+ message.addData(new WxMaTemplateData("first", "恭喜你购买成功!", "#173177"))
+ .addData(new WxMaTemplateData("keyword1", "巧克力", "#173177"))
+ .addData(new WxMaTemplateData("keyword2", "39.8元", "#173177"))
+ .addData(new WxMaTemplateData("keyword3", "2014年9月22日", "#173177"))
+ .addData(new WxMaTemplateData("remark", "欢迎再次购买!", "#173177"));
+
+ assertThat(message.toJson()).isEqualTo(new JsonParser().parse("{\n" +
+ " \"touser\":\"OPENID\",\n" +
+ " \"mp_template_msg\":{\n" +
+ " \"appid\":\"APPID\",\n" +
+ " \"template_id\":\"TEMPLATE_ID\",\n" +
+ " \"url\":\"http://weixin.qq.com/download\",\n" +
+ " \"miniprogram\":{\n" +
+ " \"appid\":\"xiaochengxuappid12345\",\n" +
+ " \"pagepath\":\"index?foo=bar\"\n" +
+ " },\n" +
+ " \"data\":{\n" +
+ " \"first\":{\n" +
+ " \"value\":\"恭喜你购买成功!\",\n" +
+ " \"color\":\"#173177\"\n" +
+ " },\n" +
+ " \"keyword1\":{\n" +
+ " \"value\":\"巧克力\",\n" +
+ " \"color\":\"#173177\"\n" +
+ " },\n" +
+ " \"keyword2\":{\n" +
+ " \"value\":\"39.8元\",\n" +
+ " \"color\":\"#173177\"\n" +
+ " },\n" +
+ " \"keyword3\":{\n" +
+ " \"value\":\"2014年9月22日\",\n" +
+ " \"color\":\"#173177\"\n" +
+ " },\n" +
+ " \"remark\":{\n" +
+ " \"value\":\"欢迎再次购买!\",\n" +
+ " \"color\":\"#173177\"\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ "}").getAsJsonObject().toString());
+ }
+
+ @Test
+ public void testSerialize_ma() {
+ WxMaUniformMessage message = WxMaUniformMessage.builder()
+ .isMpTemplateMsg(false)
+ .toUser("OPENID")
+ .page("page/page/index")
+ .templateId("TEMPLATE_ID")
+ .formId("FORMID")
+ .emphasisKeyword("keyword1.DATA")
+ .build();
+ message.addData(new WxMaTemplateData("keyword1", "339208499"))
+ .addData(new WxMaTemplateData("keyword2", "2015年01月05日 12:30"))
+ .addData(new WxMaTemplateData("keyword3", "腾讯微信总部"))
+ .addData(new WxMaTemplateData("keyword4", "广州市海珠区新港中路397号"));
+
+ assertThat(message.toJson()).isEqualTo(new JsonParser().parse("{\n" +
+ " \"touser\":\"OPENID\",\n" +
+ " \"weapp_template_msg\":{\n" +
+ " \"template_id\":\"TEMPLATE_ID\",\n" +
+ " \"page\":\"page/page/index\",\n" +
+ " \"form_id\":\"FORMID\",\n" +
+ " \"data\":{\n" +
+ " \"keyword1\":{\n" +
+ " \"value\":\"339208499\"\n" +
+ " },\n" +
+ " \"keyword2\":{\n" +
+ " \"value\":\"2015年01月05日 12:30\"\n" +
+ " },\n" +
+ " \"keyword3\":{\n" +
+ " \"value\":\"腾讯微信总部\"\n" +
+ " },\n" +
+ " \"keyword4\":{\n" +
+ " \"value\":\"广州市海珠区新港中路397号\"\n" +
+ " }\n" +
+ " },\n" +
+ " \"emphasis_keyword\":\"keyword1.DATA\"\n" +
+ " }\n" +
+ "}").getAsJsonObject().toString());
+ }
+}