#760 小程序增加统一服务消息接口
This commit is contained in:
@@ -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";
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
@@ -32,4 +34,14 @@ public interface WxMaMsgService {
|
||||
* </pre>
|
||||
*/
|
||||
void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException;
|
||||
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 下发小程序和公众号统一的服务消息
|
||||
* 详情请见: <a href="https://developers.weixin.qq.com/miniprogram/dev/api/open-api/uniform-message/sendUniformMessage.html">下发小程序和公众号统一的服务消息</a>
|
||||
* 接口url格式:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN
|
||||
* </pre>
|
||||
*/
|
||||
void sendUniformMsg(WxMaUniformMessage uniformMessage) throws WxErrorException;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package cn.binarywang.wx.miniapp.bean;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
*
|
||||
* Created by Binary Wang on 2018/9/23.
|
||||
* </pre>
|
||||
*
|
||||
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||
*/
|
||||
@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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -73,7 +73,7 @@ public class WxMaTemplateMessage implements Serializable {
|
||||
* 描述: 模板内容,不填则下发空模板
|
||||
* </pre>
|
||||
*/
|
||||
private List<Data> data;
|
||||
private List<WxMaTemplateData> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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 <a href="https://github.com/binarywang">Binary Wang</a>
|
||||
*/
|
||||
@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<WxMaTemplateData> 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;
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
|
||||
@@ -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 <a href="https://github.com/binarywang">Binary Wang</a>
|
||||
*/
|
||||
@@ -26,10 +27,6 @@ public class WxMaTemplateMessageGsonAdapter implements JsonSerializer<WxMaTempla
|
||||
messageJson.addProperty("form_id", message.getFormId());
|
||||
}
|
||||
|
||||
if (message.getPage() != null) {
|
||||
messageJson.addProperty("page", message.getPage());
|
||||
}
|
||||
|
||||
if (message.getColor() != null) {
|
||||
messageJson.addProperty("color", message.getColor());
|
||||
}
|
||||
@@ -45,7 +42,7 @@ public class WxMaTemplateMessageGsonAdapter implements JsonSerializer<WxMaTempla
|
||||
return messageJson;
|
||||
}
|
||||
|
||||
for (WxMaTemplateMessage.Data datum : message.getData()) {
|
||||
for (WxMaTemplateData datum : message.getData()) {
|
||||
JsonObject dataJson = new JsonObject();
|
||||
dataJson.addProperty("value", datum.getValue());
|
||||
if (datum.getColor() != null) {
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
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.WxMaUniformMessage;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
|
||||
/**
|
||||
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||
*/
|
||||
public class WxMaUniformMessageGsonAdapter implements JsonSerializer<WxMaUniformMessage> {
|
||||
|
||||
@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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package cn.binarywang.wx.miniapp.bean;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import org.testng.annotations.Test;
|
||||
import org.testng.annotations.*;
|
||||
|
||||
import static org.testng.AssertJUnit.assertEquals;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import static org.testng.AssertJUnit.*;
|
||||
|
||||
/**
|
||||
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||
@@ -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();
|
||||
|
||||
@@ -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 <a href="https://github.com/binarywang">Binary Wang</a>
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
*
|
||||
* Created by Binary Wang on 2018/9/23.
|
||||
* </pre>
|
||||
*
|
||||
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||
*/
|
||||
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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user