Przeglądaj źródła

保留最新供调用的CID接口

cgp 1 miesiąc temu
rodzic
commit
76b869e3d1

+ 21 - 0
fs-service/src/main/java/com/fs/wxcid/dto/friend/GetContactDetailsListRequest.java

@@ -0,0 +1,21 @@
+package com.fs.wxcid.dto.friend;
+
+import lombok.Data;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * 获取联系人详情列表的请求参数
+ * 支持同时查询多个用户和群聊
+ * 对应接口:/friend/GetContactDetailsList
+ */
+@Data
+public class GetContactDetailsListRequest {
+    /** 要查询的群聊 wxid 列表 */
+    @JsonProperty("RoomWxIDList")
+    private List<String> RoomWxIDList;
+
+    /** 要查询的用户 wxid 列表 */
+    @JsonProperty("UserNames")
+    private List<String> UserNames;
+}

+ 3 - 129
fs-service/src/main/java/com/fs/wxcid/service/FriendService.java

@@ -3,6 +3,7 @@
 package com.fs.wxcid.service;
 
 import com.fs.wxcid.dto.common.ApiResponse;
+import com.fs.wxcid.dto.common.ApiResponseCommon;
 import com.fs.wxcid.dto.friend.*;
 
 /**
@@ -15,45 +16,6 @@ import com.fs.wxcid.dto.friend.*;
  */
 public interface FriendService {
 
-    /**
-     * 同意好友请求
-     * <p>
-     * 对应接口:POST /friend/AgreeAdd
-     * 通常用于处理来自他人的加好友申请,需提供 V3/V4 等加密参数。
-     * </p>
-     *
-     * @param authKey    账号唯一标识(query 参数)
-     * @param request 同意请求参数(包含 V3、V4、Scene 等)
-     * @return 统一响应结果
-     */
-    ApiResponse agreeAdd(String authKey, AgreeAddRequest request);
-
-    /**
-     * 删除好友
-     * <p>
-     * 对应接口:POST /friend/DelContact
-     * 从联系人列表中移除指定用户。
-     * </p>
-     *
-     * @param authKey    账号唯一标识
-     * @param request 删除请求参数(含 DelUserName)
-     * @return 统一响应结果
-     */
-    ApiResponse delContact(String authKey, DelContactRequest request);
-
-    /**
-     * 批量获取联系人详细信息
-     * <p>
-     * 对应接口:POST /friend/GetContactDetailsList
-     * 可同时查询多个用户或群聊的详细资料。
-     * </p>
-     *
-     * @param authKey    账号唯一标识
-     * @param request 查询参数(支持 UserNames 和 RoomWxIDList)
-     * @return 统一响应结果
-     */
-    ApiResponse getContactDetailsList(String authKey, GetContactDetailsListRequest request);
-
     /**
      * 分页获取全部联系人(包括好友和群聊)
      * <p>
@@ -65,94 +27,6 @@ public interface FriendService {
      * @param request 分页参数(CurrentWxcontactSeq / CurrentChatRoomContactSeq)
      * @return 统一响应结果
      */
-    ApiResponse getContactList(String authKey, GetContactListRequest request);
-
-    /**
-     * 查询与指定用户的好友关系状态
-     * <p>
-     * 对应接口:POST /friend/GetFriendRelation
-     * 可判断是否为单向/双向好友、是否被拉黑等。
-     * </p>
-     *
-     * @param authKey    账号唯一标识
-     * @param request 目标用户名(UserName)
-     * @return 统一响应结果(含关系状态码)
-     */
-    ApiResponse getFriendRelation(String authKey, GetFriendRelationRequest request);
-
-    /**
-     * 获取已关注的公众号列表
-     * <p>
-     * 对应接口:GET /friend/GetGHList
-     * 返回当前账号关注的所有公众号信息。
-     * </p>
-     *
-     * @param authKey 账号唯一标识
-     * @return 统一响应结果
-     */
-    ApiResponse getGHList(String authKey);
-
-    /**
-     * 获取手机通讯录中匹配的微信好友
-     * <p>
-     * 对应接口:GET /friend/GetMFriend
-     * 需提前上传通讯录(UploadMContact),否则可能返回空。
-     * </p>
-     *
-     * @param authKey 账号唯一标识
-     * @return 统一响应结果
-     */
-    ApiResponse getMFriend(String authKey);
-
-    /**
-     * 获取已保存的群聊列表
-     * <p>
-     * 对应接口:GET /friend/GroupList
-     * 返回当前账号参与并保存的所有群聊。
-     * </p>
-     *
-     * @param authKey 账号唯一标识
-     * @return 统一响应结果
-     */
-    ApiResponse getGroupList(String authKey);
-
-    /**
-     * 搜索联系人
-     * <p>
-     * 对应接口:POST /friend/SearchContact
-     * 支持按昵称、微信号、手机号等模糊搜索。
-     * </p>
-     *
-     * @param authKey    账号唯一标识
-     * @param request 搜索参数(UserName + 场景配置)
-     * @return 统一响应结果
-     */
-    ApiResponse searchContact(String authKey, SearchContactRequest request);
-
-    /**
-     * 上传手机通讯录用于匹配微信好友
-     * <p>
-     * 对应接口:POST /friend/UploadMContact
-     * 上传后可调用 GetMFriend 获取匹配结果。
-     * </p>
-     *
-     * @param authKey    账号唯一标识
-     * @param request 通讯录号码列表(MobileList)
-     * @return 统一响应结果
-     */
-    ApiResponse uploadMContact(String authKey, UploadMContactRequest request);
-
-    /**
-     * 发起好友验证或添加请求
-     * <p>
-     * 对应接口:POST /friend/VerifyUser
-     * 用于主动添加他人,需提供对方的 V3/V4(通常来自扫码或推荐)。
-     * 若无 V3/V4,部分场景可能无法添加。
-     * </p>
-     *
-     * @param authKey    账号唯一标识
-     * @param request 添加请求参数(含 V3、V4、Scene、验证语等)
-     * @return 统一响应结果
-     */
-    ApiResponse verifyUser(String authKey, VerifyUserRequest request);
+    // 反序列化为泛型响应对象
+    ApiResponseCommon<ContactListResponse> getContactList(String authKey, GetContactListRequest request);
 }

