From 0174c97faf2e5509522202ac6084cb5c4224bb0d Mon Sep 17 00:00:00 2001 From: chandler <1915724901@qq.com> Date: Wed, 25 Dec 2024 10:42:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(0):=20[java]-[mvn]-1.=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E5=A5=BD=E5=8F=8B=E7=94=B3=E8=AF=B7=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=202.=E6=96=B0=E5=A2=9E=E6=B7=BB=E5=8A=A0=E7=BE=A4?= =?UTF-8?q?=E6=88=90=E5=91=98=E4=B8=BA=E5=BE=AE=E4=BF=A1=E5=A5=BD=E5=8F=8B?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=203.=E6=96=B0=E5=A2=9E=E9=82=80=E8=AF=B7?= =?UTF-8?q?=E7=BE=A4=E6=88=90=E5=91=98=E6=8E=A5=E5=8F=A3=204.=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=88=A0=E9=99=A4=E7=BE=A4=E6=88=90=E5=91=98=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ferry/controller/WeChatDllController.java | 69 ++-- .../WxPpWcfAddFriendGroupMemberReq.java | 34 ++ .../request/WxPpWcfDeleteGroupMemberReq.java | 34 ++ .../request/WxPpWcfInviteGroupMemberReq.java | 34 ++ .../vo/request/WxPpWcfPassFriendApplyReq.java | 42 +++ .../ferry/handle/WeChatSocketClient.java | 38 -- .../ferry/service/WeChatDllService.java | 70 +++- .../service/impl/WeChatDllServiceImpl.java | 331 +++++++++++------- 8 files changed, 442 insertions(+), 210 deletions(-) create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfAddFriendGroupMemberReq.java create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfDeleteGroupMemberReq.java create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfInviteGroupMemberReq.java create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfPassFriendApplyReq.java diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatDllController.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatDllController.java index e52f160..91b870b 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatDllController.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatDllController.java @@ -10,9 +10,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.wechat.ferry.entity.TResponse; +import com.wechat.ferry.entity.vo.request.WxPpWcfAddFriendGroupMemberReq; import com.wechat.ferry.entity.vo.request.WxPpWcfDatabaseSqlReq; import com.wechat.ferry.entity.vo.request.WxPpWcfDatabaseTableReq; +import com.wechat.ferry.entity.vo.request.WxPpWcfDeleteGroupMemberReq; import com.wechat.ferry.entity.vo.request.WxPpWcfGroupMemberReq; +import com.wechat.ferry.entity.vo.request.WxPpWcfInviteGroupMemberReq; +import com.wechat.ferry.entity.vo.request.WxPpWcfPassFriendApplyReq; import com.wechat.ferry.entity.vo.request.WxPpWcfPatOnePatMsgReq; import com.wechat.ferry.entity.vo.request.WxPpWcfSendEmojiMsgReq; import com.wechat.ferry.entity.vo.request.WxPpWcfSendFileMsgReq; @@ -115,13 +119,6 @@ public class WeChatDllController { return TResponse.ok(ResponseCodeEnum.SUCCESS, list); } - @ApiOperation(value = "查询群成员", notes = "queryGroupMember") - @PostMapping(value = "/list/groupMember") - public TResponse> queryGroupMember(@Validated @RequestBody WxPpWcfGroupMemberReq request) { - List list = weChatDllService.queryGroupMember(request); - return TResponse.ok(ResponseCodeEnum.SUCCESS, list); - } - @ApiOperation(value = "发送消息汇总入口", notes = "sendMsgMaster") @PostMapping(value = "/send/msgMaster") public TResponse sendMsgMaster(@Validated @RequestBody String jsonString) { @@ -209,12 +206,40 @@ public class WeChatDllController { // } // - // @ApiOperation(value = "通过好友申请", notes = "queryMsgTypeList") - // @PostMapping(value = "/list/msgType") - // public TResponse friendApply(@Validated @RequestBody WxPpPatOnePatMsgReq request) { - // // WxPpSendPatOnePatMsgResp resp = weChatDllService.patOnePat(request); - // return TResponse.ok(ResponseCodeEnum.SUCCESS, resp); - // } + @ApiOperation(value = "通过好友申请", notes = "passFriendApply") + @PostMapping(value = "/passFriendApply") + public TResponse passFriendApply(@Validated @RequestBody WxPpWcfPassFriendApplyReq request) { + weChatDllService.passFriendApply(request); + return TResponse.ok(ResponseCodeEnum.SUCCESS); + } + + @ApiOperation(value = "添加群成员为微信好友", notes = "addFriendGroupMember") + @PostMapping(value = "/addFriend/groupMember") + public TResponse addFriendGroupMember(WxPpWcfAddFriendGroupMemberReq request) { + weChatDllService.addFriendGroupMember(request); + return TResponse.ok(ResponseCodeEnum.SUCCESS); + } + + @ApiOperation(value = "查询群成员列表", notes = "queryGroupMemberList") + @PostMapping(value = "/groupMember/list") + public TResponse> queryGroupMemberList(@Validated @RequestBody WxPpWcfGroupMemberReq request) { + List list = weChatDllService.queryGroupMemberList(request); + return TResponse.ok(ResponseCodeEnum.SUCCESS, list); + } + + @ApiOperation(value = "邀请群成员", notes = "inviteGroupMember") + @PostMapping(value = "/groupMember/invite") + public TResponse inviteGroupMember(WxPpWcfInviteGroupMemberReq request) { + weChatDllService.inviteGroupMember(request); + return TResponse.ok(ResponseCodeEnum.SUCCESS); + } + + @ApiOperation(value = "删除群成员", notes = "deleteGroupMember") + @PostMapping(value = "/groupMember/delete") + public TResponse deleteGroupMember(WxPpWcfDeleteGroupMemberReq request) { + weChatDllService.deleteGroupMember(request); + return TResponse.ok(ResponseCodeEnum.SUCCESS); + } // @ApiOperation(value = "获取朋友圈消息", notes = "queryMsgTypeList") // @PostMapping(value = "/list/msgType") @@ -233,23 +258,5 @@ public class WeChatDllController { // public TResponse queryMsgTypeList() { // return TResponse.ok(ResponseCodeEnum.SUCCESS, list); // } - // - // @ApiOperation(value = "添加群成员", notes = "queryMsgTypeList") - // @PostMapping(value = "/list/msgType") - // public TResponse queryMsgTypeList() { - // return TResponse.ok(ResponseCodeEnum.SUCCESS, list); - // } - // - // @ApiOperation(value = "删除群成员", notes = "queryMsgTypeList") - // @PostMapping(value = "/list/msgType") - // public TResponse queryMsgTypeList() { - // return TResponse.ok(ResponseCodeEnum.SUCCESS, list); - // } - // - // @ApiOperation(value = "邀请群成员", notes = "queryMsgTypeList") - // @PostMapping(value = "/list/msgType") - // public TResponse queryMsgTypeList() { - // return TResponse.ok(ResponseCodeEnum.SUCCESS, list); - // } } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfAddFriendGroupMemberReq.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfAddFriendGroupMemberReq.java new file mode 100644 index 0000000..1ab873f --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfAddFriendGroupMemberReq.java @@ -0,0 +1,34 @@ +package com.wechat.ferry.entity.vo.request; + +import javax.validation.constraints.NotBlank; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 请求入参-添加群成员为好友 + * + * @author chandler + * @date 2024-12-25 09:53 + */ +@Data +@ApiModel(value = "wxPpWcfAddFriendGroupMemberReq", description = "个微WCF添加群成员为好友请求入参") +public class WxPpWcfAddFriendGroupMemberReq { + + /** + * 群编号 + */ + @NotBlank(message = "群编号不能为空") + @ApiModelProperty(value = "群编号") + private String groupNo; + + /** + * 待添加的群成员列表 + */ + @ApiModelProperty(value = "待添加的群成员列表") + private List groupMembers; + +} diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfDeleteGroupMemberReq.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfDeleteGroupMemberReq.java new file mode 100644 index 0000000..4055c09 --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfDeleteGroupMemberReq.java @@ -0,0 +1,34 @@ +package com.wechat.ferry.entity.vo.request; + +import java.util.List; + +import javax.validation.constraints.NotBlank; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 请求入参-个微WCF删除群成员 + * + * @author chandler + * @date 2024-12-25 10:01 + */ +@Data +@ApiModel(value = "wxPpWcfDeleteGroupMemberReq", description = "个微WCF删除群成员请求入参") +public class WxPpWcfDeleteGroupMemberReq { + + /** + * 群编号 + */ + @NotBlank(message = "群编号不能为空") + @ApiModelProperty(value = "群编号") + private String groupNo; + + /** + * 待删除的群成员列表 + */ + @ApiModelProperty(value = "待删除的群成员列表") + private List groupMembers; + +} diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfInviteGroupMemberReq.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfInviteGroupMemberReq.java new file mode 100644 index 0000000..97bd6cc --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfInviteGroupMemberReq.java @@ -0,0 +1,34 @@ +package com.wechat.ferry.entity.vo.request; + +import java.util.List; + +import javax.validation.constraints.NotBlank; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 请求入参-个微WCF邀请群成员 + * + * @author chandler + * @date 2024-12-25 09:51 + */ +@Data +@ApiModel(value = "wxPpWcfInviteGroupMemberReq", description = "个微WCF邀请群成员请求入参") +public class WxPpWcfInviteGroupMemberReq { + + /** + * 群编号 + */ + @NotBlank(message = "群编号不能为空") + @ApiModelProperty(value = "群编号") + private String groupNo; + + /** + * 待邀请的群成员列表 + */ + @ApiModelProperty(value = "待邀请的群成员列表") + private List groupMembers; + +} diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfPassFriendApplyReq.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfPassFriendApplyReq.java new file mode 100644 index 0000000..17fd1f8 --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfPassFriendApplyReq.java @@ -0,0 +1,42 @@ +package com.wechat.ferry.entity.vo.request; + +import javax.validation.constraints.NotBlank; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 请求入参-通过好友申请 + * + * @author chandler + * @date 2024-12-25 09:30 + */ +@Data +@ApiModel(value = "wxPpWcfPassFriendApplyReq", description = "个微WCF通过好友申请请求入参") +public class WxPpWcfPassFriendApplyReq { + + /** + * 申请人 + * v3 xml.attrib["encryptusername"] + */ + @NotBlank(message = "申请人不能为空") + @ApiModelProperty(value = "申请人") + private String applicant; + + /** + * 审核人 + * v4 xml.attrib["ticket"] + * 一般指自己,别人申请添加,自己审核是否通过 + */ + @NotBlank(message = "审核人不能为空") + @ApiModelProperty(value = "审核人") + private String reviewer; + + /** + * 场景 + */ + @ApiModelProperty(value = "场景") + private String scene; + +} 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 7f34ad4..d707dba 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 @@ -15,10 +15,8 @@ import com.wechat.ferry.entity.proto.Wcf.DbQuery; import com.wechat.ferry.entity.proto.Wcf.DbRow; import com.wechat.ferry.entity.proto.Wcf.DecPath; import com.wechat.ferry.entity.proto.Wcf.Functions; -import com.wechat.ferry.entity.proto.Wcf.MemberMgmt; import com.wechat.ferry.entity.proto.Wcf.Request; import com.wechat.ferry.entity.proto.Wcf.Response; -import com.wechat.ferry.entity.proto.Wcf.Verification; import com.wechat.ferry.entity.proto.Wcf.WxMsg; import com.wechat.ferry.service.SDK; import com.wechat.ferry.utils.HttpClientUtil; @@ -159,42 +157,6 @@ public class WeChatSocketClient { return null; } - /** - * 接收好友请求 - * - * @param v3 xml.attrib["encryptusername"] - * @param v4 xml.attrib["ticket"] - * @return 结果状态码 - */ - public int acceptNewFriend(String v3, String v4) { - int ret = -1; - Verification verification = Verification.newBuilder().setV3(v3).setV4(v4).build(); - Request req = Request.newBuilder().setFuncValue(Functions.FUNC_ACCEPT_FRIEND_VALUE).setV(verification).build(); - Response rsp = sendCmd(req); - if (rsp != null) { - ret = rsp.getStatus(); - } - return ret; - } - - /** - * 添加群成员为微信好友 - * - * @param roomID 群ID - * @param wxIds 要加群的人列表,逗号分隔 - * @return 1 为成功,其他失败 - */ - public int addChatroomMembers(String roomID, String wxIds) { - int ret = -1; - MemberMgmt memberMgmt = MemberMgmt.newBuilder().setRoomid(roomID).setWxids(wxIds).build(); - Request req = Request.newBuilder().setFuncValue(Functions.FUNC_ADD_ROOM_MEMBERS_VALUE).setM(memberMgmt).build(); - Response rsp = sendCmd(req); - if (rsp != null) { - ret = rsp.getStatus(); - } - return ret; - } - /** * 解密图片 * diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatDllService.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatDllService.java index b998b8c..6f47f17 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatDllService.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatDllService.java @@ -2,9 +2,13 @@ package com.wechat.ferry.service; import java.util.List; +import com.wechat.ferry.entity.vo.request.WxPpWcfAddFriendGroupMemberReq; import com.wechat.ferry.entity.vo.request.WxPpWcfDatabaseSqlReq; import com.wechat.ferry.entity.vo.request.WxPpWcfDatabaseTableReq; +import com.wechat.ferry.entity.vo.request.WxPpWcfDeleteGroupMemberReq; import com.wechat.ferry.entity.vo.request.WxPpWcfGroupMemberReq; +import com.wechat.ferry.entity.vo.request.WxPpWcfInviteGroupMemberReq; +import com.wechat.ferry.entity.vo.request.WxPpWcfPassFriendApplyReq; import com.wechat.ferry.entity.vo.request.WxPpWcfPatOnePatMsgReq; import com.wechat.ferry.entity.vo.request.WxPpWcfSendEmojiMsgReq; import com.wechat.ferry.entity.vo.request.WxPpWcfSendFileMsgReq; @@ -117,17 +121,6 @@ public interface WeChatDllService { */ List execDbQuerySql(WxPpWcfDatabaseSqlReq request); - /** - * 查询群成员 - * - * @param request 请求入参 - * @return 数据库记录 - * - * @author chandler - * @date 2024-10-02 20:59 - */ - List queryGroupMember(WxPpWcfGroupMemberReq request); - /** * 发送文本消息(可 @) * @@ -207,4 +200,59 @@ public interface WeChatDllService { */ WxPpWcfSendPatOnePatMsgResp patOnePat(WxPpWcfPatOnePatMsgReq request); + /** + * 通过好友申请 + * + * @param request 请求入参 + * @return 结果状态 + * + * @author chandler + * @date 2024-12-25 09:38 + */ + String passFriendApply(WxPpWcfPassFriendApplyReq request); + + /** + * 添加群成员为微信好友 + * + * @param request 请求入参 + * @return 结果状态 + * + * @author chandler + * @date 2024-12-25 09:38 + */ + String addFriendGroupMember(WxPpWcfAddFriendGroupMemberReq request); + + /** + * 查询群成员列表 + * + * @param request 请求入参 + * @return 数据库记录 + * + * @author chandler + * @date 2024-10-02 20:59 + */ + List queryGroupMemberList(WxPpWcfGroupMemberReq request); + + /** + * 邀请群成员 + * + * @param request 请求入参 + * @return 结果状态 + * + * @author chandler + * @date 2024-12-25 10:02 + */ + String inviteGroupMember(WxPpWcfInviteGroupMemberReq request); + + /** + * 删除群成员 + * + * @param request 请求入参 + * @return 结果状态 + * + * @author chandler + * @date 2024-12-25 10:03 + */ + String deleteGroupMember(WxPpWcfDeleteGroupMemberReq request); + } 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 6a2b61c..caa217d 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 @@ -21,9 +21,13 @@ import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; import com.wechat.ferry.config.WeChatFerryProperties; import com.wechat.ferry.entity.proto.Wcf; +import com.wechat.ferry.entity.vo.request.WxPpWcfAddFriendGroupMemberReq; import com.wechat.ferry.entity.vo.request.WxPpWcfDatabaseSqlReq; import com.wechat.ferry.entity.vo.request.WxPpWcfDatabaseTableReq; +import com.wechat.ferry.entity.vo.request.WxPpWcfDeleteGroupMemberReq; import com.wechat.ferry.entity.vo.request.WxPpWcfGroupMemberReq; +import com.wechat.ferry.entity.vo.request.WxPpWcfInviteGroupMemberReq; +import com.wechat.ferry.entity.vo.request.WxPpWcfPassFriendApplyReq; import com.wechat.ferry.entity.vo.request.WxPpWcfPatOnePatMsgReq; import com.wechat.ferry.entity.vo.request.WxPpWcfSendEmojiMsgReq; import com.wechat.ferry.entity.vo.request.WxPpWcfSendFileMsgReq; @@ -283,7 +287,177 @@ public class WeChatDllServiceImpl implements WeChatDllService { } @Override - public List queryGroupMember(WxPpWcfGroupMemberReq request) { + public WxPpWcfSendTextMsgResp sendTextMsg(WxPpWcfSendTextMsgReq request) { + long startTime = System.currentTimeMillis(); + log.info("[发送消息]-[文本消息]-入参打印:{}", request); + String atUser = ""; + if (request.getIsAtAll()) { + // 艾特全体,仅管理员有效 + atUser = "@all"; + } else { + // 处理艾特的人员 + if (!CollectionUtils.isEmpty(request.getAtUsers())) { + atUser = String.join(",", request.getAtUsers()); + } + } + Wcf.TextMsg textMsg = Wcf.TextMsg.newBuilder().setMsg(request.getMsgText()).setReceiver(request.getRecipient()).setAters(atUser).build(); + Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_TXT_VALUE).setTxt(textMsg).build(); + log.debug("sendText: {}", wechatSocketClient.bytesToHex(req.toByteArray())); + Wcf.Response rsp = wechatSocketClient.sendCmd(req); + // 0 为成功,其他失败 + int state = judgeWcfCmdState(rsp); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); + long endTime = System.currentTimeMillis(); + log.info("[发送消息]-[文本消息]-处理结束,耗时:{}ms", (endTime - startTime)); + return null; + } + + @Override + public WxPpWcfSendRichTextMsgResp sendRichTextMsg(WxPpWcfSendRichTextMsgReq request) { + long startTime = System.currentTimeMillis(); + log.info("[发送消息]-[富文本消息]-入参打印:{}", request); + Wcf.RichText richTextMsg = Wcf.RichText.newBuilder().setName(request.getName()).setAccount(request.getAccount()).setTitle(request.getTitle()) + .setDigest(request.getDigest()).setUrl(request.getJumpUrl()).setThumburl(request.getThumbnailUrl()).setReceiver(request.getRecipient()) + .build(); + Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_RICH_TXT_VALUE).setRt(richTextMsg).build(); + log.debug("sendRichText: {}", wechatSocketClient.bytesToHex(req.toByteArray())); + Wcf.Response rsp = wechatSocketClient.sendCmd(req); + int state = judgeWcfCmdState(rsp); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); + long endTime = System.currentTimeMillis(); + log.info("[发送消息]-[富文本消息]-处理结束,耗时:{}ms", (endTime - startTime)); + return null; + } + + @Override + public WxPpWcfSendXmlMsgResp sendXmlMsg(WxPpWcfSendXmlMsgReq request) { + long startTime = System.currentTimeMillis(); + log.info("[发送消息]-[XML消息]-入参打印:{}", request); + int xmlType = 0x21; + if ("21".equals(request.getXmlType())) { + // 小程序 + xmlType = 0x21; + } + Wcf.XmlMsg xmlMsg = Wcf.XmlMsg.newBuilder().setContent(request.getXmlContent()).setReceiver(request.getRecipient()) + .setPath(request.getResourcePath()).setType(xmlType).build(); + Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_XML_VALUE).setXml(xmlMsg).build(); + log.debug("sendXml: {}", wechatSocketClient.bytesToHex(req.toByteArray())); + Wcf.Response rsp = wechatSocketClient.sendCmd(req); + int state = judgeWcfCmdState(rsp); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); + long endTime = System.currentTimeMillis(); + log.info("[发送消息]-[XML消息]-处理结束,耗时:{}ms", (endTime - startTime)); + return null; + } + + @Override + public WxPpWcfSendImageMsgResp sendImageMsg(WxPpWcfSendImageMsgReq request) { + long startTime = System.currentTimeMillis(); + log.info("[发送消息]-[图片消息]-入参打印:{}", request); + WxPpWcfSendImageMsgResp resp = new WxPpWcfSendImageMsgResp(); + Wcf.PathMsg pathMsg = Wcf.PathMsg.newBuilder().setPath(request.getResourcePath()).setReceiver(request.getRecipient()).build(); + Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_IMG_VALUE).setFile(pathMsg).build(); + log.debug("sendImage: {}", wechatSocketClient.bytesToHex(req.toByteArray())); + Wcf.Response rsp = wechatSocketClient.sendCmd(req); + int state = judgeWcfCmdState(rsp); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); + long endTime = System.currentTimeMillis(); + log.info("[发送消息]-[图片消息]-处理结束,耗时:{}ms", (endTime - startTime)); + return null; + } + + @Deprecated + @Override + public WxPpWcfSendEmojiMsgResp sendEmojiMsg(WxPpWcfSendEmojiMsgReq request) { + long startTime = System.currentTimeMillis(); + log.info("[发送消息]-[表情消息]-入参打印:{}", request); + Wcf.PathMsg pathMsg = Wcf.PathMsg.newBuilder().setPath(request.getResourcePath()).setReceiver(request.getRecipient()).build(); + Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_EMOTION_VALUE).setFile(pathMsg).build(); + log.debug("sendEmotion: {}", wechatSocketClient.bytesToHex(req.toByteArray())); + Wcf.Response rsp = wechatSocketClient.sendCmd(req); + int state = judgeWcfCmdState(rsp); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); + long endTime = System.currentTimeMillis(); + log.info("[发送消息]-[表情消息]-处理结束,耗时:{}ms", (endTime - startTime)); + return null; + } + + @Override + public WxPpWcfSendFileMsgResp sendFileMsg(WxPpWcfSendFileMsgReq request) { + long startTime = System.currentTimeMillis(); + log.info("[发送消息]-[文件消息]-入参打印:{}", request); + Wcf.PathMsg pathMsg = Wcf.PathMsg.newBuilder().setPath(request.getResourcePath()).setReceiver(request.getRecipient()).build(); + Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_FILE_VALUE).setFile(pathMsg).build(); + log.debug("sendFile: {}", wechatSocketClient.bytesToHex(req.toByteArray())); + Wcf.Response rsp = wechatSocketClient.sendCmd(req); + int state = judgeWcfCmdState(rsp); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); + long endTime = System.currentTimeMillis(); + log.info("[发送消息]-[文件消息]-处理结束,耗时:{}ms", (endTime - startTime)); + return null; + } + + @Override + public WxPpWcfSendPatOnePatMsgResp patOnePat(WxPpWcfPatOnePatMsgReq request) { + long startTime = System.currentTimeMillis(); + log.info("[发送消息]-[拍一拍消息]-入参打印:{}", request); + Wcf.PatMsg patMsg = Wcf.PatMsg.newBuilder().setRoomid(request.getRecipient()).setWxid(request.getPatUser()).build(); + Wcf.Request wcfReq = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_PAT_MSG_VALUE).setPm(patMsg).build(); + Wcf.Response rsp = wechatSocketClient.sendCmd(wcfReq); + int state = judgeWcfCmdState(rsp); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); + long endTime = System.currentTimeMillis(); + log.info("[发送消息]-[拍一拍消息]-处理结束,耗时:{}ms", (endTime - startTime)); + return null; + } + + @Override + public String passFriendApply(WxPpWcfPassFriendApplyReq request) { + long startTime = System.currentTimeMillis(); + log.info("[好友申请]-[通过好友申请]-入参打印:{}", request); + Wcf.Verification verification = Wcf.Verification.newBuilder().setV3(request.getApplicant()).setV4(request.getReviewer()).build(); + Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_ACCEPT_FRIEND_VALUE).setV(verification).build(); + Wcf.Response rsp = wechatSocketClient.sendCmd(req); + int state = judgeWcfCmdState(rsp); + long endTime = System.currentTimeMillis(); + log.info("[好友申请]-[通过好友申请]-处理结束,耗时:{}ms", (endTime - startTime)); + return ""; + } + + @Override + public String addFriendGroupMember(WxPpWcfAddFriendGroupMemberReq request) { + long startTime = System.currentTimeMillis(); + log.info("[添加好友]-[添加群成员为好友]-入参打印:{}", request); + if (CollectionUtils.isEmpty(request.getGroupMembers())) { + log.error("[添加好友]-[添加群成员为好友]-待添加人员为空,本次操作取消"); + return ""; + } + String groupMembersStr = String.join(",", request.getGroupMembers()); + Wcf.MemberMgmt memberMgmt = Wcf.MemberMgmt.newBuilder().setRoomid(request.getGroupNo()).setWxids(groupMembersStr).build(); + Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_ADD_ROOM_MEMBERS_VALUE).setM(memberMgmt).build(); + Wcf.Response rsp = wechatSocketClient.sendCmd(req); + int state = judgeWcfCmdState(rsp); + long endTime = System.currentTimeMillis(); + log.info("[添加好友]-[添加群成员为好友]-处理结束,耗时:{}ms", (endTime - startTime)); + return ""; + } + + @Override + public List queryGroupMemberList(WxPpWcfGroupMemberReq request) { long startTime = System.currentTimeMillis(); List list = new ArrayList<>(); // 查询群成员 @@ -353,142 +527,39 @@ public class WeChatDllServiceImpl implements WeChatDllService { } @Override - public WxPpWcfSendTextMsgResp sendTextMsg(WxPpWcfSendTextMsgReq request) { + public String inviteGroupMember(WxPpWcfInviteGroupMemberReq request) { long startTime = System.currentTimeMillis(); - log.info("[发送消息]-[文本消息]-入参打印:{}", request); - String atUser = ""; - if (request.getIsAtAll()) { - // 艾特全体,仅管理员有效 - atUser = "@all"; - } else { - // 处理艾特的人员 - if (!CollectionUtils.isEmpty(request.getAtUsers())) { - atUser = String.join(",", request.getAtUsers()); - } + log.info("[群成员]-[邀请群成员加入]-入参打印:{}", request); + if (CollectionUtils.isEmpty(request.getGroupMembers())) { + log.error("[群成员]-[邀请群成员加入]-待邀请进群的人员为空,本次操作取消"); + return ""; } - Wcf.TextMsg textMsg = Wcf.TextMsg.newBuilder().setMsg(request.getMsgText()).setReceiver(request.getRecipient()).setAters(atUser).build(); - Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_TXT_VALUE).setTxt(textMsg).build(); - log.debug("sendText: {}", wechatSocketClient.bytesToHex(req.toByteArray())); + String groupMembersStr = String.join(",", request.getGroupMembers()); + Wcf.MemberMgmt memberMgmt = Wcf.MemberMgmt.newBuilder().setRoomid(request.getGroupNo()).setWxids(groupMembersStr).build(); + Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_INV_ROOM_MEMBERS_VALUE).setM(memberMgmt).build(); Wcf.Response rsp = wechatSocketClient.sendCmd(req); - // 0 为成功,其他失败 - int state = judgeSendMsgState(rsp); - // 转发处理 - String stringJson = JSON.toJSONString(request); - sendMsgForward(stringJson, state); + int state = judgeWcfCmdState(rsp); long endTime = System.currentTimeMillis(); - log.info("[发送消息]-[文本消息]-处理结束,耗时:{}ms", (endTime - startTime)); - return null; + log.info("[群成员]-[邀请群成员加入]-处理结束,耗时:{}ms", (endTime - startTime)); + return ""; } @Override - public WxPpWcfSendRichTextMsgResp sendRichTextMsg(WxPpWcfSendRichTextMsgReq request) { + public String deleteGroupMember(WxPpWcfDeleteGroupMemberReq request) { long startTime = System.currentTimeMillis(); - log.info("[发送消息]-[富文本消息]-入参打印:{}", request); - Wcf.RichText richTextMsg = Wcf.RichText.newBuilder().setName(request.getName()).setAccount(request.getAccount()).setTitle(request.getTitle()) - .setDigest(request.getDigest()).setUrl(request.getJumpUrl()).setThumburl(request.getThumbnailUrl()).setReceiver(request.getRecipient()) - .build(); - Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_RICH_TXT_VALUE).setRt(richTextMsg).build(); - log.debug("sendRichText: {}", wechatSocketClient.bytesToHex(req.toByteArray())); - Wcf.Response rsp = wechatSocketClient.sendCmd(req); - int state = judgeSendMsgState(rsp); - // 转发处理 - String stringJson = JSON.toJSONString(request); - sendMsgForward(stringJson, state); - long endTime = System.currentTimeMillis(); - log.info("[发送消息]-[富文本消息]-处理结束,耗时:{}ms", (endTime - startTime)); - return null; - } - - @Override - public WxPpWcfSendXmlMsgResp sendXmlMsg(WxPpWcfSendXmlMsgReq request) { - long startTime = System.currentTimeMillis(); - log.info("[发送消息]-[XML消息]-入参打印:{}", request); - int xmlType = 0x21; - if ("21".equals(request.getXmlType())) { - // 小程序 - xmlType = 0x21; + log.info("[群成员]-[删除群成员]-入参打印:{}", request); + if (CollectionUtils.isEmpty(request.getGroupMembers())) { + log.error("[群成员]-[删除群成员]-待删除的人员为空,本次操作取消"); + return ""; } - Wcf.XmlMsg xmlMsg = Wcf.XmlMsg.newBuilder().setContent(request.getXmlContent()).setReceiver(request.getRecipient()) - .setPath(request.getResourcePath()).setType(xmlType).build(); - Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_XML_VALUE).setXml(xmlMsg).build(); - log.debug("sendXml: {}", wechatSocketClient.bytesToHex(req.toByteArray())); + String groupMembersStr = String.join(",", request.getGroupMembers()); + Wcf.MemberMgmt memberMgmt = Wcf.MemberMgmt.newBuilder().setRoomid(request.getGroupNo()).setWxids(groupMembersStr).build(); + Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_DEL_ROOM_MEMBERS_VALUE).setM(memberMgmt).build(); Wcf.Response rsp = wechatSocketClient.sendCmd(req); - int state = judgeSendMsgState(rsp); - // 转发处理 - String stringJson = JSON.toJSONString(request); - sendMsgForward(stringJson, state); + int state = judgeWcfCmdState(rsp); long endTime = System.currentTimeMillis(); - log.info("[发送消息]-[XML消息]-处理结束,耗时:{}ms", (endTime - startTime)); - return null; - } - - @Override - public WxPpWcfSendImageMsgResp sendImageMsg(WxPpWcfSendImageMsgReq request) { - long startTime = System.currentTimeMillis(); - log.info("[发送消息]-[图片消息]-入参打印:{}", request); - WxPpWcfSendImageMsgResp resp = new WxPpWcfSendImageMsgResp(); - Wcf.PathMsg pathMsg = Wcf.PathMsg.newBuilder().setPath(request.getResourcePath()).setReceiver(request.getRecipient()).build(); - Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_IMG_VALUE).setFile(pathMsg).build(); - log.debug("sendImage: {}", wechatSocketClient.bytesToHex(req.toByteArray())); - Wcf.Response rsp = wechatSocketClient.sendCmd(req); - int state = judgeSendMsgState(rsp); - // 转发处理 - String stringJson = JSON.toJSONString(request); - sendMsgForward(stringJson, state); - long endTime = System.currentTimeMillis(); - log.info("[发送消息]-[图片消息]-处理结束,耗时:{}ms", (endTime - startTime)); - return null; - } - - @Deprecated - @Override - public WxPpWcfSendEmojiMsgResp sendEmojiMsg(WxPpWcfSendEmojiMsgReq request) { - long startTime = System.currentTimeMillis(); - log.info("[发送消息]-[表情消息]-入参打印:{}", request); - Wcf.PathMsg pathMsg = Wcf.PathMsg.newBuilder().setPath(request.getResourcePath()).setReceiver(request.getRecipient()).build(); - Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_EMOTION_VALUE).setFile(pathMsg).build(); - log.debug("sendEmotion: {}", wechatSocketClient.bytesToHex(req.toByteArray())); - Wcf.Response rsp = wechatSocketClient.sendCmd(req); - int state = judgeSendMsgState(rsp); - // 转发处理 - String stringJson = JSON.toJSONString(request); - sendMsgForward(stringJson, state); - long endTime = System.currentTimeMillis(); - log.info("[发送消息]-[表情消息]-处理结束,耗时:{}ms", (endTime - startTime)); - return null; - } - - @Override - public WxPpWcfSendFileMsgResp sendFileMsg(WxPpWcfSendFileMsgReq request) { - long startTime = System.currentTimeMillis(); - log.info("[发送消息]-[文件消息]-入参打印:{}", request); - Wcf.PathMsg pathMsg = Wcf.PathMsg.newBuilder().setPath(request.getResourcePath()).setReceiver(request.getRecipient()).build(); - Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_FILE_VALUE).setFile(pathMsg).build(); - log.debug("sendFile: {}", wechatSocketClient.bytesToHex(req.toByteArray())); - Wcf.Response rsp = wechatSocketClient.sendCmd(req); - int state = judgeSendMsgState(rsp); - // 转发处理 - String stringJson = JSON.toJSONString(request); - sendMsgForward(stringJson, state); - long endTime = System.currentTimeMillis(); - log.info("[发送消息]-[文件消息]-处理结束,耗时:{}ms", (endTime - startTime)); - return null; - } - - @Override - public WxPpWcfSendPatOnePatMsgResp patOnePat(WxPpWcfPatOnePatMsgReq request) { - long startTime = System.currentTimeMillis(); - log.info("[发送消息]-[拍一拍消息]-入参打印:{}", request); - Wcf.PatMsg patMsg = Wcf.PatMsg.newBuilder().setRoomid(request.getRecipient()).setWxid(request.getPatUser()).build(); - Wcf.Request wcfReq = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_PAT_MSG_VALUE).setPm(patMsg).build(); - Wcf.Response rsp = wechatSocketClient.sendCmd(wcfReq); - int state = judgeSendMsgState(rsp); - // 转发处理 - String stringJson = JSON.toJSONString(request); - sendMsgForward(stringJson, state); - long endTime = System.currentTimeMillis(); - log.info("[发送消息]-[拍一拍消息]-处理结束,耗时:{}ms", (endTime - startTime)); - return null; + log.info("[群成员]-[删除群成员]-处理结束,耗时:{}ms", (endTime - startTime)); + return ""; } /** @@ -615,8 +686,8 @@ public class WeChatDllServiceImpl implements WeChatDllService { } /** - * 判断发送消息状态 - * 0 为成功,其他失败 + * 判断WCF的CMD调用状态 + * 有值 为成功,其他失败 * * @param rsp 响应参数 * @return 状态 @@ -624,8 +695,8 @@ public class WeChatDllServiceImpl implements WeChatDllService { * @author chandler * @date 2024-12-23 21:53 */ - private int judgeSendMsgState(Wcf.Response rsp) { - // 0 为成功,其他失败 + private int judgeWcfCmdState(Wcf.Response rsp) { + // 有值 为成功,其他失败 int state = -1; if (rsp != null) { state = rsp.getStatus();