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