+ 9 - 27
fs-service/src/main/java/com/fs/wxcid/service/LoginService.java

@@ -1,39 +1,21 @@
 package com.fs.wxcid.service;
 
 import com.fs.wxcid.dto.common.ApiResponse;
-import com.fs.wxcid.dto.login.LoginRequest;
+import com.fs.wxcid.dto.common.ApiResponseCommon;
+import com.fs.wxcid.dto.login.LoginStatusData;
+import com.fs.wxcid.dto.login.LoginStatusResponseData;
 import com.fs.wxcid.dto.login.QrCodeRequest;
-import com.fs.wxcid.dto.login.SlideVerifyRequest;
-import com.fs.wxcid.dto.login.VerifyCodeRequest;
 /**
  * 微信登录服务接口
  * <p>封装所有 /login/* 接口,支持多种登录方式</p>
  */
 public interface LoginService {
+    // 检测扫码是否完成
+    ApiResponseCommon<LoginStatusResponseData> checkLoginStatus(String authKey);
 
-    // —————— 账号密码 / 62 / A16 登录 ——————
-    ApiResponse a16Login(String authKey, LoginRequest request);
-    ApiResponse deviceLogin(String authKey, LoginRequest request);
+    // 获取当前在线状态
+    ApiResponseCommon<LoginStatusData> getLoginStatus(String authKey);
 
-    // —————— 二维码登录(iPad / Mac / 车载) ——————
-    ApiResponse getLoginQrCodeNew(String authKey, QrCodeRequest request);// iPad
-    ApiResponse getLoginQrCodeNewDirect(String authKey, QrCodeRequest request); // 直登
-    ApiResponse macLogin(String authKey, QrCodeRequest request);// Mac
-    ApiResponse carLogin(String authKey, QrCodeRequest request);// iPad
-
-    // ------------------ 状态检测 ------------------
-    ApiResponse checkCanSetAlias(String authKey);// 检测是否可设昵称(判断登录环境)
-    ApiResponse checkLoginStatus(String authKey);// 检测扫码是否完成
-    ApiResponse getLoginStatus(String authKey);// 获取当前在线状态
-
-    // —————— 数据管理 ——————
-    ApiResponse get62Data(String authKey);            // 提取 62 数据(用于免密登录)
-
-    // —————— 验证码与滑块 ——————
-    ApiResponse verifyCode(String authKey, VerifyCodeRequest request);
-    ApiResponse verifyCodeSlide(String authKey, SlideVerifyRequest request);
-
-    // —————— 控制 ——————
-    ApiResponse wakeUpLogin(String authKey, QrCodeRequest request); // 唤醒扫码登录
-    ApiResponse logOut(String authKey);                // 退出登录
+    // 退出登录
+    ApiResponseCommon<Void> logOut(String authKey);
 }

