🎨 #3376 【小程序】完善事件消息推送对json数据格式的支持
This commit is contained in:
@@ -8,6 +8,7 @@ import cn.binarywang.wx.miniapp.config.WxMaConfig;
|
||||
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
|
||||
import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
|
||||
import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
|
||||
import cn.binarywang.wx.miniapp.message.WxMaOutMessage;
|
||||
import cn.binarywang.wx.miniapp.message.WxMaXmlOutMessage;
|
||||
import cn.binarywang.wx.miniapp.test.TestConfig;
|
||||
import me.chanjar.weixin.common.api.WxConsts;
|
||||
@@ -32,8 +33,8 @@ public class WxMaDemoServer {
|
||||
|
||||
private static final WxMaMessageHandler logHandler = new WxMaMessageHandler() {
|
||||
@Override
|
||||
public WxMaXmlOutMessage handle(WxMaMessage wxMessage, Map<String, Object> context,
|
||||
WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
|
||||
public WxMaOutMessage handle(WxMaMessage wxMessage, Map<String, Object> context,
|
||||
WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
|
||||
System.out.println("收到消息:" + wxMessage.toString());
|
||||
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson())
|
||||
.toUser(wxMessage.getFromUser()).build());
|
||||
@@ -43,8 +44,8 @@ public class WxMaDemoServer {
|
||||
|
||||
private static final WxMaMessageHandler textHandler = new WxMaMessageHandler() {
|
||||
@Override
|
||||
public WxMaXmlOutMessage handle(WxMaMessage wxMessage, Map<String, Object> context,
|
||||
WxMaService service, WxSessionManager sessionManager)
|
||||
public WxMaOutMessage handle(WxMaMessage wxMessage, Map<String, Object> context,
|
||||
WxMaService service, WxSessionManager sessionManager)
|
||||
throws WxErrorException {
|
||||
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息")
|
||||
.toUser(wxMessage.getFromUser()).build());
|
||||
@@ -55,8 +56,8 @@ public class WxMaDemoServer {
|
||||
|
||||
private static final WxMaMessageHandler picHandler = new WxMaMessageHandler() {
|
||||
@Override
|
||||
public WxMaXmlOutMessage handle(WxMaMessage wxMessage, Map<String, Object> context,
|
||||
WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
|
||||
public WxMaOutMessage handle(WxMaMessage wxMessage, Map<String, Object> context,
|
||||
WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
|
||||
try {
|
||||
WxMediaUploadResult uploadResult = service.getMediaService()
|
||||
.uploadMedia(WxMaConstants.MediaType.IMAGE, "png",
|
||||
@@ -76,8 +77,8 @@ public class WxMaDemoServer {
|
||||
|
||||
private static final WxMaMessageHandler qrcodeHandler = new WxMaMessageHandler() {
|
||||
@Override
|
||||
public WxMaXmlOutMessage handle(WxMaMessage wxMessage, Map<String, Object> context,
|
||||
WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
|
||||
public WxMaOutMessage handle(WxMaMessage wxMessage, Map<String, Object> context,
|
||||
WxMaService service, WxSessionManager sessionManager) throws WxErrorException {
|
||||
try {
|
||||
final File file = service.getQrcodeService().createQrcode("123", 430);
|
||||
WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia(WxMaConstants.MediaType.IMAGE, file);
|
||||
@@ -96,7 +97,7 @@ public class WxMaDemoServer {
|
||||
|
||||
private static final WxMaMessageHandler customerServiceMessageHandler = new WxMaMessageHandler() {
|
||||
@Override
|
||||
public WxMaXmlOutMessage handle(WxMaMessage message, Map<String, Object> context, WxMaService service, WxSessionManager sessionManager) {
|
||||
public WxMaOutMessage handle(WxMaMessage message, Map<String, Object> context, WxMaService service, WxSessionManager sessionManager) {
|
||||
return new WxMaXmlOutMessage()
|
||||
.setMsgType(WxConsts.XmlMsgType.TRANSFER_CUSTOMER_SERVICE)
|
||||
.setFromUserName(message.getToUser())
|
||||
|
||||
@@ -5,7 +5,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaMessage;
|
||||
import cn.binarywang.wx.miniapp.config.WxMaConfig;
|
||||
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
|
||||
import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
|
||||
import cn.binarywang.wx.miniapp.message.WxMaXmlOutMessage;
|
||||
import cn.binarywang.wx.miniapp.message.WxMaOutMessage;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@@ -62,9 +62,13 @@ public class WxMaPortalServlet extends HttpServlet {
|
||||
inMessage = WxMaMessage.fromXml(request.getInputStream());
|
||||
}
|
||||
|
||||
final WxMaXmlOutMessage outMessage = this.messageRouter.route(inMessage);
|
||||
final WxMaOutMessage outMessage = this.messageRouter.route(inMessage);
|
||||
if (outMessage != null) {
|
||||
response.getWriter().write(outMessage.toXml());
|
||||
if (isJson) {
|
||||
response.getWriter().write(outMessage.toJson());
|
||||
} else {
|
||||
response.getWriter().write(outMessage.toXml());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -82,9 +86,13 @@ public class WxMaPortalServlet extends HttpServlet {
|
||||
inMessage = WxMaMessage.fromEncryptedXml(request.getInputStream(), this.config, timestamp, nonce, msgSignature);
|
||||
}
|
||||
|
||||
final WxMaXmlOutMessage outMessage = this.messageRouter.route(inMessage);
|
||||
final WxMaOutMessage outMessage = this.messageRouter.route(inMessage);
|
||||
if (outMessage != null) {
|
||||
response.getWriter().write(outMessage.toEncryptedXml(this.config));
|
||||
if (isJson) {
|
||||
response.getWriter().write(outMessage.toEncryptedJson(this.config));
|
||||
} else {
|
||||
response.getWriter().write(outMessage.toEncryptedXml(this.config));
|
||||
}
|
||||
return;
|
||||
}
|
||||
response.getWriter().write("success");
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package cn.binarywang.wx.miniapp.message;
|
||||
|
||||
import me.chanjar.weixin.common.api.WxConsts;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class WxMaJsonOutMessageTest {
|
||||
|
||||
@Test
|
||||
public void testToJson() {
|
||||
WxMaJsonOutMessage message = WxMaJsonOutMessage.builder()
|
||||
.fromUserName("test_from_user")
|
||||
.toUserName("test_to_user")
|
||||
.msgType(WxConsts.XmlMsgType.TRANSFER_CUSTOMER_SERVICE)
|
||||
.createTime(System.currentTimeMillis() / 1000)
|
||||
.build();
|
||||
|
||||
String jsonResult = message.toJson();
|
||||
assertThat(jsonResult).isNotEmpty();
|
||||
assertThat(jsonResult).contains("test_from_user");
|
||||
assertThat(jsonResult).contains("test_to_user");
|
||||
assertThat(jsonResult).contains(WxConsts.XmlMsgType.TRANSFER_CUSTOMER_SERVICE);
|
||||
|
||||
System.out.println("JSON Output:");
|
||||
System.out.println(jsonResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmptyMessage() {
|
||||
WxMaJsonOutMessage message = new WxMaJsonOutMessage();
|
||||
String jsonResult = message.toJson();
|
||||
assertThat(jsonResult).isNotEmpty();
|
||||
System.out.println("Empty message JSON:");
|
||||
System.out.println(jsonResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testImplementsInterface() {
|
||||
WxMaJsonOutMessage message = WxMaJsonOutMessage.builder()
|
||||
.fromUserName("test_from_user")
|
||||
.toUserName("test_to_user")
|
||||
.msgType(WxConsts.XmlMsgType.TEXT)
|
||||
.createTime(System.currentTimeMillis() / 1000)
|
||||
.build();
|
||||
|
||||
// Test that it implements WxMaOutMessage interface
|
||||
WxMaOutMessage outMessage = message;
|
||||
assertThat(outMessage).isNotNull();
|
||||
|
||||
// Test both toJson and toXml methods (for JSON messages, both return JSON format)
|
||||
assertThat(outMessage.toJson()).isNotEmpty();
|
||||
assertThat(outMessage.toXml()).isNotEmpty();
|
||||
assertThat(outMessage.toJson()).isEqualTo(outMessage.toXml());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user