diff --git a/pom.xml b/pom.xml
index 0efef32..fb2817a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -172,6 +172,12 @@
2.13.4
+
+ org.dom4j
+ dom4j
+ 2.1.3
+
+
com.amazonaws
diff --git a/src/main/java/com/northtecom/visatrack/api/controller/HomeController.java b/src/main/java/com/northtecom/visatrack/api/controller/HomeController.java
index f7f0027..6d231fc 100644
--- a/src/main/java/com/northtecom/visatrack/api/controller/HomeController.java
+++ b/src/main/java/com/northtecom/visatrack/api/controller/HomeController.java
@@ -47,7 +47,7 @@ public class HomeController {
@Operation(summary = "Wechat Verification API", description = "Make sure the calling to this API come from WeChat")
public String weChatMessage(@RequestBody String weChatMessage) {
log.debug("Receive message from WeChat - [{}]", weChatMessage);
- return "success";
+ return weChatService.getWeChatMessage(weChatMessage);
}
}
diff --git a/src/main/java/com/northtecom/visatrack/api/model/entity/wechat/WeChatMessage.java b/src/main/java/com/northtecom/visatrack/api/model/entity/wechat/WeChatMessage.java
new file mode 100644
index 0000000..bdfe30b
--- /dev/null
+++ b/src/main/java/com/northtecom/visatrack/api/model/entity/wechat/WeChatMessage.java
@@ -0,0 +1,39 @@
+package com.northtecom.visatrack.api.model.entity.wechat;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class WeChatMessage {
+ @JsonProperty(value = "ToUserName")
+ private String toUserName;
+
+ @JsonProperty(value = "FromUserName")
+ private String fromUserName;
+ @JsonProperty(value = "createTime")
+ private Long CreateTime;
+
+ @JsonProperty(value = "MsgType")
+ private String msgType;
+
+ @JsonProperty(value = "Content")
+ private String content;
+
+ @JsonProperty(value = "MsgId")
+ private String msgId;
+
+ @JsonProperty(value = "MsgDataId")
+ private String msgDataId;
+
+ @JsonProperty(value = "Idx")
+ private String idx;
+
+
+}
+
+
diff --git a/src/main/java/com/northtecom/visatrack/api/service/impl/WeChatService.java b/src/main/java/com/northtecom/visatrack/api/service/impl/WeChatService.java
index e7cf9be..4bea279 100644
--- a/src/main/java/com/northtecom/visatrack/api/service/impl/WeChatService.java
+++ b/src/main/java/com/northtecom/visatrack/api/service/impl/WeChatService.java
@@ -5,6 +5,7 @@ import com.northtecom.visatrack.api.data.entity.VisaCase;
import com.northtecom.visatrack.api.data.entity.WeChatCallState;
import com.northtecom.visatrack.api.data.repository.*;
import com.northtecom.visatrack.api.model.entity.wechat.WeChatAccessToken;
+import com.northtecom.visatrack.api.model.entity.wechat.WeChatMessage;
import com.northtecom.visatrack.api.model.entity.wechat.WeChatUser;
import com.northtecom.visatrack.api.util.WeChatUtils;
import lombok.extern.slf4j.Slf4j;
@@ -15,6 +16,7 @@ import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import java.io.IOException;
+import java.time.Instant;
import java.util.Optional;
/**
@@ -55,11 +57,13 @@ public class WeChatService {
this.objectMapper = objectMapper;
}
+
/**
- * 分页搜索签证数据
*
- * @param search 搜索参数
- * @return {@link Page}<{@link VisaCase}>
+ * @param weChatCode
+ * @param weChatState
+ * @return
+ * @throws IOException
*/
public WeChatUser getWeChatUserInfo(String weChatCode, String weChatState) throws IOException {
OkHttpClient client = new OkHttpClient();
@@ -105,6 +109,20 @@ public class WeChatService {
return Boolean.FALSE;
}
+ public String getWeChatMessage(String weChatMessageXmlStr) {
+ WeChatMessage weChatMessage = WeChatUtils.covertToWeChatMessage(weChatMessageXmlStr);
+ String toUserName = weChatMessage.getFromUserName();
+ String fromUserName = weChatMessage.getToUserName();
+ String content = weChatMessage.getContent();
+
+ weChatMessage.setToUserName(toUserName);
+ weChatMessage.setFromUserName(fromUserName);
+ weChatMessage.setContent("VisaFn Response your message - " + content);
+ weChatMessage.setCreateTime(Instant.now().toEpochMilli());
+
+ return WeChatUtils.covertToWeChatMessageXmlStr(weChatMessage);
+ }
+
private String callWeChatAccessTokenAPI(OkHttpClient client, String weChatCode, String weChatState) throws IOException {
String responseStr;
String weChatAppId = "wx26e01c2be46730f3";
diff --git a/src/main/java/com/northtecom/visatrack/api/util/WeChatUtils.java b/src/main/java/com/northtecom/visatrack/api/util/WeChatUtils.java
index ed67b6e..34ae440 100644
--- a/src/main/java/com/northtecom/visatrack/api/util/WeChatUtils.java
+++ b/src/main/java/com/northtecom/visatrack/api/util/WeChatUtils.java
@@ -6,13 +6,22 @@
package com.northtecom.visatrack.api.util;
import com.northtecom.visatrack.api.data.entity.WeChatCallState;
+import com.northtecom.visatrack.api.model.entity.wechat.WeChatMessage;
import com.northtecom.visatrack.api.model.entity.wechat.WeChatUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
@@ -67,6 +76,7 @@ public class WeChatUtils {
return DigestUtils.sha1Hex(strToSHA1.toString());
}
+
/**
* Send Test Email to check config and email sending API
*
@@ -81,5 +91,47 @@ public class WeChatUtils {
return weChatUser;
}
+
+ public static WeChatMessage covertToWeChatMessage(String weChatMessageXmlStr) {
+ SAXReader xmlReader = new SAXReader();
+ Document document = null;
+ WeChatMessage weChatMessage = new WeChatMessage();
+
+
+ try {
+ document = xmlReader.read(IOUtils.toInputStream(weChatMessageXmlStr, StandardCharsets.UTF_8));
+
+ weChatMessage.setToUserName(document.getRootElement().element("ToUserName").getText());
+ weChatMessage.setFromUserName(document.getRootElement().element("FromUserName").getText());
+ weChatMessage.setCreateTime(NumberUtils.toLong(document.getRootElement().element("CreateTime").getText()));
+ weChatMessage.setMsgType(document.getRootElement().element("MsgType").getText());
+ weChatMessage.setContent(document.getRootElement().element("Content").getText());
+ weChatMessage.setMsgId(document.getRootElement().element("MsgId").getText());
+ weChatMessage.setMsgDataId(document.getRootElement().element("MsgDataId").getText());
+ weChatMessage.setIdx(document.getRootElement().element("Idx").getText());
+
+
+ log.debug("WeChat Message Content - [{}]", weChatMessage.getContent());
+ } catch (DocumentException e) {
+ log.warn("Cannot Process weChat Message", e);
+ return null;
+ }
+
+ return weChatMessage;
+ }
+
+ public static String covertToWeChatMessageXmlStr(WeChatMessage weChatMessage) {
+ Document document = DocumentHelper.createDocument();
+ Element root = document.addElement( "xml" );
+
+ root.addElement("ToUserName").addCDATA(weChatMessage.getToUserName());
+ root.addElement("FromUserName").addCDATA(weChatMessage.getFromUserName());
+ root.addElement("CreateTime").addText(Long.toString(weChatMessage.getCreateTime()));
+ root.addElement("MsgType").addCDATA(weChatMessage.getMsgType());
+ root.addElement("Content").addCDATA(weChatMessage.getContent());
+
+ return document.asXML();
+ }
+
}
diff --git a/src/test/java/com/northtecom/visatrack/api/WeChatTest.java b/src/test/java/com/northtecom/visatrack/api/WeChatTest.java
new file mode 100644
index 0000000..c98aee0
--- /dev/null
+++ b/src/test/java/com/northtecom/visatrack/api/WeChatTest.java
@@ -0,0 +1,75 @@
+package com.northtecom.visatrack.api;
+
+import com.northtecom.visatrack.api.model.entity.wechat.WeChatMessage;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.io.SAXReader;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * Email Testing
+ *
+ * @author YuCheng
+ */
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@Slf4j
+class WeChatTest {
+
+ private String wechatMessageStr = StringUtils.EMPTY;
+
+ @BeforeEach
+ protected void setUp() throws Exception {
+ this.wechatMessageStr = (" \n" +
+ " \n" +
+ " \n" +
+ " 1348831860\n" +
+ " \n" +
+ " \n" +
+ " 1234567890123456\n" +
+ " xxxx\n" +
+ " xxxx\n" +
+ "");
+
+ }
+
+ @AfterEach
+ protected void tearDown() throws Exception {
+ }
+
+
+ @Test
+ public void testToWeChatMessage() {
+ SAXReader xmlReader = new SAXReader();
+ Document document = null;
+ WeChatMessage weChatMessage = new WeChatMessage();
+
+
+ try {
+ document = xmlReader.read(IOUtils.toInputStream(wechatMessageStr, StandardCharsets.UTF_8));
+
+ weChatMessage.setToUserName(document.getRootElement().element("ToUserName").getText());
+ weChatMessage.setFromUserName(document.getRootElement().element("FromUserName").getText());
+ weChatMessage.setCreateTime(NumberUtils.toLong(document.getRootElement().element("CreateTime").getText()));
+ weChatMessage.setMsgType(document.getRootElement().element("MsgType").getText());
+ weChatMessage.setContent(document.getRootElement().element("Content").getText());
+ weChatMessage.setMsgId(document.getRootElement().element("MsgId").getText());
+ weChatMessage.setMsgDataId(document.getRootElement().element("MsgDataId").getText());
+ weChatMessage.setIdx(document.getRootElement().element("Idx").getText());
+
+
+ log.debug("WeChat Message Content - [{}]", weChatMessage.getContent());
+ } catch (DocumentException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
+