From adcc05dc7c7ec0b78ef9e5ca9f0a92f316d26d6a Mon Sep 17 00:00:00 2001 From: chandler <1915724901@qq.com> Date: Sat, 5 Oct 2024 15:36:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(0):=20[java]-[wechat-ferry-mvn]-1.?= =?UTF-8?q?=E5=AF=B9=E6=B6=88=E6=81=AF=E7=B1=BB=E5=9E=8B=E4=B8=BA49?= =?UTF-8?q?=E7=9A=84XML=E8=BF=9B=E8=A1=8C=E8=A7=A3=E6=9E=90=E8=BD=ACJSON?= =?UTF-8?q?=202.=E8=B0=83=E7=94=A8=E7=AC=AC=E4=B8=89=E6=96=B9=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=97=B6=E9=80=9A=E8=BF=87=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=86=B3=E5=AE=9A=E6=88=90=E5=8A=9F=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ferry/config/WeChatFerryProperties.java | 6 +++ .../wechat/ferry/entity/dto/WxPpMsgDTO.java | 18 +++++++ .../vo/response/WxPpSendImageMsgResp.java | 26 ++++++--- .../wechat/ferry/enums/WeChatMsgTypeEnum.java | 32 ----------- .../wechat/ferry/enums/WxPpMsgTypeEnum.java | 53 +++++++++++++++++++ .../ferry/handle/WeChatSocketClient.java | 29 +++++++++- .../service/impl/WeChatDllServiceImpl.java | 1 + .../service/impl/WeChatMsgServiceImpl.java | 18 ++++--- .../ferry/utils/XmlJsonConvertUtil.java | 14 +++-- .../src/main/resources/application.yml | 10 ++-- 10 files changed, 155 insertions(+), 52 deletions(-) delete mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WeChatMsgTypeEnum.java create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxPpMsgTypeEnum.java diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatFerryProperties.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatFerryProperties.java index 74dc78d..e70cd8e 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatFerryProperties.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatFerryProperties.java @@ -1,6 +1,7 @@ package com.wechat.ferry.config; import java.util.List; +import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -63,4 +64,9 @@ public class WeChatFerryProperties { */ private List sendMsgBackFwdUrls; + /** + * 调用第三方服务客户端成功状态码 + */ + private Map thirdPartyOkCodes; + } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/dto/WxPpMsgDTO.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/dto/WxPpMsgDTO.java index 457327f..b30515a 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/dto/WxPpMsgDTO.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/dto/WxPpMsgDTO.java @@ -1,5 +1,8 @@ package com.wechat.ferry.entity.dto; +import com.alibaba.fastjson2.JSONObject; +import com.fasterxml.jackson.annotation.JsonIgnore; + import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -54,6 +57,21 @@ public class WxPpMsgDTO { @ApiModelProperty(value = "消息内容") private String content; + /** + * 转为JSON的内容 + * 对应DLL中的content原始内容 + */ + @ApiModelProperty(value = "转为JSON的内容") + private JSONObject jsonContent; + + /** + * 引用内容 + * 对应DLL中的content原始内容 + */ + @JsonIgnore + @ApiModelProperty(value = "消息内容XML") + private String quoteContent; + /** * 消息发送者 */ diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/response/WxPpSendImageMsgResp.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/response/WxPpSendImageMsgResp.java index 522b19c..a0e62e6 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/response/WxPpSendImageMsgResp.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/response/WxPpSendImageMsgResp.java @@ -15,15 +15,29 @@ import lombok.Data; public class WxPpSendImageMsgResp { /** - * 类型编号 + * 状态码 */ - @ApiModelProperty(value = "类型编号") - private Integer id; + @ApiModelProperty(value = "状态码") + private String code; /** - * 类型名称 + * 返回信息 */ - @ApiModelProperty(value = "类型名称") - private String name; + @ApiModelProperty(value = "返回信息") + private String msg; + + /** + * 图片地址 + */ + @ApiModelProperty(value = "图片地址") + private String path; + + /** + * 消息接收人 + * 消息接收人,私聊为 wxid(wxid_xxxxxxxxxxxxxx) + * 群聊为 roomid(xxxxxxxxxx@chatroom) + */ + @ApiModelProperty(value = "消息接收人") + private String recipient; } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WeChatMsgTypeEnum.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WeChatMsgTypeEnum.java deleted file mode 100644 index ee3b9a8..0000000 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WeChatMsgTypeEnum.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.wechat.ferry.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 枚举-消息类型 - * - * @author chandler - * @date 2024/10/01 15:55 - */ -@Getter -@AllArgsConstructor -public enum WeChatMsgTypeEnum { - - /** - * 0-未知 - */ - UNKNOWN("0", "未知"), - - /** - * 未匹配上 - */ - UN_MATCH("", null), - - // 结束 - ; - - private final String code; - private final String name; - -} diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxPpMsgTypeEnum.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxPpMsgTypeEnum.java new file mode 100644 index 0000000..32cbbf4 --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxPpMsgTypeEnum.java @@ -0,0 +1,53 @@ +package com.wechat.ferry.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 枚举-本服务定义消息类型 + * + * @author chandler + * @date 2024/10/01 15:55 + */ +@Getter +@AllArgsConstructor +public enum WxPpMsgTypeEnum { + + /** + * 0-未知 + */ + UNKNOWN("0", "未知", "文本"), + + /** + * 1-文本 + */ + TEXT("1", "文本", "文本"), + + /** + * 2-表情符号 + */ + EMOJI("2", "表情符号", "1"), + + /** + * 3-表情包(表情图片) + */ + EMOJI_IMAGE("3", "表情包(表情图片)", "47"), + + /** + * 4-引用消息 + */ + QUOTE("4", "引用消息", "49"), + + /** + * 未匹配上 + */ + UN_MATCH("", null, "文本"), + + // 结束 + ; + + private final String code; + private final String name; + private final String dllCode; + +} diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java index 562faef..4878c3c 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java @@ -8,6 +8,8 @@ import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; +import org.springframework.util.ObjectUtils; + import com.alibaba.fastjson2.JSONObject; import com.sun.jna.Native; import com.wechat.ferry.entity.dto.WxPpMsgDTO; @@ -27,6 +29,7 @@ import com.wechat.ferry.entity.proto.Wcf.WxMsg; import com.wechat.ferry.enums.SexEnum; import com.wechat.ferry.service.SDK; import com.wechat.ferry.utils.HttpClientUtil; +import com.wechat.ferry.utils.XmlJsonConvertUtil; import io.sisu.nng.Socket; import io.sisu.nng.pair.Pair1Socket; @@ -573,12 +576,36 @@ public class WeChatSocketClient { dto.setType(msg.getType()); dto.setTs(msg.getTs()); dto.setRoomId(msg.getRoomid()); - dto.setContent(content); dto.setSender(msg.getSender()); dto.setSign(msg.getSign()); dto.setThumb(msg.getThumb()); dto.setExtra(msg.getExtra()); dto.setXml(xml); + // 根据消息类型判断 引用-49 + if (!ObjectUtils.isEmpty(msg.getContent()) && "49".equals("" + msg.getType())) { + try { + dto.setQuoteContent(content); + JSONObject json = XmlJsonConvertUtil.xml2Json(content); + // 获取第一层级的JSONObject + JSONObject level1 = json.getJSONObject("msg"); + if (!ObjectUtils.isEmpty(level1)) { + // 获取第二层级的JSONObject + JSONObject level2 = level1.getJSONObject("appmsg"); + if (!ObjectUtils.isEmpty(level2)) { + // 获取field字段的值 + String fieldValue = level2.getString("title"); + dto.setContent(fieldValue); + } + } + dto.setJsonContent(json); + } catch (Exception e) { + log.error("XML提取报错:", e); + // 报错就使用原值 + dto.setContent(content); + } + } else { + dto.setContent(content); + } String jsonString = JSONObject.toJSONString(dto); try { diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatDllServiceImpl.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatDllServiceImpl.java index 53d34ce..a8f49f8 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatDllServiceImpl.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatDllServiceImpl.java @@ -285,6 +285,7 @@ public class WeChatDllServiceImpl implements WeChatDllService { @Override public WxPpSendImageMsgResp sendImageMsg(WxPpSendImageMsgReq request) { + WxPpSendImageMsgResp resp = new WxPpSendImageMsgResp(); int state = wechatSocketClient.sendImage(request.getPath(), request.getRecipient()); return null; } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatMsgServiceImpl.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatMsgServiceImpl.java index 1788b60..a615eb1 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatMsgServiceImpl.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatMsgServiceImpl.java @@ -1,5 +1,7 @@ package com.wechat.ferry.service.impl; +import java.util.Map; + import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; @@ -62,12 +64,12 @@ public class WeChatMsgServiceImpl implements WeChatMsgService { } try { String responseStr = HttpClientUtil.doPostJson(receiveMsgFwdUrl, jsonString); - if (ObjectUtils.isEmpty(responseStr) || !JSONObject.parseObject(responseStr).getString("code").equals("200")) { - log.error("消息转发外部接口,获取响应状态失败!-URL:{}", receiveMsgFwdUrl); + if (judgeSuccess(responseStr)) { + log.error("[接收消息]-消息转发外部接口,获取响应状态失败!-URL:{}", receiveMsgFwdUrl); } log.debug("[接收消息]-[转发接收到的消息]-转发消息至:{}", receiveMsgFwdUrl); } catch (Exception e) { - log.error("消息转发接口[{}]异常:", receiveMsgFwdUrl, e); + log.error("[接收消息]-消息转发接口[{}]服务异常:", receiveMsgFwdUrl, e); } } } @@ -78,10 +80,12 @@ public class WeChatMsgServiceImpl implements WeChatMsgService { boolean passFlag = false; if (!ObjectUtils.isEmpty(responseStr)) { JSONObject jSONObject = JSONObject.parseObject(responseStr); - if (!ObjectUtils.isEmpty(jSONObject)) { - if (!ObjectUtils.isEmpty(jSONObject.get("code"))) { - if (jSONObject.get("code").equals("200")) { - return true; + if (!ObjectUtils.isEmpty(jSONObject) && !CollectionUtils.isEmpty(weChatFerryProperties.getThirdPartyOkCodes())) { + Map codeMap = weChatFerryProperties.getThirdPartyOkCodes(); + for (Map.Entry entry : codeMap.entrySet()) { + if (!ObjectUtils.isEmpty(jSONObject.get(entry.getKey())) && jSONObject.get(entry.getKey()).equals(entry.getValue())) { + passFlag = true; + break; } } } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/utils/XmlJsonConvertUtil.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/utils/XmlJsonConvertUtil.java index 4883961..2b40924 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/utils/XmlJsonConvertUtil.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/utils/XmlJsonConvertUtil.java @@ -12,12 +12,12 @@ import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; +import org.springframework.util.ObjectUtils; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import lombok.extern.slf4j.Slf4j; -import org.springframework.util.CollectionUtils; @Slf4j public class XmlJsonConvertUtil { @@ -52,6 +52,14 @@ public class XmlJsonConvertUtil { try { Document doc = DocumentHelper.parseText(xmlStr); dom4j2Json(doc.getRootElement(), json); + + // 存放根节点 + if (!ObjectUtils.isEmpty(json)) { + Element rootElement = doc.getRootElement(); + JSONObject wrapperJson = new JSONObject(); + wrapperJson.put(rootElement.getName(), json); + json = wrapperJson; + } } catch (DocumentException e) { log.error("转换失败:", e); } @@ -142,10 +150,10 @@ public class XmlJsonConvertUtil { } public static void main(String[] args) { - String xml = ""; + String xml = "就是个网页哇"; log.info("xml格式化前:{}", xml); - xml = xml.replaceAll(">[\\s\\p{Zs}]*<","><"); + xml = xml.replaceAll(">[\\s\\p{Zs}]*<", "><"); log.info("xml格式化后:{}", xml); JSONObject json = xml2Json(xml); System.out.println("xml2Json:" + json.toJSONString()); diff --git a/clients/java/wechat-ferry-mvn/src/main/resources/application.yml b/clients/java/wechat-ferry-mvn/src/main/resources/application.yml index 7069d10..c809c49 100644 --- a/clients/java/wechat-ferry-mvn/src/main/resources/application.yml +++ b/clients/java/wechat-ferry-mvn/src/main/resources/application.yml @@ -38,14 +38,18 @@ wechat: receive-msg-fwd-switch: false # 接收消息转发URL receive-msg-fwd-urls: - - http:// + - http://localhost:9001/msg # 发送消息前转发开关 send-msg-front-fwd-switch: false # 发送消息前转发URL send-msg-front-fwd-urls: - - http:// + - http://localhost:9001/msg # 发送消息后转发开关 send-msg-back-fwd-switch: false # 发送消息后转发URL send-msg-back-fwd-urls: - - http:// \ No newline at end of file + - http://localhost:9001/msg + # 调用第三方服务客户端成功状态码 + third-party-ok-codes: + # key:状态码字段 val:状态码值 + code: '200'