+ 4 - 23
fs-service/src/main/java/com/fs/wxcid/service/MessageService.java

@@ -2,31 +2,12 @@ package com.fs.wxcid.service;
 
 
 import com.fs.wxcid.dto.common.ApiResponse;
-import com.fs.wxcid.dto.message.GetMsgBigImgRequest;
+import com.fs.wxcid.dto.common.ApiResponseCommon;
 import com.fs.wxcid.dto.message.*;
 
+import java.util.List;
+
 public interface MessageService {
+    ApiResponseCommon<List<SendMessageResult>> sendTextMessage(String authKey, SendTextMessageRequest request);
 
-    ApiResponse addMessageMgr(String authKey, AddMessageMgrRequest request);
-    ApiResponse cdnUploadVideo(String authKey, CdnUploadVideoRequest request);
-    ApiResponse downloadEmojiGif(String authKey, DownloadEmojiGifRequest request);
-    ApiResponse forwardEmoji(String authKey, ForwardEmojiRequest request);
-    ApiResponse forwardImageMessage(String authKey, ForwardImageMessageRequest request);
-    ApiResponse forwardVideoMessage(String authKey, ForwardVideoMessageRequest request);
-    ApiResponse getMsgBigImg(String authKey, GetMsgBigImgRequest request);
-    ApiResponse getMsgVideo(String authKey, GetMsgVideoRequest request);
-    ApiResponse getMsgVoice(String authKey, GetMsgVoiceRequest request);
-    ApiResponse groupMassMsgImage(String authKey, GroupMassMsgImageRequest request);
-    ApiResponse groupMassMsgText(String authKey, GroupMassMsgTextRequest request);
-    ApiResponse httpSyncMsg(String authKey, HttpSyncMsgRequest request);
-    ApiResponse newSyncHistoryMessage(String authKey); // 无 body
-    ApiResponse revokeMsg(String authKey, RevokeMsgRequest request);
-    ApiResponse revokeMsgNew(String authKey, RevokeMsgNewRequest request);
-    ApiResponse sendAppMessage(String authKey, SendAppMessageRequest request);
-    ApiResponse sendEmojiMessage(String authKey, SendEmojiMessageRequest request);
-    ApiResponse sendImageMessage(String authKey, SendImageMessageRequest request);
-    ApiResponse sendImageNewMessage(String authKey, SendImageNewMessageRequest request);
-    ApiResponse sendTextMessage(String authKey, SendTextMessageRequest request);
-    ApiResponse sendVoice(String authKey, SendVoiceRequest request);
-    ApiResponse shareCardMessage(String authKey, ShareCardMessageRequest request);
 }

+ 6 - 0
fs-service/src/main/java/com/fs/wxcid/service/impl/AdminLicenseServiceImpl.java

@@ -1,11 +1,13 @@
 package com.fs.wxcid.service.impl;
 
 import com.alibaba.fastjson.TypeReference;
