From ac8034ee939cab52a3770186fc33657af9326cd0 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Fri, 11 Mar 2022 20:07:12 +0800 Subject: [PATCH] refactor: clean code --- ...sClientExecuteCustomAudiencesExtensions.cs | 2 +- .../WechatAdsClientExecuteImagesExtensions.cs | 4 ++-- .../Files/CustomAudienceFilesAddRequest.cs | 6 +++-- .../Models/Images/ImagesAddRequest.cs | 6 +++-- .../Utilities/MD5Utility.cs | 12 +++++----- .../WechatApiClientExecuteCVExtensions.cs | 24 +++++++++---------- ...atApiClientExecuteCardInvoiceExtensions.cs | 2 +- ...iClientExecuteCgibinComponentExtensions.cs | 2 +- ...piClientExecuteCgibinMaterialExtensions.cs | 2 +- ...atApiClientExecuteCgibinMediaExtensions.cs | 8 +++---- ...ApiClientExecuteCustomServiceExtensions.cs | 2 +- ...echatApiClientExecuteMerchantExtensions.cs | 2 +- ...WechatApiClientExecuteProductExtensions.cs | 2 +- .../WechatApiClientExecuteShopExtensions.cs | 2 +- .../WechatApiClientExecuteWxaExtensions.cs | 6 ++--- .../CardInvoicePlatformSetPdfRequest.cs | 6 +++-- ...nComponentUploadPrivacyExtraFileRequest.cs | 6 +++-- .../CgibinMaterialAddMaterialRequest.cs | 2 +- .../CgibinMediaUploadImageRequest.cs | 6 +++-- .../CgibinMedia/CgibinMediaUploadRequest.cs | 6 +++-- ...oiceAddVoiceToRecognitionForTextRequest.cs | 6 +++-- ...CgibinMediaVoiceTranslateContentRequest.cs | 6 +++-- ...mServiceKfAccountUploadHeadImageRequest.cs | 6 +++-- .../MerchantCommonUploadImageRequest.cs | 6 +++-- .../Wxa/Search/WxaImageSearchRequest.cs | 6 +++-- .../Security/WxaImageSecurityCheckRequest.cs | 6 +++-- .../Utilities/HMACUtility.cs | 18 +++++++------- .../Utilities/SHA1Utility.cs | 12 +++++----- ...OpenAIPlatformClientExecuteMpExtensions.cs | 2 +- ...AIThirdPartyClientExecuteFileExtensions.cs | 2 +- .../Models/Platform/Mp/AssetsUploadRequest.cs | 5 ++-- .../ThirdParty/File/FileUploadRequest.cs | 6 +++-- .../Utilities/SHA1Utility.cs | 12 +++++----- ...atTenpayClientEventDecryptionExtensions.cs | 2 +- ...payClientExecuteMerchantMediaExtensions.cs | 5 ++-- .../UploadMerchantMediaRequest.cs | 6 +++-- .../Utilities/HMACUtility.cs | 18 +++++++------- .../Utilities/Internal/ReflectionUtility.cs | 2 +- .../Utilities/Internal/XmlUtility.cs | 4 ++-- .../Utilities/MD5Utility.cs | 12 +++++----- ...payClientExecuteMarketingBankExtensions.cs | 5 ++-- ...ayClientExecuteMarketingMediaExtensions.cs | 5 ++-- ...payClientExecuteMerchantMediaExtensions.cs | 10 ++++---- ...yClientExecuteMerchantServiceExtensions.cs | 5 ++-- ...UploadMarketingBankPackagesTasksRequest.cs | 6 +++-- .../UploadMarketingMediaImageRequest.cs | 6 +++-- .../UploadMerchantMediaImageRequest.cs | 6 +++-- .../UploadMerchantMediaVideoRequest.cs | 6 +++-- .../UploadMerchantServiceImageRequest.cs | 6 +++-- .../Utilities/SHA256Utility.cs | 12 +++++----- ...tWorkClientExecuteCgibinMediaExtensions.cs | 6 ++--- ...orkClientExecuteCgibinServiceExtensions.cs | 2 +- .../CgibinMediaUploadAttachmentRequest.cs | 6 +++-- .../CgibinMediaUploadImageRequest.cs | 6 +++-- .../CgibinMedia/CgibinMediaUploadRequest.cs | 6 +++-- .../Utilities/SHA1Utility.cs | 12 +++++----- .../TestCase_WechatEventDataCryptorTests.cs | 4 ++-- ...> TestCase_WechatEventDataCryptorTests.cs} | 2 +- 58 files changed, 206 insertions(+), 155 deletions(-) rename test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/{TestCase_WechatEventDataCryptorUtilityTests.cs => TestCase_WechatEventDataCryptorTests.cs} (98%) diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCustomAudiencesExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCustomAudiencesExtensions.cs index 683993fa..6986cb39 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCustomAudiencesExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteCustomAudiencesExtensions.cs @@ -91,7 +91,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); string filename = "file.zip"; - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(new StringContent(request.CustomAudienceId.ToString()), "audience_id"); httpContent.Add(new StringContent(request.UserIdType), "user_id_type"); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs index 349bface..2dbe9942 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs @@ -35,11 +35,11 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads if (request.FileHash == null) { - request.FileHash = Utilities.MD5Utility.Hash(request.FileBytes ?? new byte[0]); + request.FileHash = BitConverter.ToString(Utilities.MD5Utility.Hash(request.FileBytes ?? Array.Empty())).Replace("-", ""); } string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"file\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesAddRequest.cs index cb2eab28..e25b9eba 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesAddRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/CustomAudiences/Files/CustomAudienceFilesAddRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models { /// /// 表示 [POST] /custom_audience_files/add 接口的请求。 @@ -31,6 +33,6 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesAddRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesAddRequest.cs index 45d3a025..2d45d7b1 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesAddRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Models/Images/ImagesAddRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Ads.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.Models { /// /// 表示 [POST] /images/add 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置图片文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs index bcc31109..3832a2e1 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs @@ -13,14 +13,13 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.Utilities /// 获取 MD5 信息摘要。 /// /// 信息字节数组。 - /// 信息摘要。 - public static string Hash(byte[] bytes) + /// 信息摘要字节数组。 + public static byte[] Hash(byte[] bytes) { if (bytes == null) throw new ArgumentNullException(nameof(bytes)); using MD5 md5 = MD5.Create(); - byte[] hashBytes = md5.ComputeHash(bytes); - return BitConverter.ToString(hashBytes).Replace("-", ""); + return md5.ComputeHash(bytes); } /// @@ -32,8 +31,9 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.Utilities { if (message == null) throw new ArgumentNullException(nameof(message)); - byte[] bytes = Encoding.UTF8.GetBytes(message); - return Hash(bytes); + byte[] msgBytes = Encoding.UTF8.GetBytes(message); + byte[] hashBytes = Hash(msgBytes); + return BitConverter.ToString(hashBytes).Replace("-", ""); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCVExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCVExtensions.cs index 060a8c4c..509e38f7 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCVExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCVExtensions.cs @@ -18,10 +18,10 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (fileBytes != null && fileBytes.Any()) { - var fileContent = new ByteArrayContent(fileBytes); + var fileContent = new ByteArrayContent(fileBytes ?? Array.Empty()); httpContent.Add(fileContent, "\"img\"", "\"image.png\""); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png"); - fileContent.Headers.ContentLength = fileBytes.Length; + fileContent.Headers.ContentLength = fileBytes?.Length; } httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); @@ -51,7 +51,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.ImageUrl != null) flurlReq.SetQueryParam("img_url", request.ImageUrl); - using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? new byte[0]); + using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? Array.Empty()); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } @@ -76,7 +76,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.ImageUrl != null) flurlReq.SetQueryParam("img_url", request.ImageUrl); - using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? new byte[0]); + using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? Array.Empty()); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } @@ -101,7 +101,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.ImageUrl != null) flurlReq.SetQueryParam("img_url", request.ImageUrl); - using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? new byte[0]); + using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? Array.Empty()); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } #endregion @@ -129,7 +129,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.ImageUrl != null) flurlReq.SetQueryParam("img_url", request.ImageUrl); - using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? new byte[0]); + using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? Array.Empty()); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } @@ -155,7 +155,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.ImageUrl != null) flurlReq.SetQueryParam("img_url", request.ImageUrl); - using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? new byte[0]); + using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? Array.Empty()); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } @@ -181,7 +181,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.ImageUrl != null) flurlReq.SetQueryParam("img_url", request.ImageUrl); - using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? new byte[0]); + using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? Array.Empty()); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } @@ -207,7 +207,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.ImageUrl != null) flurlReq.SetQueryParam("img_url", request.ImageUrl); - using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? new byte[0]); + using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? Array.Empty()); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } @@ -233,7 +233,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.ImageUrl != null) flurlReq.SetQueryParam("img_url", request.ImageUrl); - using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? new byte[0]); + using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? Array.Empty()); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } @@ -258,7 +258,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.ImageUrl != null) flurlReq.SetQueryParam("img_url", request.ImageUrl); - using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? new byte[0]); + using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? Array.Empty()); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } @@ -282,7 +282,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.ImageUrl != null) flurlReq.SetQueryParam("img_url", request.ImageUrl); - using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? new byte[0]); + using var httpContent = CreateRequestHttpContent(request.ImageFileBytes ?? Array.Empty()); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } #endregion diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCardInvoiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCardInvoiceExtensions.cs index bc626ab1..534cbbdb 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCardInvoiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCardInvoiceExtensions.cs @@ -356,7 +356,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); using var httpContent = new MultipartFormDataContent(boundary); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); httpContent.Add(fileContent, "\"pdf\"", "\"invoice.pdf\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/pdf"); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinComponentExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinComponentExtensions.cs index fa869d0f..d69fd504 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinComponentExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinComponentExtensions.cs @@ -388,7 +388,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api .SetQueryParam("access_token", request.AccessToken); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"file\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMaterialExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMaterialExtensions.cs index a49333b1..d3d67ad9 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMaterialExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMaterialExtensions.cs @@ -85,7 +85,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api .SetQueryParam("type", request.Type); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var descContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.JsonSerializer.Serialize(request))); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"media\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMediaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMediaExtensions.cs index cf494e12..1f565cc1 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMediaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMediaExtensions.cs @@ -63,7 +63,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api .SetQueryParam("type", request.Type); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"media\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); @@ -122,7 +122,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api .SetQueryParam("access_token", request.AccessToken); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"media\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); @@ -193,7 +193,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api .SetQueryParam("voice_id", request.VoiceId) .SetQueryParam("lang", request.Language); - using var httpContent = new ByteArrayContent(request.VoiceBytes); + using var httpContent = new ByteArrayContent(request.VoiceBytes ?? Array.Empty()); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("audio/mp3"); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); @@ -240,7 +240,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api .SetQueryParam("lfrom", request.FromLanguage) .SetQueryParam("lto", request.ToLanguage); - using var httpContent = new ByteArrayContent(request.VoiceBytes); + using var httpContent = new ByteArrayContent(request.VoiceBytes ?? Array.Empty()); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("audio/mp3"); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCustomServiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCustomServiceExtensions.cs index 3dff7aee..25a3cbb7 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCustomServiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCustomServiceExtensions.cs @@ -94,7 +94,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api .SetQueryParam("kf_account", request.KfAccount); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.HeadImageFileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.HeadImageFileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"media\"", "\"image.jpg\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteMerchantExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteMerchantExtensions.cs index d4874686..b0bf7a17 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteMerchantExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteMerchantExtensions.cs @@ -663,7 +663,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api .CreateRequest(request, HttpMethod.Post, "merchant", "common", "upload_img") .SetQueryParam("access_token", request.AccessToken); - using var httpContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var httpContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png"); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteProductExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteProductExtensions.cs index 179844c9..64759410 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteProductExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteProductExtensions.cs @@ -43,7 +43,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); using var httpContent = new MultipartFormDataContent(boundary); - using var fileContent = new ByteArrayContent(request.ImageFileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.ImageFileBytes ?? Array.Empty()); httpContent.Add(fileContent, "\"media\"", "\"image.png\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png"); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteShopExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteShopExtensions.cs index 3575b644..3bec766d 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteShopExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteShopExtensions.cs @@ -41,7 +41,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); using var httpContent = new MultipartFormDataContent(boundary); - using var fileContent = new ByteArrayContent(request.ImageFileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.ImageFileBytes ?? Array.Empty()); httpContent.Add(fileContent, "\"media\"", "\"image.png\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png"); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs index d85cb0b0..cb17cc31 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteWxaExtensions.cs @@ -391,7 +391,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api .SetQueryParam("access_token", request.AccessToken); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"media\"", "\"image.png\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); @@ -784,11 +784,11 @@ namespace SKIT.FlurlHttpClient.Wechat.Api string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); using var httpContent = new MultipartFormDataContent(boundary); - using var fileContent = new ByteArrayContent(request.ImageFileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.ImageFileBytes ?? Array.Empty()); httpContent.Add(fileContent, "\"img\"", "\"image.png\""); + httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png"); fileContent.Headers.ContentLength = request.ImageFileBytes?.Length; - httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CardInvoice/Platform/CardInvoicePlatformSetPdfRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CardInvoice/Platform/CardInvoicePlatformSetPdfRequest.cs index 0bb7ca28..6fe6df6f 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CardInvoice/Platform/CardInvoicePlatformSetPdfRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CardInvoice/Platform/CardInvoicePlatformSetPdfRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /card/invoice/platform/setpdf 接口的请求。 @@ -10,6 +12,6 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinComponent/CgibinComponentUploadPrivacyExtraFileRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinComponent/CgibinComponentUploadPrivacyExtraFileRequest.cs index 5659dfbe..aa6236b6 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinComponent/CgibinComponentUploadPrivacyExtraFileRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinComponent/CgibinComponentUploadPrivacyExtraFileRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /cgi-bin/component/uploadprivacyextfile 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置图片文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMaterial/CgibinMaterialAddMaterialRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMaterial/CgibinMaterialAddMaterialRequest.cs index 85429f2f..a7064db9 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMaterial/CgibinMaterialAddMaterialRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMaterial/CgibinMaterialAddMaterialRequest.cs @@ -20,7 +20,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/CgibinMediaUploadImageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/CgibinMediaUploadImageRequest.cs index 80db2206..8018a672 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/CgibinMediaUploadImageRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/CgibinMediaUploadImageRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /cgi-bin/media/uploadimg 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置图片文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/CgibinMediaUploadRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/CgibinMediaUploadRequest.cs index fb36ff91..f8f24a2a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/CgibinMediaUploadRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/CgibinMediaUploadRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /cgi-bin/media/upload 接口的请求。 @@ -17,7 +19,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/Voice/CgibinMediaVoiceAddVoiceToRecognitionForTextRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/Voice/CgibinMediaVoiceAddVoiceToRecognitionForTextRequest.cs index d20de030..2b2b6199 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/Voice/CgibinMediaVoiceAddVoiceToRecognitionForTextRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/Voice/CgibinMediaVoiceAddVoiceToRecognitionForTextRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /cgi-bin/media/voice/addvoicetorecofortext 接口的请求。 @@ -25,7 +27,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] VoiceBytes { get; set; } = new byte[0]; + public byte[] VoiceBytes { get; set; } = Array.Empty(); /// /// 获取或设置语言。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/Voice/CgibinMediaVoiceTranslateContentRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/Voice/CgibinMediaVoiceTranslateContentRequest.cs index 68592be4..083d3bff 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/Voice/CgibinMediaVoiceTranslateContentRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CgibinMedia/Voice/CgibinMediaVoiceTranslateContentRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /cgi-bin/media/voice/translatecontent 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] VoiceBytes { get; set; } = new byte[0]; + public byte[] VoiceBytes { get; set; } = Array.Empty(); /// /// 获取或设置源语言。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/KfAccount/CustomServiceKfAccountUploadHeadImageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/KfAccount/CustomServiceKfAccountUploadHeadImageRequest.cs index b994569d..e6a3ccac 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/KfAccount/CustomServiceKfAccountUploadHeadImageRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/CustomService/KfAccount/CustomServiceKfAccountUploadHeadImageRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /customservice/kfaccount/uploadheadimg 接口的请求。 @@ -17,6 +19,6 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] HeadImageFileBytes { get; set; } = new byte[0]; + public byte[] HeadImageFileBytes { get; set; } = Array.Empty(); } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Merchant/Common/MerchantCommonUploadImageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Merchant/Common/MerchantCommonUploadImageRequest.cs index 66fb370b..9d93fee9 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Merchant/Common/MerchantCommonUploadImageRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Merchant/Common/MerchantCommonUploadImageRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /merchant/common/upload_img 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置图片文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Search/WxaImageSearchRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Search/WxaImageSearchRequest.cs index 63d7f081..03611c75 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Search/WxaImageSearchRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Search/WxaImageSearchRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /wxa/imagesearch 接口的请求。 @@ -10,6 +12,6 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] ImageFileBytes { get; set; } = new byte[0]; + public byte[] ImageFileBytes { get; set; } = Array.Empty(); } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Security/WxaImageSecurityCheckRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Security/WxaImageSecurityCheckRequest.cs index 3f7171c5..bf491496 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Security/WxaImageSecurityCheckRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/Wxa/Security/WxaImageSecurityCheckRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Api.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models { /// /// 表示 [POST] /wxa/img_sec_check 接口的请求。 @@ -10,6 +12,6 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/HMACUtility.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/HMACUtility.cs index cde3e838..cc5bf3d8 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/HMACUtility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/HMACUtility.cs @@ -13,16 +13,15 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities /// 获取 HMAC-SHA-256 消息认证码。 /// /// 密钥字节数组。 - /// 信息字节数组。 - /// 信息摘要。 - public static string HashWithSHA256(byte[] secretBytes, byte[] bytes) + /// 信息字节数组。 + /// 消息认证码字节数组。 + public static byte[] HashWithSHA256(byte[] secretBytes, byte[] msgBytes) { if (secretBytes == null) throw new ArgumentNullException(nameof(secretBytes)); - if (bytes == null) throw new ArgumentNullException(nameof(bytes)); + if (msgBytes == null) throw new ArgumentNullException(nameof(msgBytes)); using HMAC hmac = new HMACSHA256(secretBytes); - byte[] hashBytes = hmac.ComputeHash(bytes); - return BitConverter.ToString(hashBytes).Replace("-", ""); + return hmac.ComputeHash(msgBytes); } /// @@ -30,15 +29,16 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities /// /// 密钥。 /// 文本信息。 - /// 信息摘要。 + /// 消息认证码。 public static string HashWithSHA256(string secret, string message) { if (secret == null) throw new ArgumentNullException(nameof(secret)); if (message == null) throw new ArgumentNullException(nameof(message)); byte[] secretBytes = Encoding.UTF8.GetBytes(secret); - byte[] bytes = Encoding.UTF8.GetBytes(message); - return HashWithSHA256(secretBytes, bytes); + byte[] msgBytes = Encoding.UTF8.GetBytes(message); + byte[] hashBytes = HashWithSHA256(secretBytes, msgBytes); + return BitConverter.ToString(hashBytes).Replace("-", ""); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/SHA1Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/SHA1Utility.cs index 32204c84..1d64c088 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/SHA1Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/SHA1Utility.cs @@ -13,14 +13,13 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities /// 获取 SHA-1 信息摘要。 /// /// 信息字节数组。 - /// 信息摘要。 - public static string Hash(byte[] bytes) + /// 信息摘要字节数组。 + public static byte[] Hash(byte[] bytes) { if (bytes == null) throw new ArgumentNullException(nameof(bytes)); using SHA1 sha = SHA1.Create(); - byte[] hashBytes = sha.ComputeHash(bytes); - return BitConverter.ToString(hashBytes).Replace("-", ""); + return sha.ComputeHash(bytes); } /// @@ -32,8 +31,9 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities { if (message == null) throw new ArgumentNullException(nameof(message)); - byte[] bytes = Encoding.UTF8.GetBytes(message); - return Hash(bytes); + byte[] msgBytes = Encoding.UTF8.GetBytes(message); + byte[] hashBytes = Hash(msgBytes); + return BitConverter.ToString(hashBytes).Replace("-", ""); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/Platform/WechatOpenAIPlatformClientExecuteMpExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/Platform/WechatOpenAIPlatformClientExecuteMpExtensions.cs index 7e4c29c1..6050e6e2 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/Platform/WechatOpenAIPlatformClientExecuteMpExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/Platform/WechatOpenAIPlatformClientExecuteMpExtensions.cs @@ -110,7 +110,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "assetsupload", client.Credentials.Token!); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var paramContent = new StringContent( Utilities.WxBizMsgCryptor.AESEncrypt( plainText: Utilities.XmlUtility.Serialize(request), diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/ThirdParty/WechatOpenAIThirdPartyClientExecuteFileExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/ThirdParty/WechatOpenAIThirdPartyClientExecuteFileExtensions.cs index 6ec51dd6..c095b047 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/ThirdParty/WechatOpenAIThirdPartyClientExecuteFileExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Extensions/ThirdParty/WechatOpenAIThirdPartyClientExecuteFileExtensions.cs @@ -32,7 +32,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "v1", "file", "upload"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(); httpContent.Add(fileContent, "\"file\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(request.FileContentType); diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Platform/Mp/AssetsUploadRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Platform/Mp/AssetsUploadRequest.cs index fc4d105c..66eae56e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Platform/Mp/AssetsUploadRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/Platform/Mp/AssetsUploadRequest.cs @@ -1,4 +1,5 @@ -using System.Xml.Serialization; +using System; +using System.Xml.Serialization; namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models.Platform { @@ -18,7 +19,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models.Platform /// 获取或设置文件字节数组。 /// [XmlIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/ThirdParty/File/FileUploadRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/ThirdParty/File/FileUploadRequest.cs index f05033d3..44d57ca1 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/ThirdParty/File/FileUploadRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Models/ThirdParty/File/FileUploadRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models.ThirdParty +using System; + +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Models.ThirdParty { /// /// 表示 [POST] /v1/file/upload 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/SHA1Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/SHA1Utility.cs index 7e15e01b..3d18f3fc 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/SHA1Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/SHA1Utility.cs @@ -13,14 +13,13 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities /// 获取 SHA-1 信息摘要。 /// /// 信息字节数组。 - /// 信息摘要。 - public static string Hash(byte[] bytes) + /// 信息摘要字节数组。 + public static byte[] Hash(byte[] bytes) { if (bytes == null) throw new ArgumentNullException(nameof(bytes)); using SHA1 sha = SHA1.Create(); - byte[] hashBytes = sha.ComputeHash(bytes); - return BitConverter.ToString(hashBytes).Replace("-", ""); + return sha.ComputeHash(bytes); } /// @@ -32,8 +31,9 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities { if (message == null) throw new ArgumentNullException(nameof(message)); - byte[] bytes = Encoding.UTF8.GetBytes(message); - return Hash(bytes); + byte[] msgBytes = Encoding.UTF8.GetBytes(message); + byte[] hashBytes = Hash(msgBytes); + return BitConverter.ToString(hashBytes).Replace("-", ""); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientEventDecryptionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientEventDecryptionExtensions.cs index 39e6a8e2..f9673473 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientEventDecryptionExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientEventDecryptionExtensions.cs @@ -43,7 +43,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2 { string plainXml = Utilities.AESUtility.DecryptWithECB( encodingKey: Convert.ToBase64String(Encoding.UTF8.GetBytes(key)), - encodingCipherText: callback.EncryptedRequestInfo + encodingCipherText: callback.EncryptedRequestInfo! ); plainJson = Utilities.XmlUtility.ConvertToJson(plainXml); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs index 7cceea6a..d5ff79c8 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs @@ -29,14 +29,14 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".jpg"; if (request.FileHash == null) - request.FileHash = Utilities.MD5Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = BitConverter.ToString(Utilities.MD5Utility.Hash(request.FileBytes ?? Array.Empty())).Replace("-", "").ToLower(); IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "secapi", "mch", "uploadmedia"); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); string sign = Utilities.RequestSigner.Sign(new Dictionary() { { "mch_id", client.Credentials.MerchantId }, { "media_hash", request.FileHash } }, client.Credentials.MerchantSecret, Constants.SignTypes.MD5); - using var fileContent = new ByteArrayContent(request.FileBytes); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"media\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); httpContent.Add(new StringContent(client.Credentials.MerchantId, Encoding.UTF8), $"\"mch_id\""); @@ -44,6 +44,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2 httpContent.Add(new StringContent(sign, Encoding.UTF8), $"\"sign\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg"); + fileContent.Headers.ContentLength = request.FileBytes?.Length; return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Models/MerchantMedia/UploadMerchantMediaRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Models/MerchantMedia/UploadMerchantMediaRequest.cs index 8b411896..3ea4636e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Models/MerchantMedia/UploadMerchantMediaRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Models/MerchantMedia/UploadMerchantMediaRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Models { /// /// 表示 [POST] /secapi/mch/uploadmedia 接口的请求。 @@ -24,7 +26,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置任务上传文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/HMACUtility.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/HMACUtility.cs index 67925664..8cb62fc5 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/HMACUtility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/HMACUtility.cs @@ -13,16 +13,15 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities /// 获取 HMAC-SHA-256 消息认证码。 /// /// 密钥字节数组。 - /// 信息字节数组。 - /// 信息摘要。 - public static string HashWithSHA256(byte[] secretBytes, byte[] bytes) + /// 信息字节数组。 + /// 消息认证码字节数组。 + public static byte[] HashWithSHA256(byte[] secretBytes, byte[] msgBytes) { if (secretBytes == null) throw new ArgumentNullException(nameof(secretBytes)); - if (bytes == null) throw new ArgumentNullException(nameof(bytes)); + if (msgBytes == null) throw new ArgumentNullException(nameof(msgBytes)); using HMAC hmac = new HMACSHA256(secretBytes); - byte[] hashBytes = hmac.ComputeHash(bytes); - return BitConverter.ToString(hashBytes).Replace("-", ""); + return hmac.ComputeHash(msgBytes); } /// @@ -30,15 +29,16 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities /// /// 密钥。 /// 文本信息。 - /// 信息摘要。 + /// 消息认证码。 public static string HashWithSHA256(string secret, string message) { if (secret == null) throw new ArgumentNullException(nameof(secret)); if (message == null) throw new ArgumentNullException(nameof(message)); byte[] secretBytes = Encoding.UTF8.GetBytes(secret); - byte[] bytes = Encoding.UTF8.GetBytes(message); - return HashWithSHA256(secretBytes, bytes); + byte[] msgBytes = Encoding.UTF8.GetBytes(message); + byte[] hashBytes = HashWithSHA256(secretBytes, msgBytes); + return BitConverter.ToString(hashBytes).Replace("-", ""); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/Internal/ReflectionUtility.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/Internal/ReflectionUtility.cs index 9d7af9ce..d7bb29bf 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/Internal/ReflectionUtility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/Internal/ReflectionUtility.cs @@ -47,7 +47,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities } } - element = updateFactory(element); + element = updateFactory(element!); array.SetValue(element, index); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/Internal/XmlUtility.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/Internal/XmlUtility.cs index d22b9eb7..d8eb608a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/Internal/XmlUtility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/Internal/XmlUtility.cs @@ -10,7 +10,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities { public static string ConvertFromJson(string json) { - XmlDocument xmlDocument = JsonConvert.DeserializeXmlNode(json, "xml"); + XmlDocument xmlDocument = JsonConvert.DeserializeXmlNode(json, "xml")!; string xml = xmlDocument.InnerXml; return xml; } @@ -25,7 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities xCData.Remove(); } - JObject jObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXNode(xElement)); + JObject jObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXNode(xElement))!; string json = (jObject.First as JProperty)?.Value?.ToString(Newtonsoft.Json.Formatting.None) ?? "{}"; return json; } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/MD5Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/MD5Utility.cs index 05d33513..d1cfad43 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/MD5Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Utilities/MD5Utility.cs @@ -13,14 +13,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities /// 获取 MD5 信息摘要。 /// /// 信息字节数组。 - /// 信息摘要。 - public static string Hash(byte[] bytes) + /// 信息摘要字节数组。 + public static byte[] Hash(byte[] bytes) { if (bytes == null) throw new ArgumentNullException(nameof(bytes)); using MD5 md5 = MD5.Create(); - byte[] hashBytes = md5.ComputeHash(bytes); - return BitConverter.ToString(hashBytes).Replace("-", ""); + return md5.ComputeHash(bytes); } /// @@ -32,8 +31,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.Utilities { if (message == null) throw new ArgumentNullException(nameof(message)); - byte[] bytes = Encoding.UTF8.GetBytes(message); - return Hash(bytes); + byte[] msgBytes = Encoding.UTF8.GetBytes(message); + byte[] hashBytes = Hash(msgBytes); + return BitConverter.ToString(hashBytes).Replace("-", ""); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBankExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBankExtensions.cs index 791960f9..a80b0ea5 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBankExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBankExtensions.cs @@ -32,7 +32,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".txt"; if (request.FileHash == null) - request.FileHash = Utilities.SHA256Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = BitConverter.ToString(Utilities.SHA256Utility.Hash(request.FileBytes ?? Array.Empty())).Replace("-", "").ToLower(); if (request.FileContentType == null) request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForImage(request.FileName!) ?? "text/plain"; @@ -41,7 +41,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 .CreateRequest(request, HttpMethod.Post, "marketing", "bank", "packages", request.PackageId, "tasks"); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var metaContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.JsonSerializer.Serialize(request))); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(metaContent, $"\"{Constants.FormDataFields.FORMDATA_META}\""); @@ -49,6 +49,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); metaContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(request.FileContentType); + fileContent.Headers.ContentLength = request.FileBytes?.Length; return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs index 593b1d3f..aa444922 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs @@ -32,7 +32,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".png"; if (request.FileHash == null) - request.FileHash = Utilities.SHA256Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = BitConverter.ToString(Utilities.SHA256Utility.Hash(request.FileBytes)).Replace("-", "").ToLower(); if (request.FileContentType == null) request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForImage(request.FileName!) ?? "image/png"; @@ -41,7 +41,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 .CreateRequest(request, HttpMethod.Post, "marketing", "favor", "media", "image-upload"); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var metaContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.JsonSerializer.Serialize(request))); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(metaContent, $"\"{Constants.FormDataFields.FORMDATA_META}\""); @@ -49,6 +49,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); metaContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(request.FileContentType); + fileContent.Headers.ContentLength = request.FileBytes?.Length; return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs index 02d4ab12..e2283b03 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs @@ -33,7 +33,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".png"; if (request.FileHash == null) - request.FileHash = Utilities.SHA256Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = BitConverter.ToString(Utilities.SHA256Utility.Hash(request.FileBytes)).Replace("-", "").ToLower(); if (request.FileContentType == null) request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForImage(request.FileName!) ?? "image/png"; @@ -42,7 +42,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 .CreateRequest(request, HttpMethod.Post, "merchant", "media", "upload"); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var metaContent = new StringContent(client.JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(metaContent, $"\"{Constants.FormDataFields.FORMDATA_META}\""); @@ -50,6 +50,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); metaContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(request.FileContentType); + fileContent.Headers.ContentLength = request.FileBytes?.Length; return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } @@ -72,7 +73,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".mp4"; if (request.FileHash == null) - request.FileHash = Utilities.SHA256Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = BitConverter.ToString(Utilities.SHA256Utility.Hash(request.FileBytes)).Replace("-", "").ToLower(); if (request.FileContentType == null) request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForVideo(request.FileName!) ?? "video/mp4"; @@ -81,7 +82,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 .CreateRequest(request, HttpMethod.Post, "merchant", "media", "video_upload"); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var metaContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.JsonSerializer.Serialize(request))); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(metaContent, $"\"{Constants.FormDataFields.FORMDATA_META}\""); @@ -89,6 +90,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); metaContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(request.FileContentType); + fileContent.Headers.ContentLength = request.FileBytes?.Length; return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs index 583c5290..dd5a000a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs @@ -236,7 +236,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".png"; if (request.FileHash == null) - request.FileHash = Utilities.SHA256Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = BitConverter.ToString(Utilities.SHA256Utility.Hash(request.FileBytes)).Replace("-", "").ToLower(); if (request.FileContentType == null) request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForImage(request.FileName!) ?? "image/png"; @@ -245,7 +245,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 .CreateRequest(request, HttpMethod.Post, "merchant-service", "images", "upload"); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var metaContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.JsonSerializer.Serialize(request))); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(metaContent, $"\"{Constants.FormDataFields.FORMDATA_META}\""); @@ -253,6 +253,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); metaContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(request.FileContentType); + fileContent.Headers.ContentLength = request.FileBytes?.Length; return await client.SendRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBank/UploadMarketingBankPackagesTasksRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBank/UploadMarketingBankPackagesTasksRequest.cs index 8262b867..81aca13b 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBank/UploadMarketingBankPackagesTasksRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBank/UploadMarketingBankPackagesTasksRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models { /// /// 表示 [POST] /marketing/bank/packages/{package_id}/tasks 接口的请求。 @@ -17,7 +19,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置任务上传文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMedia/UploadMarketingMediaImageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMedia/UploadMarketingMediaImageRequest.cs index ce6ff3df..1834e483 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMedia/UploadMarketingMediaImageRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingMedia/UploadMarketingMediaImageRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models { /// /// 表示 [POST] /marketing/favor/media/image-upload 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置图片文件名(必须以 jpg、bmp、png 为后缀)。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantMedia/UploadMerchantMediaImageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantMedia/UploadMerchantMediaImageRequest.cs index 08947f77..c91f71df 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantMedia/UploadMerchantMediaImageRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantMedia/UploadMerchantMediaImageRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models { /// /// 表示 [POST] /merchant/media/upload 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置图片文件名(必须以 jpg、bmp、png 为后缀)。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantMedia/UploadMerchantMediaVideoRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantMedia/UploadMerchantMediaVideoRequest.cs index d63042e2..35531f2a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantMedia/UploadMerchantMediaVideoRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantMedia/UploadMerchantMediaVideoRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models { /// /// 表示 [POST] /merchant/media/video_upload 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置视频文件名(必须以 avi、wmv、mpeg、mp4、mov、mkv、flv、f4v、m4v、rmvb 为后缀)。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantService/UploadMerchantServiceImageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantService/UploadMerchantServiceImageRequest.cs index 50854b0a..3405b33c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantService/UploadMerchantServiceImageRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MerchantService/UploadMerchantServiceImageRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models { /// /// 表示 [POST] /merchant-service/images/upload 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置图片文件名(必须以 jpg、bmp、png 为后缀)。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Utilities/SHA256Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Utilities/SHA256Utility.cs index d8d8c0b9..776fc607 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Utilities/SHA256Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Utilities/SHA256Utility.cs @@ -13,14 +13,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Utilities /// 获取 SHA-256 信息摘要。 /// /// 信息字节数组。 - /// 信息摘要。 - public static string Hash(byte[] bytes) + /// 信息摘要字节数组。 + public static byte[] Hash(byte[] bytes) { if (bytes == null) throw new ArgumentNullException(nameof(bytes)); using SHA256 sha = SHA256.Create(); - byte[] hashBytes = sha.ComputeHash(bytes); - return BitConverter.ToString(hashBytes).Replace("-", ""); + return sha.ComputeHash(bytes); } /// @@ -32,8 +31,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Utilities { if (message == null) throw new ArgumentNullException(nameof(message)); - byte[] bytes = Encoding.UTF8.GetBytes(message); - return Hash(bytes); + byte[] msgBytes = Encoding.UTF8.GetBytes(message); + byte[] hashBytes = Hash(msgBytes); + return BitConverter.ToString(hashBytes).Replace("-", ""); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMediaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMediaExtensions.cs index 0f7dc594..7054b1b8 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMediaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinMediaExtensions.cs @@ -61,7 +61,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work .SetQueryParam("type", request.Type); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"media\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); @@ -97,7 +97,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work .SetQueryParam("access_token", request.AccessToken); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"media\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); @@ -157,7 +157,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work .SetQueryParam("attachment_type", request.AttachmentType); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"media\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs index c6217dc1..c4553b88 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinServiceExtensions.cs @@ -317,7 +317,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work .SetQueryParam("type", request.Type); string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); - using var fileContent = new ByteArrayContent(request.FileBytes ?? new byte[0]); + using var fileContent = new ByteArrayContent(request.FileBytes ?? Array.Empty()); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(fileContent, "\"media\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data; boundary=" + boundary); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadAttachmentRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadAttachmentRequest.cs index dfc9061e..4b15385d 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadAttachmentRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadAttachmentRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Work.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models { /// /// 表示 [POST] /cgi-bin/media/upload_attachment 接口的请求。 @@ -24,7 +26,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadImageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadImageRequest.cs index 1b5c58f8..91374778 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadImageRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadImageRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Work.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models { /// /// 表示 [POST] /cgi-bin/media/uploadimg 接口的请求。 @@ -10,7 +12,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置图片文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadRequest.cs index 86fe3fff..42338c21 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinMedia/CgibinMediaUploadRequest.cs @@ -1,4 +1,6 @@ -namespace SKIT.FlurlHttpClient.Wechat.Work.Models +using System; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models { /// /// 表示 [POST] /cgi-bin/media/upload 接口的请求。 @@ -17,7 +19,7 @@ /// [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] - public byte[] FileBytes { get; set; } = new byte[0]; + public byte[] FileBytes { get; set; } = Array.Empty(); /// /// 获取或设置文件名。如果不指定将由系统自动生成。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/SHA1Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/SHA1Utility.cs index 13c9996b..e98c7e7d 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/SHA1Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/SHA1Utility.cs @@ -13,14 +13,13 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities /// 获取 SHA-1 信息摘要。 /// /// 信息字节数组。 - /// 信息摘要。 - public static string Hash(byte[] bytes) + /// 信息摘要字节数组。 + public static byte[] Hash(byte[] bytes) { if (bytes == null) throw new ArgumentNullException(nameof(bytes)); using SHA1 sha = SHA1.Create(); - byte[] hashBytes = sha.ComputeHash(bytes); - return BitConverter.ToString(hashBytes).Replace("-", ""); + return sha.ComputeHash(bytes); } /// @@ -32,8 +31,9 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities { if (message == null) throw new ArgumentNullException(nameof(message)); - byte[] bytes = Encoding.UTF8.GetBytes(message); - return Hash(bytes); + byte[] msgBytes = Encoding.UTF8.GetBytes(message); + byte[] hashBytes = Hash(msgBytes); + return BitConverter.ToString(hashBytes).Replace("-", ""); } } } diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/TestCase_WechatEventDataCryptorTests.cs b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/TestCase_WechatEventDataCryptorTests.cs index 27e489b2..f023d253 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/TestCase_WechatEventDataCryptorTests.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/TestCase_WechatEventDataCryptorTests.cs @@ -4,7 +4,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.UnitTests { public class TestCase_WechatEventDataCryptorTests { - [Fact(DisplayName = "试用例:验签并解密回调数据")] + [Fact(DisplayName = "测试用例:验签并解密回调数据")] public void TestVerifyAndDecryptEvent() { string token = "QDG6eK"; @@ -23,7 +23,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.UnitTests Assert.True(Utilities.WechatEventDataCryptor.VerifySignature(token, reqTimeStamp, reqNonce, reqCipherText, reqMsgSig)); } - [Fact(DisplayName = "试用例:验签回调数据")] + [Fact(DisplayName = "测试用例:验签回调数据")] public void TestVerifyEvent() { string token = "ovAkP0Tb"; diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/TestCase_WechatEventDataCryptorUtilityTests.cs b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/TestCase_WechatEventDataCryptorTests.cs similarity index 98% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/TestCase_WechatEventDataCryptorUtilityTests.cs rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/TestCase_WechatEventDataCryptorTests.cs index ebd795d1..06ac8881 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/TestCase_WechatEventDataCryptorUtilityTests.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/TestCase_WechatEventDataCryptorTests.cs @@ -2,7 +2,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.UnitTests { - public class TestCase_WechatEventDataCryptorUtilityTests + public class TestCase_WechatEventDataCryptorTests { [Fact(DisplayName = "测试用例:回调信息解析")] public void TestWxBizMsgCryptorParsing()