feat(0): [java]-[mvn]-1.新增通过好友申请接口

2.新增添加群成员为微信好友接口
3.新增邀请群成员接口
4.新增删除群成员接口
This commit is contained in:
chandler 2024-12-25 10:42:51 +08:00
parent aa02af83a3
commit 0174c97faf
8 changed files with 442 additions and 210 deletions

View File

@ -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<List<WxPpWcfGroupMemberResp>> queryGroupMember(@Validated @RequestBody WxPpWcfGroupMemberReq request) {
List<WxPpWcfGroupMemberResp> list = weChatDllService.queryGroupMember(request);
return TResponse.ok(ResponseCodeEnum.SUCCESS, list);
}
@ApiOperation(value = "发送消息汇总入口", notes = "sendMsgMaster")
@PostMapping(value = "/send/msgMaster")
public TResponse<WxPpWcfSendTextMsgResp> sendMsgMaster(@Validated @RequestBody String jsonString) {
@ -209,12 +206,40 @@ public class WeChatDllController {
// }
//
// @ApiOperation(value = "通过好友申请", notes = "queryMsgTypeList")
// @PostMapping(value = "/list/msgType")
// public TResponse<WxPpSendPatOnePatMsgResp> 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<Object> passFriendApply(@Validated @RequestBody WxPpWcfPassFriendApplyReq request) {
weChatDllService.passFriendApply(request);
return TResponse.ok(ResponseCodeEnum.SUCCESS);
}
@ApiOperation(value = "添加群成员为微信好友", notes = "addFriendGroupMember")
@PostMapping(value = "/addFriend/groupMember")
public TResponse<Object> addFriendGroupMember(WxPpWcfAddFriendGroupMemberReq request) {
weChatDllService.addFriendGroupMember(request);
return TResponse.ok(ResponseCodeEnum.SUCCESS);
}
@ApiOperation(value = "查询群成员列表", notes = "queryGroupMemberList")
@PostMapping(value = "/groupMember/list")
public TResponse<List<WxPpWcfGroupMemberResp>> queryGroupMemberList(@Validated @RequestBody WxPpWcfGroupMemberReq request) {
List<WxPpWcfGroupMemberResp> list = weChatDllService.queryGroupMemberList(request);
return TResponse.ok(ResponseCodeEnum.SUCCESS, list);
}
@ApiOperation(value = "邀请群成员", notes = "inviteGroupMember")
@PostMapping(value = "/groupMember/invite")
public TResponse<Object> inviteGroupMember(WxPpWcfInviteGroupMemberReq request) {
weChatDllService.inviteGroupMember(request);
return TResponse.ok(ResponseCodeEnum.SUCCESS);
}
@ApiOperation(value = "删除群成员", notes = "deleteGroupMember")
@PostMapping(value = "/groupMember/delete")
public TResponse<Object> 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<Object> queryMsgTypeList() {
// return TResponse.ok(ResponseCodeEnum.SUCCESS, list);
// }
//
// @ApiOperation(value = "添加群成员", notes = "queryMsgTypeList")
// @PostMapping(value = "/list/msgType")
// public TResponse<Object> queryMsgTypeList() {
// return TResponse.ok(ResponseCodeEnum.SUCCESS, list);
// }
//
// @ApiOperation(value = "删除群成员", notes = "queryMsgTypeList")
// @PostMapping(value = "/list/msgType")
// public TResponse<Object> queryMsgTypeList() {
// return TResponse.ok(ResponseCodeEnum.SUCCESS, list);
// }
//
// @ApiOperation(value = "邀请群成员", notes = "queryMsgTypeList")
// @PostMapping(value = "/list/msgType")
// public TResponse<Object> queryMsgTypeList() {
// return TResponse.ok(ResponseCodeEnum.SUCCESS, list);
// }
}

View File

@ -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<String> groupMembers;
}

View File

@ -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<String> groupMembers;
}

View File

@ -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<String> groupMembers;
}

View File

@ -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;
}

View File

@ -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;
}
/**
* 解密图片
*

View File

@ -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<WxPpWcfDatabaseRowResp> execDbQuerySql(WxPpWcfDatabaseSqlReq request);
/**
* 查询群成员
*
* @param request 请求入参
* @return 数据库记录
*
* @author chandler
* @date 2024-10-02 20:59
*/
List<WxPpWcfGroupMemberResp> 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<WxPpWcfGroupMemberResp> 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);
}

View File

@ -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<WxPpWcfGroupMemberResp> 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<WxPpWcfGroupMemberResp> queryGroupMemberList(WxPpWcfGroupMemberReq request) {
long startTime = System.currentTimeMillis();
List<WxPpWcfGroupMemberResp> 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();