+import com.fs.common.core.redis.RedisCache;
 import com.fs.wxcid.dto.admin.GenAuthKey3Request;
 import com.fs.wxcid.dto.common.ApiResponseCommon;
 import com.fs.wxcid.service.AdminLicenseService;
 import com.fs.wxwork.utils.WxWorkHttpUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -13,8 +15,12 @@ import java.util.List;
 @Service
 public class AdminLicenseServiceImpl implements AdminLicenseService {
 
+    // 接口地址 这个后续优化为从数据库中获取
     private static final String BASE_URL = "http://114.117.215.244:7006";
 
+    @Autowired
+    RedisCache redisCache;
+
     @Override
     public ApiResponseCommon<List<String>> genAuthKey3(String key, GenAuthKey3Request request) {
         String url = BASE_URL + "/admin/GenAuthKey3" + "?key=" + key;

+ 23 - 51
fs-service/src/main/java/com/fs/wxcid/service/impl/FriendServiceImpl.java

@@ -1,10 +1,13 @@
 package com.fs.wxcid.service.impl;
 
+import com.fs.common.exception.CustomException;
 import com.fs.wxcid.dto.common.ApiResponse;
+import com.fs.wxcid.dto.common.ApiResponseCommon;
 import com.fs.wxcid.dto.friend.*;
 import com.fs.wxcid.service.FriendService;
 import com.fs.wxwork.utils.WxWorkHttpUtil;
 import com.alibaba.fastjson.TypeReference;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
@@ -14,67 +17,36 @@ import java.util.Map;
  * 好友管理服务实现类
  * 调用微信私有 API 的 /friend 模块
  */
+@Slf4j
 @Service
 public class FriendServiceImpl implements FriendService {
 
     /** 微信接口基础 URL */
     private static final String BASE_URL = "http://114.117.215.244:7006";
 
-
-    @Override
-    public ApiResponse agreeAdd(String authKey, AgreeAddRequest request) {
-        return post("/friend/AgreeAdd", authKey, request);
-    }
-
     @Override
-    public ApiResponse delContact(String authKey, DelContactRequest request) {
-        return post("/friend/DelContact", authKey, request);
-    }
-
-    @Override
-    public ApiResponse getContactDetailsList(String authKey, GetContactDetailsListRequest request) {
-        return post("/friend/GetContactDetailsList", authKey, request);
-    }
+    public ApiResponseCommon<ContactListResponse> getContactList(String authKey, GetContactListRequest request) {
+        log.info("开始获取联系人列表");
+
+        String url = BASE_URL + "/friend/GetContactList?key=" + authKey;
+        ApiResponseCommon<ContactListResponse> response = WxWorkHttpUtil.postWithType(
+                url,
+                request,
+                new TypeReference<ApiResponseCommon<ContactListResponse>>() {}
+        );
+        if (response.getCode() != 200 || response.getData() == null) {
+            throw new CustomException("获取联系人失败: " + response.getText());
+        }
+
+        // 安全打印日志(避免 NPE)
+        ContactListResponse data = response.getData();
+        if (data.getContactList() != null) {
+            log.info("联系人id合集: {}", data.getContactList().getContactUsernameList());
+        }
+        return response;
 
-    @Override
-    public ApiResponse getContactList(String authKey, GetContactListRequest request) {
-        return post("/friend/GetContactList", authKey, request);
-    }
-
-    @Override
-    public ApiResponse getFriendRelation(String authKey, GetFriendRelationRequest request) {
-        return post("/friend/GetFriendRelation", authKey, request);
-    }
-
-    @Override
-    public ApiResponse getGHList(String authKey) {
-        return get("/friend/GetGHList", authKey);
     }
 
-    @Override
-    public ApiResponse getMFriend(String authKey) {
-        return get("/friend/GetMFriend", authKey);
-    }
-
-    @Override
-    public ApiResponse getGroupList(String authKey) {
-        return get("/friend/GroupList", authKey);
-    }
-
-    @Override
-    public ApiResponse searchContact(String authKey, SearchContactRequest request) {
-        return post("/friend/SearchContact", authKey, request);
-    }
-
-    @Override
-    public ApiResponse uploadMContact(String authKey, UploadMContactRequest request) {
-        return post("/friend/UploadMContact", authKey, request);
-    }
-
-    @Override
-    public ApiResponse verifyUser(String authKey, VerifyUserRequest request) {
-        return post("/friend/VerifyUser", authKey, request);
-    }
 
     // ------------------ 工具方法 ------------------
     /**

+ 93 - 97
fs-service/src/main/java/com/fs/wxcid/service/impl/LoginServiceImpl.java

@@ -1,113 +1,109 @@
 package com.fs.wxcid.service.impl;
 
-import com.fs.wxcid.dto.common.ApiResponse;
-import com.fs.wxcid.dto.login.LoginRequest;
+import com.fs.common.core.redis.RedisCache;
+import com.fs.common.exception.CustomException;
+import com.fs.wxcid.dto.common.ApiResponseCommon;
+import com.fs.wxcid.dto.login.LoginQrCodeResponseData;
+import com.fs.wxcid.dto.login.LoginStatusData;
+import com.fs.wxcid.dto.login.LoginStatusResponseData;
 import com.fs.wxcid.dto.login.QrCodeRequest;
-import com.fs.wxcid.dto.login.SlideVerifyRequest;
-import com.fs.wxcid.dto.login.VerifyCodeRequest;
 import com.fs.wxcid.service.LoginService;
 import com.fs.wxwork.utils.WxWorkHttpUtil;
 import com.alibaba.fastjson.TypeReference;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.HashMap;
-import java.util.Map;
 
+@Slf4j
 @Service
 public class LoginServiceImpl implements LoginService {
 
     private static final String BASE_URL = "http://114.117.215.244:7006";
 
-    // ------------------ 账号密码登录 ------------------
-
-    public ApiResponse a16Login(String authKey, LoginRequest request) {
-        return post("/login/A16Login", authKey, request);
-    }
-
-    public ApiResponse deviceLogin(String authKey, LoginRequest request) {
-        return post("/login/DeviceLogin", authKey, request);
-    }
-
-    // ------------------ 二维码登录 ------------------
-
-    public ApiResponse getLoginQrCodeNew(String authKey, QrCodeRequest request) {
-        return post("/login/GetLoginQrCodeNew", authKey, request);
-    }
-
-    public ApiResponse getLoginQrCodeNewDirect(String authKey, QrCodeRequest request) {
-        return post("/login/GetLoginQrCodeNewDirect", authKey, request);
-    }
-
-    public ApiResponse macLogin(String authKey, QrCodeRequest request) {
-        return post("/login/MacLogin", authKey, request);
-    }
-
-    public ApiResponse carLogin(String authKey, QrCodeRequest request) {
-        return post("/login/CarLogin", authKey, request);
-    }
-
-    public ApiResponse wakeUpLogin(String authKey, QrCodeRequest request) {
-        return post("/login/WakeUpLogin", authKey, request);
-    }
-
-    // ------------------ 状态检测 ------------------
-
-    public ApiResponse checkCanSetAlias(String authKey) {
-        return get("/login/CheckCanSetAlias", authKey);
-    }
-
-    public ApiResponse checkLoginStatus(String authKey) {
-        return get("/login/CheckLoginStatus", authKey);
-    }
-
-    public ApiResponse getLoginStatus(String authKey) {
-        return get("/login/GetLoginStatus", authKey);
-    }
-
-    public ApiResponse get62Data(String authKey) {
-        return get("/login/Get62Data", authKey);
-    }
-
-    public ApiResponse logOut(String authKey) {
-        return get("/login/LogOut", authKey);
-    }
-
-    // ------------------ 验证 ------------------
-
-    public ApiResponse verifyCode(String authKey, VerifyCodeRequest request) {
-        return post("/login/VerifyCode", authKey, request);
-    }
-
-    public ApiResponse verifyCodeSlide(String authKey, SlideVerifyRequest request) {
-        return post("/login/VerifyCodeSlide", authKey, request);
-    }
-
-    // ------------------ 工具方法 ------------------
-    /**
-     * 通用 POST 请求方法
-     *
-     * @param path   接口路径,如 "/friend/AgreeAdd"
-     * @param authKey    账号唯一标识(query 参数)
-     * @param request 请求体对象
-     * @return 统一响应结果
-     */
-    private ApiResponse post(String path, String authKey, Object request) {
-        String url = BASE_URL + path + "?key=" + authKey;
-        return WxWorkHttpUtil.postWithType(url, request, new TypeReference<ApiResponse>() {});
-    }
-
-    /**
-     * 通用 GET 请求方法(无请求体)
-     *
-     * @param path 接口路径
-     * @param authKey  账号唯一标识
-     * @return 统一响应结果
-     */
-    private ApiResponse get(String path, String authKey) {
-        String url = BASE_URL + path;
-        Map<String, Object> params = new HashMap<>();
-        params.put("authKey", authKey);
-        String resp = WxWorkHttpUtil.get(url, params);
-        return com.alibaba.fastjson.JSON.parseObject(resp, ApiResponse.class);
+    @Autowired
+    RedisCache redisCache;
+
+    public ApiResponseCommon<LoginQrCodeResponseData> getLoginQrCodeNewDirect(String authKey, QrCodeRequest request) {
+        String url = BASE_URL + "/login/GetLoginQrCodeNewDirect?key=" + authKey;
+        ApiResponseCommon<LoginQrCodeResponseData> response = WxWorkHttpUtil.postWithType(
+                url,
+                request,
+                new TypeReference<ApiResponseCommon<LoginQrCodeResponseData>>() {}
+        );
+
+        //先判断是否成功
+        if (response.getCode() != 200 || response.getData() == null) {
+            String errorMsg = response.getText() != null ? response.getText() : "获取二维码失败";
+            throw new CustomException("获取登录二维码失败: " + errorMsg);
+        }
+
+        //安全访问 data
+        log.info("二维码照片url: {}", response.getData().getQrCodeUrl());
+        return response;
+    }
+
+    @Override
+    public ApiResponseCommon<LoginStatusResponseData> checkLoginStatus(String authKey) {
+        String url = BASE_URL + "/login/CheckLoginStatus?key=" + authKey;
+        ApiResponseCommon<LoginStatusResponseData> response = WxWorkHttpUtil.getWithType(
+                url,
+                new TypeReference<ApiResponseCommon<LoginStatusResponseData>>() {}
+        );
+
+        // 只认 text == "账号已登录"
+        if ("账号已登录".equals(response.getText())) {
+            if (response.getData() == null) {
+                throw new CustomException("登录状态异常:text 显示已登录,但 data 为空");
+            }
+            return response;
+        } else {
+            // 抛出具体的错误原因
+            throw new CustomException("检查登录状态失败: " + (response.getText() != null ? response.getText() : "未知错误"));
+        }
+    }
+
+    public ApiResponseCommon<LoginStatusData> getLoginStatus(String authKey) {
+        String url = BASE_URL + "/login/GetLoginStatus?key=" + authKey;
+        ApiResponseCommon<LoginStatusData> response = WxWorkHttpUtil.getWithType(
+                url,
+                new TypeReference<ApiResponseCommon<LoginStatusData>>() {}
+        );
+
+        //核心判断:只有 code=200 且 data 不为 null 才算成功
+        if (response.getCode() != 200 || response.getData() == null) {
+            String errorMsg = response.getText() != null
+                    ? response.getText()
+                    : "获取登录状态失败,未知错误";
+            throw new CustomException("账号未登录或状态异常: " + errorMsg);
+        }
+
+        return response;
+    }
+
+
+    public ApiResponseCommon<Void> logOut(String authKey) {
+        String url = BASE_URL + "/login/LogOut?key=" + authKey;
+        ApiResponseCommon<Void> response = WxWorkHttpUtil.getWithType(
+                url,
+                new TypeReference<ApiResponseCommon<Void>>() {}
+        );
+
+        String text = response.getText();
+        int code = response.getCode();
+
+        //真正的成功退出
+        if (code == 200 && "退出成功!".equals(text)) {
+            return response;
+        }
+        //已经退出过了(幂等,视为成功)
+        else if (code == 300 && "你已退出登录".equals(text)) {
+            return response;
+        }
+        //其他情况一律视为失败
+        else {
+            String errorMsg = text != null ? text : "退出登录失败,未知错误";
+            throw new CustomException("退出登录失败: " + errorMsg);
+        }
     }
 }

+ 18 - 108
fs-service/src/main/java/com/fs/wxcid/service/impl/MessageServiceImpl.java

@@ -1,130 +1,40 @@
 package com.fs.wxcid.service.impl;
 
+import com.fs.common.exception.CustomException;
 import com.fs.wxcid.dto.common.ApiResponse;
-import com.fs.wxcid.dto.message.GetMsgBigImgRequest;
+import com.fs.wxcid.dto.common.ApiResponseCommon;
 import com.fs.wxcid.dto.message.*;
 import com.fs.wxcid.service.MessageService;
 import com.fs.wxwork.utils.WxWorkHttpUtil;
 import com.alibaba.fastjson.TypeReference;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
-
+@Slf4j
 @Service
 public class MessageServiceImpl implements MessageService {
 
     private static final String BASE_URL = "http://114.117.215.244:7006";
 
-
-    @Override
-    public ApiResponse addMessageMgr(String authKey, AddMessageMgrRequest request) {
-        return post("/message/AddMessageMgr", authKey, request);
-    }
-
-    @Override
-    public ApiResponse cdnUploadVideo(String authKey, CdnUploadVideoRequest request) {
-        return post("/message/CdnUploadVideo", authKey, request);
-    }
-
-    @Override
-    public ApiResponse downloadEmojiGif(String authKey, DownloadEmojiGifRequest request) {
-        return post("/message/DownloadEmojiGif", authKey, request);
-    }
-
-    @Override
-    public ApiResponse forwardEmoji(String authKey, ForwardEmojiRequest request) {
-        return post("/message/ForwardEmoji", authKey, request);
-    }
-
-    @Override
-    public ApiResponse forwardImageMessage(String authKey, ForwardImageMessageRequest request) {
-        return post("/message/ForwardImageMessage", authKey, request);
-    }
-
-    @Override
-    public ApiResponse forwardVideoMessage(String authKey, ForwardVideoMessageRequest request) {
-        return post("/message/ForwardVideoMessage", authKey, request);
-    }
-
-    @Override
-    public ApiResponse getMsgBigImg(String authKey, GetMsgBigImgRequest request) {
-        return post("/message/GetMsgBigImg", authKey, request);
-    }
-
-    @Override
-    public ApiResponse getMsgVideo(String authKey, GetMsgVideoRequest request) {
-        return post("/message/GetMsgVideo", authKey, request);
-    }
-
-    @Override
-    public ApiResponse getMsgVoice(String authKey, GetMsgVoiceRequest request) {
-        return post("/message/GetMsgVoice", authKey, request);
-    }
-
     @Override
-    public ApiResponse groupMassMsgImage(String authKey, GroupMassMsgImageRequest request) {
-        return post("/message/GroupMassMsgImage", authKey, request);
-    }
+    public ApiResponseCommon<List<SendMessageResult>> sendTextMessage(String authKey, SendTextMessageRequest request) {
+        String url = BASE_URL + "/message/SendTextMessage?key=" + authKey;
+        ApiResponseCommon<List<SendMessageResult>> response = WxWorkHttpUtil.postWithType(
+                url,
+                request,
+                new TypeReference<ApiResponseCommon<List<SendMessageResult>>>() {}
+        );
 
-    @Override
-    public ApiResponse groupMassMsgText(String authKey, GroupMassMsgTextRequest request) {
-        return post("/message/GroupMassMsgText", authKey, request);
-    }
+        //统一异常判断:只要 code 不是 200,就抛异常
+        if (response.getCode() != 200 || response.getData() == null) {
+            String errorMsg = response.getText() != null ? response.getText() : "发送消息失败,未知错误";
+            throw new CustomException("发送文本消息失败: " + errorMsg);
+        }
 
-    @Override
-    public ApiResponse httpSyncMsg(String authKey, HttpSyncMsgRequest request) {
-        return post("/message/HttpSyncMsg", authKey, request);
-    }
-
-    @Override
-    public ApiResponse newSyncHistoryMessage(String authKey) {
-        return post("/message/NewSyncHistoryMessage", authKey, new Object()); // 无 body,传空对象或自定义
-    }
-
-    @Override
-    public ApiResponse revokeMsg(String authKey, RevokeMsgRequest request) {
-        return post("/message/RevokeMsg", authKey, request);
-    }
-
-    @Override
-    public ApiResponse revokeMsgNew(String authKey, RevokeMsgNewRequest request) {
-        return post("/message/RevokeMsgNew", authKey, request);
-    }
-
-    @Override
-    public ApiResponse sendAppMessage(String authKey, SendAppMessageRequest request) {
-        return post("/message/SendAppMessage", authKey, request);
-    }
-
-    @Override
-    public ApiResponse sendEmojiMessage(String authKey, SendEmojiMessageRequest request) {
-        return post("/message/SendEmojiMessage", authKey, request);
-    }
-
-    @Override
-    public ApiResponse sendImageMessage(String authKey, SendImageMessageRequest request) {
-        return post("/message/SendImageMessage", authKey, request);
-    }
-
-    @Override
-    public ApiResponse sendImageNewMessage(String authKey, SendImageNewMessageRequest request) {
-        return post("/message/SendImageNewMessage", authKey, request);
-    }
-
-    @Override
-    public ApiResponse sendTextMessage(String authKey, SendTextMessageRequest request) {
-        return post("/message/SendTextMessage", authKey, request);
-    }
-
-    @Override
-    public ApiResponse sendVoice(String authKey, SendVoiceRequest request) {
-        return post("/message/SendVoice", authKey, request);
-    }
-
-    @Override
-    public ApiResponse shareCardMessage(String authKey, ShareCardMessageRequest request) {
-        return post("/message/ShareCardMessage", authKey, request);
+        return response;
     }
 
     // ------------------ 工具方法 ------------------