From 4676061e1126f9730590c4ab9038e71df41d014a Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Thu, 14 Mar 2024 21:41:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(work):=20=E6=96=B0=E5=A2=9E=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=95=86=E4=BC=9A=E8=AF=9D=E5=86=85=E5=AE=B9=E5=AD=98?= =?UTF-8?q?=E6=A1=A3=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/Service/CancelAuthEvent.cs | 3 +- .../Events/Service/ChangeAuthEvent.cs | 3 +- .../ChatArchiveAuditApprovedSingleEvent.cs | 52 ++ .../ChatArchiveExportFinishedEvent.cs | 36 ++ .../ConversationNewMessageEvent.cs | 36 ++ .../Service/ChatArchive/HitKeywordEvent.cs | 13 + .../Events/Service/CreateAuthEvent.cs | 3 +- .../Finance/WechatWorkFinanceClientBuilder.cs | 68 +++ .../Finance/WechatWorkFinanceException.cs | 2 +- ...pecialApiClientExecuteSpecialExtensions.cs | 128 ++++ ...WorkSpecialApiRequestSigningInterceptor.cs | 71 +++ .../Models/SpecialDownloadMediaRequest.cs | 15 + .../Models/SpecialDownloadMediaResponse.cs | 13 + .../SpecialExecuteAndReportJobRequest.cs | 56 ++ .../SpecialExecuteAndReportJobResponse.cs | 9 + .../Models/SpecialFetchMessageRequest.cs | 29 + .../Models/SpecialFetchMessageResponse.cs | 117 ++++ .../Models/SpecialGetTokenRequest.cs | 22 + .../Models/SpecialGetTokenResponse.cs | 22 + .../Models/SpecialListJobRequest.cs | 22 + .../Models/SpecialListJobResponse.cs | 63 ++ .../SpecialApi/Settings/Credentials.cs | 31 + .../SpecialApi/WechatWorkSpecialApiClient.cs | 89 +++ .../WechatWorkSpecialApiClientOptions.cs | 35 ++ .../WechatWorkSpecialApiEndpoints.cs | 13 + .../WechatWorkSpecialApiException.cs | 27 + .../SpecialApi/WechatWorkSpecialApiRequest.cs | 22 + .../WechatWorkSpecialApiResponse.cs | 34 ++ ...rkClientExecuteCgibinChatDataExtensions.cs | 555 ++++++++++++++++++ ...CgibinChatDataGetAgreeStatusRoomRequest.cs | 15 + ...gibinChatDataGetAgreeStatusRoomResponse.cs | 42 ++ ...ibinChatDataGetAgreeStatusSingleRequest.cs | 37 ++ ...binChatDataGetAgreeStatusSingleResponse.cs | 49 ++ .../CgibinChatDataAnalyzeTaskAddRequest.cs | 64 ++ .../CgibinChatDataAnalyzeTaskAddResponse.cs | 49 ++ .../CgibinChatDataAnalyzeTaskResultRequest.cs | 15 + ...CgibinChatDataAnalyzeTaskResultResponse.cs | 94 +++ .../CgibinChatDataAnalyzeTaskSubmitRequest.cs | 15 + ...CgibinChatDataAnalyzeTaskSubmitResponse.cs | 9 + .../CgibinChatDataGetAuthUserListRequest.cs | 22 + .../CgibinChatDataGetAuthUserListResponse.cs | 51 ++ .../CgibinChatDataGroupChatGetRequest.cs | 15 + .../CgibinChatDataGroupChatGetResponse.cs | 56 ++ .../CgibinChatDataSetPublicKeyRequest.cs | 22 + .../CgibinChatDataSetPublicKeyResponse.cs | 9 + .../CgibinChatDataSyncMessageRequest.cs | 29 + .../CgibinChatDataSyncMessageResponse.cs | 127 ++++ .../CgibinChatDataExportCreateJobRequest.cs | 22 + .../CgibinChatDataExportCreateJobResponse.cs | 15 + ...CgibinChatDataExportGetJobStatusRequest.cs | 15 + ...gibinChatDataExportGetJobStatusResponse.cs | 36 ++ ...atDataGetHideSensitiveInfoConfigRequest.cs | 15 + ...tDataGetHideSensitiveInfoConfigResponse.cs | 42 ++ ...atDataSetHideSensitiveInfoConfigRequest.cs | 49 ++ ...tDataSetHideSensitiveInfoConfigResponse.cs | 9 + .../CgibinChatDataKeywordCreateRuleRequest.cs | 237 ++++++++ ...CgibinChatDataKeywordCreateRuleResponse.cs | 15 + .../CgibinChatDataKeywordDeleteRuleRequest.cs | 15 + ...CgibinChatDataKeywordDeleteRuleResponse.cs | 9 + ...ChatDataKeywordGetHitMessageListRequest.cs | 29 + ...hatDataKeywordGetHitMessageListResponse.cs | 78 +++ ...ibinChatDataKeywordGetRuleDetailRequest.cs | 15 + ...binChatDataKeywordGetRuleDetailResponse.cs | 235 ++++++++ ...CgibinChatDataKeywordGetRuleListRequest.cs | 22 + ...gibinChatDataKeywordGetRuleListResponse.cs | 58 ++ .../CgibinChatDataKeywordUpdateRuleRequest.cs | 170 ++++++ ...CgibinChatDataKeywordUpdateRuleResponse.cs | 9 + .../Search/CgibinChatDataSearchChatRequest.cs | 29 + .../CgibinChatDataSearchChatResponse.cs | 44 ++ .../CgibinChatDataSearchMessageRequest.cs | 92 +++ .../CgibinChatDataSearchMessageResponse.cs | 44 ++ ...ibinChatDataSecurityApiCreateJobRequest.cs | 77 +++ ...binChatDataSecurityApiCreateJobResponse.cs | 15 + ...nChatDataSecurityApiGetJobResultRequest.cs | 15 + ...ChatDataSecurityApiGetJobResultResponse.cs | 56 ++ .../Utilities/HMACUtility.cs | 49 ++ .../Utilities/MD5Utility.cs | 44 ++ .../ChatArchiveAuditApprovedSingleEvent.xml | 9 + .../ChatArchiveExportFinishedEvent.xml | 7 + .../ConversationNewMessageEvent.xml | 7 + .../Service/ChatArchive/HitKeywordEvent.xml | 7 + .../IMPORTANT_CodeAnalyzeTests.cs | 18 + ...ibinChatDataGetAgreeStatusRoomRequest.json | 3 + ...binChatDataGetAgreeStatusRoomResponse.json | 21 + ...inChatDataGetAgreeStatusSingleRequest.json | 16 + ...nChatDataGetAgreeStatusSingleResponse.json | 24 + .../CgibinChatDataAnalyzeTaskAddRequest.json | 18 + .../CgibinChatDataAnalyzeTaskAddResponse.json | 12 + ...gibinChatDataAnalyzeTaskResultRequest.json | 3 + ...ibinChatDataAnalyzeTaskResultResponse.json | 26 + ...gibinChatDataAnalyzeTaskSubmitRequest.json | 3 + .../CgibinChatDataGetAuthUserListRequest.json | 4 + ...CgibinChatDataGetAuthUserListResponse.json | 16 + .../CgibinChatDataGroupChatGetRequest.json | 3 + .../CgibinChatDataGroupChatGetResponse.json | 18 + .../CgibinChatDataSetPublicKeyRequest.json | 4 + .../CgibinChatDataSyncMessageRequest.json | 5 + .../CgibinChatDataSyncMessageResponse.json | 32 + .../CgibinChatDataExportCreateJobRequest.json | 4 + ...CgibinChatDataExportCreateJobResponse.json | 5 + ...ibinChatDataExportGetJobStatusRequest.json | 3 + ...binChatDataExportGetJobStatusResponse.json | 8 + ...DataGetHideSensitiveInfoConfigRequest.json | 3 + ...ataGetHideSensitiveInfoConfigResponse.json | 9 + ...DataSetHideSensitiveInfoConfigRequest.json | 8 + ...gibinChatDataKeywordCreateRuleRequest.json | 41 ++ ...ibinChatDataKeywordCreateRuleResponse.json | 5 + ...gibinChatDataKeywordDeleteRuleRequest.json | 3 + ...atDataKeywordGetHitMessageListRequest.json | 5 + ...tDataKeywordGetHitMessageListResponse.json | 18 + ...inChatDataKeywordGetRuleDetailRequest.json | 3 + ...nChatDataKeywordGetRuleDetailResponse.json | 43 ++ ...ibinChatDataKeywordGetRuleListRequest.json | 4 + ...binChatDataKeywordGetRuleListResponse.json | 13 + ...gibinChatDataKeywordUpdateRuleRequest.json | 36 ++ .../CgibinChatDataSearchChatRequest.json | 5 + .../CgibinChatDataSearchChatResponse.json | 14 + .../CgibinChatDataSearchMessageRequest.json | 18 + .../CgibinChatDataSearchMessageResponse.json | 14 + ...inChatDataSecurityApiCreateJobRequest.json | 20 + ...nChatDataSecurityApiCreateJobResponse.json | 5 + ...hatDataSecurityApiGetJobResultRequest.json | 3 + ...atDataSecurityApiGetJobResultResponse.json | 11 + 123 files changed, 4422 insertions(+), 4 deletions(-) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ChatArchiveAuditApprovedSingleEvent.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ChatArchiveExportFinishedEvent.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ConversationNewMessageEvent.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/HitKeywordEvent.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/Finance/WechatWorkFinanceClientBuilder.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Extensions/WechatWorkSpecialApiClientExecuteSpecialExtensions.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Interceptors/WechatWorkSpecialApiRequestSigningInterceptor.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialDownloadMediaRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialDownloadMediaResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialExecuteAndReportJobRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialExecuteAndReportJobResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialFetchMessageRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialFetchMessageResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialGetTokenRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialGetTokenResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialListJobRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialListJobResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Settings/Credentials.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiClient.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiClientOptions.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiEndpoints.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiException.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetAuthUserListRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetAuthUserListResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGroupChatGetRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGroupChatGetResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetPublicKeyRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetPublicKeyResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSyncMessageRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSyncMessageResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportCreateJobRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportCreateJobResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportGetJobStatusRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportGetJobStatusResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchChatRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchChatResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchMessageRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchMessageResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/HMACUtility.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/MD5Utility.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ChatArchiveAuditApprovedSingleEvent.xml create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ChatArchiveExportFinishedEvent.xml create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ConversationNewMessageEvent.xml create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/HitKeywordEvent.xml create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetAuthUserListRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetAuthUserListResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGroupChatGetRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGroupChatGetResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSetPublicKeyRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSyncMessageRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSyncMessageResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportCreateJobRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportCreateJobResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportGetJobStatusRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportGetJobStatusResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchChatRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchChatResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchMessageRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchMessageResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultResponse.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CancelAuthEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CancelAuthEvent.cs index 7690bbe5..77dc8212 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CancelAuthEvent.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CancelAuthEvent.cs @@ -4,7 +4,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Events /// 表示 INFO.cancel_auth 事件的数据。 /// /// REF:
- /// + ///
+ /// ///
/// public class CancelAuthEvent : ChangeAuthEvent diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChangeAuthEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChangeAuthEvent.cs index ff408b62..20bb0fb6 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChangeAuthEvent.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChangeAuthEvent.cs @@ -5,7 +5,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Events /// /// REF:
///
- /// + ///
+ /// ///
/// public class ChangeAuthEvent : WechatWorkEvent diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ChatArchiveAuditApprovedSingleEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ChatArchiveAuditApprovedSingleEvent.cs new file mode 100644 index 00000000..970574b6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ChatArchiveAuditApprovedSingleEvent.cs @@ -0,0 +1,52 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.chat_archive_audit_approved_single 事件的数据。 + /// + /// REF:
+ /// + ///
+ ///
+ public class ChatArchiveAuditApprovedSingleEvent : WechatWorkEvent + { + /// + /// 获取或设置第三方应用的 SuiteId。 + /// + [Newtonsoft.Json.JsonProperty("SuiteId")] + [System.Text.Json.Serialization.JsonPropertyName("SuiteId")] + [System.Xml.Serialization.XmlElement("SuiteId")] + public string SuiteId { get; set; } = default!; + + /// + /// 获取或设置授权方的 CorpId。 + /// + [Newtonsoft.Json.JsonProperty("AuthCorpId")] + [System.Text.Json.Serialization.JsonPropertyName("AuthCorpId")] + [System.Xml.Serialization.XmlElement("AuthCorpId")] + public string AuthorizerCorpId { get; set; } = default!; + + /// + /// 获取或设置企业服务人员的 OpenUserId。 + /// + [Newtonsoft.Json.JsonProperty("OpenUserID")] + [System.Text.Json.Serialization.JsonPropertyName("OpenUserID")] + [System.Xml.Serialization.XmlElement("OpenUserID", IsNullable = true)] + public string? OpenUserId { get; set; } + + /// + /// 获取或设置外部联系人的 UserId。 + /// + [Newtonsoft.Json.JsonProperty("ExternalUserID")] + [System.Text.Json.Serialization.JsonPropertyName("ExternalUserID")] + [System.Xml.Serialization.XmlElement("ExternalUserID", IsNullable = true)] + public string? ExternalUserId { get; set; } + + /// + /// 获取或设置客户群 ID。 + /// + [Newtonsoft.Json.JsonProperty("ChatId")] + [System.Text.Json.Serialization.JsonPropertyName("ChatId")] + [System.Xml.Serialization.XmlElement("ChatId", IsNullable = true)] + public string? GroupChatId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ChatArchiveExportFinishedEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ChatArchiveExportFinishedEvent.cs new file mode 100644 index 00000000..7fd37f8b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ChatArchiveExportFinishedEvent.cs @@ -0,0 +1,36 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.hit_keyword 事件的数据。 + /// + /// REF:
+ /// + ///
+ ///
+ public class ChatArchiveExportFinishedEvent : WechatWorkEvent + { + /// + /// 获取或设置第三方应用的 SuiteId。 + /// + [Newtonsoft.Json.JsonProperty("SuiteId")] + [System.Text.Json.Serialization.JsonPropertyName("SuiteId")] + [System.Xml.Serialization.XmlElement("SuiteId")] + public string SuiteId { get; set; } = default!; + + /// + /// 获取或设置授权方的 CorpId。 + /// + [Newtonsoft.Json.JsonProperty("AuthCorpId")] + [System.Text.Json.Serialization.JsonPropertyName("AuthCorpId")] + [System.Xml.Serialization.XmlElement("AuthCorpId")] + public string AuthorizerCorpId { get; set; } = default!; + + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("JobId")] + [System.Text.Json.Serialization.JsonPropertyName("JobId")] + [System.Xml.Serialization.XmlElement("JobId", IsNullable = true)] + public string JobId { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ConversationNewMessageEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ConversationNewMessageEvent.cs new file mode 100644 index 00000000..35635a33 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/ConversationNewMessageEvent.cs @@ -0,0 +1,36 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.conversation_new_message 事件的数据。 + /// + /// REF:
+ /// + ///
+ ///
+ public class ConversationNewMessageEvent : WechatWorkEvent + { + /// + /// 获取或设置第三方应用的 SuiteId。 + /// + [Newtonsoft.Json.JsonProperty("SuiteId")] + [System.Text.Json.Serialization.JsonPropertyName("SuiteId")] + [System.Xml.Serialization.XmlElement("SuiteId")] + public string SuiteId { get; set; } = default!; + + /// + /// 获取或设置授权方的 CorpId。 + /// + [Newtonsoft.Json.JsonProperty("AuthCorpId")] + [System.Text.Json.Serialization.JsonPropertyName("AuthCorpId")] + [System.Xml.Serialization.XmlElement("AuthCorpId")] + public string AuthorizerCorpId { get; set; } = default!; + + /// + /// 获取或设置用于获取会话记录的 Token。 + /// + [Newtonsoft.Json.JsonProperty("Token")] + [System.Text.Json.Serialization.JsonPropertyName("Token")] + [System.Xml.Serialization.XmlElement("Token", IsNullable = true)] + public string Token { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/HitKeywordEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/HitKeywordEvent.cs new file mode 100644 index 00000000..af8ca889 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/ChatArchive/HitKeywordEvent.cs @@ -0,0 +1,13 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Events +{ + /// + /// 表示 INFO.hit_keyword 事件的数据。 + /// + /// REF:
+ /// + ///
+ ///
+ public class HitKeywordEvent : ConversationNewMessageEvent + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CreateAuthEvent.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CreateAuthEvent.cs index 08007b93..ca064acd 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CreateAuthEvent.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Events/Service/CreateAuthEvent.cs @@ -5,7 +5,8 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Events /// /// REF:
///
- /// + ///
+ /// ///
/// public class CreateAuthEvent : WechatWorkEvent diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/Finance/WechatWorkFinanceClientBuilder.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/Finance/WechatWorkFinanceClientBuilder.cs new file mode 100644 index 00000000..2c1d1a6f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/Finance/WechatWorkFinanceClientBuilder.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.Finance +{ + /// + /// 用于构造 实例的构造器。 + /// + public partial class WechatWorkFinanceClientBuilder : ICommonClientBuilder + { + private readonly WechatWorkFinanceClientOptions _options; + private readonly IList> _configures; + private readonly IList _interceptors; + + private WechatWorkFinanceClientBuilder(WechatWorkFinanceClientOptions options) + { + _options = options; + _configures = new List>(); + _interceptors = new List(); + } + + ICommonClientBuilder ICommonClientBuilder.ConfigureSettings(Action configure) + { + return ConfigureSettings(configure); + } + + ICommonClientBuilder ICommonClientBuilder.UseInterceptor(HttpInterceptor interceptor) + { + throw new NotSupportedException(); + } + + ICommonClientBuilder ICommonClientBuilder.UseHttpClient(HttpClient httpClient, bool disposeClient) + { + throw new NotSupportedException(); + } + + public WechatWorkFinanceClientBuilder ConfigureSettings(Action configure) + { + if (configure is null) throw new ArgumentNullException(nameof(configure)); + + _configures.Add(configure); + return this; + } + + public WechatWorkFinanceClient Build() + { + WechatWorkFinanceClient client = new WechatWorkFinanceClient(_options); + + foreach (Action configure in _configures) + { + client.Configure(configure); + } + + return client; + } + } + + partial class WechatWorkFinanceClientBuilder + { + public static WechatWorkFinanceClientBuilder Create(WechatWorkFinanceClientOptions options) + { + if (options is null) throw new ArgumentNullException(nameof(options)); + + return new WechatWorkFinanceClientBuilder(options); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/Finance/WechatWorkFinanceException.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/Finance/WechatWorkFinanceException.cs index 5dbc2fde..68ed22bf 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/Finance/WechatWorkFinanceException.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/Finance/WechatWorkFinanceException.cs @@ -1,6 +1,6 @@ using System; -namespace SKIT.FlurlHttpClient.Wechat.Work +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.Finance { /// /// 当调用企业微信会话内容存档 API 出错时引发的异常。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Extensions/WechatWorkSpecialApiClientExecuteSpecialExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Extensions/WechatWorkSpecialApiClientExecuteSpecialExtensions.cs new file mode 100644 index 00000000..f46de587 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Extensions/WechatWorkSpecialApiClientExecuteSpecialExtensions.cs @@ -0,0 +1,128 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi +{ + public static class WechatWorkSpecialApiClientExecuteSpecialExtensions + { + /// + /// 异步调用 [POST] /spec/gettoken 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteSpecialGetTokenAsync(this WechatWorkSpecialApiClient client, Models.SpecialGetTokenRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "spec", "gettoken") + .WithHeader("auth-corpid", null); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /spec/list_job 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteSpecialListJobAsync(this WechatWorkSpecialApiClient client, Models.SpecialListJobRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "spec", "list_job") + .WithHeader("auth-corpid", null) + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /spec/exec_and_report_job 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteSpecialExecuteAndReportJobAsync(this WechatWorkSpecialApiClient client, Models.SpecialExecuteAndReportJobRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "spec", "exec_and_report_job") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /spec/fetch_msg 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteSpecialFetchMessageAsync(this WechatWorkSpecialApiClient client, Models.SpecialFetchMessageRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "spec", "fetch_msg") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /spec/download_media 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteSpecialDownloadMediaAsync(this WechatWorkSpecialApiClient client, Models.SpecialDownloadMediaRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Get, "spec", "download_media") + .SetQueryParam("access_token", request.AccessToken) + .SetQueryParam("media_id", request.MediaId); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Interceptors/WechatWorkSpecialApiRequestSigningInterceptor.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Interceptors/WechatWorkSpecialApiRequestSigningInterceptor.cs new file mode 100644 index 00000000..84511f59 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Interceptors/WechatWorkSpecialApiRequestSigningInterceptor.cs @@ -0,0 +1,71 @@ +using System; +using System.Linq; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Interceptors +{ + using System.Text; + using SKIT.FlurlHttpClient; + using SKIT.FlurlHttpClient.Internal; + using SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi; + + internal class WechatWorkSpecialApiRequestSigningInterceptor : HttpInterceptor + { + private readonly string _secret; + + public WechatWorkSpecialApiRequestSigningInterceptor(string secret) + { + _secret = secret; + } + + public override async Task BeforeCallAsync(HttpInterceptorContext context, CancellationToken cancellationToken = default) + { + if (context is null) throw new ArgumentNullException(nameof(context)); + if (context.FlurlCall.Completed) throw new WechatWorkSpecialApiException("Failed to sign request. This interceptor must be called before request completed."); + + string method = context.FlurlCall.HttpRequestMessage.Method.ToString().ToUpper(); + string path = context.FlurlCall.HttpRequestMessage.RequestUri?.AbsolutePath ?? string.Empty; + string query = context.FlurlCall.HttpRequestMessage.RequestUri?.Query?.TrimStart('?') ?? string.Empty; + string timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds().ToString(); + string nonce = Guid.NewGuid().ToString("N"); + string authCorpId = context.FlurlCall.Request.Headers.GetAll("auth-corpid").FirstOrDefault() ?? string.Empty; + string body = string.Empty; + + if (context.FlurlCall.HttpRequestMessage?.Content is not null) + { + if (method != "GET") + { + HttpContent httpContent = context.FlurlCall.HttpRequestMessage.Content; + body = await _AsyncEx.RunTaskWithCancellationTokenAsync(httpContent.ReadAsStringAsync(), cancellationToken).ConfigureAwait(false); + } + } + + StringBuilder signData = new StringBuilder(); + signData.Append(!string.IsNullOrEmpty(authCorpId) ? $"auth-corpid={authCorpId}\n" : string.Empty); + signData.Append($"body-md5={Utilities.MD5Utility.Hash(body).Value!.ToLower()}\n"); + signData.Append($"timestamp={timestamp}\n"); + signData.Append($"method={method}\n"); + signData.Append($"nonce={nonce}\n"); + signData.Append($"url={path}\n"); + signData.Append(!string.IsNullOrEmpty(query) ? $"query={query}\n" : string.Empty); + signData.Append("\n"); + string sign; + + try + { + sign = Utilities.HMACUtility.HashWithSHA256(_secret, signData.ToString()).Value!.ToLower(); + } + catch (Exception ex) + { + throw new WechatWorkSpecialApiException("Failed to sign request. Please see the inner exception for more details.", ex); + } + + context.FlurlCall.Request.WithHeader("nonce", nonce); + context.FlurlCall.Request.WithHeader("timestamp", timestamp); + context.FlurlCall.Request.WithHeader("signature", sign); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialDownloadMediaRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialDownloadMediaRequest.cs new file mode 100644 index 00000000..069309a8 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialDownloadMediaRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models +{ + /// + /// 表示 [GET] /spec/download_media 接口的请求。 + /// + public class SpecialDownloadMediaRequest : WechatWorkSpecialApiRequest + { + /// + /// 获取或设置素材 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string MediaId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialDownloadMediaResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialDownloadMediaResponse.cs new file mode 100644 index 00000000..c21db404 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialDownloadMediaResponse.cs @@ -0,0 +1,13 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models +{ + /// + /// 表示 [GET] /spec/download_media 接口的响应。 + /// + public class SpecialDownloadMediaResponse : WechatWorkSpecialApiResponse + { + public override bool IsSuccessful() + { + return base.IsSuccessful() && GetRawHeaders().ContainsKey("Content-Disposition"); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialExecuteAndReportJobRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialExecuteAndReportJobRequest.cs new file mode 100644 index 00000000..07b98755 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialExecuteAndReportJobRequest.cs @@ -0,0 +1,56 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models +{ + /// + /// 表示 [POST] /spec/exec_and_report_job 接口的请求。 + /// + public class SpecialExecuteAndReportJobRequest : WechatWorkSpecialApiRequest + { + public static class Types + { + public class Result + { + /// + /// 获取或设置任务类型。 + /// + [Newtonsoft.Json.JsonProperty("job_type")] + [System.Text.Json.Serialization.JsonPropertyName("job_type")] + public string JobType { get; set; } = string.Empty; + + /// + /// 获取或设置任务结果数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public string? DataString { get; set; } + } + } + + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { get; set; } = string.Empty; + + /// + /// 获取或设置任务状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public int Status { get; set; } + + /// + /// 获取或设置任务进度(单位:百分数)。 + /// + [Newtonsoft.Json.JsonProperty("progress")] + [System.Text.Json.Serialization.JsonPropertyName("progress")] + public int? Progress { get; set; } + + /// + /// 获取或设置结果信息。 + /// + [Newtonsoft.Json.JsonProperty("result")] + [System.Text.Json.Serialization.JsonPropertyName("result")] + public Types.Result? Result { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialExecuteAndReportJobResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialExecuteAndReportJobResponse.cs new file mode 100644 index 00000000..05f9750f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialExecuteAndReportJobResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models +{ + /// + /// 表示 [POST] /spec/exec_and_report_job 接口的响应。 + /// + public class SpecialExecuteAndReportJobResponse : WechatWorkSpecialApiResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialFetchMessageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialFetchMessageRequest.cs new file mode 100644 index 00000000..8a146003 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialFetchMessageRequest.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models +{ + /// + /// 表示 [POST] /spec/fetch_msg 接口的请求。 + /// + public class SpecialFetchMessageRequest : WechatWorkSpecialApiRequest + { + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { get; set; } = string.Empty; + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("cursor")] + [System.Text.Json.Serialization.JsonPropertyName("cursor")] + public string? Cursor { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialFetchMessageResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialFetchMessageResponse.cs new file mode 100644 index 00000000..a699b5c0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialFetchMessageResponse.cs @@ -0,0 +1,117 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models +{ + /// + /// 表示 [POST] /spec/fetch_msg 接口的响应。 + /// + public class SpecialFetchMessageResponse : WechatWorkSpecialApiResponse + { + public static class Types + { + public class Message + { + public static class Types + { + public class Sender + { + /// + /// 获取或设置身份类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public int Type { get; set; } + + /// + /// 获取或设置 ID。 + /// + [Newtonsoft.Json.JsonProperty("id")] + [System.Text.Json.Serialization.JsonPropertyName("id")] + public string Id { get; set; } = default!; + } + + public class Receiver : Sender + { + } + } + + /// + /// 获取或设置消息 ID。 + /// + [Newtonsoft.Json.JsonProperty("msgid")] + [System.Text.Json.Serialization.JsonPropertyName("msgid")] + public string MessageId { get; set; } = default!; + + /// + /// 获取或设置消息类型。 + /// + [Newtonsoft.Json.JsonProperty("msgtype")] + [System.Text.Json.Serialization.JsonPropertyName("msgtype")] + public int MessageType { get; set; } + + /// + /// 获取或设置发送者信息。 + /// + [Newtonsoft.Json.JsonProperty("sender")] + [System.Text.Json.Serialization.JsonPropertyName("sender")] + public Types.Sender Sender { get; set; } = default!; + + /// + /// 获取或设置接收者列表。 + /// + [Newtonsoft.Json.JsonProperty("receiver_list")] + [System.Text.Json.Serialization.JsonPropertyName("receiver_list")] + public Types.Receiver[]? ReceiverList { get; set; } + + /// + /// 获取或设置群 ID。 + /// + [Newtonsoft.Json.JsonProperty("chatid")] + [System.Text.Json.Serialization.JsonPropertyName("chatid")] + public string? GroupChatId { get; set; } + + /// + /// 获取或设置发送时间戳。 + /// + [Newtonsoft.Json.JsonProperty("send_time")] + [System.Text.Json.Serialization.JsonPropertyName("send_time")] + public long SendTimestamp { get; set; } + + /// + /// 获取或设置是否被撤回。 + /// + [Newtonsoft.Json.JsonProperty("is_recalled")] + [System.Text.Json.Serialization.JsonPropertyName("is_recalled")] + public bool IsRecalled { get; set; } + + /// + /// 获取或设置扩展字段。 + /// + [Newtonsoft.Json.JsonExtensionData] + [System.Text.Json.Serialization.JsonExtensionData] + public IDictionary? ExtendedData { get; set; } + } + } + + /// + /// 获取或设置消息列表。 + /// + [Newtonsoft.Json.JsonProperty("msg_list")] + [System.Text.Json.Serialization.JsonPropertyName("msg_list")] + public Types.Message[] MessageList { get; set; } = default!; + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + + /// + /// 获取或设置是否还有更多数据。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + public bool HasMore { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialGetTokenRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialGetTokenRequest.cs new file mode 100644 index 00000000..11cbbdfa --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialGetTokenRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models +{ + /// + /// 表示 [POST] /spec/gettoken 接口的请求。 + /// + public class SpecialGetTokenRequest : WechatWorkSpecialApiRequest + { + /// + /// 获取或设置服务商 CorpId。如果不指定将使用构造 时的 参数。 + /// + [Newtonsoft.Json.JsonProperty("model_id")] + [System.Text.Json.Serialization.JsonPropertyName("model_id")] + public string? CorpId { get; set; } + + /// + /// 获取或设置数据分析专区 Secret。如果不指定将使用构造 时的 参数。 + /// + [Newtonsoft.Json.JsonProperty("secret")] + [System.Text.Json.Serialization.JsonPropertyName("secret")] + public string? Secret { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialGetTokenResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialGetTokenResponse.cs new file mode 100644 index 00000000..74205ab7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialGetTokenResponse.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models +{ + /// + /// 表示 [POST] /spec/gettoken 接口的响应。 + /// + public class SpecialGetTokenResponse : WechatWorkSpecialApiResponse + { + /// + /// 获取或设置数据分析专区接口凭证。 + /// + [Newtonsoft.Json.JsonProperty("access_token")] + [System.Text.Json.Serialization.JsonPropertyName("access_token")] + public string AccessToken { get; set; } = default!; + + /// + /// 获取或设置接口凭证有效期(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("expires_in")] + [System.Text.Json.Serialization.JsonPropertyName("expires_in")] + public int ExpiresIn { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialListJobRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialListJobRequest.cs new file mode 100644 index 00000000..5a3caed7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialListJobRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models +{ + /// + /// 表示 [POST] /spec/list_job 接口的请求。 + /// + public class SpecialListJobRequest : WechatWorkSpecialApiRequest + { + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("cursor")] + [System.Text.Json.Serialization.JsonPropertyName("cursor")] + public string? Cursor { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialListJobResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialListJobResponse.cs new file mode 100644 index 00000000..db82a696 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Models/SpecialListJobResponse.cs @@ -0,0 +1,63 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models +{ + /// + /// 表示 [POST] /spec/list_job 接口的响应。 + /// + public class SpecialListJobResponse : WechatWorkSpecialApiResponse + { + public static class Types + { + public class Job + { + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { get; set; } = default!; + + /// + /// 获取或设置授权方 CorpId。 + /// + [Newtonsoft.Json.JsonProperty("auth_corpid")] + [System.Text.Json.Serialization.JsonPropertyName("auth_corpid")] + public string AuthorizerCorpId { get; set; } = default!; + + /// + /// 获取或设置自定义数据。 + /// + [Newtonsoft.Json.JsonProperty("custom_data")] + [System.Text.Json.Serialization.JsonPropertyName("custom_data")] + public string? CustomData { get; set; } + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + public long CreateTimestamp { get; set; } + } + } + + /// + /// 获取或设置任务列表。 + /// + [Newtonsoft.Json.JsonProperty("job_list")] + [System.Text.Json.Serialization.JsonPropertyName("job_list")] + public Types.Job[] JobList { get; set; } = default!; + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + + /// + /// 获取或设置是否还有更多数据。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + public bool HasMore { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Settings/Credentials.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Settings/Credentials.cs new file mode 100644 index 00000000..1e620274 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/Settings/Credentials.cs @@ -0,0 +1,31 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Settings +{ + public sealed class Credentials + { + /// + /// 初始化客户端时 的副本。 + /// + public string ProviderCorpId { get; } + + /// + /// 初始化客户端时 的副本。 + /// + public string SpecialSecret { get; } + + /// + /// 初始化客户端时 的副本。 + /// + public string SignSecret { get; } + + internal Credentials(WechatWorkSpecialApiClientOptions options) + { + if (options is null) throw new ArgumentNullException(nameof(options)); + + ProviderCorpId = options.ProviderCorpId; + SpecialSecret = options.SpecialSecret; + SignSecret = options.SignSecret; + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiClient.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiClient.cs new file mode 100644 index 00000000..7b8ea383 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiClient.cs @@ -0,0 +1,89 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi +{ + /// + /// 一个企业微信数据分析专区 API HTTP 客户端。 + /// + public sealed class WechatWorkSpecialApiClient : CommonClientBase, ICommonClient + { + /// + /// 获取当前客户端使用的企业微信数据分析专区凭证。 + /// + public Settings.Credentials Credentials { get; } + + /// + /// 用指定的配置项初始化 类的新实例。 + /// + /// 配置项。 + public WechatWorkSpecialApiClient(WechatWorkSpecialApiClientOptions options) + : this(options, null) + { + } + + /// + /// + /// + /// + /// + /// + internal WechatWorkSpecialApiClient(WechatWorkSpecialApiClientOptions options, HttpClient? httpClient, bool disposeClient = true) + : base(httpClient, disposeClient) + { + if (options is null) throw new ArgumentNullException(nameof(options)); + + Credentials = new Settings.Credentials(options); + + FlurlClient.BaseUrl = options.Endpoint ?? WechatWorkSpecialApiEndpoints.DEFAULT; + FlurlClient.WithTimeout(options.Timeout <= 0 ? Timeout.InfiniteTimeSpan : TimeSpan.FromMilliseconds(options.Timeout)); + + Interceptors.Add(new Interceptors.WechatWorkSpecialApiRequestSigningInterceptor(options.SignSecret)); + } + + /// + /// 使用当前客户端生成一个新的 对象。 + /// + /// + /// + /// + /// + public IFlurlRequest CreateFlurlRequest(WechatWorkSpecialApiRequest request, HttpMethod httpMethod, params object[] urlSegments) + { + IFlurlRequest flurlRequest = base.CreateFlurlRequest(request, httpMethod, urlSegments); + + if (request.AuthorizerCorpId is not null) + { + flurlRequest.WithHeader("auth-corpid", request.AuthorizerCorpId); + } + + return flurlRequest; + } + + /// + /// 异步发起请求。 + /// + /// + /// + /// + /// + /// + public async Task SendFlurlRequestAsJsonAsync(IFlurlRequest flurlRequest, object? data = null, CancellationToken cancellationToken = default) + where T : WechatWorkSpecialApiResponse, new() + { + if (flurlRequest is null) throw new ArgumentNullException(nameof(flurlRequest)); + + bool isSimpleRequest = data is null || + flurlRequest.Verb == HttpMethod.Get || + flurlRequest.Verb == HttpMethod.Head || + flurlRequest.Verb == HttpMethod.Options; + using IFlurlResponse flurlResponse = isSimpleRequest ? + await base.SendFlurlRequestAsync(flurlRequest, null, cancellationToken).ConfigureAwait(false) : + await base.SendFlurlRequestAsJsonAsync(flurlRequest, data, cancellationToken).ConfigureAwait(false); + return await WrapFlurlResponseAsJsonAsync(flurlResponse, cancellationToken).ConfigureAwait(false); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiClientOptions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiClientOptions.cs new file mode 100644 index 00000000..fb2e3e61 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiClientOptions.cs @@ -0,0 +1,35 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi +{ + /// + /// 一个用于构造 时使用的配置项。 + /// + public class WechatWorkSpecialApiClientOptions + { + /// + /// 获取或设置请求超时时间(单位:毫秒)。 + /// 默认值:30000 + /// + public int Timeout { get; set; } = 30 * 1000; + + /// + /// 获取或设置企业微信数据分析专区 API 入口点。 + /// 默认值: + /// + public string Endpoint { get; set; } = WechatWorkSpecialApiEndpoints.DEFAULT; + + /// + /// 获取或设置企业微信服务商 CorpId。 + /// + public string ProviderCorpId { get; set; } = default!; + + /// + /// 获取或设置企业微信数据分析专区 Secret 。 + /// + public string SpecialSecret { get; set; } = default!; + + /// + /// 获取或设置企业微信数据分析专区签名密钥。 + /// + public string SignSecret { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiEndpoints.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiEndpoints.cs new file mode 100644 index 00000000..d81ed1e9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiEndpoints.cs @@ -0,0 +1,13 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi +{ + /// + /// 企业微信数据分析专区 API 接口域名。 + /// + public static class WechatWorkSpecialApiEndpoints + { + /// + /// 默认域名。 + /// + public const string DEFAULT = "https://specapi.weixin.qq.com"; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiException.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiException.cs new file mode 100644 index 00000000..f4bd7327 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiException.cs @@ -0,0 +1,27 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi +{ + /// + /// 当调用企业微信数据分析专区 API 出错时引发的异常。 + /// + public class WechatWorkSpecialApiException : WechatWorkException + { + /// + public WechatWorkSpecialApiException() + { + } + + /// + public WechatWorkSpecialApiException(string message) + : base(message) + { + } + + /// + public WechatWorkSpecialApiException(string message, Exception innerException) + : base(message, innerException) + { + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiRequest.cs new file mode 100644 index 00000000..6967f4ce --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi +{ + /// + /// 表示企业微信数据分析专区 API 请求的基类。 + /// + public abstract class WechatWorkSpecialApiRequest : CommonRequestBase, ICommonRequest + { + /// + /// 获取或设置企业微信数据分析专区的 AccessToken。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public virtual string? AccessToken { get; set; } + + /// + /// 获取或设置授权方的 CorpId。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public virtual string? AuthorizerCorpId { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiResponse.cs new file mode 100644 index 00000000..a489562d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/ExtendedSDK/SpecialApi/WechatWorkSpecialApiResponse.cs @@ -0,0 +1,34 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi +{ + /// + /// 表示企业微信数据分析专区 API 响应的基类。 + /// + public abstract class WechatWorkSpecialApiResponse : CommonResponseBase, ICommonResponse + { + /// + /// 获取企业微信数据分析专区 API 返回的错误码。 + /// + [Newtonsoft.Json.JsonProperty("errcode")] + [System.Text.Json.Serialization.JsonPropertyName("errcode")] + public virtual int ErrorCode { get; set; } + + /// + /// 获取企业微信数据分析专区 API 返回的错误描述。 + /// + [Newtonsoft.Json.JsonProperty("errmsg")] + [System.Text.Json.Serialization.JsonPropertyName("errmsg")] + public virtual string? ErrorMessage { get; set; } + + /// + /// 获取一个值,该值指示调用企业微信数据分析专区 API 是否成功。 + /// + ///(即 HTTP 状态码为 200,且 值为 0) + /// + /// + /// + public override bool IsSuccessful() + { + return GetRawStatus() == 200 && ErrorCode == 0; + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs new file mode 100644 index 00000000..06265958 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinChatDataExtensions.cs @@ -0,0 +1,555 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.Work +{ + public static class WechatWorkClientExecuteCgibinChatDataExtensions + { + /// + /// 异步调用 [POST] /cgi-bin/chatdata/get_auth_user_list 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataGetAuthUserListAsync(this WechatWorkClient client, Models.CgibinChatDataGetAuthUserListRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "get_auth_user_list") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/set_public_key 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataSetPublicKeyAsync(this WechatWorkClient client, Models.CgibinChatDataSetPublicKeyRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "set_public_key") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/sync_msg 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataSyncMessageAsync(this WechatWorkClient client, Models.CgibinChatDataSyncMessageRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "sync_msg") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/groupchat/get 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataGroupChatGetAsync(this WechatWorkClient client, Models.CgibinChatDataGroupChatGetRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "groupchat", "get") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + #region AgreeStatus + /// + /// 异步调用 [POST] /cgi-bin/chatdata/getagreestatus/single 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataGetAgreeStatusSingleAsync(this WechatWorkClient client, Models.CgibinChatDataGetAgreeStatusSingleRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "getagreestatus", "single") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/getagreestatus/room 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataGetAgreeStatusRoomAsync(this WechatWorkClient client, Models.CgibinChatDataGetAgreeStatusRoomRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "getagreestatus", "room") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + #endregion + + #region AnalyzeTask + /// + /// 异步调用 [POST] /cgi-bin/chatdata/analyze_task_add 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataAnalyzeTaskAddAsync(this WechatWorkClient client, Models.CgibinChatDataAnalyzeTaskAddRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "analyze_task_add") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/analyze_task_submit 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataAnalyzeTaskSubmitAsync(this WechatWorkClient client, Models.CgibinChatDataAnalyzeTaskSubmitRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "analyze_task_submit") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/analyze_task_result 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataAnalyzeTaskResultAsync(this WechatWorkClient client, Models.CgibinChatDataAnalyzeTaskResultRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "analyze_task_result") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + #endregion + + #region Export + /// + /// 异步调用 [POST] /cgi-bin/chatdata/export/create_job 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataExportCreateJobAsync(this WechatWorkClient client, Models.CgibinChatDataExportCreateJobRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "export", "create_job") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/export/get_job_status 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataExportGetJobStatusAsync(this WechatWorkClient client, Models.CgibinChatDataExportGetJobStatusRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "export", "get_job_status") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + #endregion + + #region HideSensitiveInfoConfig + /// + /// 异步调用 [POST] /cgi-bin/chatdata/set_hide_sensitiveinfo_config 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataSetHideSensitiveInfoConfigAsync(this WechatWorkClient client, Models.CgibinChatDataSetHideSensitiveInfoConfigRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "set_hide_sensitiveinfo_config") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/get_hide_sensitiveinfo_config 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataGetHideSensitiveInfoConfigAsync(this WechatWorkClient client, Models.CgibinChatDataGetHideSensitiveInfoConfigRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "get_hide_sensitiveinfo_config") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + #endregion + + #region Keyword + /// + /// 异步调用 [POST] /cgi-bin/chatdata/keyword/create_rule 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataKeywordCreateRuleAsync(this WechatWorkClient client, Models.CgibinChatDataKeywordCreateRuleRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "keyword", "create_rule") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/keyword/update_rule 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataKeywordUpdateRuleAsync(this WechatWorkClient client, Models.CgibinChatDataKeywordUpdateRuleRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "keyword", "update_rule") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/keyword/delete_rule 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataKeywordDeleteRuleAsync(this WechatWorkClient client, Models.CgibinChatDataKeywordDeleteRuleRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "keyword", "delete_rule") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/keyword/get_rule_list 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataKeywordGetRuleListAsync(this WechatWorkClient client, Models.CgibinChatDataKeywordGetRuleListRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "keyword", "get_rule_list") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/keyword/get_rule_detail 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataKeywordGetRuleDetailAsync(this WechatWorkClient client, Models.CgibinChatDataKeywordGetRuleDetailRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "keyword", "get_rule_detail") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/keyword/get_hit_msg_list 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataKeywordGetHitMessageListAsync(this WechatWorkClient client, Models.CgibinChatDataKeywordGetHitMessageListRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "keyword", "get_hit_msg_list") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + #endregion + + #region Search + /// + /// 异步调用 [POST] /cgi-bin/chatdata/search_chat 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataSearchChatAsync(this WechatWorkClient client, Models.CgibinChatDataSearchChatRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "search_chat") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/search_msg 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataSearchMessageAsync(this WechatWorkClient client, Models.CgibinChatDataSearchMessageRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "search_msg") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + #endregion + + #region SecurityApi + /// + /// 异步调用 [POST] /cgi-bin/chatdata/specapi/create_job 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataSecurityApiCreateJobAsync(this WechatWorkClient client, Models.CgibinChatDataSecurityApiCreateJobRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "specapi", "create_job") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + + /// + /// 异步调用 [POST] /cgi-bin/chatdata/specapi/get_job_result 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCgibinChatDataSecurityApiGetJobResultAsync(this WechatWorkClient client, Models.CgibinChatDataSecurityApiGetJobResultRequest request, CancellationToken cancellationToken = default) + { + if (client is null) throw new ArgumentNullException(nameof(client)); + if (request is null) throw new ArgumentNullException(nameof(request)); + + IFlurlRequest flurlReq = client + .CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "chatdata", "specapi", "get_job_result") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); ; + } + #endregion + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomRequest.cs new file mode 100644 index 00000000..2fff055a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/getagreestatus/room 接口的请求。 + /// + public class CgibinChatDataGetAgreeStatusRoomRequest : WechatWorkRequest + { + /// + /// 获取或设置群 ID。 + /// + [Newtonsoft.Json.JsonProperty("chatid")] + [System.Text.Json.Serialization.JsonPropertyName("chatid")] + public string GroupChatId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomResponse.cs new file mode 100644 index 00000000..9b200797 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomResponse.cs @@ -0,0 +1,42 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/getagreestatus/room 接口的响应。 + /// + public class CgibinChatDataGetAgreeStatusRoomResponse : WechatWorkResponse + { + public static class Types + { + public class AgreeInfo + { + /// + /// 获取或设置外部成员 UserId。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public string ExteranalUserId { get; set; } = default!; + + /// + /// 获取或设置同意情况。 + /// + [Newtonsoft.Json.JsonProperty("agree_status")] + [System.Text.Json.Serialization.JsonPropertyName("agree_status")] + public string AgreeStatus { get; set; } = default!; + + /// + /// 获取或设置状态改变时间戳。 + /// + [Newtonsoft.Json.JsonProperty("status_change_time")] + [System.Text.Json.Serialization.JsonPropertyName("status_change_time")] + public long ChangeTimestamp { get; set; } + } + } + + /// + /// 获取或设置会话同意情况列表。 + /// + [Newtonsoft.Json.JsonProperty("agreeinfo")] + [System.Text.Json.Serialization.JsonPropertyName("agreeinfo")] + public Types.AgreeInfo[] AgreeInfoList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleRequest.cs new file mode 100644 index 00000000..c400e3f6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleRequest.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/getagreestatus/single 接口的请求。 + /// + public class CgibinChatDataGetAgreeStatusSingleRequest : WechatWorkRequest + { + public static class Types + { + public class User + { + /// + /// 获取或设置成员的密文 UserId。与字段 二选一。 + /// + [Newtonsoft.Json.JsonProperty("open_userid")] + [System.Text.Json.Serialization.JsonPropertyName("open_userid")] + public string? OpenUserId { get; set; } + + /// + /// 获取或设置外部成员 UserId。与字段 二选一。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public string? ExteranalUserId { get; set; } + } + } + + /// + /// 获取或设置成员列表。 + /// + [Newtonsoft.Json.JsonProperty("item")] + [System.Text.Json.Serialization.JsonPropertyName("item")] + public IList UserList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleResponse.cs new file mode 100644 index 00000000..a5335e23 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleResponse.cs @@ -0,0 +1,49 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/getagreestatus/single 接口的响应。 + /// + public class CgibinChatDataGetAgreeStatusSingleResponse : WechatWorkResponse + { + public static class Types + { + public class AgreeInfo + { + /// + /// 获取或设置成员的密文 UserId。 + /// + [Newtonsoft.Json.JsonProperty("open_userid")] + [System.Text.Json.Serialization.JsonPropertyName("open_userid")] + public string? OpenUserId { get; set; } + + /// + /// 获取或设置外部成员 UserId。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public string? ExteranalUserId { get; set; } + + /// + /// 获取或设置同意情况。 + /// + [Newtonsoft.Json.JsonProperty("agree_status")] + [System.Text.Json.Serialization.JsonPropertyName("agree_status")] + public string AgreeStatus { get; set; } = default!; + + /// + /// 获取或设置状态改变时间戳。 + /// + [Newtonsoft.Json.JsonProperty("status_change_time")] + [System.Text.Json.Serialization.JsonPropertyName("status_change_time")] + public long ChangeTimestamp { get; set; } + } + } + + /// + /// 获取或设置会话同意情况列表。 + /// + [Newtonsoft.Json.JsonProperty("agreeinfo")] + [System.Text.Json.Serialization.JsonPropertyName("agreeinfo")] + public Types.AgreeInfo[] AgreeInfoList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddRequest.cs new file mode 100644 index 00000000..084bdae9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddRequest.cs @@ -0,0 +1,64 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/analyze_task_add 接口的请求。 + /// + public class CgibinChatDataAnalyzeTaskAddRequest : WechatWorkRequest + { + public static class Types + { + public class Message + { + public static class Types + { + public class EncryptInfo + { + /// + /// 获取或设置密钥。 + /// + [Newtonsoft.Json.JsonProperty("secret_key")] + [System.Text.Json.Serialization.JsonPropertyName("secret_key")] + public string SecretKey { get; set; } = string.Empty; + } + } + + /// + /// 获取或设置消息 ID。 + /// + [Newtonsoft.Json.JsonProperty("msgid")] + [System.Text.Json.Serialization.JsonPropertyName("msgid")] + public string MessageId { get; set; } = string.Empty; + + /// + /// 获取或设置加密信息。 + /// + [Newtonsoft.Json.JsonProperty("encrypt_info")] + [System.Text.Json.Serialization.JsonPropertyName("encrypt_info")] + public Types.EncryptInfo EncryptInfo { get; set; } = new Types.EncryptInfo(); + } + } + + /// + /// 获取或设置任务类型。 + /// + [Newtonsoft.Json.JsonProperty("analyze_task")] + [System.Text.Json.Serialization.JsonPropertyName("analyze_task")] + public int TaskType { get; set; } + + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string? JobId { get; set; } + + /// + /// 获取或设置消息列表。 + /// + [Newtonsoft.Json.JsonProperty("msg_list")] + [System.Text.Json.Serialization.JsonPropertyName("msg_list")] + public IList MessageList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddResponse.cs new file mode 100644 index 00000000..66495286 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddResponse.cs @@ -0,0 +1,49 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/analyze_task_add 接口的响应。 + /// + public class CgibinChatDataAnalyzeTaskAddResponse : WechatWorkResponse + { + public static class Types + { + public class FailedMessage + { + /// + /// 获取或设置消息 ID。 + /// + [Newtonsoft.Json.JsonProperty("msgid")] + [System.Text.Json.Serialization.JsonPropertyName("msgid")] + public string MessageId { get; set; } = default!; + + /// + /// 获取或设置错误码。 + /// + [Newtonsoft.Json.JsonProperty("errcode")] + [System.Text.Json.Serialization.JsonPropertyName("errcode")] + public int ErrorCode { get; set; } + + /// + /// 获取或设置错误信息。 + /// + [Newtonsoft.Json.JsonProperty("errmsg")] + [System.Text.Json.Serialization.JsonPropertyName("errmsg")] + public string? ErrorMessage { get; set; } + } + } + + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string? JobId { get; set; } + + /// + /// 获取或设置提交失败的消息列表。 + /// + [Newtonsoft.Json.JsonProperty("fail_list")] + [System.Text.Json.Serialization.JsonPropertyName("fail_list")] + public Types.FailedMessage[]? FailedMessageList { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultRequest.cs new file mode 100644 index 00000000..35dd7330 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/analyze_task_result 接口的请求。 + /// + public class CgibinChatDataAnalyzeTaskResultRequest : WechatWorkRequest + { + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultResponse.cs new file mode 100644 index 00000000..2da5779d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultResponse.cs @@ -0,0 +1,94 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/analyze_task_result 接口的响应。 + /// + public class CgibinChatDataAnalyzeTaskResultResponse : WechatWorkResponse + { + public static class Types + { + public class BatchResult + { + public static class Types + { + public class ServiceEncryptInfo : CgibinChatDataSyncMessageResponse.Types.Message.Types.ServiceEncryptInfo + { + } + } + + /// + /// 获取或设置分析结果临时 ID。 + /// + [Newtonsoft.Json.JsonProperty("result_id")] + [System.Text.Json.Serialization.JsonPropertyName("result_id")] + public string ResultId { get; set; } = default!; + + /// + /// 获取或设置加密信息。 + /// + [Newtonsoft.Json.JsonProperty("service_encrypt_info")] + [System.Text.Json.Serialization.JsonPropertyName("service_encrypt_info")] + public Types.ServiceEncryptInfo ServiceEncryptInfo { get; set; } = default!; + } + + public class ItemResult + { + /// + /// 获取或设置消息 ID。 + /// + [Newtonsoft.Json.JsonProperty("msgid")] + [System.Text.Json.Serialization.JsonPropertyName("msgid")] + public string MessageId { get; set; } = default!; + + /// + /// 获取或设置错误码。 + /// + [Newtonsoft.Json.JsonProperty("errcode")] + [System.Text.Json.Serialization.JsonPropertyName("errcode")] + public int ErrorCode { get; set; } + + /// + /// 获取或设置错误信息。 + /// + [Newtonsoft.Json.JsonProperty("errmsg")] + [System.Text.Json.Serialization.JsonPropertyName("errmsg")] + public string? ErrorMessage { get; set; } + + /// + /// 获取或设置情感分析结果。 + /// + [Newtonsoft.Json.JsonProperty("sentiment_result")] + [System.Text.Json.Serialization.JsonPropertyName("sentiment_result")] + public int? SentimentResult { get; set; } + + /// + /// 获取或设置反垃圾分析结果。 + /// + [Newtonsoft.Json.JsonProperty("spam_result")] + [System.Text.Json.Serialization.JsonPropertyName("spam_result")] + public int? SpamResult { get; set; } + } + } + + /// + /// 获取或设置任务状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public int Status { get; set; } + + /// + /// 获取或设置批量任务的分析结果。 + /// + [Newtonsoft.Json.JsonProperty("analyze_result")] + [System.Text.Json.Serialization.JsonPropertyName("analyze_result")] + public Types.BatchResult? BatchResult { get; set; } + + /// + /// 获取或设置单条任务的分析结果列表。 + /// + [Newtonsoft.Json.JsonProperty("analyze_result_list")] + [System.Text.Json.Serialization.JsonPropertyName("analyze_result_list")] + public Types.ItemResult[]? ItemResultList { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitRequest.cs new file mode 100644 index 00000000..5b89dd07 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/analyze_task_submit 接口的请求。 + /// + public class CgibinChatDataAnalyzeTaskSubmitRequest : WechatWorkRequest + { + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitResponse.cs new file mode 100644 index 00000000..3c8ec449 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/analyze_task_submit 接口的响应。 + /// + public class CgibinChatDataAnalyzeTaskSubmitResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetAuthUserListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetAuthUserListRequest.cs new file mode 100644 index 00000000..068d607e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetAuthUserListRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/get_auth_user_list 接口的请求。 + /// + public class CgibinChatDataGetAuthUserListRequest : WechatWorkRequest + { + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("cursor")] + [System.Text.Json.Serialization.JsonPropertyName("cursor")] + public string? Cursor { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetAuthUserListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetAuthUserListResponse.cs new file mode 100644 index 00000000..65ebed0c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGetAuthUserListResponse.cs @@ -0,0 +1,51 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/get_auth_user_list 接口的响应。 + /// + public class CgibinChatDataGetAuthUserListResponse : WechatWorkResponse + { + public static class Types + { + public class AuthUser + { + /// + /// 获取或设置授权成员的密文 UserId。 + /// + [Newtonsoft.Json.JsonProperty("open_userid")] + [System.Text.Json.Serialization.JsonPropertyName("open_userid")] + public string OpenUserId { get; set; } = default!; + + /// + /// 获取或设置生效的版本列表。 + /// + [Newtonsoft.Json.JsonProperty("edition_list")] + [System.Text.Json.Serialization.JsonPropertyName("edition_list")] + public int[] EditionList { get; set; } = default!; + } + } + + /// + /// 获取或设置生效成员列表。 + /// + [Newtonsoft.Json.JsonProperty("auth_user_list")] + [System.Text.Json.Serialization.JsonPropertyName("auth_user_list")] + public Types.AuthUser[] AuthUserList { get; set; } = default!; + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + + /// + /// 获取或设置是否还有更多数据。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalBooleanReadOnlyConverter))] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanReadOnlyConverter))] + public bool HasMore { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGroupChatGetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGroupChatGetRequest.cs new file mode 100644 index 00000000..1c4480bb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGroupChatGetRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/groupchat/get 接口的请求。 + /// + public class CgibinChatDataGroupChatGetRequest : WechatWorkRequest + { + /// + /// 获取或设置群 ID。 + /// + [Newtonsoft.Json.JsonProperty("chatid")] + [System.Text.Json.Serialization.JsonPropertyName("chatid")] + public string GroupChatId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGroupChatGetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGroupChatGetResponse.cs new file mode 100644 index 00000000..81579867 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataGroupChatGetResponse.cs @@ -0,0 +1,56 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/groupchat/get 接口的响应。 + /// + public class CgibinChatDataGroupChatGetResponse : WechatWorkResponse + { + public static class Types + { + public class Member + { + /// + /// 获取或设置成员类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public int Type { get; set; } + + /// + /// 获取或设置 ID。 + /// + [Newtonsoft.Json.JsonProperty("memberid")] + [System.Text.Json.Serialization.JsonPropertyName("memberid")] + public string Id { get; set; } = default!; + + /// + /// 获取或设置入群时间戳。 + /// + [Newtonsoft.Json.JsonProperty("jointime")] + [System.Text.Json.Serialization.JsonPropertyName("jointime")] + public long JoinTimestamp { get; set; } + } + } + + /// + /// 获取或设置群成员列表。 + /// + [Newtonsoft.Json.JsonProperty("members")] + [System.Text.Json.Serialization.JsonPropertyName("members")] + public Types.Member[] MemberList { get; set; } = default!; + + /// + /// 获取或设置创建者的密文 UserId。 + /// + [Newtonsoft.Json.JsonProperty("creator")] + [System.Text.Json.Serialization.JsonPropertyName("creator")] + public string CreatorOpenUserId { get; set; } = default!; + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("room_create_time")] + [System.Text.Json.Serialization.JsonPropertyName("room_create_time")] + public long CreateTimestamp { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetPublicKeyRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetPublicKeyRequest.cs new file mode 100644 index 00000000..abaed92d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetPublicKeyRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/set_public_key 接口的请求。 + /// + public class CgibinChatDataSetPublicKeyRequest : WechatWorkRequest + { + /// + /// 获取或设置公钥。 + /// + [Newtonsoft.Json.JsonProperty("public_key")] + [System.Text.Json.Serialization.JsonPropertyName("public_key")] + public string PublicKey { get; set; } = string.Empty; + + /// + /// 获取或设置公钥版本。 + /// + [Newtonsoft.Json.JsonProperty("public_key_ver")] + [System.Text.Json.Serialization.JsonPropertyName("public_key_ver")] + public int PublicKeyVersion { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetPublicKeyResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetPublicKeyResponse.cs new file mode 100644 index 00000000..fd0aa6fd --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSetPublicKeyResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/set_public_key 接口的响应。 + /// + public class CgibinChatDataSetPublicKeyResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSyncMessageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSyncMessageRequest.cs new file mode 100644 index 00000000..c473622c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSyncMessageRequest.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/sync_msg 接口的请求。 + /// + public class CgibinChatDataSyncMessageRequest : WechatWorkRequest + { + /// + /// 获取或设置回调事件返回的 Token。 + /// + [Newtonsoft.Json.JsonProperty("token")] + [System.Text.Json.Serialization.JsonPropertyName("token")] + public string? Token { get; set; } + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("cursor")] + [System.Text.Json.Serialization.JsonPropertyName("cursor")] + public string? Cursor { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSyncMessageResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSyncMessageResponse.cs new file mode 100644 index 00000000..fe38afba --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/CgibinChatDataSyncMessageResponse.cs @@ -0,0 +1,127 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/sync_msg 接口的响应。 + /// + public class CgibinChatDataSyncMessageResponse : WechatWorkResponse + { + public static class Types + { + public class Message + { + public static class Types + { + public class Sender + { + /// + /// 获取或设置身份类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public int Type { get; set; } + + /// + /// 获取或设置 ID。 + /// + [Newtonsoft.Json.JsonProperty("id")] + [System.Text.Json.Serialization.JsonPropertyName("id")] + public string Id { get; set; } = default!; + } + + public class Receiver : Sender + { + } + + public class ServiceEncryptInfo + { + /// + /// 获取或设置加密后的密钥。 + /// + [Newtonsoft.Json.JsonProperty("encrypted_secret_key")] + [System.Text.Json.Serialization.JsonPropertyName("encrypted_secret_key")] + public string EncryptedSecretKey { get; set; } = default!; + + /// + /// 获取或设置公钥版本。 + /// + [Newtonsoft.Json.JsonProperty("public_key_ver")] + [System.Text.Json.Serialization.JsonPropertyName("public_key_ver")] + public int PublicKeyVersion { get; set; } + } + } + + /// + /// 获取或设置消息 ID。 + /// + [Newtonsoft.Json.JsonProperty("msgid")] + [System.Text.Json.Serialization.JsonPropertyName("msgid")] + public string MessageId { get; set; } = default!; + + /// + /// 获取或设置消息类型。 + /// + [Newtonsoft.Json.JsonProperty("msgtype")] + [System.Text.Json.Serialization.JsonPropertyName("msgtype")] + public int MessageType { get; set; } + + /// + /// 获取或设置发送者信息。 + /// + [Newtonsoft.Json.JsonProperty("sender")] + [System.Text.Json.Serialization.JsonPropertyName("sender")] + public Types.Sender Sender { get; set; } = default!; + + /// + /// 获取或设置接收者列表。 + /// + [Newtonsoft.Json.JsonProperty("receiver_list")] + [System.Text.Json.Serialization.JsonPropertyName("receiver_list")] + public Types.Receiver[]? ReceiverList { get; set; } + + /// + /// 获取或设置群 ID。 + /// + [Newtonsoft.Json.JsonProperty("chatid")] + [System.Text.Json.Serialization.JsonPropertyName("chatid")] + public string? GroupChatId { get; set; } + + /// + /// 获取或设置发送时间戳。 + /// + [Newtonsoft.Json.JsonProperty("send_time")] + [System.Text.Json.Serialization.JsonPropertyName("send_time")] + public long SendTimestamp { get; set; } + + /// + /// 获取或设置加密信息。 + /// + [Newtonsoft.Json.JsonProperty("service_encrypt_info")] + [System.Text.Json.Serialization.JsonPropertyName("service_encrypt_info")] + public Types.ServiceEncryptInfo ServiceEncryptInfo { get; set; } = default!; + } + } + + /// + /// 获取或设置消息列表。 + /// + [Newtonsoft.Json.JsonProperty("msg_list")] + [System.Text.Json.Serialization.JsonPropertyName("msg_list")] + public Types.Message[] MessageList { get; set; } = default!; + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + + /// + /// 获取或设置是否还有更多数据。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalBooleanReadOnlyConverter))] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanReadOnlyConverter))] + public bool HasMore { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportCreateJobRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportCreateJobRequest.cs new file mode 100644 index 00000000..bc1f226b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportCreateJobRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/export/create_job 接口的请求。 + /// + public class CgibinChatDataExportCreateJobRequest : WechatWorkRequest + { + /// + /// 获取或设置会话展示组件的 Code。 + /// + [Newtonsoft.Json.JsonProperty("code")] + [System.Text.Json.Serialization.JsonPropertyName("code")] + public string TaskType { get; set; } = string.Empty; + + /// + /// 获取或设置导出内容的模板文件素材 ID。 + /// + [Newtonsoft.Json.JsonProperty("media_id")] + [System.Text.Json.Serialization.JsonPropertyName("media_id")] + public string MediaId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportCreateJobResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportCreateJobResponse.cs new file mode 100644 index 00000000..62391c09 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportCreateJobResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/export/create_job 接口的响应。 + /// + public class CgibinChatDataExportCreateJobResponse : WechatWorkResponse + { + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportGetJobStatusRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportGetJobStatusRequest.cs new file mode 100644 index 00000000..8b872cb2 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportGetJobStatusRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/export/get_job_status 接口的请求。 + /// + public class CgibinChatDataExportGetJobStatusRequest : WechatWorkRequest + { + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportGetJobStatusResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportGetJobStatusResponse.cs new file mode 100644 index 00000000..95a23b1b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Export/CgibinChatDataExportGetJobStatusResponse.cs @@ -0,0 +1,36 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/export/get_job_status 接口的响应。 + /// + public class CgibinChatDataExportGetJobStatusResponse : WechatWorkResponse + { + /// + /// 获取或设置任务状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public int Status { get; set; } + + /// + /// 获取或设置结果 ID。 + /// + [Newtonsoft.Json.JsonProperty("result_id")] + [System.Text.Json.Serialization.JsonPropertyName("result_id")] + public string? ResultId { get; set; } + + /// + /// 获取或设置结果错误码。 + /// + [Newtonsoft.Json.JsonProperty("result_errcode")] + [System.Text.Json.Serialization.JsonPropertyName("result_errcode")] + public int? ResultErrorCode { get; set; } + + /// + /// 获取或设置结果错误信息。 + /// + [Newtonsoft.Json.JsonProperty("result_errmsg")] + [System.Text.Json.Serialization.JsonPropertyName("result_errmsg")] + public string? ResultErrorMessage { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigRequest.cs new file mode 100644 index 00000000..f459a39e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/get_hide_sensitiveinfo_config 接口的请求。 + /// + public class CgibinChatDataGetHideSensitiveInfoConfigRequest : WechatWorkRequest + { + /// + /// 获取或设置成员的密文 UserId。 + /// + [Newtonsoft.Json.JsonProperty("open_userid")] + [System.Text.Json.Serialization.JsonPropertyName("open_userid")] + public string OpenUserId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigResponse.cs new file mode 100644 index 00000000..5611d034 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigResponse.cs @@ -0,0 +1,42 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/get_hide_sensitiveinfo_config 接口的响应。 + /// + public class CgibinChatDataGetHideSensitiveInfoConfigResponse : WechatWorkResponse + { + public static class Types + { + public class Config + { + /// + /// 获取或设置是否隐藏手机号。 + /// + [Newtonsoft.Json.JsonProperty("hide_mobile")] + [System.Text.Json.Serialization.JsonPropertyName("hide_mobile")] + public bool IsHideMobileNumber { get; set; } + + /// + /// 获取或设置是否隐藏身份证号。 + /// + [Newtonsoft.Json.JsonProperty("hide_idcard")] + [System.Text.Json.Serialization.JsonPropertyName("hide_idcard")] + public bool IsHideIdCardNumber { get; set; } + + /// + /// 获取或设置是否隐藏银行卡号。 + /// + [Newtonsoft.Json.JsonProperty("hide_bankno")] + [System.Text.Json.Serialization.JsonPropertyName("hide_bankno")] + public bool IsHideBankCardNumber { get; set; } + } + } + + /// + /// 获取或设置配置信息。 + /// + [Newtonsoft.Json.JsonProperty("config")] + [System.Text.Json.Serialization.JsonPropertyName("config")] + public Types.Config Config { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigRequest.cs new file mode 100644 index 00000000..be5e2cbc --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigRequest.cs @@ -0,0 +1,49 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/set_hide_sensitiveinfo_config 接口的请求。 + /// + public class CgibinChatDataSetHideSensitiveInfoConfigRequest : WechatWorkRequest + { + public static class Types + { + public class Config + { + /// + /// 获取或设置是否隐藏手机号。 + /// + [Newtonsoft.Json.JsonProperty("hide_mobile")] + [System.Text.Json.Serialization.JsonPropertyName("hide_mobile")] + public bool? IsHideMobileNumber { get; set; } + + /// + /// 获取或设置是否隐藏身份证号。 + /// + [Newtonsoft.Json.JsonProperty("hide_idcard")] + [System.Text.Json.Serialization.JsonPropertyName("hide_idcard")] + public bool? IsHideIdCardNumber { get; set; } + + /// + /// 获取或设置是否隐藏银行卡号。 + /// + [Newtonsoft.Json.JsonProperty("hide_bankno")] + [System.Text.Json.Serialization.JsonPropertyName("hide_bankno")] + public bool? IsHideBankCardNumber { get; set; } + } + } + + /// + /// 获取或设置成员的密文 UserId。 + /// + [Newtonsoft.Json.JsonProperty("open_userid")] + [System.Text.Json.Serialization.JsonPropertyName("open_userid")] + public string OpenUserId { get; set; } = string.Empty; + + /// + /// 获取或设置配置信息。 + /// + [Newtonsoft.Json.JsonProperty("config")] + [System.Text.Json.Serialization.JsonPropertyName("config")] + public Types.Config Config { get; set; } = new Types.Config (); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigResponse.cs new file mode 100644 index 00000000..0ede180c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/set_hide_sensitiveinfo_config 接口的响应。 + /// + public class CgibinChatDataSetHideSensitiveInfoConfigResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleRequest.cs new file mode 100644 index 00000000..da5e69f0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleRequest.cs @@ -0,0 +1,237 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/create_rule 接口的请求。 + /// + public class CgibinChatDataKeywordCreateRuleRequest : WechatWorkRequest + { + public static class Types + { + public class KeywordList + { + /// + /// 获取或设置关键词列表。 + /// + [Newtonsoft.Json.JsonProperty("word_list")] + [System.Text.Json.Serialization.JsonPropertyName("word_list")] + public IList Items { get; set; } = new List(); + } + + public class SemanticsList + { + /// + /// 获取或设置关键行为列表。 + /// + [Newtonsoft.Json.JsonProperty("semantics_list")] + [System.Text.Json.Serialization.JsonPropertyName("semantics_list")] + public IList Items { get; set; } = new List(); + } + + public class ApplicableRange + { + public static class Types + { + public class TargetTypeInfo + { + /// + /// 获取或设置对象类型列表。 + /// + [Newtonsoft.Json.JsonProperty("type_list")] + [System.Text.Json.Serialization.JsonPropertyName("type_list")] + public IList? TypeList { get; set; } + } + + public class ChatTypeInfo + { + /// + /// 获取或设置会话类型列表。 + /// + [Newtonsoft.Json.JsonProperty("type_list")] + [System.Text.Json.Serialization.JsonPropertyName("type_list")] + public IList? TypeList { get; set; } + } + + public class DepartmentInfo + { + /// + /// 获取或设置部门 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("id_list")] + [System.Text.Json.Serialization.JsonPropertyName("id_list")] + public IList? DepartmentIdList { get; set; } + } + + public class GroupChatInfo + { + /// + /// 获取或设置群 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("id_list")] + [System.Text.Json.Serialization.JsonPropertyName("id_list")] + public IList? GroupChatIdList { get; set; } + } + + public class UserInfo + { + /// + /// 获取或设置成员账号列表。 + /// + [Newtonsoft.Json.JsonProperty("id_list")] + [System.Text.Json.Serialization.JsonPropertyName("id_list")] + public IList? UserIdList { get; set; } + } + + public class ExternalContactInfo + { + /// + /// 获取或设置外部联系人 UserId 列表。 + /// + [Newtonsoft.Json.JsonProperty("id_list")] + [System.Text.Json.Serialization.JsonPropertyName("id_list")] + public IList? ExternalUserIdList { get; set; } + } + + public class SessionTypeInfo + { + /// + /// 获取或设置会话范围列表。 + /// + [Newtonsoft.Json.JsonProperty("session_type_list")] + [System.Text.Json.Serialization.JsonPropertyName("session_type_list")] + public IList? SessionTypeList { get; set; } + } + + public class ExcludeMobileList + { + /// + /// 获取或设置手机号码列表。 + /// + [Newtonsoft.Json.JsonProperty("mobile_list")] + [System.Text.Json.Serialization.JsonPropertyName("mobile_list")] + public IList? Items { get; set; } + } + + public class ExcludeEmailList + { + /// + /// 获取或设置邮箱列表。 + /// + [Newtonsoft.Json.JsonProperty("email_list")] + [System.Text.Json.Serialization.JsonPropertyName("email_list")] + public IList? Items { get; set; } + } + + public class ExcludeBankCardList + { + /// + /// 获取或设置银行卡号列表。 + /// + [Newtonsoft.Json.JsonProperty("bank_card_list")] + [System.Text.Json.Serialization.JsonPropertyName("bank_card_list")] + public IList? Items { get; set; } + } + } + + /// + /// 获取或设置适用的对象类型信息。 + /// + [Newtonsoft.Json.JsonProperty("target_type")] + [System.Text.Json.Serialization.JsonPropertyName("target_type")] + public Types.TargetTypeInfo? TargetTypeInfo { get; set; } + + /// + /// 获取或设置适用的会话类型信息。 + /// + [Newtonsoft.Json.JsonProperty("chat_type")] + [System.Text.Json.Serialization.JsonPropertyName("chat_type")] + public Types.ChatTypeInfo? ChatTypeInfo { get; set; } + + /// + /// 获取或设置适用的部门信息。 + /// + [Newtonsoft.Json.JsonProperty("department")] + [System.Text.Json.Serialization.JsonPropertyName("department")] + public Types.DepartmentInfo? DepartmentInfo { get; set; } + + /// + /// 获取或设置适用的员工信息。 + /// + [Newtonsoft.Json.JsonProperty("user")] + [System.Text.Json.Serialization.JsonPropertyName("user")] + public Types.UserInfo? UserInfo { get; set; } + + /// + /// 获取或设置适用的客户信息。 + /// + [Newtonsoft.Json.JsonProperty("external_contact")] + [System.Text.Json.Serialization.JsonPropertyName("external_contact")] + public Types.ExternalContactInfo? ExternalContactInfo { get; set; } + + /// + /// 获取或设置适用的群聊信息。 + /// + [Newtonsoft.Json.JsonProperty("chat")] + [System.Text.Json.Serialization.JsonPropertyName("chat")] + public Types.GroupChatInfo? GroupChatInfo { get; set; } + + /// + /// 获取或设置适用的会话范围信息。 + /// + [Newtonsoft.Json.JsonProperty("session_type")] + [System.Text.Json.Serialization.JsonPropertyName("session_type")] + public Types.SessionTypeInfo? SessionTypeInfo { get; set; } + + /// + /// 获取或设置手机号码白名单信息。 + /// + [Newtonsoft.Json.JsonProperty("exclude_mobile")] + [System.Text.Json.Serialization.JsonPropertyName("exclude_mobile")] + public Types.ExcludeMobileList? ExcludeMobileList { get; set; } + + /// + /// 获取或设置邮箱白名单信息。 + /// + [Newtonsoft.Json.JsonProperty("exclude_email")] + [System.Text.Json.Serialization.JsonPropertyName("exclude_email")] + public Types.ExcludeEmailList? ExcludeEmailList { get; set; } + + /// + /// 获取或设置银行卡号白名单信息。 + /// + [Newtonsoft.Json.JsonProperty("exclude_bank_card")] + [System.Text.Json.Serialization.JsonPropertyName("exclude_bank_card")] + public Types.ExcludeBankCardList? ExcludeBankCardList { get; set; } + } + } + + /// + /// 获取或设置规则名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string Name { get; set; } = string.Empty; + + /// + /// 获取或设置关键词列表。 + /// + [Newtonsoft.Json.JsonProperty("keyword")] + [System.Text.Json.Serialization.JsonPropertyName("keyword")] + public Types.KeywordList KeywordList { get; set; } = new Types.KeywordList(); + + /// + /// 获取或设置关键行为列表。 + /// + [Newtonsoft.Json.JsonProperty("semantics")] + [System.Text.Json.Serialization.JsonPropertyName("semantics")] + public Types.SemanticsList? SemanticsList { get; set; } + + /// + /// 获取或设置适用范围配置。 + /// + [Newtonsoft.Json.JsonProperty("applicable_range")] + [System.Text.Json.Serialization.JsonPropertyName("applicable_range")] + public Types.ApplicableRange? ApplicableRange { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleResponse.cs new file mode 100644 index 00000000..8f200879 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/create_rule 接口的响应。 + /// + public class CgibinChatDataKeywordCreateRuleResponse : WechatWorkResponse + { + /// + /// 获取或设置关键词规则 ID。 + /// + [Newtonsoft.Json.JsonProperty("rule_id")] + [System.Text.Json.Serialization.JsonPropertyName("rule_id")] + public string RuleId { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleRequest.cs new file mode 100644 index 00000000..1eb794c3 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/delete_rule 接口的请求。 + /// + public class CgibinChatDataKeywordDeleteRuleRequest : WechatWorkRequest + { + /// + /// 获取或设置关键词规则 ID。 + /// + [Newtonsoft.Json.JsonProperty("rule_id")] + [System.Text.Json.Serialization.JsonPropertyName("rule_id")] + public string RuleId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleResponse.cs new file mode 100644 index 00000000..41f4302f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/delete_rule 接口的响应。 + /// + public class CgibinChatDataKeywordDeleteRuleResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListRequest.cs new file mode 100644 index 00000000..f543e7e0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListRequest.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/get_hit_msg_list 接口的请求。 + /// + public class CgibinChatDataKeywordGetHitMessageListRequest : WechatWorkRequest + { + /// + /// 获取或设置回调事件返回的 Token。 + /// + [Newtonsoft.Json.JsonProperty("token")] + [System.Text.Json.Serialization.JsonPropertyName("token")] + public string? Token { get; set; } + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("cursor")] + [System.Text.Json.Serialization.JsonPropertyName("cursor")] + public string? Cursor { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListResponse.cs new file mode 100644 index 00000000..7a02ebfb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListResponse.cs @@ -0,0 +1,78 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/get_hit_msg_list 接口的响应。 + /// + public class CgibinChatDataKeywordGetHitMessageListResponse : WechatWorkResponse + { + public static class Types + { + public class Message + { + public static class Types + { + public class HitRule + { + /// + /// 获取或设置关键词规则 ID。 + /// + [Newtonsoft.Json.JsonProperty("rule_id")] + [System.Text.Json.Serialization.JsonPropertyName("rule_id")] + public string RuleId { get; set; } = default!; + + /// + /// 获取或设置是否命中关键词。 + /// + [Newtonsoft.Json.JsonProperty("has_hit_keyword")] + [System.Text.Json.Serialization.JsonPropertyName("has_hit_keyword")] + public bool HasHitKeyword { get; set; } + + /// + /// 获取或设置关键行为列表。 + /// + [Newtonsoft.Json.JsonProperty("semantics_list")] + [System.Text.Json.Serialization.JsonPropertyName("semantics_list")] + public int[]? SemanticsList { get; set; } + } + } + + /// + /// 获取或设置消息 ID。 + /// + [Newtonsoft.Json.JsonProperty("msgid")] + [System.Text.Json.Serialization.JsonPropertyName("msgid")] + public string MessageId { get; set; } = default!; + + /// + /// 获取或设置命中的规则列表。 + /// + [Newtonsoft.Json.JsonProperty("hit_rule_list")] + [System.Text.Json.Serialization.JsonPropertyName("hit_rule_list")] + public Types.HitRule[] HitRuleList { get; set; } = default!; + } + } + + /// + /// 获取或设置消息列表。 + /// + [Newtonsoft.Json.JsonProperty("msg_list")] + [System.Text.Json.Serialization.JsonPropertyName("msg_list")] + public Types.Message[] MessageList { get; set; } = default!; + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + + /// + /// 获取或设置是否还有更多数据。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalBooleanReadOnlyConverter))] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanReadOnlyConverter))] + public bool HasMore { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailRequest.cs new file mode 100644 index 00000000..fad63707 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/get_rule_detail 接口的请求。 + /// + public class CgibinChatDataKeywordGetRuleDetailRequest : WechatWorkRequest + { + /// + /// 获取或设置关键词规则 ID。 + /// + [Newtonsoft.Json.JsonProperty("rule_id")] + [System.Text.Json.Serialization.JsonPropertyName("rule_id")] + public string RuleId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailResponse.cs new file mode 100644 index 00000000..e200d4e7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailResponse.cs @@ -0,0 +1,235 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/get_rule_detail 接口的响应。 + /// + public class CgibinChatDataKeywordGetRuleDetailResponse : WechatWorkResponse + { + public static class Types + { + public class KeywordList + { + /// + /// 获取或设置关键词列表。 + /// + [Newtonsoft.Json.JsonProperty("word_list")] + [System.Text.Json.Serialization.JsonPropertyName("word_list")] + public string[] Items { get; set; } = default!; + } + + public class SemanticsList + { + /// + /// 获取或设置关键行为列表。 + /// + [Newtonsoft.Json.JsonProperty("semantics_list")] + [System.Text.Json.Serialization.JsonPropertyName("semantics_list")] + public int[] Items { get; set; } = default!; + } + + public class ApplicableRange + { + public static class Types + { + public class TargetTypeInfo + { + /// + /// 获取或设置对象类型列表。 + /// + [Newtonsoft.Json.JsonProperty("type_list")] + [System.Text.Json.Serialization.JsonPropertyName("type_list")] + public int[]? TypeList { get; set; } + } + + public class ChatTypeInfo + { + /// + /// 获取或设置会话类型列表。 + /// + [Newtonsoft.Json.JsonProperty("type_list")] + [System.Text.Json.Serialization.JsonPropertyName("type_list")] + public int[]? TypeList { get; set; } + } + + public class DepartmentInfo + { + /// + /// 获取或设置部门 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("id_list")] + [System.Text.Json.Serialization.JsonPropertyName("id_list")] + public long[]? DepartmentIdList { get; set; } + } + + public class GroupChatInfo + { + /// + /// 获取或设置群 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("id_list")] + [System.Text.Json.Serialization.JsonPropertyName("id_list")] + public string[]? GroupChatIdList { get; set; } + } + + public class UserInfo + { + /// + /// 获取或设置成员账号列表。 + /// + [Newtonsoft.Json.JsonProperty("id_list")] + [System.Text.Json.Serialization.JsonPropertyName("id_list")] + public string[]? UserIdList { get; set; } + } + + public class ExternalContactInfo + { + /// + /// 获取或设置外部联系人 UserId 列表。 + /// + [Newtonsoft.Json.JsonProperty("id_list")] + [System.Text.Json.Serialization.JsonPropertyName("id_list")] + public string[]? ExternalUserIdList { get; set; } + } + + public class SessionTypeInfo + { + /// + /// 获取或设置会话范围列表。 + /// + [Newtonsoft.Json.JsonProperty("session_type_list")] + [System.Text.Json.Serialization.JsonPropertyName("session_type_list")] + public int[]? SessionTypeList { get; set; } + } + + public class ExcludeMobileList + { + /// + /// 获取或设置手机号码列表。 + /// + [Newtonsoft.Json.JsonProperty("mobile_list")] + [System.Text.Json.Serialization.JsonPropertyName("mobile_list")] + public string[]? Items { get; set; } + } + + public class ExcludeEmailList + { + /// + /// 获取或设置邮箱列表。 + /// + [Newtonsoft.Json.JsonProperty("email_list")] + [System.Text.Json.Serialization.JsonPropertyName("email_list")] + public string[]? Items { get; set; } + } + + public class ExcludeBankCardList + { + /// + /// 获取或设置银行卡号列表。 + /// + [Newtonsoft.Json.JsonProperty("bank_card_list")] + [System.Text.Json.Serialization.JsonPropertyName("bank_card_list")] + public string[]? Items { get; set; } + } + } + + /// + /// 获取或设置适用的对象类型信息。 + /// + [Newtonsoft.Json.JsonProperty("target_type")] + [System.Text.Json.Serialization.JsonPropertyName("target_type")] + public Types.TargetTypeInfo? TargetTypeInfo { get; set; } + + /// + /// 获取或设置适用的会话类型信息。 + /// + [Newtonsoft.Json.JsonProperty("chat_type")] + [System.Text.Json.Serialization.JsonPropertyName("chat_type")] + public Types.ChatTypeInfo? ChatTypeInfo { get; set; } + + /// + /// 获取或设置适用的部门信息。 + /// + [Newtonsoft.Json.JsonProperty("department")] + [System.Text.Json.Serialization.JsonPropertyName("department")] + public Types.DepartmentInfo? DepartmentInfo { get; set; } + + /// + /// 获取或设置适用的员工信息。 + /// + [Newtonsoft.Json.JsonProperty("user")] + [System.Text.Json.Serialization.JsonPropertyName("user")] + public Types.UserInfo? UserInfo { get; set; } + + /// + /// 获取或设置适用的客户信息。 + /// + [Newtonsoft.Json.JsonProperty("external_contact")] + [System.Text.Json.Serialization.JsonPropertyName("external_contact")] + public Types.ExternalContactInfo? ExternalContactInfo { get; set; } + + /// + /// 获取或设置适用的群聊信息。 + /// + [Newtonsoft.Json.JsonProperty("chat")] + [System.Text.Json.Serialization.JsonPropertyName("chat")] + public Types.GroupChatInfo? GroupChatInfo { get; set; } + + /// + /// 获取或设置适用的会话范围信息。 + /// + [Newtonsoft.Json.JsonProperty("session_type")] + [System.Text.Json.Serialization.JsonPropertyName("session_type")] + public Types.SessionTypeInfo? SessionTypeInfo { get; set; } + + /// + /// 获取或设置手机号码白名单信息。 + /// + [Newtonsoft.Json.JsonProperty("exclude_mobile")] + [System.Text.Json.Serialization.JsonPropertyName("exclude_mobile")] + public Types.ExcludeMobileList? ExcludeMobileList { get; set; } + + /// + /// 获取或设置邮箱白名单信息。 + /// + [Newtonsoft.Json.JsonProperty("exclude_email")] + [System.Text.Json.Serialization.JsonPropertyName("exclude_email")] + public Types.ExcludeEmailList? ExcludeEmailList { get; set; } + + /// + /// 获取或设置银行卡号白名单信息。 + /// + [Newtonsoft.Json.JsonProperty("exclude_bank_card")] + [System.Text.Json.Serialization.JsonPropertyName("exclude_bank_card")] + public Types.ExcludeBankCardList? ExcludeBankCardList { get; set; } + } + } + + /// + /// 获取或设置规则名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string Name { get; set; } = default!; + + /// + /// 获取或设置关键词列表。 + /// + [Newtonsoft.Json.JsonProperty("keyword")] + [System.Text.Json.Serialization.JsonPropertyName("keyword")] + public Types.KeywordList KeywordList { get; set; } = default!; + + /// + /// 获取或设置关键行为列表。 + /// + [Newtonsoft.Json.JsonProperty("semantics")] + [System.Text.Json.Serialization.JsonPropertyName("semantics")] + public Types.SemanticsList? SemanticsList { get; set; } + + /// + /// 获取或设置适用范围配置。 + /// + [Newtonsoft.Json.JsonProperty("applicable_range")] + [System.Text.Json.Serialization.JsonPropertyName("applicable_range")] + public Types.ApplicableRange? ApplicableRange { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListRequest.cs new file mode 100644 index 00000000..3f35e828 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListRequest.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/get_rule_list 接口的请求。 + /// + public class CgibinChatDataKeywordGetRuleListRequest : WechatWorkRequest + { + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("cursor")] + [System.Text.Json.Serialization.JsonPropertyName("cursor")] + public string? Cursor { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListResponse.cs new file mode 100644 index 00000000..41066f86 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListResponse.cs @@ -0,0 +1,58 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/get_rule_list 接口的响应。 + /// + public class CgibinChatDataKeywordGetRuleListResponse : WechatWorkResponse + { + public static class Types + { + public class Rule + { + /// + /// 获取或设置规则 ID。 + /// + [Newtonsoft.Json.JsonProperty("rule_id")] + [System.Text.Json.Serialization.JsonPropertyName("rule_id")] + public string RuleId { get; set; } = default!; + + /// + /// 获取或设置规则名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string Name { get; set; } = default!; + + /// + /// 获取或设置创建时间戳。 + /// + [Newtonsoft.Json.JsonProperty("create_time")] + [System.Text.Json.Serialization.JsonPropertyName("create_time")] + public long CreateTimetamp { get; set; } + } + } + + /// + /// 获取或设置关键词规则列表。 + /// + [Newtonsoft.Json.JsonProperty("rule_list")] + [System.Text.Json.Serialization.JsonPropertyName("rule_list")] + public Types.Rule[] RuleList { get; set; } = default!; + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + + /// + /// 获取或设置是否还有更多数据。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalBooleanReadOnlyConverter))] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanReadOnlyConverter))] + public bool HasMore { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleRequest.cs new file mode 100644 index 00000000..71310af4 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleRequest.cs @@ -0,0 +1,170 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/update_rule 接口的请求。 + /// + public class CgibinChatDataKeywordUpdateRuleRequest : WechatWorkRequest + { + public static class Types + { + public class KeywordList : CgibinChatDataKeywordCreateRuleRequest.Types.KeywordList + { + } + + public class SemanticsList : CgibinChatDataKeywordCreateRuleRequest.Types.SemanticsList + { + } + + public class ApplicableRange + { + public static class Types + { + public class TargetTypeInfo : CgibinChatDataKeywordCreateRuleRequest.Types.ApplicableRange.Types.TargetTypeInfo + { + } + + public class ChatTypeInfo : CgibinChatDataKeywordCreateRuleRequest.Types.ApplicableRange.Types.ChatTypeInfo + { + } + + public class DepartmentInfo : CgibinChatDataKeywordCreateRuleRequest.Types.ApplicableRange.Types.DepartmentInfo + { + } + + public class GroupChatInfo : CgibinChatDataKeywordCreateRuleRequest.Types.ApplicableRange.Types.GroupChatInfo + { + } + + public class UserInfo : CgibinChatDataKeywordCreateRuleRequest.Types.ApplicableRange.Types.UserInfo + { + } + + public class ExternalContactInfo : CgibinChatDataKeywordCreateRuleRequest.Types.ApplicableRange.Types.ExternalContactInfo + { + } + + public class SessionTypeInfo : CgibinChatDataKeywordCreateRuleRequest.Types.ApplicableRange.Types.DepartmentInfo + { + } + + public class ExcludeMobileList : CgibinChatDataKeywordCreateRuleRequest.Types.ApplicableRange.Types.ExcludeMobileList + { + } + + public class ExcludeEmailList : CgibinChatDataKeywordCreateRuleRequest.Types.ApplicableRange.Types.ExcludeEmailList + { + } + + public class ExcludeBankCardList : CgibinChatDataKeywordCreateRuleRequest.Types.ApplicableRange.Types.ExcludeBankCardList + { + } + } + + /// + /// 获取或设置适用的对象类型信息。 + /// + [Newtonsoft.Json.JsonProperty("target_type")] + [System.Text.Json.Serialization.JsonPropertyName("target_type")] + public Types.TargetTypeInfo? TargetTypeInfo { get; set; } + + /// + /// 获取或设置适用的会话类型信息。 + /// + [Newtonsoft.Json.JsonProperty("chat_type")] + [System.Text.Json.Serialization.JsonPropertyName("chat_type")] + public Types.ChatTypeInfo? ChatTypeInfo { get; set; } + + /// + /// 获取或设置适用的部门信息。 + /// + [Newtonsoft.Json.JsonProperty("department")] + [System.Text.Json.Serialization.JsonPropertyName("department")] + public Types.DepartmentInfo? DepartmentInfo { get; set; } + + /// + /// 获取或设置适用的员工信息。 + /// + [Newtonsoft.Json.JsonProperty("user")] + [System.Text.Json.Serialization.JsonPropertyName("user")] + public Types.UserInfo? UserInfo { get; set; } + + /// + /// 获取或设置适用的客户信息。 + /// + [Newtonsoft.Json.JsonProperty("external_contact")] + [System.Text.Json.Serialization.JsonPropertyName("external_contact")] + public Types.ExternalContactInfo? ExternalContactInfo { get; set; } + + /// + /// 获取或设置适用的群聊信息。 + /// + [Newtonsoft.Json.JsonProperty("chat")] + [System.Text.Json.Serialization.JsonPropertyName("chat")] + public Types.GroupChatInfo? GroupChatInfo { get; set; } + + /// + /// 获取或设置适用的会话范围信息。 + /// + [Newtonsoft.Json.JsonProperty("session_type")] + [System.Text.Json.Serialization.JsonPropertyName("session_type")] + public Types.SessionTypeInfo? SessionTypeInfo { get; set; } + + /// + /// 获取或设置手机号码白名单信息。 + /// + [Newtonsoft.Json.JsonProperty("exclude_mobile")] + [System.Text.Json.Serialization.JsonPropertyName("exclude_mobile")] + public Types.ExcludeMobileList? ExcludeMobileList { get; set; } + + /// + /// 获取或设置邮箱白名单信息。 + /// + [Newtonsoft.Json.JsonProperty("exclude_email")] + [System.Text.Json.Serialization.JsonPropertyName("exclude_email")] + public Types.ExcludeEmailList? ExcludeEmailList { get; set; } + + /// + /// 获取或设置银行卡号白名单信息。 + /// + [Newtonsoft.Json.JsonProperty("exclude_bank_card")] + [System.Text.Json.Serialization.JsonPropertyName("exclude_bank_card")] + public Types.ExcludeBankCardList? ExcludeBankCardList { get; set; } + } + } + + /// + /// 获取或设置关键词规则 ID。 + /// + [Newtonsoft.Json.JsonProperty("rule_id")] + [System.Text.Json.Serialization.JsonPropertyName("rule_id")] + public string RuleId { get; set; } = string.Empty; + + /// + /// 获取或设置规则名称。 + /// + [Newtonsoft.Json.JsonProperty("name")] + [System.Text.Json.Serialization.JsonPropertyName("name")] + public string? Name { get; set; } + + /// + /// 获取或设置关键词列表。 + /// + [Newtonsoft.Json.JsonProperty("keyword")] + [System.Text.Json.Serialization.JsonPropertyName("keyword")] + public Types.KeywordList? KeywordList { get; set; } + + /// + /// 获取或设置关键行为列表。 + /// + [Newtonsoft.Json.JsonProperty("semantics")] + [System.Text.Json.Serialization.JsonPropertyName("semantics")] + public Types.SemanticsList? SemanticsList { get; set; } + + /// + /// 获取或设置适用范围配置。 + /// + [Newtonsoft.Json.JsonProperty("applicable_range")] + [System.Text.Json.Serialization.JsonPropertyName("applicable_range")] + public Types.ApplicableRange? ApplicableRange { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleResponse.cs new file mode 100644 index 00000000..2491d4c7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/keyword/update_rule 接口的响应。 + /// + public class CgibinChatDataKeywordUpdateRuleResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchChatRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchChatRequest.cs new file mode 100644 index 00000000..b6eef8e6 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchChatRequest.cs @@ -0,0 +1,29 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/search_chat 接口的请求。 + /// + public class CgibinChatDataSearchChatRequest : WechatWorkRequest + { + /// + /// 获取或设置搜索词。 + /// + [Newtonsoft.Json.JsonProperty("query_word")] + [System.Text.Json.Serialization.JsonPropertyName("query_word")] + public string QueryWord { get; set; } = string.Empty; + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("cursor")] + [System.Text.Json.Serialization.JsonPropertyName("cursor")] + public string? Cursor { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchChatResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchChatResponse.cs new file mode 100644 index 00000000..4875e24e --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchChatResponse.cs @@ -0,0 +1,44 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/search_chat 接口的响应。 + /// + public class CgibinChatDataSearchChatResponse : WechatWorkResponse + { + public static class Types + { + public class GroupChat + { + /// + /// 获取或设置群 ID。 + /// + [Newtonsoft.Json.JsonProperty("chatid")] + [System.Text.Json.Serialization.JsonPropertyName("chatid")] + public string GroupChatId { get; set; } = default!; + } + } + + /// + /// 获取或设置群列表。 + /// + [Newtonsoft.Json.JsonProperty("chat_list")] + [System.Text.Json.Serialization.JsonPropertyName("chat_list")] + public Types.GroupChat[] GroupChatList { get; set; } = default!; + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + + /// + /// 获取或设置是否还有更多数据。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalBooleanReadOnlyConverter))] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanReadOnlyConverter))] + public bool HasMore { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchMessageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchMessageRequest.cs new file mode 100644 index 00000000..6d0d6de7 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchMessageRequest.cs @@ -0,0 +1,92 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/search_msg 接口的请求。 + /// + public class CgibinChatDataSearchMessageRequest : WechatWorkRequest + { + public static class Types + { + public class ChatInfo + { + public static class Types + { + public class IdInfo + { + /// + /// 获取或设置成员的密文 UserId。与字段 二选一。 + /// + [Newtonsoft.Json.JsonProperty("open_userid")] + [System.Text.Json.Serialization.JsonPropertyName("open_userid")] + public string? OpenUserId { get; set; } + + /// + /// 获取或设置外部成员 UserId。与字段 二选一。 + /// + [Newtonsoft.Json.JsonProperty("external_userid")] + [System.Text.Json.Serialization.JsonPropertyName("external_userid")] + public string? ExteranalUserId { get; set; } + } + } + + /// + /// 获取或设置会话类型。 + /// + [Newtonsoft.Json.JsonProperty("chat_type")] + [System.Text.Json.Serialization.JsonPropertyName("chat_type")] + public int ChatType { get; set; } + + /// + /// 获取或设置 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("id_list")] + [System.Text.Json.Serialization.JsonPropertyName("id_list")] + public IList IdList { get; set; } = new List(); + } + } + + /// + /// 获取或设置搜索词。 + /// + [Newtonsoft.Json.JsonProperty("query_word")] + [System.Text.Json.Serialization.JsonPropertyName("query_word")] + public string QueryWord { get; set; } = string.Empty; + + /// + /// 获取或设置搜索的客户会话信息。 + /// + [Newtonsoft.Json.JsonProperty("chat_info")] + [System.Text.Json.Serialization.JsonPropertyName("chat_info")] + public Types.ChatInfo? ChatInfo { get; set; } + + /// + /// 获取或设置搜索会话范围的起始时间戳。 + /// + [Newtonsoft.Json.JsonProperty("start_time")] + [System.Text.Json.Serialization.JsonPropertyName("start_time")] + public long? StartTimestamp { get; set; } + + /// + /// 获取或设置搜索会话范围的结束时间戳。 + /// + [Newtonsoft.Json.JsonProperty("end_time")] + [System.Text.Json.Serialization.JsonPropertyName("end_time")] + public long? EndTimestamp { get; set; } + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("cursor")] + [System.Text.Json.Serialization.JsonPropertyName("cursor")] + public string? Cursor { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonProperty("limit")] + [System.Text.Json.Serialization.JsonPropertyName("limit")] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchMessageResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchMessageResponse.cs new file mode 100644 index 00000000..a070c68f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/Search/CgibinChatDataSearchMessageResponse.cs @@ -0,0 +1,44 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/search_msg 接口的响应。 + /// + public class CgibinChatDataSearchMessageResponse : WechatWorkResponse + { + public static class Types + { + public class Message + { + /// + /// 获取或设置消息 ID。 + /// + [Newtonsoft.Json.JsonProperty("msgid")] + [System.Text.Json.Serialization.JsonPropertyName("msgid")] + public string MessageId { get; set; } = default!; + } + } + + /// + /// 获取或设置消息列表。 + /// + [Newtonsoft.Json.JsonProperty("msg_list")] + [System.Text.Json.Serialization.JsonPropertyName("msg_list")] + public Types.Message[] MessageList { get; set; } = default!; + + /// + /// 获取或设置分页游标。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + + /// + /// 获取或设置是否还有更多数据。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.NumericalBooleanReadOnlyConverter))] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.NumericalBooleanReadOnlyConverter))] + public bool HasMore { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobRequest.cs new file mode 100644 index 00000000..1debfb72 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobRequest.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/specapi/create_job 接口的请求。 + /// + public class CgibinChatDataSecurityApiCreateJobRequest : WechatWorkRequest + { + public static class Types + { + public class MessageFilter + { + public static class Types + { + public class Message + { + public static class Types + { + public class EncryptInfo + { + /// + /// 获取或设置密钥。 + /// + [Newtonsoft.Json.JsonProperty("secret_key")] + [System.Text.Json.Serialization.JsonPropertyName("secret_key")] + public string SecretKey { get; set; } = string.Empty; + } + } + + /// + /// 获取或设置消息 ID。 + /// + [Newtonsoft.Json.JsonProperty("msgid")] + [System.Text.Json.Serialization.JsonPropertyName("msgid")] + public string MessageId { get; set; } = string.Empty; + + /// + /// 获取或设置加密信息。 + /// + [Newtonsoft.Json.JsonProperty("encrypt_info")] + [System.Text.Json.Serialization.JsonPropertyName("encrypt_info")] + public Types.EncryptInfo EncryptInfo { get; set; } = new Types.EncryptInfo(); + } + } + + /// + /// 获取或设置消息列表。 + /// + [Newtonsoft.Json.JsonProperty("msg_list")] + [System.Text.Json.Serialization.JsonPropertyName("msg_list")] + public IList MessageList { get; set; } = new List(); + } + } + + /// + /// 获取或设置消息过滤参数。 + /// + [Newtonsoft.Json.JsonProperty("msg_filter")] + [System.Text.Json.Serialization.JsonPropertyName("msg_filter")] + public Types.MessageFilter MessageFilter { get; set; } = new Types.MessageFilter(); + + /// + /// 获取或设置自定义 ID。 + /// + [Newtonsoft.Json.JsonProperty("custom_id")] + [System.Text.Json.Serialization.JsonPropertyName("custom_id")] + public string CustomId { get; set; } = string.Empty; + + /// + /// 获取或设置自定义数据。 + /// + [Newtonsoft.Json.JsonProperty("custom_data")] + [System.Text.Json.Serialization.JsonPropertyName("custom_data")] + public string? CustomData { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobResponse.cs new file mode 100644 index 00000000..1134a0ec --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/specapi/create_job 接口的响应。 + /// + public class CgibinChatDataSecurityApiCreateJobResponse : WechatWorkResponse + { + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultRequest.cs new file mode 100644 index 00000000..bdfcf3ec --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/specapi/get_job_result 接口的请求。 + /// + public class CgibinChatDataSecurityApiGetJobResultRequest : WechatWorkRequest + { + /// + /// 获取或设置任务 ID。 + /// + [Newtonsoft.Json.JsonProperty("jobid")] + [System.Text.Json.Serialization.JsonPropertyName("jobid")] + public string JobId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultResponse.cs new file mode 100644 index 00000000..18cb8fdb --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultResponse.cs @@ -0,0 +1,56 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/chatdata/specapi/get_job_result 接口的响应。 + /// + public class CgibinChatDataSecurityApiGetJobResultResponse : WechatWorkResponse + { + public static class Types + { + public class Result + { + /// + /// 获取或设置任务类型。 + /// + [Newtonsoft.Json.JsonProperty("job_type")] + [System.Text.Json.Serialization.JsonPropertyName("job_type")] + public string JobType { get; set; } = default!; + + /// + /// 获取或设置任务结果数据。 + /// + [Newtonsoft.Json.JsonProperty("data")] + [System.Text.Json.Serialization.JsonPropertyName("data")] + public string? DataString { get; set; } + } + } + + /// + /// 获取或设置任务状态。 + /// + [Newtonsoft.Json.JsonProperty("status")] + [System.Text.Json.Serialization.JsonPropertyName("status")] + public int Status { get; set; } + + /// + /// 获取或设置任务开始时间戳。 + /// + [Newtonsoft.Json.JsonProperty("dispatch_time")] + [System.Text.Json.Serialization.JsonPropertyName("dispatch_time")] + public long DispatchTimestamp { get; set; } + + /// + /// 获取或设置任务进度(单位:百分数)。 + /// + [Newtonsoft.Json.JsonProperty("progress")] + [System.Text.Json.Serialization.JsonPropertyName("progress")] + public int Progress { get; set; } + + /// + /// 获取或设置结果信息。 + /// + [Newtonsoft.Json.JsonProperty("result")] + [System.Text.Json.Serialization.JsonPropertyName("result")] + public Types.Result? Result { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/HMACUtility.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/HMACUtility.cs new file mode 100644 index 00000000..e961561a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/HMACUtility.cs @@ -0,0 +1,49 @@ +using System; +using System.Security.Cryptography; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities +{ + using SKIT.FlurlHttpClient.Primitives; + + /// + /// HMAC 算法工具类。 + /// + public static class HMACUtility + { + /// + /// 计算 HMAC-SHA-256 哈希值。 + /// + /// 密钥字节数组。 + /// 要计算哈希值的信息字节数组。 + /// 哈希值字节数组。 + public static byte[] HashWithSHA256(byte[] keyBytes, byte[] messageBytes) + { + if (keyBytes is null) throw new ArgumentNullException(nameof(keyBytes)); + if (messageBytes is null) throw new ArgumentNullException(nameof(messageBytes)); + +#if NET5_0_OR_GREATER + return HMACSHA256.HashData(keyBytes, messageBytes); +#else + using HMAC hmac = new HMACSHA256(keyBytes); + return hmac.ComputeHash(messageBytes); +#endif + } + + /// + /// 计算 HMAC-SHA-256 哈希值。 + /// + /// 密钥。 + /// 要计算哈希值的信息。 + /// 经过十六进制编码的哈希值。 + public static EncodedString HashWithSHA256(string key, string messageData) + { + if (key is null) throw new ArgumentNullException(nameof(key)); + if (messageData is null) throw new ArgumentNullException(nameof(messageData)); + + byte[] keyBytes = EncodedString.FromLiteralString(key); + byte[] messageBytes = EncodedString.FromLiteralString(messageData); + byte[] hashBytes = HashWithSHA256(keyBytes, messageBytes); + return EncodedString.ToHexString(hashBytes); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/MD5Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/MD5Utility.cs new file mode 100644 index 00000000..e62630f0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/MD5Utility.cs @@ -0,0 +1,44 @@ +using System; +using System.Security.Cryptography; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities +{ + using SKIT.FlurlHttpClient.Primitives; + + /// + /// MD5 算法工具类。 + /// + public static class MD5Utility + { + /// + /// 计算 MD5 哈希值。 + /// + /// 要计算哈希值的信息字节数组。 + /// 哈希值字节数组。 + public static byte[] Hash(byte[] messageBytes) + { + if (messageBytes is null) throw new ArgumentNullException(nameof(messageBytes)); + +#if NET5_0_OR_GREATER + return MD5.HashData(messageBytes); +#else + using MD5 md5 = MD5.Create(); + return md5.ComputeHash(messageBytes); +#endif + } + + /// + /// 计算 MD5 哈希值。 + /// + /// 要计算哈希值的信息。 + /// 经过十六进制编码的哈希值。 + public static EncodedString Hash(string messageData) + { + if (messageData is null) throw new ArgumentNullException(nameof(messageData)); + + byte[] messageBytes = EncodedString.FromLiteralString(messageData); + byte[] hashBytes = Hash(messageBytes); + return EncodedString.ToHexString(hashBytes); + } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ChatArchiveAuditApprovedSingleEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ChatArchiveAuditApprovedSingleEvent.xml new file mode 100644 index 00000000..0d8d65ae --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ChatArchiveAuditApprovedSingleEvent.xml @@ -0,0 +1,9 @@ + + + + + 1403610513 + + + + diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ChatArchiveExportFinishedEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ChatArchiveExportFinishedEvent.xml new file mode 100644 index 00000000..bdc7a146 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ChatArchiveExportFinishedEvent.xml @@ -0,0 +1,7 @@ + + + + + + 1403610513 + diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ConversationNewMessageEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ConversationNewMessageEvent.xml new file mode 100644 index 00000000..b54f6011 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/ConversationNewMessageEvent.xml @@ -0,0 +1,7 @@ + + + + + + 1403610513 + diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/HitKeywordEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/HitKeywordEvent.xml new file mode 100644 index 00000000..805d63b6 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Service/ChatArchive/HitKeywordEvent.xml @@ -0,0 +1,7 @@ + + + + + + 1403610513 + diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/IMPORTANT_CodeAnalyzeTests.cs b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/IMPORTANT_CodeAnalyzeTests.cs index e93b8826..fb5b8f6f 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/IMPORTANT_CodeAnalyzeTests.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/IMPORTANT_CodeAnalyzeTests.cs @@ -6,6 +6,8 @@ using Xunit; namespace SKIT.FlurlHttpClient.Wechat.Work.UnitTests { + using SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi; + public class CodeAnalyzeTests { [Fact(DisplayName = "代码质量分析")] @@ -24,6 +26,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.UnitTests SdkResponseModelDeclarationNamespace = "SKIT.FlurlHttpClient.Wechat.Work.Models", SdkExecutingExtensionDeclarationNamespace = "SKIT.FlurlHttpClient.Wechat.Work", SdkWebhookEventDeclarationNamespace = "SKIT.FlurlHttpClient.Wechat.Work.Events", + IgnoreExecutingExtensionTypes = static type => type.Namespace!.Contains(".ExtendedSDK."), ThrowOnNotFoundRequestModelTypes = true, ThrowOnNotFoundResponseModelTypes = true, ThrowOnNotFoundExecutingExtensionTypes = true, @@ -55,6 +58,21 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.UnitTests }; new SourceFileAnalyzer(options).AssertNoIssues(); })); + + Assert.Null(Record.Exception(() => + { + var options = new TypeDeclarationAnalyzerOptions() + { + SdkAssembly = Assembly.GetAssembly(typeof(WechatWorkSpecialApiClient))!, + SdkRequestModelDeclarationNamespace = "SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models", + SdkResponseModelDeclarationNamespace = "SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi.Models", + SdkExecutingExtensionDeclarationNamespace = "SKIT.FlurlHttpClient.Wechat.Work.ExtendedSDK.SpecialApi", + ThrowOnNotFoundRequestModelTypes = true, + ThrowOnNotFoundResponseModelTypes = true, + ThrowOnNotFoundExecutingExtensionTypes = true + }; + new TypeDeclarationAnalyzer(options).AssertNoIssues(); + })); } } } diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomRequest.json new file mode 100644 index 00000000..ec947dbc --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomRequest.json @@ -0,0 +1,3 @@ +{ + "chatid": "wrjc7bDwAASxc8tZvBErFE02BtPWyAAA" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomResponse.json new file mode 100644 index 00000000..b5ae04f4 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusRoomResponse.json @@ -0,0 +1,21 @@ +{ + "errcode": 0, + "errmsg": "ok", + "agreeinfo": [ + { + "status_change_time": 1562766651, + "external_userid": "wmeDKaCQAAGdtHdiQWxVadfwV2HxNAAA", + "agree_status": "Agree" + }, + { + "status_change_time": 1562766651, + "external_userid": "wmeDKaCQAAIQ_p9ACyiopLBBJSGocAAA", + "agree_status": "Disagree" + }, + { + "status_change_time": 1562766651, + "external_userid": "wmeDKaCQAAIQ_p9ACnxacyBBJSGocAAA", + "agree_status": "Agree" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleRequest.json new file mode 100644 index 00000000..ba523848 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleRequest.json @@ -0,0 +1,16 @@ +{ + "item": [ + { + "open_userid": "XuJinSheng", + "external_userid": "wmeDKaCQAAGd9oGiQWxVsAKwV2HxNAAA" + }, + { + "open_userid": "XuJinSheng", + "external_userid": "wmeDKaCQAAIQ_p7ACn_jpLVBJSGocAAA" + }, + { + "open_userid": "XuJinSheng", + "external_userid": "wmeDKaCQAAPE_p7ABnxkpLBBJSGocAAA" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleResponse.json new file mode 100644 index 00000000..b51eed74 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AgreeStatus/CgibinChatDataGetAgreeStatusSingleResponse.json @@ -0,0 +1,24 @@ +{ + "errcode": 0, + "errmsg": "ok", + "agreeinfo": [ + { + "status_change_time": 1562766651, + "open_userid": "XuJinSheng", + "external_userid": "wmeDKaCPAAGdvxciQWxVsAKwV2HxNAAA", + "agree_status": "Agree" + }, + { + "status_change_time": 1562766651, + "open_userid": "XuJinSheng", + "external_userid": "wmeDKaCQAAIQ_p7ACnxksfeBJSGocAAA", + "agree_status": "Disagree" + }, + { + "status_change_time": 1562766651, + "open_userid": "XuJinSheng", + "external_userid": "wmeDKaCwAAIQ_p7ACnxckLBBJSGocAAA", + "agree_status": "Agree" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddRequest.json new file mode 100644 index 00000000..8ad13721 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddRequest.json @@ -0,0 +1,18 @@ +{ + "analyze_task": 1, + "jobid": "JOBID", + "msg_list": [ + { + "msgid": "MSGID1", + "encrypt_info": { + "secret_key": "SECRETKEY1" + } + }, + { + "msgid": "MSGID2", + "encrypt_info": { + "secret_key": "SECRETKEY2" + } + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddResponse.json new file mode 100644 index 00000000..1cc2db59 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskAddResponse.json @@ -0,0 +1,12 @@ +{ + "errcode": 0, + "errmsg": "ok", + "jobid": "JOBID", + "fail_list": [ + { + "errcode": 710601, + "errmsg": "xxx", + "msgid": "MSGID2" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultRequest.json new file mode 100644 index 00000000..ea8ec7e8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultRequest.json @@ -0,0 +1,3 @@ +{ + "jobid": "JOBID" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultResponse.json new file mode 100644 index 00000000..3e23f5f2 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskResultResponse.json @@ -0,0 +1,26 @@ +{ + "errcode": 0, + "errmsg": "ok", + "status": 1, + "analyze_result": { + "result_id": "RESULTID1", + "service_encrypt_info": { + "encrypted_secret_key": "KEYAAAAAAABBBBBB", + "public_key_ver": 1 + } + }, + "analyze_result_list": [ + { + "errcode": 0, + "errmsg": "ok", + "msgid": "MSGID1", + "sentiment_result": 2, + "spam_result": 1 + }, + { + "errcode": 710601, + "errmsg": "xxx", + "msgid": "MSGID4" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitRequest.json new file mode 100644 index 00000000..ea8ec7e8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/AnalyzeTask/CgibinChatDataAnalyzeTaskSubmitRequest.json @@ -0,0 +1,3 @@ +{ + "jobid": "JOBID" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetAuthUserListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetAuthUserListRequest.json new file mode 100644 index 00000000..75a28c24 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetAuthUserListRequest.json @@ -0,0 +1,4 @@ +{ + "cursor": "JMgigeong", + "limit": 2 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetAuthUserListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetAuthUserListResponse.json new file mode 100644 index 00000000..3217fc4a --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGetAuthUserListResponse.json @@ -0,0 +1,16 @@ +{ + "errcode": 0, + "errmsg": "ok", + "auth_user_list": [ + { + "open_userid": "woxxxjigegen", + "edition_list": [ 1 ] + }, + { + "open_userid": "woaaaaaaaaaa", + "edition_list": [ 1, 2, 3 ] + } + ], + "next_cursor": "xjigeojgeigwj", + "has_more": true +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGroupChatGetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGroupChatGetRequest.json new file mode 100644 index 00000000..e495f268 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGroupChatGetRequest.json @@ -0,0 +1,3 @@ +{ + "chatid": "wrNplhCgAAIVZohLe57zKnvIV7xBKrig" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGroupChatGetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGroupChatGetResponse.json new file mode 100644 index 00000000..4caa00c8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataGroupChatGetResponse.json @@ -0,0 +1,18 @@ +{ + "errcode": 0, + "errmsg": "ok", + "creator": "woAAAAAAA", + "room_create_time": 1592361604, + "members": [ + { + "memberid": "woAAAAAAAA", + "jointime": 1592361605, + "type": 1 + }, + { + "memberid": "woBBBBBBBB", + "jointime": 1592377076, + "type": 2 + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSetPublicKeyRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSetPublicKeyRequest.json new file mode 100644 index 00000000..be7892e6 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSetPublicKeyRequest.json @@ -0,0 +1,4 @@ +{ + "public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt2JoW+P8uWG3ijm0fa4S\nVnnQ7fjcffaAoin3KEI6WykAz6+oNxFf+hSWX1cndPg8pMXZJGYhWMCXXgFLQXGv\naXSYEYxdCgbCDL2j0HmvzHEnLLgnY4jPYxoi7S9hQbJVB+nnci9U8wUD//s5YSiY\nAjDLMwwLlE29VPNp6GCw3oVRseKl3kKnlrifxUgJv3BVgCcgpDT5LMwrsAV2gYR1\nolyINpA9LgWesSjSQPydBtaI5CmHTB1Fm1Xcr3OEFmSCoi6hdqFJXclDCRyTJqHQ\n4U1RuCVK8ahfzqoapc53H3kWkOzplhcBxEV/S1voaxScKbX5TuYm4A97fS6ok+sr\nUQIDAQAB\n-----END PUBLIC KEY-----\n", + "public_key_ver": 1 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSyncMessageRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSyncMessageRequest.json new file mode 100644 index 00000000..5585bcbe --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSyncMessageRequest.json @@ -0,0 +1,5 @@ +{ + "cursor": "RMTJID", + "token": "NGEJKGOEGJKOEGNEOAGOEGOKEGHOEEEEE", + "limit": 200 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSyncMessageResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSyncMessageResponse.json new file mode 100644 index 00000000..39fab4c3 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/CgibinChatDataSyncMessageResponse.json @@ -0,0 +1,32 @@ +{ + "errcode": 0, + "errmsg": "ok", + "has_more": true, + "next_cursor": "JGNLGEHJGIE", + "msg_list": [ + { + "msgid": "xxxmsgid", + "sender": { + "type": 1, + "id": "woxxxxxmmgjiegjie" + }, + "receiver_list": [ + { + "type": 1, + "id": "woAAAAAAAAAAA" + }, + { + "type": 2, + "id": "wmXXXXXXXXXXXXX" + } + ], + "chatid": "wrXXXXXXXXXX", + "send_time": 166666666, + "msgtype": 2, + "service_encrypt_info": { + "encrypted_secret_key": "KEYAAAAAAABBBBBB", + "public_key_ver": 1 + } + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportCreateJobRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportCreateJobRequest.json new file mode 100644 index 00000000..5f685b06 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportCreateJobRequest.json @@ -0,0 +1,4 @@ +{ + "code": "xxxxx", + "media_id": "xxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportCreateJobResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportCreateJobResponse.json new file mode 100644 index 00000000..fc33b7dc --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportCreateJobResponse.json @@ -0,0 +1,5 @@ +{ + "errcode": 0, + "errmsg": "ok", + "jobid": "xxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportGetJobStatusRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportGetJobStatusRequest.json new file mode 100644 index 00000000..64cb0588 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportGetJobStatusRequest.json @@ -0,0 +1,3 @@ +{ + "jobid": "xxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportGetJobStatusResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportGetJobStatusResponse.json new file mode 100644 index 00000000..2e0167f0 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Export/CgibinChatDataExportGetJobStatusResponse.json @@ -0,0 +1,8 @@ +{ + "errcode": 0, + "errmsg": "ok", + "status": 3, + "result_id": "xxxx", + "result_errcode": 0, + "result_errmsg": "ok" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigRequest.json new file mode 100644 index 00000000..ada4597a --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigRequest.json @@ -0,0 +1,3 @@ +{ + "open_userid": "xxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigResponse.json new file mode 100644 index 00000000..32b084c9 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataGetHideSensitiveInfoConfigResponse.json @@ -0,0 +1,9 @@ +{ + "errcode": 0, + "errmsg": "ok", + "config": { + "hide_mobile": false, + "hide_idcard": true, + "hide_bankno": true + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigRequest.json new file mode 100644 index 00000000..74768ef8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/HideSensitiveInfoConfig/CgibinChatDataSetHideSensitiveInfoConfigRequest.json @@ -0,0 +1,8 @@ +{ + "open_userid": "xxxxx", + "config": { + "hide_mobile": false, + "hide_idcard": true, + "hide_bankno": true + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleRequest.json new file mode 100644 index 00000000..3639d033 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleRequest.json @@ -0,0 +1,41 @@ +{ + "name": "已回复", + "keyword": { + "word_list": [ "收到", "好的" ] + }, + "semantics": { + "semantics_list": [ 1, 2 ] + }, + "applicable_range": { + "target_type": { + "type_list": [ 1, 2 ] + }, + "department": { + "id_list": [ 1, 2, 4 ] + }, + "user": { + "id_list": [ "woaaaaaaaaa", "wobbbbbbbb" ] + }, + "external_contact": { + "id_list": [ "wossssssssss", "woxxxxxxxxxxx" ] + }, + "chat_type": { + "type_list": [ 1, 2 ] + }, + "chat": { + "id_list": [ "wrAAAAA", "wrBBBBB" ] + }, + "exclude_mobile": { + "mobile_list": [ "+8612345679876" ] + }, + "exclude_email": { + "email_list": [ "zhangsan@qq.com" ] + }, + "exclude_bank_card": { + "bank_card_list": [ "6234567891222" ] + }, + "session_type": { + "session_type_list": [ 1, 2 ] + } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleResponse.json new file mode 100644 index 00000000..3526e5d9 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordCreateRuleResponse.json @@ -0,0 +1,5 @@ +{ + "errcode": 0, + "errmsg": "ok", + "rule_id": "vvvvvvvvvvvvvvvvvxxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleRequest.json new file mode 100644 index 00000000..7338ff74 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordDeleteRuleRequest.json @@ -0,0 +1,3 @@ +{ + "rule_id": "lllllllllllllllll" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListRequest.json new file mode 100644 index 00000000..5585bcbe --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListRequest.json @@ -0,0 +1,5 @@ +{ + "cursor": "RMTJID", + "token": "NGEJKGOEGJKOEGNEOAGOEGOKEGHOEEEEE", + "limit": 200 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListResponse.json new file mode 100644 index 00000000..54145fe7 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetHitMessageListResponse.json @@ -0,0 +1,18 @@ +{ + "errcode": 0, + "errmsg": "ok", + "has_more": 1, + "next_cursor": "JGNLGEHJGIE", + "msg_list": [ + { + "msgid": "xxxmsgid", + "hit_rule_list": [ + { + "rule_id": "vvvvvvvvvvvvvvvvvxxxx", + "has_hit_keyword": false, + "semantics_list": [ 1, 2 ] + } + ] + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailRequest.json new file mode 100644 index 00000000..f10b7a36 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailRequest.json @@ -0,0 +1,3 @@ +{ + "rule_id": "aaaaaaaaaaaaaaaa" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailResponse.json new file mode 100644 index 00000000..9471cd4d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleDetailResponse.json @@ -0,0 +1,43 @@ +{ + "errcode": 0, + "errmsg": "ok", + "name": "已回复", + "keyword": { + "word_list": [ "收到", "好的" ] + }, + "semantics": { + "semantics_list": [ 1, 2 ] + }, + "applicable_range": { + "target_type": { + "type_list": [ 1, 2 ] + }, + "department": { + "id_list": [ 1, 2, 4 ] + }, + "user": { + "id_list": [ "woAAAAAAAAAAA", "woBBBBBBBB" ] + }, + "external_contact": { + "id_list": [ "wossssssssss", "woxxxxxxxxxxx" ] + }, + "chat_type": { + "type_list": [ 1, 2 ] + }, + "chat": { + "id_list": [ "wrAAAAAAAAA", "wrBBBBBBBBB" ] + }, + "exclude_mobile": { + "mobile_list": [ "+8612345679876" ] + }, + "exclude_email": { + "email_list": [ "zhangsan@qq.com" ] + }, + "exclude_bank_card": { + "bank_card_list": [ "6234567891222" ] + }, + "session_type": { + "session_type_list": [ 1, 2 ] + } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListRequest.json new file mode 100644 index 00000000..263995a8 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListRequest.json @@ -0,0 +1,4 @@ +{ + "cursor": "XMGIENJGJ", + "limit": 100 +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListResponse.json new file mode 100644 index 00000000..ae084098 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordGetRuleListResponse.json @@ -0,0 +1,13 @@ +{ + "errcode": 0, + "errmsg": "ok", + "rule_list": [ + { + "rule_id": "xxxxxxxxx", + "name": "已回复", + "create_time": 16666666666 + } + ], + "has_more": false, + "next_cursor": "JIUENGMG" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleRequest.json new file mode 100644 index 00000000..2bdb3d1a --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Keyword/CgibinChatDataKeywordUpdateRuleRequest.json @@ -0,0 +1,36 @@ +{ + "rule_id": "wwwwwwwwwwwwwwwwwww", + "name": "已回复", + "keyword": { + "word_list": [ "收到", "好的" ] + }, + "semantics": { + "semantics_list": [ 1, 2 ] + }, + "applicable_range": { + "target_type": { + "type_list": [ 1, 2 ] + }, + "department": { + "id_list": [ 1, 2, 4 ] + }, + "user": { + "id_list": [ "woAAAAAAAAAA", "woBBBBBBBBBBBB" ] + }, + "external_contact": { + "id_list": [ "wossssssssss", "woxxxxxxxxxxx" ] + }, + "chat_type": { + "type_list": [ 1, 2 ] + }, + "chat": { + "id_list": [ "wrAAAAAAAAAAAA", "wrBBBBBBBBBBB" ] + }, + "exclude_mobile": { + "mobile_list": [ "+8612345679876" ] + }, + "exclude_email": { + "email_list": [ "zhangsan@qq.com" ] + } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchChatRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchChatRequest.json new file mode 100644 index 00000000..79787627 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchChatRequest.json @@ -0,0 +1,5 @@ +{ + "query_word": "VIP", + "limit": 50, + "cursor": "CURSOR" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchChatResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchChatResponse.json new file mode 100644 index 00000000..af06df6f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchChatResponse.json @@ -0,0 +1,14 @@ +{ + "errcode": 0, + "errmsg": "ok", + "has_more": 1, + "next_cursor": "CURSOR", + "chat_list": [ + { + "chatid": "CHATID1" + }, + { + "chatid": "CHATID2" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchMessageRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchMessageRequest.json new file mode 100644 index 00000000..d71c8ddf --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchMessageRequest.json @@ -0,0 +1,18 @@ +{ + "query_word": "欢迎", + "chat_info": { + "chat_type": 1, + "id_list": [ + { + "open_userid": "OPEN_USERID" + }, + { + "external_userid": "EXTERNALID1" + } + ] + }, + "start_time": 1668355200, + "end_time": 1668528000, + "limit": 50, + "cursor": "CURSOR" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchMessageResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchMessageResponse.json new file mode 100644 index 00000000..062feed5 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/Search/CgibinChatDataSearchMessageResponse.json @@ -0,0 +1,14 @@ +{ + "errcode": 0, + "errmsg": "ok", + "has_more": 1, + "next_cursor": "CURSOR", + "msg_list": [ + { + "msgid": "xxxmsgid" + }, + { + "msgid": "yyymsgid" + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobRequest.json new file mode 100644 index 00000000..712e548f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobRequest.json @@ -0,0 +1,20 @@ +{ + "msg_filter": { + "msg_list": [ + { + "msgid": "xxxmsgid", + "encrypt_info": { + "secret_key": "xxx" + } + }, + { + "msgid": "yyymsgid", + "encrypt_info": { + "secret_key": "xxx" + } + } + ] + }, + "custom_id": "xxx", + "custom_data": "xxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobResponse.json new file mode 100644 index 00000000..42d3af32 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiCreateJobResponse.json @@ -0,0 +1,5 @@ +{ + "errcode": 0, + "errmsg": "ok", + "jobid": "xxxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultRequest.json new file mode 100644 index 00000000..5cde2e01 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultRequest.json @@ -0,0 +1,3 @@ +{ + "jobid": "xxx" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultResponse.json new file mode 100644 index 00000000..0261eb4d --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinChatData/SecurityApi/CgibinChatDataSecurityApiGetJobResultResponse.json @@ -0,0 +1,11 @@ +{ + "errcode": 0, + "errmsg": "ok", + "status": 0, + "dispatch_time": 1666666666, + "progress": 100, + "result": { + "job_type": "xxxx", + "data": "aaaaaaaaaaaa" + } +}