From 103b29ad7db79e61e35591f244b74e41cd2eb597 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 25 Dec 2025 16:04:21 +0800 Subject: [PATCH] feat(wechat): Optimize the integration of WeCom MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 集成客户同意进行聊天内容存档事件 - 集成产生会话回调事件 - 集成会话存档接口 - 其他接口优化 --- ...INGYUN.Abp.WeChat.SettingManagement.csproj | 1 + .../AbpWeChatSettingManagementModule.cs | 2 + .../WeChatSettingAppService.cs | 12 ++ .../Token/WeChatWorkContactTokenProvider.cs | 100 +--------------- .../HttpClientWeChatWorkRequestExtensions.cs | 18 +-- ...YUN.Abp.WeChat.Work.ExternalContact.csproj | 2 + .../AbpWeChatWorkExternalContactModule.cs | 3 + .../WeChatWorkAttachmentProvider.cs | 6 +- .../WeChatWorkExternalContactProvider.cs | 6 +- .../Customers/WeChatWorkCustomerProvider.cs | 24 +--- .../WeChatWorkCustomerStrategyProvider.cs | 36 +----- .../Follows/WeChatWorkFollowUserProvider.cs | 6 +- .../GroupChats/WeChatWorkGroupChatProvider.cs | 18 +-- .../Localization/Resources/en.json | 4 +- .../Localization/Resources/zh-Hans.json | 4 +- .../ExternalContactMsgAuditApprovedEvent.cs | 23 ++++ .../ExternalContactMsgAuditNotifyEvent.cs | 16 +++ .../MsgAudits/IWeChatWorkMsgAuditProvider.cs | 48 ++++++++ .../MsgAudits/Models/RoomAgreeInfo.cs | 35 ++++++ .../MsgAudits/Models/RoomMember.cs | 25 ++++ .../MsgAudits/Models/UserAgreeInfo.cs | 39 ++++++ .../WeChatWorkCheckRoomAgreeRequest.cs | 25 ++++ .../WeChatWorkCheckSingleAgreeRequest.cs | 33 ++++++ .../Request/WeChatWorkGetGroupChatRequest.cs | 25 ++++ .../WeChatWorkGetPermitUserListRequest.cs | 57 +++++++++ .../WeChatWorkCheckRoomAgreeResponse.cs | 22 ++++ .../WeChatWorkCheckSingleAgreeResponse.cs | 22 ++++ .../WeChatWorkGetGroupChatResponse.cs | 50 ++++++++ .../WeChatWorkGetPermitUserListResponse.cs | 21 ++++ .../MsgAudits/WeChatWorkMsgAuditProvider.cs | 76 ++++++++++++ ...xternalContactSettingDefinitionProvider.cs | 30 +++++ .../WeChatWorkExternalContactSettingNames.cs | 12 ++ .../Tags/WeChatWorkCropTagProvider.cs | 30 +---- .../Tags/WeChatWorkStrategyTagProvider.cs | 24 +--- ...IWeChatWorkExternalContactTokenProvider.cs | 23 ++++ .../WeChatWorkExternalContactTokenProvider.cs | 50 ++++++++ .../WeChatWorkEmployExtendProvider.cs | 18 +-- .../WeChatWorkResignExtendProvider.cs | 24 +--- ...WeChatWorkRequestExtensions.Attachments.cs | 9 +- ...entWeChatWorkRequestExtensions.Contacts.cs | 9 +- ...ntWeChatWorkRequestExtensions.Customers.cs | 36 ++++-- ...ientWeChatWorkRequestExtensions.Follows.cs | 11 +- ...tWeChatWorkRequestExtensions.GroupChats.cs | 28 +++-- ...ntWeChatWorkRequestExtensions.MsgAudits.cs | 97 +++++++++++++++ ...tWeChatWorkRequestExtensions.Strategies.cs | 52 +++++--- ...pClientWeChatWorkRequestExtensions.Tags.cs | 76 +++++++----- ...ntWeChatWorkRequestExtensions.Transfers.cs | 57 +++++---- .../HttpClientWeChatWorkRequestExtensions.cs | 1 - .../Authorize/WeChatWorkAuthorizeGenerator.cs | 5 +- .../Work/Authorize/WeChatWorkUserFinder.cs | 15 ++- .../Work/Chat/WeChatWorkAppChatManager.cs | 16 ++- .../WeChat/Work/JsSdk/JsApiTicketProvider.cs | 3 +- .../Work/Media/WeChatWorkMediaProvider.cs | 20 ++-- .../Work/Messages/WeChatWorkMessageManager.cs | 6 +- .../Work/Messages/WeChatWorkMessageSender.cs | 16 ++- .../Security/IWeChatWorkServerProvider.cs | 2 +- .../Work/Security/WeChatWorkServerProvider.cs | 10 +- .../Work/Token/WeChatWorkTokenProvider.cs | 99 +--------------- .../Work/Token/WeChatWorkTokenProviderBase.cs | 111 ++++++++++++++++++ ...pClientWeChatWorkRequestExtensions.Auth.cs | 17 ++- ...pClientWeChatWorkRequestExtensions.Chat.cs | 27 +++-- ...ClientWeChatWorkRequestExtensions.Media.cs | 18 +-- ...ientWeChatWorkRequestExtensions.Message.cs | 36 ++++-- ...entWeChatWorkRequestExtensions.Security.cs | 11 +- .../HttpClientWeChatWorkRequestExtensions.cs | 8 +- 65 files changed, 1199 insertions(+), 567 deletions(-) create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Messages/Models/ExternalContactMsgAuditApprovedEvent.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Messages/Models/ExternalContactMsgAuditNotifyEvent.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/IWeChatWorkMsgAuditProvider.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/RoomAgreeInfo.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/RoomMember.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/UserAgreeInfo.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkCheckRoomAgreeRequest.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkCheckSingleAgreeRequest.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkGetGroupChatRequest.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkGetPermitUserListRequest.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkCheckRoomAgreeResponse.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkCheckSingleAgreeResponse.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkGetGroupChatResponse.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkGetPermitUserListResponse.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/WeChatWorkMsgAuditProvider.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Settings/WeChatWorkExternalContactSettingDefinitionProvider.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Settings/WeChatWorkExternalContactSettingNames.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Token/IWeChatWorkExternalContactTokenProvider.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Token/WeChatWorkExternalContactTokenProvider.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.MsgAudits.cs create mode 100644 aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Token/WeChatWorkTokenProviderBase.cs diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN.Abp.WeChat.SettingManagement.csproj b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN.Abp.WeChat.SettingManagement.csproj index a4be432da..6ca87f0f5 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN.Abp.WeChat.SettingManagement.csproj +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN.Abp.WeChat.SettingManagement.csproj @@ -31,6 +31,7 @@ + diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/AbpWeChatSettingManagementModule.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/AbpWeChatSettingManagementModule.cs index a7e549ccd..8ea0fe32f 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/AbpWeChatSettingManagementModule.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/AbpWeChatSettingManagementModule.cs @@ -3,6 +3,7 @@ using LINGYUN.Abp.WeChat.MiniProgram; using LINGYUN.Abp.WeChat.Official; using LINGYUN.Abp.WeChat.Work; using LINGYUN.Abp.WeChat.Work.Contacts; +using LINGYUN.Abp.WeChat.Work.ExternalContact; using LINGYUN.Abp.WeChat.Work.Localization; using Localization.Resources.AbpUi; using Microsoft.Extensions.DependencyInjection; @@ -18,6 +19,7 @@ namespace LINGYUN.Abp.WeChat.SettingManagement; typeof(AbpWeChatMiniProgramModule), typeof(AbpWeChatWorkModule), typeof(AbpWeChatWorkContactModule), + typeof(AbpWeChatWorkExternalContactModule), typeof(AbpAspNetCoreMvcModule))] public class AbpWeChatSettingManagementModule : AbpModule { diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingAppService.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingAppService.cs index 9721f5436..09feed778 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingAppService.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingAppService.cs @@ -7,6 +7,8 @@ using LINGYUN.Abp.WeChat.Official.Settings; using LINGYUN.Abp.WeChat.Settings; using LINGYUN.Abp.WeChat.Work.Contacts.Features; using LINGYUN.Abp.WeChat.Work.Contacts.Settings; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Features; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Settings; using LINGYUN.Abp.WeChat.Work.Features; using LINGYUN.Abp.WeChat.Work.Settings; using System.Threading.Tasks; @@ -186,6 +188,16 @@ public class WeChatSettingAppService : ApplicationService, IWeChatSettingAppServ providerName); } + if (await FeatureChecker.IsEnabledAsync(WeChatWorkExternalContactFeatureNames.Enable)) + { + workConnectionSetting.AddDetail( + await SettingDefinitionManager.GetAsync(WeChatWorkExternalContactSettingNames.Secret), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(WeChatWorkExternalContactSettingNames.Secret, providerName, providerKey), + ValueType.String, + providerName); + } + workConnectionSetting.AddDetail( await SettingDefinitionManager.GetAsync(WeChatWorkSettingNames.Connection.Token), StringLocalizerFactory, diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/LINGYUN/Abp/WeChat/Work/Contacts/Token/WeChatWorkContactTokenProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/LINGYUN/Abp/WeChat/Work/Contacts/Token/WeChatWorkContactTokenProvider.cs index 91063f34a..59928d11d 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/LINGYUN/Abp/WeChat/Work/Contacts/Token/WeChatWorkContactTokenProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/LINGYUN/Abp/WeChat/Work/Contacts/Token/WeChatWorkContactTokenProvider.cs @@ -1,12 +1,8 @@ using LINGYUN.Abp.WeChat.Work.Contacts.Features; using LINGYUN.Abp.WeChat.Work.Contacts.Settings; using LINGYUN.Abp.WeChat.Work.Settings; +using LINGYUN.Abp.WeChat.Work.Token; using LINGYUN.Abp.WeChat.Work.Token.Models; -using Microsoft.Extensions.Caching.Distributed; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; @@ -19,22 +15,15 @@ using Volo.Abp.Settings; namespace LINGYUN.Abp.WeChat.Work.Contacts.Token; [RequiresFeature(WeChatWorkContactsFeatureNames.Enable)] -public class WeChatWorkContactTokenProvider : IWeChatWorkContactTokenProvider, ISingletonDependency +public class WeChatWorkContactTokenProvider : WeChatWorkTokenProviderBase, IWeChatWorkContactTokenProvider, ISingletonDependency { - public ILogger Logger { get; set; } - protected ISettingProvider SettingProvider { get; } - protected IHttpClientFactory HttpClientFactory { get; } - protected IDistributedCache WeChatWorkTokenCache { get; } + protected override string ProviderName => "WeChatWorkContactToken"; public WeChatWorkContactTokenProvider( ISettingProvider settingProvider, IHttpClientFactory httpClientFactory, IDistributedCache cache) + : base(settingProvider, httpClientFactory, cache) { - HttpClientFactory = httpClientFactory; - SettingProvider = settingProvider; - WeChatWorkTokenCache = cache; - - Logger = NullLogger.Instance; } public async virtual Task GetTokenAsync(CancellationToken cancellationToken = default) @@ -56,85 +45,6 @@ public class WeChatWorkContactTokenProvider : IWeChatWorkContactTokenProvider, I string secret, CancellationToken cancellationToken = default) { - return (await GetCacheItemAsync("WeChatWorkContactToken", corpId, agentId, secret, cancellationToken)).Token; - } - /// - /// 获取缓存中的Token配置 - /// - /// - /// - /// - /// - /// - /// - protected async virtual Task GetCacheItemAsync( - string provider, - string corpId, - string agentId, - string secret, - CancellationToken cancellationToken = default) - { - Check.NotNullOrEmpty(corpId, nameof(corpId)); - Check.NotNullOrEmpty(agentId, nameof(agentId)); - Check.NotNullOrEmpty(secret, nameof(secret)); - - var cacheKey = WeChatWorkTokenCacheItem.CalculateCacheKey(provider, corpId, agentId); - - return await GetCacheItemAsync(cacheKey, provider, corpId, agentId, secret); - } - /// - /// 获取或刷新分布式缓存中的Token配置 - /// - /// - /// - /// - /// - /// - /// - /// - protected async virtual Task GetCacheItemAsync( - string cacheKey, - string provider, - string corpId, - string agentId, - string secret, - CancellationToken cancellationToken = default) - { - var cacheItem = await WeChatWorkTokenCache.GetAsync(cacheKey, token: cancellationToken); - - if (cacheItem != null) - { - Logger.LogDebug($"Found WeChatWorkContactToken in the cache: {cacheKey}"); - return cacheItem; - } - - Logger.LogDebug($"Not found WeChatWorkContactToken in the cache, getting from the httpClient: {cacheKey}"); - - var client = HttpClientFactory.CreateWeChatWorkApiClient(); - - var request = new WeChatWorkTokenRequest - { - CorpId = corpId, - CorpSecret = secret, - }; - - using var response = await client.GetTokenAsync(request, cancellationToken); - var tokenResponse = await response.DeserializeObjectAsync(); - var token = tokenResponse.ToWeChatWorkToken(); - cacheItem = new WeChatWorkTokenCacheItem(corpId, agentId, token); - - Logger.LogDebug($"Setting the cache item: {cacheKey}"); - - var cacheOptions = new DistributedCacheEntryOptions - { - // 设置绝对过期时间为Token有效期剩余的二分钟 - AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(token.ExpiresIn - 100), - }; - - await WeChatWorkTokenCache.SetAsync(cacheKey, cacheItem, cacheOptions, token: cancellationToken); - - Logger.LogDebug($"Finished setting the cache item: {cacheKey}"); - - return cacheItem; + return (await InternalGetTokenAsync(corpId, agentId, secret, cancellationToken)).Token; } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs index 971f2fe83..fb835ec7b 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Contacts/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs @@ -1,21 +1,5 @@ -using LINGYUN.Abp.WeChat.Work.Token.Models; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace System.Net.Http; +namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetTokenAsync(this HttpMessageInvoker client, WeChatWorkTokenRequest request, CancellationToken cancellationToken = default) - { - var urlBuilder = new StringBuilder(); - urlBuilder.Append("/cgi-bin/gettoken"); - urlBuilder.AppendFormat("?corpid={0}", request.CorpId); - urlBuilder.AppendFormat("&corpsecret={0}", request.CorpSecret); - - var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlBuilder.ToString()); - - return await client.SendAsync(httpRequest, cancellationToken); - } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN.Abp.WeChat.Work.ExternalContact.csproj b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN.Abp.WeChat.Work.ExternalContact.csproj index 730bd0b71..6a1fd7ce2 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN.Abp.WeChat.Work.ExternalContact.csproj +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN.Abp.WeChat.Work.ExternalContact.csproj @@ -13,6 +13,8 @@ True enable + diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/AbpWeChatWorkExternalContactModule.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/AbpWeChatWorkExternalContactModule.cs index 0c2b11939..d11d3ea81 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/AbpWeChatWorkExternalContactModule.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/AbpWeChatWorkExternalContactModule.cs @@ -30,6 +30,7 @@ public class AbpWeChatWorkExternalContactModule : AbpModule "del_external_contact" => context.GetWeChatMessage(), "del_follow_user" => context.GetWeChatMessage(), "transfer_fail" => context.GetWeChatMessage(), + "msg_audit_approved" => context.GetWeChatMessage(), _ => throw new AbpWeChatException($"Contact change event change_external_contact:{changeType} is not mounted!"), }; }); @@ -69,6 +70,8 @@ public class AbpWeChatWorkExternalContactModule : AbpModule _ => throw new AbpWeChatException($"Contact change event change_external_tag:{changeType} is not mounted!"), }; }); + // 产生会话回调事件 + options.MapEvent("msgaudit_notify", context => context.GetWeChatMessage()); }); Configure(options => diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Attachments/WeChatWorkAttachmentProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Attachments/WeChatWorkAttachmentProvider.cs index d2e9d5610..3c17c5f1c 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Attachments/WeChatWorkAttachmentProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Attachments/WeChatWorkAttachmentProvider.cs @@ -32,10 +32,6 @@ public class WeChatWorkAttachmentProvider : IWeChatWorkAttachmentProvider, ISing var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.UploadAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.UploadAsync(token.AccessToken, request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Contacts/WeChatWorkExternalContactProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Contacts/WeChatWorkExternalContactProvider.cs index 52179841b..1a44384a1 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Contacts/WeChatWorkExternalContactProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Contacts/WeChatWorkExternalContactProvider.cs @@ -35,10 +35,6 @@ public class WeChatWorkExternalContactProvider : IWeChatWorkExternalContactProvi var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetExternalContactListAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetExternalContactListAsync(token.AccessToken, request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Customers/WeChatWorkCustomerProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Customers/WeChatWorkCustomerProvider.cs index eb242ed94..824996d0b 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Customers/WeChatWorkCustomerProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Customers/WeChatWorkCustomerProvider.cs @@ -35,11 +35,7 @@ public class WeChatWorkCustomerProvider : IWeChatWorkCustomerProvider, ISingleto var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetCustomerListAsync(token.AccessToken, userId, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetCustomerListAsync(token.AccessToken, userId, cancellationToken); } public async virtual Task BulkGetCustomerAsync( @@ -51,11 +47,7 @@ public class WeChatWorkCustomerProvider : IWeChatWorkCustomerProvider, ISingleto var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.BulkGetCustomerAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.BulkGetCustomerAsync(token.AccessToken, request, cancellationToken); } public async virtual Task GetCustomerAsync( @@ -68,11 +60,7 @@ public class WeChatWorkCustomerProvider : IWeChatWorkCustomerProvider, ISingleto var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetCustomerAsync(token.AccessToken, externalUserid, cursor, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetCustomerAsync(token.AccessToken, externalUserid, cursor, cancellationToken); } public async virtual Task UpdateCustomerRemarkAsync( @@ -84,10 +72,6 @@ public class WeChatWorkCustomerProvider : IWeChatWorkCustomerProvider, ISingleto var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.UpdateCustomerRemarkAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.UpdateCustomerRemarkAsync(token.AccessToken, request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Customers/WeChatWorkCustomerStrategyProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Customers/WeChatWorkCustomerStrategyProvider.cs index f2984bb5f..d4d44f544 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Customers/WeChatWorkCustomerStrategyProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Customers/WeChatWorkCustomerStrategyProvider.cs @@ -32,11 +32,7 @@ public class WeChatWorkCustomerStrategyProvider : IWeChatWorkCustomerStrategyPro var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetCustomerStrategyListAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetCustomerStrategyListAsync(token.AccessToken, request, cancellationToken); } public async virtual Task GetCustomerStrategyAsync( @@ -46,11 +42,7 @@ public class WeChatWorkCustomerStrategyProvider : IWeChatWorkCustomerStrategyPro var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetCustomerStrategyAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetCustomerStrategyAsync(token.AccessToken, request, cancellationToken); } public async virtual Task GetCustomerStrategyRangeAsync( @@ -60,11 +52,7 @@ public class WeChatWorkCustomerStrategyProvider : IWeChatWorkCustomerStrategyPro var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetCustomerStrategyRangeAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetCustomerStrategyRangeAsync(token.AccessToken, request, cancellationToken); } public async virtual Task CreateCustomerStrategyAsync( @@ -74,11 +62,7 @@ public class WeChatWorkCustomerStrategyProvider : IWeChatWorkCustomerStrategyPro var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.CreateCustomerStrategyAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.CreateCustomerStrategyAsync(token.AccessToken, request, cancellationToken); } public async virtual Task UpdateCustomerStrategyAsync( @@ -88,11 +72,7 @@ public class WeChatWorkCustomerStrategyProvider : IWeChatWorkCustomerStrategyPro var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.UpdateCustomerStrategyAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.UpdateCustomerStrategyAsync(token.AccessToken, request, cancellationToken); } public async virtual Task DeleteCustomerStrategyAsync( @@ -102,10 +82,6 @@ public class WeChatWorkCustomerStrategyProvider : IWeChatWorkCustomerStrategyPro var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.DeleteCustomerStrategyAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.DeleteCustomerStrategyAsync(token.AccessToken, request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Follows/WeChatWorkFollowUserProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Follows/WeChatWorkFollowUserProvider.cs index 0391d6b7e..ca6c09b8a 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Follows/WeChatWorkFollowUserProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Follows/WeChatWorkFollowUserProvider.cs @@ -29,10 +29,6 @@ public class WeChatWorkFollowUserProvider : IWeChatWorkFollowUserProvider, ISing var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetFollowUserListAsync(token.AccessToken, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetFollowUserListAsync(token.AccessToken, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/GroupChats/WeChatWorkGroupChatProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/GroupChats/WeChatWorkGroupChatProvider.cs index 6600d08a9..37313bcd7 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/GroupChats/WeChatWorkGroupChatProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/GroupChats/WeChatWorkGroupChatProvider.cs @@ -35,11 +35,7 @@ public class WeChatWorkGroupChatProvider : IWeChatWorkGroupChatProvider, ISingle var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetGroupChatListAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetGroupChatListAsync(token.AccessToken, request, cancellationToken); } public async virtual Task GetGroupChatAsync( @@ -51,11 +47,7 @@ public class WeChatWorkGroupChatProvider : IWeChatWorkGroupChatProvider, ISingle var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetGroupChatAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetGroupChatAsync(token.AccessToken, request, cancellationToken); } public async virtual Task OpengIdToChatIdAsync( @@ -67,10 +59,6 @@ public class WeChatWorkGroupChatProvider : IWeChatWorkGroupChatProvider, ISingle var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.OpengIdToChatIdAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.OpengIdToChatIdAsync(token.AccessToken, request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Localization/Resources/en.json b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Localization/Resources/en.json index 4e7eee7a8..c5771d568 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Localization/Resources/en.json +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Localization/Resources/en.json @@ -4,6 +4,8 @@ "Features:ExternalContact": "External Contact", "Features:ExternalContactDesc": "WeCom ExternalContact Application.", "Features:ExternalContactEnable": "Enable External Contact", - "Features:ExternalContactEnableDesc": "Enable the ability to provide the application with an Enterprise wechat customer contact interface." + "Features:ExternalContactEnableDesc": "Enable the ability to provide the application with an Enterprise wechat customer contact interface.", + "DisplayName:WeChatWorkExternalContact.Secret": "External Contact Secret", + "Description:WeChatWorkExternalContact.Secret": "Customer contact application access key, some customer contact interfaces require customer contact application secret." } } \ No newline at end of file diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Localization/Resources/zh-Hans.json b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Localization/Resources/zh-Hans.json index 8bfe7db58..89b15b6ba 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Localization/Resources/zh-Hans.json +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Localization/Resources/zh-Hans.json @@ -4,6 +4,8 @@ "Features:ExternalContact": "客户联系", "Features:ExternalContactDesc": "企业微信客户联系应用集成.", "Features:ExternalContactEnable": "启用客户联系", - "Features:ExternalContactEnableDesc": "启用以使应用拥有企业微信客户联系接口的能力." + "Features:ExternalContactEnableDesc": "启用以使应用拥有企业微信客户联系接口的能力.", + "DisplayName:WeChatWorkExternalContact.Secret": "客户联系访问密钥", + "Description:WeChatWorkExternalContact.Secret": "客户联系应用访问密钥,部分客户联系接口需要客户联系应用secret." } } \ No newline at end of file diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Messages/Models/ExternalContactMsgAuditApprovedEvent.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Messages/Models/ExternalContactMsgAuditApprovedEvent.cs new file mode 100644 index 000000000..8bc1e052c --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Messages/Models/ExternalContactMsgAuditApprovedEvent.cs @@ -0,0 +1,23 @@ +using LINGYUN.Abp.WeChat.Common.Messages; +using LINGYUN.Abp.WeChat.Work.Common.Messages; +using System.Xml.Serialization; +using Volo.Abp.EventBus; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.Messages.Models; +/// +/// 客户同意进行聊天内容存档事件推送 +/// +[EventName("external_contact_msg_audit_approved")] +public class ExternalContactMsgAuditApprovedEvent : ExternalContactChangeEvent +{ + /// + /// 欢迎语code,可用于发送欢迎语 + /// + [XmlElement("WelcomeCode")] + public string WelcomeCode { get; set; } + + public override WeChatMessageEto ToEto() + { + return new WeChatWorkEventMessageEto(this); + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Messages/Models/ExternalContactMsgAuditNotifyEvent.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Messages/Models/ExternalContactMsgAuditNotifyEvent.cs new file mode 100644 index 000000000..2c186884a --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Messages/Models/ExternalContactMsgAuditNotifyEvent.cs @@ -0,0 +1,16 @@ +using LINGYUN.Abp.WeChat.Common.Messages; +using LINGYUN.Abp.WeChat.Work.Common.Messages; +using Volo.Abp.EventBus; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.Messages.Models; +/// +/// 产生会话回调事件推送 +/// +[EventName("external_contact_msgaudit_notify")] +public class ExternalContactMsgAuditNotifyEvent : WeChatWorkEventMessage +{ + public override WeChatMessageEto ToEto() + { + return new WeChatWorkEventMessageEto(this); + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/IWeChatWorkMsgAuditProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/IWeChatWorkMsgAuditProvider.cs new file mode 100644 index 000000000..d72320004 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/IWeChatWorkMsgAuditProvider.cs @@ -0,0 +1,48 @@ +using LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Response; +using System.Threading; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits; +/// +/// 会话存档接口 +/// +public interface IWeChatWorkMsgAuditProvider +{ + /// + /// 获取会话内容存档开启成员列表 + /// + /// + /// 详情见: + /// + Task GetPermitUserListAsync( + WeChatWorkGetPermitUserListRequest request, + CancellationToken cancellationToken = default); + /// + /// 获取单聊会话同意情况 + /// + /// + /// 详情见: + /// + Task CheckSingleAgreeAsync( + WeChatWorkCheckSingleAgreeRequest request, + CancellationToken cancellationToken = default); + /// + /// 获取群聊会话同意情况 + /// + /// + /// 详情见: + /// + Task CheckRoomAgreeAsync( + WeChatWorkCheckRoomAgreeRequest request, + CancellationToken cancellationToken = default); + /// + /// 获取会话内容存档内部群信息 + /// + /// + /// 详情见: + /// + Task GetGroupChatAsync( + WeChatWorkGetGroupChatRequest request, + CancellationToken cancellationToken = default); +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/RoomAgreeInfo.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/RoomAgreeInfo.cs new file mode 100644 index 000000000..01722c9d0 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/RoomAgreeInfo.cs @@ -0,0 +1,35 @@ +using JetBrains.Annotations; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Models; +/// +/// 群聊同意情况 +/// +public class RoomAgreeInfo +{ + /// + /// 外部成员的exteranalopenid + /// + [NotNull] + [JsonProperty("exteranalopenid")] + [JsonPropertyName("exteranalopenid")] + public string ExteranalOpenId { get; set; } + /// + /// 同意:"Agree",不同意:"Disagree" + /// + [NotNull] + [JsonProperty("agree_status")] + [JsonPropertyName("agree_status")] + public string AgreeStatus { get; set; } + /// + /// 同意状态改变的具体时间,utc时间 + /// + [CanBeNull] + [JsonProperty("status_change_time")] + [JsonPropertyName("status_change_time")] + public long? StatusChangeTime { get; set; } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/RoomMember.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/RoomMember.cs new file mode 100644 index 000000000..762f05ba8 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/RoomMember.cs @@ -0,0 +1,25 @@ +using JetBrains.Annotations; +using Newtonsoft.Json; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Models; +/// +/// 群聊成员 +/// +public class RoomMember +{ + /// + /// roomid群成员的id,userid + /// + [NotNull] + [JsonProperty("memberid")] + [JsonPropertyName("memberid")] + public string MemberId { get; set; } + /// + /// roomid群成员的入群时间 + /// + [NotNull] + [JsonProperty("jointime")] + [JsonPropertyName("jointime")] + public long JoinTime { get; set; } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/UserAgreeInfo.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/UserAgreeInfo.cs new file mode 100644 index 000000000..a823f4e95 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Models/UserAgreeInfo.cs @@ -0,0 +1,39 @@ +using JetBrains.Annotations; +using Newtonsoft.Json; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Models; +/// +/// 单聊同意情况 +/// +public class UserAgreeInfo +{ + /// + /// 内部成员的userid + /// + [NotNull] + [JsonProperty("userid")] + [JsonPropertyName("userid")] + public string UserId { get; set; } + /// + /// 外部成员的exteranalopenid + /// + [NotNull] + [JsonProperty("exteranalopenid")] + [JsonPropertyName("exteranalopenid")] + public string ExteranalOpenId { get; set; } + /// + /// 同意:"Agree",不同意:"Disagree" + /// + [NotNull] + [JsonProperty("agree_status")] + [JsonPropertyName("agree_status")] + public string AgreeStatus { get; set; } + /// + /// 同意状态改变的具体时间,utc时间 + /// + [CanBeNull] + [JsonProperty("status_change_time")] + [JsonPropertyName("status_change_time")] + public long? StatusChangeTime { get; set; } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkCheckRoomAgreeRequest.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkCheckRoomAgreeRequest.cs new file mode 100644 index 000000000..4bffd5b3f --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkCheckRoomAgreeRequest.cs @@ -0,0 +1,25 @@ +using JetBrains.Annotations; +using Newtonsoft.Json; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Request; +/// +/// 获取群聊会话同意情况请求参数 +/// +/// +/// 详情见: +/// +public class WeChatWorkCheckRoomAgreeRequest : WeChatWorkRequest +{ + /// + /// 待查询的roomid + /// + [NotNull] + [JsonProperty("roomid")] + [JsonPropertyName("roomid")] + public string RoomId { get; } + public WeChatWorkCheckRoomAgreeRequest(string roomId) + { + RoomId = roomId; + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkCheckSingleAgreeRequest.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkCheckSingleAgreeRequest.cs new file mode 100644 index 000000000..93c457d0b --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkCheckSingleAgreeRequest.cs @@ -0,0 +1,33 @@ +using JetBrains.Annotations; +using Newtonsoft.Json; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Request; +/// +/// 获取单聊会话同意情况请求参数 +/// +/// +/// 详情见: +/// +public class WeChatWorkCheckSingleAgreeRequest : WeChatWorkRequest +{ + /// + /// 内部成员的userid + /// + [NotNull] + [JsonProperty("userid")] + [JsonPropertyName("userid")] + public string UserId { get; } + /// + /// 外部成员的exteranalopenid + /// + [NotNull] + [JsonProperty("exteranalopenid")] + [JsonPropertyName("exteranalopenid")] + public string ExteranalOpenId { get; } + public WeChatWorkCheckSingleAgreeRequest(string userId, string exteranalOpenId) + { + UserId = userId; + ExteranalOpenId = exteranalOpenId; + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkGetGroupChatRequest.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkGetGroupChatRequest.cs new file mode 100644 index 000000000..d5566a5dc --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkGetGroupChatRequest.cs @@ -0,0 +1,25 @@ +using JetBrains.Annotations; +using Newtonsoft.Json; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Request; +/// +/// 获取会话内容存档内部群信息请求参数 +/// +/// +/// 详情见: +/// +public class WeChatWorkGetGroupChatRequest : WeChatWorkRequest +{ + /// + /// 待查询的roomid + /// + [NotNull] + [JsonProperty("roomid")] + [JsonPropertyName("roomid")] + public string RoomId { get; } + public WeChatWorkGetGroupChatRequest(string roomId) + { + RoomId = roomId; + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkGetPermitUserListRequest.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkGetPermitUserListRequest.cs new file mode 100644 index 000000000..185a4aad0 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Request/WeChatWorkGetPermitUserListRequest.cs @@ -0,0 +1,57 @@ +using JetBrains.Annotations; +using Newtonsoft.Json; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Request; +/// +/// 获取会话内容存档开启成员列表请求参数 +/// +/// +/// 详情见: +/// +public class WeChatWorkGetPermitUserListRequest : WeChatWorkRequest +{ + /// + /// 拉取对应版本的开启成员列表。1表示办公版;2表示服务版;3表示企业版。非必填,不填写的时候返回全量成员列表 + /// + [CanBeNull] + [JsonProperty("cursor")] + [JsonPropertyName("cursor")] + public int? Type { get; } + private WeChatWorkGetPermitUserListRequest(int? type = null) + { + Type = type; + } + /// + /// 默认 + /// + /// + public static WeChatWorkGetPermitUserListRequest Default() + { + return new WeChatWorkGetPermitUserListRequest(); + } + /// + /// 办公版 + /// + /// + public static WeChatWorkGetPermitUserListRequest Office() + { + return new WeChatWorkGetPermitUserListRequest(1); + } + /// + /// 服务版 + /// + /// + public static WeChatWorkGetPermitUserListRequest Service() + { + return new WeChatWorkGetPermitUserListRequest(2); + } + /// + /// 企业版 + /// + /// + public static WeChatWorkGetPermitUserListRequest Enterprise() + { + return new WeChatWorkGetPermitUserListRequest(3); + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkCheckRoomAgreeResponse.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkCheckRoomAgreeResponse.cs new file mode 100644 index 000000000..06057c85a --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkCheckRoomAgreeResponse.cs @@ -0,0 +1,22 @@ +using JetBrains.Annotations; +using LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Models; +using Newtonsoft.Json; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Response; +/// +/// 获取群聊会话同意情况响应参数 +/// +/// +/// 详情见: +/// +public class WeChatWorkCheckRoomAgreeResponse : WeChatWorkResponse +{ + /// + /// 同意情况 + /// + [NotNull] + [JsonProperty("agreeinfo")] + [JsonPropertyName("agreeinfo")] + public RoomAgreeInfo[] AgreeInfo { get; set; } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkCheckSingleAgreeResponse.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkCheckSingleAgreeResponse.cs new file mode 100644 index 000000000..99a3689b5 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkCheckSingleAgreeResponse.cs @@ -0,0 +1,22 @@ +using JetBrains.Annotations; +using LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Models; +using Newtonsoft.Json; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Response; +/// +/// 获取单聊会话同意情况响应参数 +/// +/// +/// 详情见: +/// +public class WeChatWorkCheckSingleAgreeResponse : WeChatWorkResponse +{ + /// + /// 同意情况 + /// + [NotNull] + [JsonProperty("agreeinfo")] + [JsonPropertyName("agreeinfo")] + public UserAgreeInfo[] AgreeInfo { get; set; } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkGetGroupChatResponse.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkGetGroupChatResponse.cs new file mode 100644 index 000000000..f6096b29a --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkGetGroupChatResponse.cs @@ -0,0 +1,50 @@ +using JetBrains.Annotations; +using LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Models; +using Newtonsoft.Json; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Response; +/// +/// 获取会话内容存档内部群信息响应参数 +/// +/// +/// 详情见: +/// +public class WeChatWorkGetGroupChatResponse : WeChatWorkResponse +{ + /// + /// roomid对应的群名称 + /// + [NotNull] + [JsonProperty("roomname")] + [JsonPropertyName("roomname")] + public string RoomName { get; set; } + /// + /// roomid对应的群创建者,userid + /// + [NotNull] + [JsonProperty("creator")] + [JsonPropertyName("creator")] + public string Creator { get; set; } + /// + /// roomid对应的群创建时间 + /// + [NotNull] + [JsonProperty("room_create_time")] + [JsonPropertyName("room_create_time")] + public long RoomCreateTime { get; set; } + /// + /// roomid对应的群公告 + /// + [CanBeNull] + [JsonProperty("notice")] + [JsonPropertyName("notice")] + public string? Notice { get; set; } + /// + /// roomid对应的群成员列表 + /// + [NotNull] + [JsonProperty("members")] + [JsonPropertyName("members")] + public RoomMember[] Members { get; set; } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkGetPermitUserListResponse.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkGetPermitUserListResponse.cs new file mode 100644 index 000000000..a76a1587e --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/Response/WeChatWorkGetPermitUserListResponse.cs @@ -0,0 +1,21 @@ +using JetBrains.Annotations; +using Newtonsoft.Json; +using System.Text.Json.Serialization; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Response; +/// +/// 获取会话内容存档开启成员列表响应参数 +/// +/// +/// 详情见: +/// +public class WeChatWorkGetPermitUserListResponse : WeChatWorkResponse +{ + /// + /// 设置在开启范围内的成员的userid列表 + /// + [NotNull] + [JsonProperty("ids")] + [JsonPropertyName("ids")] + public string[] Ids { get; set; } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/WeChatWorkMsgAuditProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/WeChatWorkMsgAuditProvider.cs new file mode 100644 index 000000000..42bc785a1 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/MsgAudits/WeChatWorkMsgAuditProvider.cs @@ -0,0 +1,76 @@ +using LINGYUN.Abp.WeChat.Work.ExternalContact.Features; +using LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Response; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Token; +using Microsoft.Extensions.DependencyInjection; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Features; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits; + +[RequiresFeature(WeChatWorkExternalContactFeatureNames.Enable)] +public class WeChatWorkMsgAuditProvider : IWeChatWorkMsgAuditProvider, ISingletonDependency +{ + protected IHttpClientFactory HttpClientFactory { get; } + protected IWeChatWorkExternalContactTokenProvider WeChatWorkExternalContactTokenProvider { get; } + + public WeChatWorkMsgAuditProvider( + IHttpClientFactory httpClientFactory, + IWeChatWorkExternalContactTokenProvider weChatWorkExternalContactTokenProvider) + { + HttpClientFactory = httpClientFactory; + WeChatWorkExternalContactTokenProvider = weChatWorkExternalContactTokenProvider; + } + + public async virtual Task GetPermitUserListAsync( + WeChatWorkGetPermitUserListRequest request, + CancellationToken cancellationToken = default) + { + Check.NotNull(request, nameof(request)); + + var token = await WeChatWorkExternalContactTokenProvider.GetTokenAsync(cancellationToken); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); + + return await client.GetPermitUserListAsync(token.AccessToken, request, cancellationToken); + } + + public async virtual Task CheckSingleAgreeAsync( + WeChatWorkCheckSingleAgreeRequest request, + CancellationToken cancellationToken = default) + { + Check.NotNull(request, nameof(request)); + + var token = await WeChatWorkExternalContactTokenProvider.GetTokenAsync(cancellationToken); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); + + return await client.CheckSingleAgreeAsync(token.AccessToken, request, cancellationToken); + } + + public async virtual Task CheckRoomAgreeAsync( + WeChatWorkCheckRoomAgreeRequest request, + CancellationToken cancellationToken = default) + { + Check.NotNull(request, nameof(request)); + + var token = await WeChatWorkExternalContactTokenProvider.GetTokenAsync(cancellationToken); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); + + return await client.CheckRoomAgreeAsync(token.AccessToken, request, cancellationToken); + } + + public async virtual Task GetGroupChatAsync( + WeChatWorkGetGroupChatRequest request, + CancellationToken cancellationToken = default) + { + Check.NotNull(request, nameof(request)); + + var token = await WeChatWorkExternalContactTokenProvider.GetTokenAsync(cancellationToken); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); + + return await client.GetGroupChatAsync(token.AccessToken, request, cancellationToken); + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Settings/WeChatWorkExternalContactSettingDefinitionProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Settings/WeChatWorkExternalContactSettingDefinitionProvider.cs new file mode 100644 index 000000000..14743d89d --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Settings/WeChatWorkExternalContactSettingDefinitionProvider.cs @@ -0,0 +1,30 @@ +using LINGYUN.Abp.WeChat.Work.Localization; +using Volo.Abp.Localization; +using Volo.Abp.Settings; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.Settings; + +public class WeChatWorkExternalContactSettingDefinitionProvider : SettingDefinitionProvider +{ + public override void Define(ISettingDefinitionContext context) + { + context.Add( + new SettingDefinition( + WeChatWorkExternalContactSettingNames.Secret, + displayName: L("DisplayName:WeChatWorkExternalContact.Secret"), + description: L("Description:WeChatWorkExternalContact.Secret"), + isVisibleToClients: false, + isEncrypted: true) + .WithProviders( + DefaultValueSettingValueProvider.ProviderName, + ConfigurationSettingValueProvider.ProviderName, + GlobalSettingValueProvider.ProviderName, + TenantSettingValueProvider.ProviderName) + ); + } + + private static ILocalizableString L(string name) + { + return LocalizableString.Create(name); + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Settings/WeChatWorkExternalContactSettingNames.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Settings/WeChatWorkExternalContactSettingNames.cs new file mode 100644 index 000000000..7bfc2b1d1 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Settings/WeChatWorkExternalContactSettingNames.cs @@ -0,0 +1,12 @@ +using LINGYUN.Abp.WeChat.Work.Settings; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.Settings; + +public static class WeChatWorkExternalContactSettingNames +{ + public const string Prefix = WeChatWorkSettingNames.Prefix + ".ExternalContact"; + /// + /// 客户联系应用Srcret + /// + public const string Secret = Prefix + ".Secret"; +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Tags/WeChatWorkCropTagProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Tags/WeChatWorkCropTagProvider.cs index b73400b14..a68aa755e 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Tags/WeChatWorkCropTagProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Tags/WeChatWorkCropTagProvider.cs @@ -35,11 +35,7 @@ public class WeChatWorkCropTagProvider : IWeChatWorkCropTagProvider, ISingletonD var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetCropTagListAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetCropTagListAsync(token.AccessToken, request, cancellationToken); } public async virtual Task CreateCropTagAsync( @@ -51,11 +47,7 @@ public class WeChatWorkCropTagProvider : IWeChatWorkCropTagProvider, ISingletonD var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.CreateCropTagAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.CreateCropTagAsync(token.AccessToken, request, cancellationToken); } public async virtual Task UpdateCropTagAsync( @@ -67,11 +59,7 @@ public class WeChatWorkCropTagProvider : IWeChatWorkCropTagProvider, ISingletonD var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.UpdateCropTagAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.UpdateCropTagAsync(token.AccessToken, request, cancellationToken); } public async virtual Task DeleteCropTagAsync( @@ -83,11 +71,7 @@ public class WeChatWorkCropTagProvider : IWeChatWorkCropTagProvider, ISingletonD var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.DeleteCropTagAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.DeleteCropTagAsync(token.AccessToken, request, cancellationToken); } public async virtual Task MarkCropTagAsync( @@ -99,10 +83,6 @@ public class WeChatWorkCropTagProvider : IWeChatWorkCropTagProvider, ISingletonD var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.MarkCropTagAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.MarkCropTagAsync(token.AccessToken, request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Tags/WeChatWorkStrategyTagProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Tags/WeChatWorkStrategyTagProvider.cs index 49fe5189e..1e9ade963 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Tags/WeChatWorkStrategyTagProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Tags/WeChatWorkStrategyTagProvider.cs @@ -35,11 +35,7 @@ public class WeChatWorkStrategyTagProvider : IWeChatWorkStrategyTagProvider, ISi var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetStrategyTagListAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetStrategyTagListAsync(token.AccessToken, request, cancellationToken); } public async virtual Task CreateStrategyTagAsync( @@ -51,11 +47,7 @@ public class WeChatWorkStrategyTagProvider : IWeChatWorkStrategyTagProvider, ISi var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.CreateStrategyTagAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.CreateStrategyTagAsync(token.AccessToken, request, cancellationToken); } public async virtual Task UpdateStrategyTagAsync( @@ -67,11 +59,7 @@ public class WeChatWorkStrategyTagProvider : IWeChatWorkStrategyTagProvider, ISi var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.UpdateStrategyTagAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.UpdateStrategyTagAsync(token.AccessToken, request, cancellationToken); } public async virtual Task DeleteStrategyTagAsync( @@ -83,10 +71,6 @@ public class WeChatWorkStrategyTagProvider : IWeChatWorkStrategyTagProvider, ISi var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.DeleteStrategyTagAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.DeleteStrategyTagAsync(token.AccessToken, request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Token/IWeChatWorkExternalContactTokenProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Token/IWeChatWorkExternalContactTokenProvider.cs new file mode 100644 index 000000000..287910bf9 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Token/IWeChatWorkExternalContactTokenProvider.cs @@ -0,0 +1,23 @@ +using LINGYUN.Abp.WeChat.Work.Token.Models; +using System.Threading; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.Token; +/// +/// 客户联系应用Token提供者 +/// +/// +/// 企业微信部分接口需要使用客户联系应用Token +/// +public interface IWeChatWorkExternalContactTokenProvider +{ + /// + /// 获取客户联系应用Token + /// + /// + /// 参考:https://developer.work.weixin.qq.com/document/path/91039 + /// + /// + /// + Task GetTokenAsync(CancellationToken cancellationToken = default); +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Token/WeChatWorkExternalContactTokenProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Token/WeChatWorkExternalContactTokenProvider.cs new file mode 100644 index 000000000..e24f85c01 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Token/WeChatWorkExternalContactTokenProvider.cs @@ -0,0 +1,50 @@ +using LINGYUN.Abp.WeChat.Work.ExternalContact.Features; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Settings; +using LINGYUN.Abp.WeChat.Work.Settings; +using LINGYUN.Abp.WeChat.Work.Token; +using LINGYUN.Abp.WeChat.Work.Token.Models; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Features; +using Volo.Abp.Settings; + +namespace LINGYUN.Abp.WeChat.Work.ExternalContact.Token; + +[RequiresFeature(WeChatWorkExternalContactFeatureNames.Enable)] +public class WeChatWorkExternalContactTokenProvider : WeChatWorkTokenProviderBase, IWeChatWorkExternalContactTokenProvider, ISingletonDependency +{ + protected override string ProviderName => "WeChatWorkExternalContactToken"; + public WeChatWorkExternalContactTokenProvider( + ISettingProvider settingProvider, + IHttpClientFactory httpClientFactory, + IDistributedCache cache) + : base(settingProvider, httpClientFactory, cache) + { + } + + public async virtual Task GetTokenAsync(CancellationToken cancellationToken = default) + { + var corpId = await SettingProvider.GetOrNullAsync(WeChatWorkSettingNames.Connection.CorpId); + var agentId = await SettingProvider.GetOrNullAsync(WeChatWorkSettingNames.Connection.AgentId); + var secret = await SettingProvider.GetOrNullAsync(WeChatWorkExternalContactSettingNames.Secret); + + Check.NotNullOrWhiteSpace(corpId, nameof(corpId)); + Check.NotNullOrWhiteSpace(agentId, nameof(agentId)); + Check.NotNullOrWhiteSpace(secret, nameof(secret)); + + return await GetTokenAsync(corpId, agentId, secret, cancellationToken); + } + + public async virtual Task GetTokenAsync( + string corpId, + string agentId, + string secret, + CancellationToken cancellationToken = default) + { + return (await InternalGetTokenAsync(corpId, agentId, secret, cancellationToken)).Token; + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Transfers/WeChatWorkEmployExtendProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Transfers/WeChatWorkEmployExtendProvider.cs index 63baaeeb1..580033dff 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Transfers/WeChatWorkEmployExtendProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Transfers/WeChatWorkEmployExtendProvider.cs @@ -35,11 +35,7 @@ public class WeChatWorkEmployExtendProvider : IWeChatWorkEmployExtendProvider, I var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.AssignCustomerAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.AssignCustomerAsync(token.AccessToken, request, cancellationToken); } public async virtual Task GetTransferResultAsync( @@ -51,11 +47,7 @@ public class WeChatWorkEmployExtendProvider : IWeChatWorkEmployExtendProvider, I var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetTransferResultAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetTransferResultAsync(token.AccessToken, request, cancellationToken); } public async virtual Task GroupChatOnjobTransferAsync( @@ -67,10 +59,6 @@ public class WeChatWorkEmployExtendProvider : IWeChatWorkEmployExtendProvider, I var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.OnjobTransferAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GroupChatOnjobTransferAsync(token.AccessToken, request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Transfers/WeChatWorkResignExtendProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Transfers/WeChatWorkResignExtendProvider.cs index 3ff4fae55..538cf7989 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Transfers/WeChatWorkResignExtendProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/LINGYUN/Abp/WeChat/Work/ExternalContact/Transfers/WeChatWorkResignExtendProvider.cs @@ -35,11 +35,7 @@ public class WeChatWorkResignExtendProvider : IWeChatWorkResignExtendProvider, I var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetUnassignedListAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetUnassignedListAsync(token.AccessToken, request, cancellationToken); } public async virtual Task ResignedTransferCustomerAsync( @@ -51,11 +47,7 @@ public class WeChatWorkResignExtendProvider : IWeChatWorkResignExtendProvider, I var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.ResignedTransferCustomerAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.ResignedTransferCustomerAsync(token.AccessToken, request, cancellationToken); } public async virtual Task GetResignedTransferResultAsync( @@ -67,11 +59,7 @@ public class WeChatWorkResignExtendProvider : IWeChatWorkResignExtendProvider, I var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetResignedTransferResultAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GetResignedTransferResultAsync(token.AccessToken, request, cancellationToken); } public async virtual Task GroupChatTransferAsync( @@ -83,10 +71,6 @@ public class WeChatWorkResignExtendProvider : IWeChatWorkResignExtendProvider, I var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GroupChatTransferAsync(token.AccessToken, request, cancellationToken); - - var wechatResponse = await response.DeserializeObjectAsync(); - wechatResponse.ThrowIfNotSuccess(); - return wechatResponse; + return await client.GroupChatTransferAsync(token.AccessToken, request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Attachments.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Attachments.cs index 43d71ccc7..509472c1f 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Attachments.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Attachments.cs @@ -1,4 +1,5 @@ using LINGYUN.Abp.WeChat.Work.ExternalContact.Attachments.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Attachments.Response; using LINGYUN.Abp.WeChat.Work.Utils; using System.IO; using System.Text; @@ -8,7 +9,7 @@ using System.Threading.Tasks; namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task UploadAsync( + public async static Task UploadAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkUploadAttachmentRequest request, @@ -21,13 +22,15 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.AppendFormat("&attachment_type={0}", request.AttachmentType); var fileBytes = await request.Content.GetStream().GetAllBytesAsync(); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = WeChatWorkHttpContentBuildHelper.BuildUploadMediaContent("media", fileBytes, request.Content.FileName) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Contacts.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Contacts.cs index fde7c64cf..4b34adb0b 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Contacts.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Contacts.cs @@ -1,4 +1,5 @@ using LINGYUN.Abp.WeChat.Work.ExternalContact.Contacts.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Contacts.Response; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -6,7 +7,7 @@ using System.Threading.Tasks; namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetExternalContactListAsync( + public async static Task GetExternalContactListAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetExternalContactListRequest request, @@ -16,13 +17,15 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/contact_list"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Customers.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Customers.cs index 2a3ce8111..ef1c04f6d 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Customers.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Customers.cs @@ -1,4 +1,6 @@ -using LINGYUN.Abp.WeChat.Work.ExternalContact.Customers.Request; +using LINGYUN.Abp.WeChat.Work; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Customers.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Customers.Response; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -6,7 +8,7 @@ using System.Threading.Tasks; namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetCustomerListAsync( + public async static Task GetCustomerListAsync( this HttpMessageInvoker client, string accessToken, string userId, @@ -17,14 +19,16 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.AppendFormat("?access_token={0}", accessToken); urlBuilder.AppendFormat("&userid={0}", userId); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Get, urlBuilder.ToString()); - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task BulkGetCustomerAsync( + public async static Task BulkGetCustomerAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkBulkGetCustomerRequest request, @@ -34,17 +38,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/batch/get_by_user"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task GetCustomerAsync( + public async static Task GetCustomerAsync( this HttpMessageInvoker client, string accessToken, string externalUserid, @@ -60,14 +66,16 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.AppendFormat("&cursor={0}", cursor); } - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Get, urlBuilder.ToString()); - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task UpdateCustomerRemarkAsync( + public async static Task UpdateCustomerRemarkAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkUpdateCustomerRemarkRequest request, @@ -77,13 +85,15 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/remark"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Follows.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Follows.cs index 868b0e865..4bd7fb7ca 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Follows.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Follows.cs @@ -1,11 +1,12 @@ -using System.Text; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Follows.Response; +using System.Text; using System.Threading; using System.Threading.Tasks; namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetFollowUserListAsync( + public async static Task GetFollowUserListAsync( this HttpMessageInvoker client, string accessToken, CancellationToken cancellationToken = default) @@ -14,10 +15,12 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/get_follow_user_list"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Get, urlBuilder.ToString()); - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.GroupChats.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.GroupChats.cs index c8a2d3e80..5e4353b59 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.GroupChats.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.GroupChats.cs @@ -1,5 +1,5 @@ -using LINGYUN.Abp.WeChat.Work.ExternalContact.Customers.Request; -using LINGYUN.Abp.WeChat.Work.ExternalContact.GroupChats.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.GroupChats.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.GroupChats.Response; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetGroupChatListAsync( + public async static Task GetGroupChatListAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetGroupChatListRequest request, @@ -17,17 +17,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/groupchat/list"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task GetGroupChatAsync( + public async static Task GetGroupChatAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetGroupChatRequest request, @@ -37,17 +39,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/groupchat/get"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task OpengIdToChatIdAsync( + public async static Task OpengIdToChatIdAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkOpengIdToChatIdRequest request, @@ -57,13 +61,15 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/opengid_to_chatid"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.MsgAudits.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.MsgAudits.cs new file mode 100644 index 000000000..3c4911a4c --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.MsgAudits.cs @@ -0,0 +1,97 @@ +using LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.MsgAudits.Response; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace System.Net.Http; +internal static partial class HttpClientWeChatWorkRequestExtensions +{ + public async static Task GetPermitUserListAsync( + this HttpMessageInvoker client, + string accessToken, + WeChatWorkGetPermitUserListRequest request, + CancellationToken cancellationToken = default) + { + var urlBuilder = new StringBuilder(); + urlBuilder.Append("/cgi-bin/msgaudit/get_permit_user_list"); + urlBuilder.AppendFormat("?access_token={0}", accessToken); + + using var httpRequest = new HttpRequestMessage( + HttpMethod.Post, + urlBuilder.ToString()) + { + Content = new StringContent(request.SerializeToJson()) + }; + + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); + } + + public async static Task CheckSingleAgreeAsync( + this HttpMessageInvoker client, + string accessToken, + WeChatWorkCheckSingleAgreeRequest request, + CancellationToken cancellationToken = default) + { + var urlBuilder = new StringBuilder(); + urlBuilder.Append("/cgi-bin/msgaudit/check_single_agree"); + urlBuilder.AppendFormat("?access_token={0}", accessToken); + + var httpRequest = new HttpRequestMessage( + HttpMethod.Post, + urlBuilder.ToString()) + { + Content = new StringContent(request.SerializeToJson()) + }; + + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); + } + + public async static Task CheckRoomAgreeAsync( + this HttpMessageInvoker client, + string accessToken, + WeChatWorkCheckRoomAgreeRequest request, + CancellationToken cancellationToken = default) + { + var urlBuilder = new StringBuilder(); + urlBuilder.Append("/cgi-bin/msgaudit/check_room_agree"); + urlBuilder.AppendFormat("?access_token={0}", accessToken); + + var httpRequest = new HttpRequestMessage( + HttpMethod.Post, + urlBuilder.ToString()) + { + Content = new StringContent(request.SerializeToJson()) + }; + + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); + } + + public async static Task GetGroupChatAsync( + this HttpMessageInvoker client, + string accessToken, + WeChatWorkGetGroupChatRequest request, + CancellationToken cancellationToken = default) + { + var urlBuilder = new StringBuilder(); + urlBuilder.Append("/cgi-bin/msgaudit/groupchat/get"); + urlBuilder.AppendFormat("?access_token={0}", accessToken); + + using var httpRequest = new HttpRequestMessage( + HttpMethod.Post, + urlBuilder.ToString()) + { + Content = new StringContent(request.SerializeToJson()) + }; + + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Strategies.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Strategies.cs index 833baac6b..64aa60527 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Strategies.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Strategies.cs @@ -1,4 +1,6 @@ -using LINGYUN.Abp.WeChat.Work.ExternalContact.Customers.Request; +using LINGYUN.Abp.WeChat.Work; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Customers.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Customers.Response; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -6,7 +8,7 @@ using System.Threading.Tasks; namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetCustomerStrategyListAsync( + public async static Task GetCustomerStrategyListAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetCustomerStrategyListRequest request, @@ -16,17 +18,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/customer_strategy/list"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task GetCustomerStrategyAsync( + public async static Task GetCustomerStrategyAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetCustomerStrategyRequest request, @@ -36,17 +40,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/customer_strategy/get"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task GetCustomerStrategyRangeAsync( + public async static Task GetCustomerStrategyRangeAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetCustomerStrategyRangeRequest request, @@ -56,17 +62,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/customer_strategy/get_range"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task CreateCustomerStrategyAsync( + public async static Task CreateCustomerStrategyAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkCreateCustomerStrategyRequest request, @@ -76,17 +84,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/customer_strategy/create"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task UpdateCustomerStrategyAsync( + public async static Task UpdateCustomerStrategyAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkUpdateCustomerStrategyRequest request, @@ -96,17 +106,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/customer_strategy/edit"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task DeleteCustomerStrategyAsync( + public async static Task DeleteCustomerStrategyAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkDeleteCustomerStrategyRequest request, @@ -116,13 +128,15 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/customer_strategy/del"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Tags.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Tags.cs index 8f6fb24b0..6b3e9969c 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Tags.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Tags.cs @@ -1,4 +1,6 @@ -using LINGYUN.Abp.WeChat.Work.ExternalContact.Tags.Request; +using LINGYUN.Abp.WeChat.Work; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Tags.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Tags.Response; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -6,7 +8,7 @@ using System.Threading.Tasks; namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetCropTagListAsync( + public async static Task GetCropTagListAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetCropTagListRequest request, @@ -16,17 +18,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/get_corp_tag_list"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task CreateCropTagAsync( + public async static Task CreateCropTagAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkCreateCropTagRequest request, @@ -36,17 +40,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/add_corp_tag"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task UpdateCropTagAsync( + public async static Task UpdateCropTagAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkUpdateCropTagRequest request, @@ -56,17 +62,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/edit_corp_tag"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task DeleteCropTagAsync( + public async static Task DeleteCropTagAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkDeleteCropTagRequest request, @@ -76,17 +84,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/del_corp_tag"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task MarkCropTagAsync( + public async static Task MarkCropTagAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkMarkCropTagRequest request, @@ -96,17 +106,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/mark_tag"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task GetStrategyTagListAsync( + public async static Task GetStrategyTagListAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetStrategyTagListRequest request, @@ -116,17 +128,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/get_strategy_tag_list"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task CreateStrategyTagAsync( + public async static Task CreateStrategyTagAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkCreateStrategyTagRequest request, @@ -136,17 +150,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/add_strategy_tag"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task UpdateStrategyTagAsync( + public async static Task UpdateStrategyTagAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkUpdateStrategyTagRequest request, @@ -156,17 +172,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/edit_strategy_tag"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task DeleteStrategyTagAsync( + public async static Task DeleteStrategyTagAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkDeleteStrategyTagRequest request, @@ -176,13 +194,15 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/del_strategy_tag"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Transfers.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Transfers.cs index 3b32435bb..5851d5e36 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Transfers.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Transfers.cs @@ -1,4 +1,5 @@ using LINGYUN.Abp.WeChat.Work.ExternalContact.Transfers.Request; +using LINGYUN.Abp.WeChat.Work.ExternalContact.Transfers.Response; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -6,7 +7,7 @@ using System.Threading.Tasks; namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task AssignCustomerAsync( + public async static Task AssignCustomerAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkTransferCustomerRequest request, @@ -16,17 +17,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/transfer_customer"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task GetTransferResultAsync( + public async static Task GetTransferResultAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetTransferResultRequest request, @@ -36,17 +39,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/transfer_result"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task OnjobTransferAsync( + public async static Task GroupChatOnjobTransferAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGroupChatOnjobTransferRequest request, @@ -56,17 +61,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/groupchat/onjob_transfer"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task GetUnassignedListAsync( + public async static Task GetUnassignedListAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetUnassignedListRequest request, @@ -76,17 +83,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/get_unassigned_list"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task ResignedTransferCustomerAsync( + public async static Task ResignedTransferCustomerAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkResignedTransferCustomerRequest request, @@ -96,17 +105,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/resigned/transfer_customer"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task GetResignedTransferResultAsync( + public async static Task GetResignedTransferResultAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGetResignedTransferResultRequest request, @@ -116,17 +127,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/resigned/transfer_result"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task GroupChatTransferAsync( + public async static Task GroupChatTransferAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkGroupChatTransferRequest request, @@ -136,13 +149,15 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/externalcontact/groupchat/transfer"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()), }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs index 072b15046..5655f30e8 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.ExternalContact/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs @@ -1,5 +1,4 @@ namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkAuthorizeGenerator.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkAuthorizeGenerator.cs index 319b3d2f4..f9b86e5b9 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkAuthorizeGenerator.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkAuthorizeGenerator.cs @@ -1,5 +1,6 @@ using LINGYUN.Abp.WeChat.Work.Features; using LINGYUN.Abp.WeChat.Work.Settings; +using Microsoft.Extensions.DependencyInjection; using System; using System.Net.Http; using System.Text; @@ -38,7 +39,7 @@ public class WeChatWorkAuthorizeGenerator : IWeChatWorkAuthorizeGenerator, ISing Check.NotNullOrEmpty(corpId, nameof(corpId)); Check.NotNullOrEmpty(agentId, nameof(agentId)); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.OAuthClient); + var client = HttpClientFactory.CreateWeChatWorkOAuthClient(); var generatedUrlBuilder = new StringBuilder(); @@ -72,7 +73,7 @@ public class WeChatWorkAuthorizeGenerator : IWeChatWorkAuthorizeGenerator, ISing Check.NotNullOrEmpty(corpId, nameof(corpId)); Check.NotNullOrEmpty(agentId, nameof(agentId)); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.LoginClient); + var client = HttpClientFactory.CreateWeChatWorkLoginClient(); var generatedUrlBuilder = new StringBuilder(); diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkUserFinder.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkUserFinder.cs index cd0eafd78..924b646f3 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkUserFinder.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkUserFinder.cs @@ -3,6 +3,7 @@ using LINGYUN.Abp.WeChat.Work.Authorize.Request; using LINGYUN.Abp.WeChat.Work.Authorize.Response; using LINGYUN.Abp.WeChat.Work.Features; using LINGYUN.Abp.WeChat.Work.Token; +using Microsoft.Extensions.DependencyInjection; using System.Net.Http; using System.Threading; using System.Threading.Tasks; @@ -30,12 +31,11 @@ public class WeChatWorkUserFinder : IWeChatWorkUserFinder, ISingletonDependency CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetUserInfoAsync(token.AccessToken, code, cancellationToken); - var userInfoResponse = await response.DeserializeObjectAsync(); + var wechatWorkResponse = await client.GetUserInfoAsync(token.AccessToken, code, cancellationToken); - return userInfoResponse.ToUserInfo(); + return wechatWorkResponse.ToUserInfo(); } public async virtual Task GetUserDetailAsync( @@ -43,12 +43,11 @@ public class WeChatWorkUserFinder : IWeChatWorkUserFinder, ISingletonDependency CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); var request = new WeChatWorkUserDetailRequest(userTicket); - using var response = await client.GetUserDetailAsync(token.AccessToken, request, cancellationToken); - var userDetailResponse = await response.DeserializeObjectAsync(); + var wechatWorkResponse = await client.GetUserDetailAsync(token.AccessToken, request, cancellationToken); - return userDetailResponse.ToUserDetail(); + return wechatWorkResponse.ToUserDetail(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Chat/WeChatWorkAppChatManager.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Chat/WeChatWorkAppChatManager.cs index 8e970f284..6cc5bf4ce 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Chat/WeChatWorkAppChatManager.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Chat/WeChatWorkAppChatManager.cs @@ -2,6 +2,7 @@ using LINGYUN.Abp.WeChat.Work.Chat.Response; using LINGYUN.Abp.WeChat.Work.Features; using LINGYUN.Abp.WeChat.Work.Token; +using Microsoft.Extensions.DependencyInjection; using System.Net.Http; using System.Threading; using System.Threading.Tasks; @@ -29,10 +30,9 @@ public class WeChatWorkAppChatManager : IWeChatWorkAppChatManager, ISingletonDep CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.CreateAppChatAsync(token.AccessToken, request, cancellationToken); - return await response.DeserializeObjectAsync(); + return await client.CreateAppChatAsync(token.AccessToken, request, cancellationToken); } public async virtual Task GetAsync( @@ -41,10 +41,9 @@ public class WeChatWorkAppChatManager : IWeChatWorkAppChatManager, ISingletonDep CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetAppChatAsync(token.AccessToken, agentId, cancellationToken); - return await response.DeserializeObjectAsync(); + return await client.GetAppChatAsync(token.AccessToken, agentId, cancellationToken); } public async virtual Task UpdateAsync( @@ -52,9 +51,8 @@ public class WeChatWorkAppChatManager : IWeChatWorkAppChatManager, ISingletonDep CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.UpdateAppChatAsync(token.AccessToken, request, cancellationToken); - return await response.DeserializeObjectAsync(); + return await client.UpdateAppChatAsync(token.AccessToken, request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/JsSdk/JsApiTicketProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/JsSdk/JsApiTicketProvider.cs index 934e125e7..f4201e262 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/JsSdk/JsApiTicketProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/JsSdk/JsApiTicketProvider.cs @@ -1,6 +1,7 @@ using LINGYUN.Abp.WeChat.Work.JsSdk.Models; using LINGYUN.Abp.WeChat.Work.Token; using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using System; @@ -79,7 +80,7 @@ public class JsApiTicketProvider : IJsApiTicketProvider, ISingletonDependency Logger.LogDebug($"Not found JsApiTicket in the cache, getting from the httpClient: {cacheKey}"); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); using var response = await client.GetAsync( jsapiTicketUrl, diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Media/WeChatWorkMediaProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Media/WeChatWorkMediaProvider.cs index 6a01a9d4f..0c88543ae 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Media/WeChatWorkMediaProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Media/WeChatWorkMediaProvider.cs @@ -1,5 +1,6 @@ using LINGYUN.Abp.WeChat.Work.Media.Models; using LINGYUN.Abp.WeChat.Work.Token; +using Microsoft.Extensions.DependencyInjection; using System; using System.Linq; using System.Net.Http; @@ -27,7 +28,7 @@ public class WeChatWorkMediaProvider : IWeChatWorkMediaProvider, ISingletonDepen CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); using var response = await client.GetMediaAsync( token.AccessToken, @@ -79,17 +80,13 @@ public class WeChatWorkMediaProvider : IWeChatWorkMediaProvider, ISingletonDepen CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); var request = new WeChatWorkMediaRequest( token.AccessToken, media); - using var response = await client.UploadMediaAsync(type, request, cancellationToken); - var mediaRespose = await response.DeserializeObjectAsync(); - mediaRespose.ThrowIfNotSuccess(); - - return mediaRespose; + return await client.UploadMediaAsync(type, request, cancellationToken); } public async virtual Task UploadImageAsync( @@ -97,15 +94,12 @@ public class WeChatWorkMediaProvider : IWeChatWorkMediaProvider, ISingletonDepen CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); + var request = new WeChatWorkMediaRequest( token.AccessToken, image); - using var response = await client.UploadImageAsync(request, cancellationToken); - var mediaRespose = await response.DeserializeObjectAsync(); - mediaRespose.ThrowIfNotSuccess(); - - return mediaRespose; + return await client.UploadImageAsync(request, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/WeChatWorkMessageManager.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/WeChatWorkMessageManager.cs index 9e2a420fc..4bbd3eb55 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/WeChatWorkMessageManager.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/WeChatWorkMessageManager.cs @@ -1,5 +1,6 @@ using LINGYUN.Abp.WeChat.Work.Messages.Request; using LINGYUN.Abp.WeChat.Work.Token; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using System.Net.Http; @@ -29,14 +30,13 @@ public class WeChatWorkMessageManager : IWeChatWorkMessageManager, ISingletonDep public async virtual Task ReCallMessageAsync(string messageId, CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); var request = new WeChatWorkMessageReCallRequest( token.AccessToken, messageId); - using var response = await client.ReCallMessageAsync(request, cancellationToken); - var messageResponse = await response.DeserializeObjectAsync(); + var messageResponse = await client.ReCallMessageAsync(request, cancellationToken); return messageResponse.IsSuccessed; } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/WeChatWorkMessageSender.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/WeChatWorkMessageSender.cs index f1bf103e1..cf25bb3a6 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/WeChatWorkMessageSender.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Messages/WeChatWorkMessageSender.cs @@ -3,6 +3,7 @@ using LINGYUN.Abp.WeChat.Work.Features; using LINGYUN.Abp.WeChat.Work.Messages.Request; using LINGYUN.Abp.WeChat.Work.Messages.Response; using LINGYUN.Abp.WeChat.Work.Token; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using System.Net.Http; @@ -39,14 +40,13 @@ public class WeChatWorkMessageSender : IWeChatWorkMessageSender, ISingletonDepen public async virtual Task SendAsync(WeChatWorkMessage message, CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); var request = new WeChatWorkMessageRequest( token.AccessToken, message); - using var response = await client.SendMessageAsync(request, cancellationToken); - var messageResponse = await response.DeserializeObjectAsync(); + var messageResponse = await client.SendMessageAsync(request, cancellationToken); if (!messageResponse.IsSuccessed) { @@ -65,14 +65,13 @@ public class WeChatWorkMessageSender : IWeChatWorkMessageSender, ISingletonDepen public async virtual Task SendAsync(WeChatWorkAppChatMessage message, CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); var request = new WeChatWorkMessageRequest( token.AccessToken, message); - using var response = await client.SendMessageAsync(request, cancellationToken); - var messageResponse = await response.DeserializeObjectAsync(); + var messageResponse = await client.SendMessageAsync(request, cancellationToken); if (!messageResponse.IsSuccessed) { @@ -91,10 +90,9 @@ public class WeChatWorkMessageSender : IWeChatWorkMessageSender, ISingletonDepen // 消息发送频率限制: https://developer.work.weixin.qq.com/document/path/99110#%E6%B6%88%E6%81%AF%E5%8F%91%E9%80%81%E9%A2%91%E7%8E%87%E9%99%90%E5%88%B6 public async virtual Task SendAsync(string webhookKey, WeChatWorkWebhookMessage message, CancellationToken cancellationToken = default) { - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.SendMessageAsync(webhookKey, message, cancellationToken); - var messageResponse = await response.DeserializeObjectAsync(); + var messageResponse = await client.SendMessageAsync(webhookKey, message, cancellationToken); if (!messageResponse.IsSuccessed) { diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Security/IWeChatWorkServerProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Security/IWeChatWorkServerProvider.cs index 8f527f4d0..d5848e120 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Security/IWeChatWorkServerProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Security/IWeChatWorkServerProvider.cs @@ -13,5 +13,5 @@ public interface IWeChatWorkServerProvider /// /// /// - Task GetWeChatServerAsync(CancellationToken cancellationToken = default); + Task GetWeChatServerAsync(CancellationToken cancellationToken = default); } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Security/WeChatWorkServerProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Security/WeChatWorkServerProvider.cs index fcca18361..e09b42dd8 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Security/WeChatWorkServerProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Security/WeChatWorkServerProvider.cs @@ -1,5 +1,6 @@ using LINGYUN.Abp.WeChat.Work.Security.Models; using LINGYUN.Abp.WeChat.Work.Token; +using Microsoft.Extensions.DependencyInjection; using System.Net.Http; using System.Threading; using System.Threading.Tasks; @@ -19,14 +20,11 @@ public class WeChatWorkServerProvider : IWeChatWorkServerProvider, ISingletonDep WeChatWorkTokenProvider = weChatWorkTokenProvider; } - public async virtual Task GetWeChatServerAsync(CancellationToken cancellationToken = default) + public async virtual Task GetWeChatServerAsync(CancellationToken cancellationToken = default) { var token = await WeChatWorkTokenProvider.GetTokenAsync(cancellationToken); - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); + var client = HttpClientFactory.CreateWeChatWorkApiClient(); - using var response = await client.GetServerDomainIpAsync(token.AccessToken, cancellationToken); - var serverDomainResponse = await response.DeserializeObjectAsync(); - - return serverDomainResponse.ToServerDomain(); + return await client.GetServerDomainIpAsync(token.AccessToken, cancellationToken); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Token/WeChatWorkTokenProvider.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Token/WeChatWorkTokenProvider.cs index 93f47ad4f..de2aeea5d 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Token/WeChatWorkTokenProvider.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Token/WeChatWorkTokenProvider.cs @@ -1,35 +1,23 @@ using LINGYUN.Abp.WeChat.Work.Settings; using LINGYUN.Abp.WeChat.Work.Token.Models; -using Microsoft.Extensions.Caching.Distributed; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; -using Volo.Abp; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; using Volo.Abp.Settings; namespace LINGYUN.Abp.WeChat.Work.Token; -public class WeChatWorkTokenProvider : IWeChatWorkTokenProvider, ISingletonDependency +public class WeChatWorkTokenProvider : WeChatWorkTokenProviderBase, IWeChatWorkTokenProvider, ISingletonDependency { - public ILogger Logger { get; set; } - protected ISettingProvider SettingProvider { get; } - protected IHttpClientFactory HttpClientFactory { get; } - protected IDistributedCache WeChatWorkTokenCache { get; } + protected override string ProviderName => "WeChatWorkToken"; public WeChatWorkTokenProvider( ISettingProvider settingProvider, IHttpClientFactory httpClientFactory, IDistributedCache cache) + : base(settingProvider, httpClientFactory, cache) { - HttpClientFactory = httpClientFactory; - SettingProvider = settingProvider; - WeChatWorkTokenCache = cache; - - Logger = NullLogger.Instance; } public async virtual Task GetTokenAsync(CancellationToken cancellationToken = default) @@ -47,85 +35,6 @@ public class WeChatWorkTokenProvider : IWeChatWorkTokenProvider, ISingletonDepen string secret, CancellationToken cancellationToken = default) { - return (await GetCacheItemAsync("WeChatWorkToken", corpId, agentId, secret, cancellationToken)).Token; - } - /// - /// 获取缓存中的Token配置 - /// - /// - /// - /// - /// - /// - /// - protected async virtual Task GetCacheItemAsync( - string provider, - string corpId, - string agentId, - string secret, - CancellationToken cancellationToken = default) - { - Check.NotNullOrEmpty(corpId, nameof(corpId)); - Check.NotNullOrEmpty(agentId, nameof(agentId)); - Check.NotNullOrEmpty(secret, nameof(secret)); - - var cacheKey = WeChatWorkTokenCacheItem.CalculateCacheKey(provider, corpId, agentId); - - return await GetCacheItemAsync(cacheKey, provider, corpId, agentId, secret); - } - /// - /// 获取或刷新分布式缓存中的Token配置 - /// - /// - /// - /// - /// - /// - /// - /// - protected async virtual Task GetCacheItemAsync( - string cacheKey, - string provider, - string corpId, - string agentId, - string secret, - CancellationToken cancellationToken = default) - { - var cacheItem = await WeChatWorkTokenCache.GetAsync(cacheKey, token: cancellationToken); - - if (cacheItem != null) - { - Logger.LogDebug($"Found WeChatWorkToken in the cache: {cacheKey}"); - return cacheItem; - } - - Logger.LogDebug($"Not found WeChatWorkToken in the cache, getting from the httpClient: {cacheKey}"); - - var client = HttpClientFactory.CreateClient(AbpWeChatWorkGlobalConsts.ApiClient); - - var request = new WeChatWorkTokenRequest - { - CorpId = corpId, - CorpSecret = secret, - }; - - using var response = await client.GetTokenAsync(request, cancellationToken); - var tokenResponse = await response.DeserializeObjectAsync(); - var token = tokenResponse.ToWeChatWorkToken(); - cacheItem = new WeChatWorkTokenCacheItem(corpId, agentId, token); - - Logger.LogDebug($"Setting the cache item: {cacheKey}"); - - var cacheOptions = new DistributedCacheEntryOptions - { - // 设置绝对过期时间为Token有效期剩余的二分钟 - AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(token.ExpiresIn - 100), - }; - - await WeChatWorkTokenCache.SetAsync(cacheKey, cacheItem, cacheOptions, token: cancellationToken); - - Logger.LogDebug($"Finished setting the cache item: {cacheKey}"); - - return cacheItem; + return (await InternalGetTokenAsync(corpId, agentId, secret, cancellationToken)).Token; } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Token/WeChatWorkTokenProviderBase.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Token/WeChatWorkTokenProviderBase.cs new file mode 100644 index 000000000..f7dc540d8 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/LINGYUN/Abp/WeChat/Work/Token/WeChatWorkTokenProviderBase.cs @@ -0,0 +1,111 @@ +using LINGYUN.Abp.WeChat.Work.Token.Models; +using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Caching; +using Volo.Abp.Settings; + +namespace LINGYUN.Abp.WeChat.Work.Token; +public abstract class WeChatWorkTokenProviderBase +{ + public ILogger Logger { get; set; } + + protected abstract string ProviderName { get; } + protected ISettingProvider SettingProvider { get; } + protected IHttpClientFactory HttpClientFactory { get; } + protected IDistributedCache WeChatWorkTokenCache { get; } + protected WeChatWorkTokenProviderBase( + ISettingProvider settingProvider, + IHttpClientFactory httpClientFactory, + IDistributedCache cache) + { + HttpClientFactory = httpClientFactory; + SettingProvider = settingProvider; + WeChatWorkTokenCache = cache; + + Logger = NullLogger.Instance; + } + + /// + /// 获取缓存中的Token配置 + /// + /// + /// + /// + /// + /// + protected async virtual Task InternalGetTokenAsync( + string corpId, + string agentId, + string secret, + CancellationToken cancellationToken = default) + { + Check.NotNullOrEmpty(corpId, nameof(corpId)); + Check.NotNullOrEmpty(agentId, nameof(agentId)); + Check.NotNullOrEmpty(secret, nameof(secret)); + + var cacheKey = WeChatWorkTokenCacheItem.CalculateCacheKey(ProviderName, corpId, agentId); + + return await GetCacheItemAsync(cacheKey, ProviderName, corpId, agentId, secret, cancellationToken); + } + /// + /// 获取或刷新分布式缓存中的Token配置 + /// + /// + /// + /// + /// + /// + /// + /// + protected async virtual Task GetCacheItemAsync( + string cacheKey, + string provider, + string corpId, + string agentId, + string secret, + CancellationToken cancellationToken = default) + { + var cacheItem = await WeChatWorkTokenCache.GetAsync(cacheKey, token: cancellationToken); + + if (cacheItem != null) + { + Logger.LogDebug($"Found WeChatWorkToken in the cache: {cacheKey}"); + return cacheItem; + } + + Logger.LogDebug($"Not found WeChatWorkToken in the cache, getting from the httpClient: {cacheKey}"); + + var client = HttpClientFactory.CreateWeChatWorkApiClient(); + + var request = new WeChatWorkTokenRequest + { + CorpId = corpId, + CorpSecret = secret, + }; + + var tokenResponse = await client.GetTokenAsync(request, cancellationToken); + var token = tokenResponse.ToWeChatWorkToken(); + cacheItem = new WeChatWorkTokenCacheItem(corpId, agentId, token); + + Logger.LogDebug($"Setting the cache item: {cacheKey}"); + + var cacheOptions = new DistributedCacheEntryOptions + { + // 设置绝对过期时间为Token有效期剩余的二分钟 + AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(token.ExpiresIn - 100), + }; + + await WeChatWorkTokenCache.SetAsync(cacheKey, cacheItem, cacheOptions, token: cancellationToken); + + Logger.LogDebug($"Finished setting the cache item: {cacheKey}"); + + return cacheItem; + } +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Auth.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Auth.cs index 5ffc5cfde..91d10cda0 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Auth.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Auth.cs @@ -1,4 +1,5 @@ using LINGYUN.Abp.WeChat.Work.Authorize.Request; +using LINGYUN.Abp.WeChat.Work.Authorize.Response; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -7,7 +8,7 @@ namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetUserInfoAsync( + public async static Task GetUserInfoAsync( this HttpMessageInvoker client, string accessToken, string code, @@ -18,12 +19,14 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.AppendFormat("?access_token={0}", accessToken); urlBuilder.AppendFormat("&code={0}", code); - var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlBuilder.ToString()); + using var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlBuilder.ToString()); - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task GetUserDetailAsync( + public async static Task GetUserDetailAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkUserDetailRequest request, @@ -33,13 +36,15 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/auth/getuserdetail"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Chat.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Chat.cs index 183a47378..b42b22467 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Chat.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Chat.cs @@ -1,4 +1,6 @@ -using LINGYUN.Abp.WeChat.Work.Chat.Request; +using LINGYUN.Abp.WeChat.Work; +using LINGYUN.Abp.WeChat.Work.Chat.Request; +using LINGYUN.Abp.WeChat.Work.Chat.Response; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -7,7 +9,7 @@ namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetAppChatAsync( + public async static Task GetAppChatAsync( this HttpMessageInvoker client, string accessToken, string chatId, @@ -18,14 +20,16 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.AppendFormat("?access_token={0}", accessToken); urlBuilder.AppendFormat("&chatid={0}", chatId); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Get, urlBuilder.ToString()); - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task CreateAppChatAsync( + public async static Task CreateAppChatAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkAppChatCreateRequest request, @@ -35,17 +39,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/appchat/create"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task UpdateAppChatAsync( + public async static Task UpdateAppChatAsync( this HttpMessageInvoker client, string accessToken, WeChatWorkAppChatUpdateRequest request, @@ -55,13 +61,14 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/appchat/update"); urlBuilder.AppendFormat("?access_token={0}", accessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); - return await client.SendAsync(httpRequest, cancellationToken); + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Media.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Media.cs index 8ab66dcdc..687b7a0af 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Media.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Media.cs @@ -20,12 +20,12 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.AppendFormat("?access_token={0}", accessToken); urlBuilder.AppendFormat("&media_id={0}", mediaId); - var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlBuilder.ToString()); + using var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlBuilder.ToString()); return await client.SendAsync(httpRequest, cancellationToken); } - public async static Task UploadMediaAsync( + public async static Task UploadMediaAsync( this HttpMessageInvoker client, string type, WeChatWorkMediaRequest request, @@ -37,17 +37,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.AppendFormat("&type={0}", type); var fileBytes = await request.Content.GetStream().GetAllBytesAsync(); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = WeChatWorkHttpContentBuildHelper.BuildUploadMediaContent("media", fileBytes, request.Content.FileName) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task UploadImageAsync( + public async static Task UploadImageAsync( this HttpMessageInvoker client, WeChatWorkMediaRequest request, CancellationToken cancellationToken = default) @@ -57,13 +59,15 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.AppendFormat("?access_token={0}", request.AccessToken); var fileBytes = await request.Content.GetStream().GetAllBytesAsync(); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = WeChatWorkHttpContentBuildHelper.BuildUploadMediaContent("file", fileBytes, request.Content.FileName) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Message.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Message.cs index a54c3fa64..ef322665e 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Message.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Message.cs @@ -1,5 +1,7 @@ -using LINGYUN.Abp.WeChat.Work.Messages; +using LINGYUN.Abp.WeChat.Work; +using LINGYUN.Abp.WeChat.Work.Messages; using LINGYUN.Abp.WeChat.Work.Messages.Request; +using LINGYUN.Abp.WeChat.Work.Messages.Response; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -8,7 +10,7 @@ namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task SendMessageAsync( + public async static Task SendMessageAsync( this HttpMessageInvoker client, WeChatWorkMessageRequest request, CancellationToken cancellationToken = default) @@ -17,17 +19,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/message/send"); urlBuilder.AppendFormat("?access_token={0}", request.AccessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.Message.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task SendMessageAsync( + public async static Task SendMessageAsync( this HttpMessageInvoker client, WeChatWorkMessageRequest request, CancellationToken cancellationToken = default) @@ -36,17 +40,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/appchat/send"); urlBuilder.AppendFormat("?access_token={0}", request.AccessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.Message.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task ReCallMessageAsync( + public async static Task ReCallMessageAsync( this HttpMessageInvoker client, WeChatWorkMessageReCallRequest request, CancellationToken cancellationToken = default) @@ -55,17 +61,19 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/message/recall"); urlBuilder.AppendFormat("?access_token={0}", request.AccessToken); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } - public async static Task SendMessageAsync( + public async static Task SendMessageAsync( this HttpMessageInvoker client, string webhookKey, WeChatWorkWebhookMessage request, @@ -75,13 +83,15 @@ internal static partial class HttpClientWeChatWorkRequestExtensions urlBuilder.Append("/cgi-bin/webhook/send"); urlBuilder.AppendFormat("?key={0}", webhookKey); - var httpRequest = new HttpRequestMessage( + using var httpRequest = new HttpRequestMessage( HttpMethod.Post, urlBuilder.ToString()) { Content = new StringContent(request.SerializeToJson()) }; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Security.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Security.cs index 44d84925e..dc04d3606 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Security.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.Security.cs @@ -1,17 +1,20 @@ -using System.Threading; +using LINGYUN.Abp.WeChat.Work.Security.Models; +using System.Threading; using System.Threading.Tasks; namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetServerDomainIpAsync( + public async static Task GetServerDomainIpAsync( this HttpMessageInvoker client, string accessToken, CancellationToken cancellationToken = default) { - var httpRequest = new HttpRequestMessage(HttpMethod.Get, + using var httpRequest = new HttpRequestMessage(HttpMethod.Get, $"/cgi-bin/security/get_server_domain_ip?access_token={accessToken}"); ; - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs index 971f2fe83..b4425e7c1 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work/System/Net/Http/HttpClientWeChatWorkRequestExtensions.cs @@ -7,15 +7,17 @@ namespace System.Net.Http; internal static partial class HttpClientWeChatWorkRequestExtensions { - public async static Task GetTokenAsync(this HttpMessageInvoker client, WeChatWorkTokenRequest request, CancellationToken cancellationToken = default) + public async static Task GetTokenAsync(this HttpMessageInvoker client, WeChatWorkTokenRequest request, CancellationToken cancellationToken = default) { var urlBuilder = new StringBuilder(); urlBuilder.Append("/cgi-bin/gettoken"); urlBuilder.AppendFormat("?corpid={0}", request.CorpId); urlBuilder.AppendFormat("&corpsecret={0}", request.CorpSecret); - var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlBuilder.ToString()); + using var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlBuilder.ToString()); - return await client.SendAsync(httpRequest, cancellationToken); + using var httpResponse = await client.SendAsync(httpRequest, cancellationToken); + + return await httpResponse.DeserializeObjectAsync(); } }