diff --git a/coolstore-partner-model/pom.xml b/coolstore-partner-model/pom.xml
index b24df7cd5..0a5705685 100644
--- a/coolstore-partner-model/pom.xml
+++ b/coolstore-partner-model/pom.xml
@@ -39,10 +39,6 @@
com.alibaba
easyexcel
-
- com.fasterxml.jackson.dataformat
- jackson-dataformat-xml
-
\ No newline at end of file
diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wechat/CallbackMessageDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wechat/CallbackMessageDTO.java
index 8ad82c9f3..1bb7755dd 100644
--- a/coolstore-partner-model/src/main/java/com/cool/store/dto/wechat/CallbackMessageDTO.java
+++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wechat/CallbackMessageDTO.java
@@ -1,7 +1,5 @@
package com.cool.store.dto.wechat;
-import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
-import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.Data;
/**
@@ -10,25 +8,18 @@ import lombok.Data;
* @Version 1.0
*/
@Data
-@JacksonXmlRootElement(localName = "xml")
public class CallbackMessageDTO {
- @JacksonXmlProperty(localName = "ToUserName")
private String toUserName;
- @JacksonXmlProperty(localName = "FromUserName")
private String fromUserName;
- @JacksonXmlProperty(localName = "CreateTime")
private Long createTime;
- @JacksonXmlProperty(localName = "MsgType")
private String msgType;
- @JacksonXmlProperty(localName = "Event")
private String event;
- @JacksonXmlProperty(localName = "EventKey")
private String eventKey;
diff --git a/coolstore-partner-service/src/main/java/com/cool/store/handler/WeChatHandler.java b/coolstore-partner-service/src/main/java/com/cool/store/handler/WeChatHandler.java
index 33adf8cb6..df3ba74cf 100644
--- a/coolstore-partner-service/src/main/java/com/cool/store/handler/WeChatHandler.java
+++ b/coolstore-partner-service/src/main/java/com/cool/store/handler/WeChatHandler.java
@@ -3,6 +3,16 @@ package com.cool.store.handler;
import com.cool.store.dto.wechat.CallbackMessageDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.Map;
/**
* @Author suzhuhong
@@ -14,12 +24,37 @@ import org.springframework.stereotype.Component;
public class WeChatHandler {
- public String processMessage(CallbackMessageDTO message) {
- String msgType = message.getMsgType();
+
+ public Map parseXmlToMap(String xmlContent) throws Exception {
+ Map result = new HashMap<>();
+
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
+
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document document = builder.parse(new InputSource(new StringReader(xmlContent)));
+
+ NodeList nodes = document.getDocumentElement().getChildNodes();
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Node node = nodes.item(i);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ String tagName = node.getNodeName();
+ String textContent = node.getTextContent();
+ result.put(tagName, textContent);
+ }
+ }
+
+ return result;
+ }
+
+
+ public String processMessage(Map messageMap) {
+ String msgType = (String) messageMap.get("MsgType");
+ String event = (String) messageMap.get("Event");
switch (msgType) {
case "event":
- return handleEvent(message);
+ return handleEvent(messageMap);
// case "text":
// return handleTextMessage(message);
@@ -29,46 +64,45 @@ public class WeChatHandler {
default:
// 其他类型的消息直接回复success
- return buildSuccessReply(message.getFromUserName(), message.getToUserName());
+ return "success";
}
}
- private String handleEvent(CallbackMessageDTO message) {
- String event = message.getEvent();
+ private String handleEvent(Map messageMap) {
+ String event = (String) messageMap.get("event");
+ String fromUserName = (String) messageMap.get("FromUserName");
+ String toUserName = (String) messageMap.get("ToUserName");
switch (event) {
case "subscribe":
// 关注事件 - 绑定用户
- return handleSubscribeEvent(message);
+ return handleSubscribeEvent(fromUserName,toUserName);
case "unsubscribe":
// 取消关注事件 - 解绑用户
- return handleUnsubscribeEvent(message);
+ return handleUnsubscribeEvent(fromUserName,toUserName);
default:
- return buildWelcomeReply(message.getFromUserName(), message.getToUserName());
+ return buildWelcomeReply(fromUserName, toUserName);
}
}
- private String handleSubscribeEvent(CallbackMessageDTO message) {
- String openId = message.getFromUserName();
+ private String handleSubscribeEvent(String fromUserName,String toUserName) {
try {
- //userBindingService.bindOfficialAccountUser(openId);
// 立即回复欢迎消息
- return buildWelcomeReply(message.getFromUserName(), message.getToUserName());
+ return buildWelcomeReply(fromUserName, toUserName);
} catch (Exception e) {
// 即使处理失败也要返回success
- return buildWelcomeReply(message.getFromUserName(), message.getToUserName());
+ return buildWelcomeReply(fromUserName, toUserName);
}
}
/**
* 处理取消关注事件
*/
- private String handleUnsubscribeEvent(CallbackMessageDTO message) {
- String openId = message.getFromUserName();
+ private String handleUnsubscribeEvent(String fromUserName,String toUserName) {
// 异步处理用户解绑
//userBindingService.unbindOfficialAccountUser(openId);
diff --git a/coolstore-partner-web/pom.xml b/coolstore-partner-web/pom.xml
index 9afd3a4b0..22e75fcb9 100644
--- a/coolstore-partner-web/pom.xml
+++ b/coolstore-partner-web/pom.xml
@@ -33,10 +33,6 @@
com.aliyun.oss
aliyun-sdk-oss
-
- com.fasterxml.jackson.dataformat
- jackson-dataformat-xml
-
diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java
index a35709410..f197f089c 100644
--- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java
+++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java
@@ -46,7 +46,6 @@ import com.cool.store.utils.RedisConstantUtil;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.utils.poi.StringUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -562,7 +561,6 @@ public class PCTestController {
}
return request;
}
- private final XmlMapper xmlMapper = new XmlMapper();
@Autowired
WeChatHandler weChatHandler;
@@ -582,14 +580,9 @@ public class PCTestController {
System.out.println("echostr: " + echostr);
System.out.println("requestBody: " + requestBody);
- // 验证签名
-// if (!verifySignature(signature, timestamp, nonce, TOKEN)) {
-// return "signature verification failed";
-// }
if (StringUtils.isNotEmpty(requestBody)) {
try {
- CallbackMessageDTO message = xmlMapper.readValue(requestBody, CallbackMessageDTO.class);
- return weChatHandler.processMessage(message);
+ return weChatHandler.processMessage(weChatHandler.parseXmlToMap(requestBody));
} catch (Exception e) {
log.info("回调处理失败 e:{}",e.getMessage());
return "success";
diff --git a/pom.xml b/pom.xml
index 093ad8d70..f3901d5b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -233,11 +233,6 @@
2.0.24
-
- com.fasterxml.jackson.dataformat
- jackson-dataformat-xml
- 2.15.2
-