From e237f0be68f9c46f868161fdc9582e6ed37dc177 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Sun, 23 Sep 2018 18:16:51 +0800 Subject: [PATCH] =?UTF-8?q?#760=20=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=BB=9F=E4=B8=80=E6=9C=8D=E5=8A=A1=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wx/miniapp/api/WxMaMsgService.java | 12 ++ .../miniapp/api/impl/WxMaMsgServiceImpl.java | 10 ++ .../wx/miniapp/bean/WxMaTemplateData.java | 32 +++++ .../wx/miniapp/bean/WxMaTemplateMessage.java | 24 +--- .../wx/miniapp/bean/WxMaUniformMessage.java | 108 +++++++++++++++++ .../wx/miniapp/util/json/WxMaGsonBuilder.java | 2 + .../json/WxMaTemplateMessageGsonAdapter.java | 11 +- .../json/WxMaUniformMessageGsonAdapter.java | 98 +++++++++++++++ .../api/impl/WxMaMsgServiceImplTest.java | 39 ++++-- .../miniapp/bean/WxMaTemplateMessageTest.java | 13 +- .../wx/miniapp/demo/WxMaDemoServer.java | 22 ++-- .../WxMaUniformMessageGsonAdapterTest.java | 112 ++++++++++++++++++ 12 files changed, 429 insertions(+), 54 deletions(-) create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaTemplateData.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaUniformMessage.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaUniformMessageGsonAdapter.java create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/util/json/WxMaUniformMessageGsonAdapterTest.java 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()); + } +}