diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md
index c0060390..43322e58 100644
--- a/docs/WechatTenpayV3/Basic_ModelDefinition.md
+++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md
@@ -485,7 +485,7 @@
- 获取用户填写的抬头:`GetNewTaxControlFapiaoUserTitle`
- - 区块链电子发票 API
+ - 区块链电子发票
- 获取商户开票基础信息:`GetNewTaxControlFapiaoMerchantBaseInformation`
@@ -1271,6 +1271,10 @@
- 开具电子发票:`CreateNewTaxControlFapiaoApplication`
+ - 开具通用行业电子发票:`CreateNewTaxControlFapiaoApplicationIssueGeneral`
+
+ - 开具不动产租赁行业电子发票:`CreateNewTaxControlFapiaoApplicationRealEstateLeasing`
+
- 上传电子发票文件:`UploadNewTaxControlFapiaoApplicationFapiaoFile`
- 查询电子发票:`GetNewTaxControlFapiaoApplicationByFapiaoApplyId`
@@ -1283,6 +1287,12 @@
- 下载发票文件:`DownloadNewTaxControlFapiaoApplicationFile`
+ - 电子发票服务商邀请
+
+ - 获取邀请商户开通服务商电子发票能力:`GetNewTaxControlFapiaoMerchantServicePartnerInviteUrl`
+
+ - 获取邀请开通的商户信息:`QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchants`
+
- 电子发票商户信息
- 获取商户开票基础信息:`GetNewTaxControlFapiaoMerchantBaseInformation`
@@ -1293,7 +1303,7 @@
- 获取商品和服务税收分类对照表:`QueryNewTaxControlFapiaoMerchantTaxCodes`
- - 检查子商户开票功能状态:`CheckNewTaxControlFapiaoMerchant`
+ - 检查子商户开票功能状态:`CheckNewTaxControlFapiaoMerchant` / `CheckNewTaxControlFapiaoMerchantStatus`
- 用户抬头
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantOperationManageExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantOperationManageExtensions.cs
index cf7b6882..b081a86e 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantOperationManageExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantOperationManageExtensions.cs
@@ -75,8 +75,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
if (request.FileName is null)
request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".png";
- if (request.FileDigest is null)
- request.FileDigest = EncodedString.ToHexString(Utilities.SHA256Utility.Hash(request.FileBytes)).Value!.ToUpper();
+ if (request.FileHash is null)
+ request.FileHash = EncodedString.ToHexString(Utilities.SHA256Utility.Hash(request.FileBytes)).Value!.ToUpper();
if (request.FileContentType is null)
request.FileContentType = MimeTypes.GetMimeMapping(request.FileName!);
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteNewTaxControlFapiaoExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteNewTaxControlFapiaoExtensions.cs
index af09bd82..91b83b89 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteNewTaxControlFapiaoExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteNewTaxControlFapiaoExtensions.cs
@@ -6,6 +6,8 @@ using Flurl.Http;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
{
+ using SKIT.FlurlHttpClient.Primitives;
+
public static class WechatTenpayClientExecuteNewTaxControlFapiaoExtensions
{
#region CardTemplate
@@ -14,7 +16,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
///
/// REF:
///
- ///
+ ///
+ ///
///
///
///
@@ -33,6 +36,309 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
}
#endregion
+ #region FapiaoApplications
+ ///
+ /// 异步调用 [POST] /new-tax-control-fapiao/fapiao-applications 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateNewTaxControlFapiaoApplicationAsync(this WechatTenpayClient client, Models.CreateNewTaxControlFapiaoApplicationRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "fapiao-applications");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/issue-general 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateNewTaxControlFapiaoApplicationIssueGeneralAsync(this WechatTenpayClient client, Models.CreateNewTaxControlFapiaoApplicationIssueGeneralRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "fapiao-applications", "issue-general");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/real-estate-leasing 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateNewTaxControlFapiaoApplicationRealEstateLeasingAsync(this WechatTenpayClient client, Models.CreateNewTaxControlFapiaoApplicationRealEstateLeasingRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "fapiao-applications", "real-estate-leasing");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/reverse 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteReverseNewTaxControlFapiaoApplicationAsync(this WechatTenpayClient client, Models.ReverseNewTaxControlFapiaoApplicationRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "fapiao-applications", request.FapiaoApplyId, "reverse");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetNewTaxControlFapiaoApplicationByFapiaoApplyIdAsync(this WechatTenpayClient client, Models.GetNewTaxControlFapiaoApplicationByFapiaoApplyIdRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Get, "new-tax-control-fapiao", "fapiao-applications", request.FapiaoApplyId)
+ .SetQueryParam("sub_mchid", request.SubMerchantId)
+ .SetQueryParam("fapiao_id", request.FapiaoId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/fapiao-files 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetNewTaxControlFapiaoApplicationFilesAsync(this WechatTenpayClient client, Models.GetNewTaxControlFapiaoApplicationFilesRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Get, "new-tax-control-fapiao", "fapiao-applications", request.FapiaoApplyId, "fapiao-files")
+ .SetQueryParam("sub_mchid", request.SubMerchantId)
+ .SetQueryParam("fapiao_id", request.FapiaoId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /{download_url} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ /// (请注意此接口不受构造 时指定的 参数控制。)
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteDownloadNewTaxControlFapiaoApplicationFileAsync(this WechatTenpayClient client, Models.DownloadNewTaxControlFapiaoApplicationFileRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ if (request.MerchantId is null)
+ request.MerchantId = client.Credentials.MerchantId;
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Get, request.DownloadUrl)
+ .WithUrl(request.DownloadUrl)
+ .SetQueryParam("mchid", request.MerchantId)
+ .SetQueryParam("sub_mchid", request.SubMerchantId)
+ .SetQueryParam("openid", request.OpenId)
+ .SetQueryParam("fapiao_id", request.FapiaoId)
+ .SetQueryParam("invoice_code", request.FapiaoCode)
+ .SetQueryParam("invoice_no", request.FapiaoNumber);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/upload-fapiao-file 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUploadNewTaxControlFapiaoApplicationFapiaoFileAsync(this WechatTenpayClient client, Models.UploadNewTaxControlFapiaoApplicationFapiaoFileRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ if (request.FileHashAlgorithm is null)
+ {
+ request.FileHashAlgorithm = "SM3";
+ }
+
+ if (request.FileHash is null)
+ {
+ switch (request.FileHashAlgorithm)
+ {
+ case "SM3":
+ request.FileHash = EncodedString.ToHexString(Utilities.SM3Utility.Hash(request.FileBytes)).Value!.ToLower();
+ break;
+ }
+ }
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "fapiao-applications", "upload-fapiao-file");
+
+ using var httpContent = Utilities.HttpContentBuilder.BuildWithFile(fileName: "file.pdf", fileBytes: request.FileBytes, fileContentType: "application/pdf", fileMetaJson: client.JsonSerializer.Serialize(request));
+ return await client.SendFlurlRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/insert-cards 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateNewTaxControlFapiaoApplicationCardAsync(this WechatTenpayClient client, Models.CreateNewTaxControlFapiaoApplicationCardRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "fapiao-applications", request.FapiaoApplyId, "insert-cards");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
+ #region FapiaoMerchant
+ ///
+ /// 异步调用 [GET] /new-tax-control-fapiao/fapiaomerchant/getspinviteurl 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetNewTaxControlFapiaoMerchantServicePartnerInviteUrlAsync(this WechatTenpayClient client, Models.GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Get, "new-tax-control-fapiao", "fapiaomerchant", "getspinviteurl")
+ .SetQueryParam("operation_type", request.OperationType)
+ .SetQueryParam("operate_user", request.OperateUser)
+ .SetQueryParam("fapiao_mode", request.FapiaoMode)
+ .SetQueryParam("fapiao_ability_type_list", request.FapiaoAbilityTypeList is not null ? string.Join(",", request.FapiaoAbilityTypeList) : null)
+ .SetQueryParam("invite_channel", request.InviteChannel)
+ .SetQueryParam("invite_code", request.InviteCode)
+ .SetQueryParam("sub_mchid", request.SubMerchantId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /new-tax-control-fapiao/fapiaomerchant/listspinvitemchinfo 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteQueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsAsync(this WechatTenpayClient client, Models.QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Get, "new-tax-control-fapiao", "fapiaomerchant", "getspinviteurl")
+ .SetQueryParam("query_time_start", request.QueryStartTime.HasValue ? request.QueryStartTime.Value.ToString("yyyy-MM-dd'T'HH:mm:sszzz") : null)
+ .SetQueryParam("query_time_end", request.QueryEndTime.HasValue ? request.QueryEndTime.Value.ToString("yyyy-MM-dd'T'HH:mm:sszzz") : null)
+ .SetQueryParam("invite_code", request.InviteCode)
+ .SetQueryParam("mch_invite_status", request.InviteCode)
+ .SetQueryParam("offset", request.Offset)
+ .SetQueryParam("limit", request.Limit);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
#region Merchant
///
/// 异步调用 [POST] /new-tax-control-fapiao/merchant/{sub_mchid}/check 接口。
@@ -56,6 +362,28 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
+ ///
+ /// 异步调用 [POST] /new-tax-control-fapiao/merchant/{sub_mchid}/check-status 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCheckNewTaxControlFapiaoMerchantStatusAsync(this WechatTenpayClient client, Models.CheckNewTaxControlFapiaoMerchantStatusRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "merchant", request.SubMerchantId, "check-status");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
///
/// 异步调用 [PATCH] /new-tax-control-fapiao/merchant/development-config 接口。
///
@@ -108,7 +436,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
///
/// REF:
///
- ///
+ ///
+ ///
///
///
///
@@ -160,7 +489,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
///
/// REF:
///
- ///
+ ///
+ ///
///
///
///
@@ -194,7 +524,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
///
/// REF:
///
- ///
+ ///
+ ///
///
///
///
@@ -215,184 +546,5 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
-
- #region FapiaoApplication
- ///
- /// 异步调用 [POST] /new-tax-control-fapiao/fapiao-applications 接口。
- ///
- /// REF:
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public static async Task ExecuteCreateNewTaxControlFapiaoApplicationAsync(this WechatTenpayClient client, Models.CreateNewTaxControlFapiaoApplicationRequest request, CancellationToken cancellationToken = default)
- {
- if (client is null) throw new ArgumentNullException(nameof(client));
- if (request is null) throw new ArgumentNullException(nameof(request));
-
- IFlurlRequest flurlReq = client
- .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "fapiao-applications");
-
- return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
- }
-
- ///
- /// 异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/reverse 接口。
- ///
- /// REF:
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public static async Task ExecuteReverseNewTaxControlFapiaoApplicationAsync(this WechatTenpayClient client, Models.ReverseNewTaxControlFapiaoApplicationRequest request, CancellationToken cancellationToken = default)
- {
- if (client is null) throw new ArgumentNullException(nameof(client));
- if (request is null) throw new ArgumentNullException(nameof(request));
-
- IFlurlRequest flurlReq = client
- .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "fapiao-applications", request.FapiaoApplyId, "reverse");
-
- return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
- }
-
- ///
- /// 异步调用 [GET] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id} 接口。
- ///
- /// REF:
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public static async Task ExecuteGetNewTaxControlFapiaoApplicationByFapiaoApplyIdAsync(this WechatTenpayClient client, Models.GetNewTaxControlFapiaoApplicationByFapiaoApplyIdRequest request, CancellationToken cancellationToken = default)
- {
- if (client is null) throw new ArgumentNullException(nameof(client));
- if (request is null) throw new ArgumentNullException(nameof(request));
-
- IFlurlRequest flurlReq = client
- .CreateFlurlRequest(request, HttpMethod.Get, "new-tax-control-fapiao", "fapiao-applications", request.FapiaoApplyId)
- .SetQueryParam("sub_mchid", request.SubMerchantId)
- .SetQueryParam("fapiao_id", request.FapiaoId);
-
- return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
- }
-
- ///
- /// 异步调用 [GET] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/fapiao-files 接口。
- ///
- /// REF:
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public static async Task ExecuteGetNewTaxControlFapiaoApplicationFilesAsync(this WechatTenpayClient client, Models.GetNewTaxControlFapiaoApplicationFilesRequest request, CancellationToken cancellationToken = default)
- {
- if (client is null) throw new ArgumentNullException(nameof(client));
- if (request is null) throw new ArgumentNullException(nameof(request));
-
- IFlurlRequest flurlReq = client
- .CreateFlurlRequest(request, HttpMethod.Get, "new-tax-control-fapiao", "fapiao-applications", request.FapiaoApplyId, "fapiao-files")
- .SetQueryParam("sub_mchid", request.SubMerchantId)
- .SetQueryParam("fapiao_id", request.FapiaoId);
-
- return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
- }
-
- ///
- /// 异步调用 [GET] /{download_url} 接口。
- ///
- /// REF:
- ///
- ///
- ///
- /// (请注意此接口不受构造 时指定的 参数控制。)
- ///
- ///
- ///
- ///
- ///
- public static async Task ExecuteDownloadNewTaxControlFapiaoApplicationFileAsync(this WechatTenpayClient client, Models.DownloadNewTaxControlFapiaoApplicationFileRequest request, CancellationToken cancellationToken = default)
- {
- if (client is null) throw new ArgumentNullException(nameof(client));
- if (request is null) throw new ArgumentNullException(nameof(request));
-
- if (request.MerchantId is null)
- request.MerchantId = client.Credentials.MerchantId;
-
- IFlurlRequest flurlReq = client
- .CreateFlurlRequest(request, HttpMethod.Get, request.DownloadUrl)
- .WithUrl(request.DownloadUrl)
- .SetQueryParam("mchid", request.MerchantId)
- .SetQueryParam("sub_mchid", request.SubMerchantId)
- .SetQueryParam("openid", request.OpenId)
- .SetQueryParam("fapiao_id", request.FapiaoId)
- .SetQueryParam("invoice_code", request.FapiaoCode)
- .SetQueryParam("invoice_no", request.FapiaoNumber);
-
- return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
- }
-
- ///
- /// 异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/upload-fapiao-file 接口。
- ///
- /// REF:
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public static async Task ExecuteUploadNewTaxControlFapiaoApplicationFapiaoFileAsync(this WechatTenpayClient client, Models.UploadNewTaxControlFapiaoApplicationFapiaoFileRequest request, CancellationToken cancellationToken = default)
- {
- if (client is null) throw new ArgumentNullException(nameof(client));
- if (request is null) throw new ArgumentNullException(nameof(request));
-
- IFlurlRequest flurlReq = client
- .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "fapiao-applications", "upload-fapiao-file");
-
- using var httpContent = Utilities.HttpContentBuilder.BuildWithFile(fileName: "file.pdf", fileBytes: request.FileBytes, fileContentType: "application/pdf", fileMetaJson: client.JsonSerializer.Serialize(request));
- return await client.SendFlurlRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken).ConfigureAwait(false);
- }
-
- ///
- /// 异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/insert-cards 接口。
- ///
- /// REF:
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public static async Task ExecuteCreateNewTaxControlFapiaoApplicationCardAsync(this WechatTenpayClient client, Models.CreateNewTaxControlFapiaoApplicationCardRequest request, CancellationToken cancellationToken = default)
- {
- if (client is null) throw new ArgumentNullException(nameof(client));
- if (request is null) throw new ArgumentNullException(nameof(request));
-
- IFlurlRequest flurlReq = client
- .CreateFlurlRequest(request, HttpMethod.Post, "new-tax-control-fapiao", "fapiao-applications", request.FapiaoApplyId, "insert-cards");
-
- return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
- }
- #endregion
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteTaxiInvoiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteTaxiInvoiceExtensions.cs
index efc96018..7d9852ca 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteTaxiInvoiceExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteTaxiInvoiceExtensions.cs
@@ -6,6 +6,8 @@ using Flurl.Http;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
{
+ using SKIT.FlurlHttpClient.Primitives;
+
public static class WechatTenpayClientExecuteTaxiInvoiceExtensions
{
#region TaxiCompany
@@ -219,6 +221,21 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
+ if (request.FileHashAlgorithm is null)
+ {
+ request.FileHashAlgorithm = "SM3";
+ }
+
+ if (request.FileHash is null)
+ {
+ switch (request.FileHashAlgorithm)
+ {
+ case "SM3":
+ request.FileHash = EncodedString.ToHexString(Utilities.SM3Utility.Hash(request.FileBytes)).Value!.ToLower();
+ break;
+ }
+ }
+
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "taxi-invoice", "cards", "upload-file");
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationIssueGeneralRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationIssueGeneralRequest.cs
new file mode 100644
index 00000000..843ed0db
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationIssueGeneralRequest.cs
@@ -0,0 +1,163 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /new-tax-control-fapiao/fapiao-applications/issue-general 接口的请求。
+ ///
+ [WechatTenpaySensitive]
+ public class CreateNewTaxControlFapiaoApplicationIssueGeneralRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class Buyer : CreateNewTaxControlFapiaoApplicationRequest.Types.Buyer
+ {
+ }
+
+ public class FapiaoInfo
+ {
+ public static class Types
+ {
+ public class Item : CreateNewTaxControlFapiaoApplicationRequest.Types.Fapiao.Types.Item
+ {
+ ///
+ /// 获取或设置优惠政策标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("preferential_policy_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("preferential_policy_code")]
+ public int? PreferentialPolicyCode { get; set; }
+ }
+
+ public class Transaction
+ {
+ ///
+ /// 获取或设置支付渠道。
+ ///
+ [Newtonsoft.Json.JsonProperty("pay_channel")]
+ [System.Text.Json.Serialization.JsonPropertyName("pay_channel")]
+ public string PayChannel { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信支付交易单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
+ public string? TransactionId { get; set; }
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string? OutTradeNumber { get; set; }
+
+ ///
+ /// 获取或设置交易金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public int Amount { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商户发票单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_id")]
+ public string FapiaoId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置总价税合计(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_amount")]
+ public int TotalAmount { get; set; }
+
+ ///
+ /// 获取或设置发票行列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("items")]
+ [System.Text.Json.Serialization.JsonPropertyName("items")]
+ public IList? ItemList { get; set; }
+
+ ///
+ /// 获取或设置交易信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_information")]
+ public IList? TransactionList { get; set; }
+
+ ///
+ /// 获取或设置出口业务适用政策代码。
+ ///
+ [Newtonsoft.Json.JsonProperty("export_business_policy_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("export_business_policy_code")]
+ public int? ExportBusinessPolicyCode { get; set; }
+
+ ///
+ /// 获取或设置增值税即征即退代码。
+ ///
+ [Newtonsoft.Json.JsonProperty("vat_refund_levy_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("vat_refund_levy_code")]
+ public int? VATRefundLevyCode { get; set; }
+
+ ///
+ /// 获取或设置开票人 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("billing_person_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("billing_person_id")]
+ public string BillingPersonId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置开票人姓名。
+ ///
+ [Newtonsoft.Json.JsonProperty("billing_person")]
+ [System.Text.Json.Serialization.JsonPropertyName("billing_person")]
+ public string? BillingPersonName { get; set; }
+
+ ///
+ /// 获取或设置开具发票类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_bill_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_bill_type")]
+ public string? FapiaoBillType { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置备注信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("remark")]
+ [System.Text.Json.Serialization.JsonPropertyName("remark")]
+ public string? Remark { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string? SubMerchantId { get; set; }
+
+ ///
+ /// 获取或设置发票申请单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_apply_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_apply_id")]
+ public string FapiaoApplyId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置购买方信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("buyer_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("buyer_information")]
+ public Types.Buyer Buyer { get; set; } = new Types.Buyer();
+
+ ///
+ /// 获取或设置电子发票信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_information")]
+ public Types.FapiaoInfo FapiaoInfo { get; set; } = new Types.FapiaoInfo();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationIssueGeneralResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationIssueGeneralResponse.cs
new file mode 100644
index 00000000..df706510
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationIssueGeneralResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /new-tax-control-fapiao/fapiao-applications/issue-general 接口的响应。
+ ///
+ public class CreateNewTaxControlFapiaoApplicationIssueGeneralResponse : WechatTenpayResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRealEstateLeasingRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRealEstateLeasingRequest.cs
new file mode 100644
index 00000000..65124c0c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRealEstateLeasingRequest.cs
@@ -0,0 +1,205 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /new-tax-control-fapiao/fapiao-applications/real-estate-leasing 接口的请求。
+ ///
+ [WechatTenpaySensitive]
+ public class CreateNewTaxControlFapiaoApplicationRealEstateLeasingRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class Buyer : CreateNewTaxControlFapiaoApplicationIssueGeneralRequest.Types.Buyer
+ {
+ }
+
+ public class FapiaoInfo
+ {
+ public static class Types
+ {
+ public class Item : CreateNewTaxControlFapiaoApplicationIssueGeneralRequest.Types.FapiaoInfo.Types.Item
+ {
+ public static class Types
+ {
+ public class RealEstateLeasingInformation
+ {
+ ///
+ /// 获取或设置省份。
+ ///
+ [Newtonsoft.Json.JsonProperty("province")]
+ [System.Text.Json.Serialization.JsonPropertyName("province")]
+ public string? Province { get; set; }
+
+ ///
+ /// 获取或设置城市。
+ ///
+ [Newtonsoft.Json.JsonProperty("city")]
+ [System.Text.Json.Serialization.JsonPropertyName("city")]
+ public string? City { get; set; }
+
+ ///
+ /// 获取或设置详细地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("address")]
+ [System.Text.Json.Serialization.JsonPropertyName("address")]
+ public string Address { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置是否跨市。
+ ///
+ [Newtonsoft.Json.JsonProperty("cross_city_flag")]
+ [System.Text.Json.Serialization.JsonPropertyName("cross_city_flag")]
+ public bool IsCrossCity { get; set; }
+
+ ///
+ /// 获取或设置租赁起始日期。
+ ///
+ [Newtonsoft.Json.JsonProperty("lease_period_start")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("lease_period_start")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset LeasePeriodStartDate { get; set; }
+
+ ///
+ /// 获取或设置租赁截止日期。
+ ///
+ [Newtonsoft.Json.JsonProperty("lease_period_end")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("lease_period_end")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset LeasePeriodEndDate { get; set; }
+
+ ///
+ /// 获取或设置产权证或不动产权证号(需使用平台公钥/证书加密)。
+ ///
+ [Newtonsoft.Json.JsonProperty("certificate_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("certificate_no")]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ public string? CertificateNumber { get; set; }
+
+ ///
+ /// 获取或设置车牌号列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("plate_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("plate_no")]
+ public IList? PlateNumberList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置不动产租赁特定行业额外信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("real_estate_leasing_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("real_estate_leasing_information")]
+ public Types.RealEstateLeasingInformation? RealEstateLeasingInformation { get; set; }
+ }
+
+ public class Transaction : CreateNewTaxControlFapiaoApplicationIssueGeneralRequest.Types.FapiaoInfo.Types.Transaction
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商户发票单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_id")]
+ public string FapiaoId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置总价税合计(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_amount")]
+ public int TotalAmount { get; set; }
+
+ ///
+ /// 获取或设置发票行列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("items")]
+ [System.Text.Json.Serialization.JsonPropertyName("items")]
+ public IList? ItemList { get; set; }
+
+ ///
+ /// 获取或设置交易信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_information")]
+ public IList? TransactionList { get; set; }
+
+ ///
+ /// 获取或设置出口业务适用政策代码。
+ ///
+ [Newtonsoft.Json.JsonProperty("export_business_policy_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("export_business_policy_code")]
+ public int? ExportBusinessPolicyCode { get; set; }
+
+ ///
+ /// 获取或设置增值税即征即退代码。
+ ///
+ [Newtonsoft.Json.JsonProperty("vat_refund_levy_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("vat_refund_levy_code")]
+ public int? VATRefundLevyCode { get; set; }
+
+ ///
+ /// 获取或设置开票人 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("billing_person_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("billing_person_id")]
+ public string BillingPersonId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置开票人姓名。
+ ///
+ [Newtonsoft.Json.JsonProperty("billing_person")]
+ [System.Text.Json.Serialization.JsonPropertyName("billing_person")]
+ public string? BillingPersonName { get; set; }
+
+ ///
+ /// 获取或设置开具发票类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_bill_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_bill_type")]
+ public string? FapiaoBillType { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置备注信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("remark")]
+ [System.Text.Json.Serialization.JsonPropertyName("remark")]
+ public string? Remark { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string? SubMerchantId { get; set; }
+
+ ///
+ /// 获取或设置发票申请单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_apply_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_apply_id")]
+ public string FapiaoApplyId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置购买方信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("buyer_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("buyer_information")]
+ public Types.Buyer Buyer { get; set; } = new Types.Buyer();
+
+ ///
+ /// 获取或设置电子发票信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_information")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_information")]
+ public Types.FapiaoInfo FapiaoInfo { get; set; } = new Types.FapiaoInfo();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRealEstateLeasingResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRealEstateLeasingResponse.cs
new file mode 100644
index 00000000..31f7b4a3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRealEstateLeasingResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /new-tax-control-fapiao/fapiao-applications/real-estate-leasing 接口的响应。
+ ///
+ public class CreateNewTaxControlFapiaoApplicationRealEstateLeasingResponse : WechatTenpayResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRequest.cs
index 3cfa2f5c..f9d94d80 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRequest.cs
@@ -1,4 +1,3 @@
-using System;
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
@@ -79,6 +78,34 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
[WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
[WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
public string? UserEmail { get; set; }
+
+ ///
+ /// 获取或设置订单金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public int? Amount { get; set; }
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string? OutTradeNumber { get; set; }
+
+ ///
+ /// 获取或设置开具发票类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_bill_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_bill_type")]
+ public string? FapiaoBillType { get; set; }
+
+ ///
+ /// 获取或设置用户留言信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_apply_message")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_apply_message")]
+ public string? UserApplyMessage { get; set; }
}
public class Fapiao
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse.cs
index 0faf7639..539ce798 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse.cs
@@ -160,6 +160,34 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
[WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
[WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
public string? UserEmail { get; set; }
+
+ ///
+ /// 获取或设置订单金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public int? Amount { get; set; }
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string? OutTradeNumber { get; set; }
+
+ ///
+ /// 获取或设置开具发票类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_bill_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_bill_type")]
+ public string? FapiaoBillType { get; set; }
+
+ ///
+ /// 获取或设置用户留言信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_apply_message")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_apply_message")]
+ public string? UserApplyMessage { get; set; }
}
public class Seller : GetNewTaxControlFapiaoMerchantBaseInformationResponse.Types.Seller
@@ -368,6 +396,20 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
[Newtonsoft.Json.JsonProperty("remark")]
[System.Text.Json.Serialization.JsonPropertyName("remark")]
public string? Remark { get; set; }
+
+ ///
+ /// 获取或设置开票失败错误码。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_error_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_error_code")]
+ public string? FapiaoErrorCode { get; set; }
+
+ ///
+ /// 获取或设置开票失败错误信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_error_message")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_error_message")]
+ public string? FapiaoErrorMessage { get; set; }
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/UploadNewTaxControlFapiaoApplicationFapiaoFileRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/UploadNewTaxControlFapiaoApplicationFapiaoFileRequest.cs
index 671082a7..6e4e52e1 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/UploadNewTaxControlFapiaoApplicationFapiaoFileRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoApplications/UploadNewTaxControlFapiaoApplicationFapiaoFileRequest.cs
@@ -31,16 +31,17 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
/// 获取或设置文件内容哈希算法。
+ /// 默认值:"SM3"
///
[Newtonsoft.Json.JsonProperty("digest_alogrithm")]
[System.Text.Json.Serialization.JsonPropertyName("digest_alogrithm")]
- public string FileHashAlgorithm { get; set; } = string.Empty;
+ public string FileHashAlgorithm { get; set; } = "SM3";
///
- /// 获取或设置文件内容哈希值。
+ /// 获取或设置文件内容哈希值。如果不指定将由系统自动生成。
///
[Newtonsoft.Json.JsonProperty("digest")]
[System.Text.Json.Serialization.JsonPropertyName("digest")]
- public string FileHashValue { get; set; } = string.Empty;
+ public string? FileHash { get; set; }
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlRequest.cs
new file mode 100644
index 00000000..86e8fbf9
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlRequest.cs
@@ -0,0 +1,62 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /new-tax-control-fapiao/fapiaomerchant/getspinviteurl 接口的请求。
+ ///
+ [WechatTenpaySensitive]
+ public class GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置操作类型。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OperationType { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置操作人员(需使用平台公钥/证书加密)。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
+ [WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
+ public string? OperateUser { get; set; }
+
+ ///
+ /// 获取或设置开票模式。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string FapiaoMode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置发票能力类型。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public IList? FapiaoAbilityTypeList { get; set; }
+
+ ///
+ /// 获取或设置服务商邀请渠道。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? InviteChannel { get; set; }
+
+ ///
+ /// 获取或设置邀请码。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string InviteCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置受邀商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? SubMerchantId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlResponse.cs
new file mode 100644
index 00000000..713e46be
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlResponse.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /new-tax-control-fapiao/fapiaomerchant/getspinviteurl 接口的响应。
+ ///
+ public class GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置邀请开通二维码链接。
+ ///
+ [Newtonsoft.Json.JsonProperty("invite_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("invite_url")]
+ public string InviteUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置开通小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("miniprogram_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("miniprogram_appid")]
+ public string MiniProgramAppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置开通小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("miniprogram_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("miniprogram_path")]
+ public string MiniProgramPagePath { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsRequest.cs
new file mode 100644
index 00000000..b8e7b4dd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsRequest.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /new-tax-control-fapiao/fapiaomerchant/listspinvitemchinfo 接口的请求。
+ ///
+ public class QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置查询起始时间。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public DateTimeOffset? QueryStartTime { get; set; }
+
+ ///
+ /// 获取或设置查询截止时间。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public DateTimeOffset? QueryEndTime { get; set; }
+
+ ///
+ /// 获取或设置分页大小。
+ /// 默认值:0
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int Limit { get; set; } = 0;
+
+ ///
+ /// 获取或设置分页开始位置。
+ /// 默认值:10
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int Offset { get; set; } = 10;
+
+ ///
+ /// 获取或设置邀请码。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? InviteCode { get; set; }
+
+ ///
+ /// 获取或设置商户邀请状态。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? MerchantInviteStatus { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsResponse.cs
new file mode 100644
index 00000000..8108161b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/FapiaoMerchant/QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsResponse.cs
@@ -0,0 +1,103 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /new-tax-control-fapiao/fapiaomerchant/listspinvitemchinfo 接口的响应。
+ ///
+ public class QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class MerchantInviteResult
+ {
+ ///
+ /// 获取或设置受邀商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string? SubMerchantId { get; set; }
+
+ ///
+ /// 获取或设置商户邀请状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("mch_invite_status")]
+ [System.Text.Json.Serialization.JsonPropertyName("mch_invite_status")]
+ public string MerchantInviteStatus { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("ep_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("ep_name")]
+ public string MerchantName { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户税号。
+ ///
+ [Newtonsoft.Json.JsonProperty("tax_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("tax_id")]
+ public string TaxId { get; set; } = default!;
+
+ ///
+ /// 获取或设置邀请码。
+ ///
+ [Newtonsoft.Json.JsonProperty("invite_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("invite_code")]
+ public string InviteCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置操作时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("operate_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("operate_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset OperateTime { get; set; }
+
+ ///
+ /// 获取或设置邀请失败错误码。
+ ///
+ [Newtonsoft.Json.JsonProperty("invite_failed_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("invite_failed_code")]
+ public string? InviteFailCode { get; set; }
+
+ ///
+ /// 获取或设置邀请失败原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("invite_failed_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("invite_failed_reason")]
+ public string? InviteFailReason { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置邀请的商户结果列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("mch_invite_result_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("mch_invite_result_list")]
+ public Types.MerchantInviteResult[] MerchantInviteResultList { get; set; } = default!;
+
+ ///
+ /// 获取或设置总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置分页大小。
+ ///
+ [Newtonsoft.Json.JsonProperty("limit")]
+ [System.Text.Json.Serialization.JsonPropertyName("limit")]
+ public int Limit { get; set; }
+
+ ///
+ /// 获取或设置分页开始位置。
+ ///
+ [Newtonsoft.Json.JsonProperty("offset")]
+ [System.Text.Json.Serialization.JsonPropertyName("offset")]
+ public int Offset { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/CheckNewTaxControlFapiaoMerchantStatusRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/CheckNewTaxControlFapiaoMerchantStatusRequest.cs
new file mode 100644
index 00000000..367a927a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/CheckNewTaxControlFapiaoMerchantStatusRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /new-tax-control-fapiao/merchant/{sub_mchid}/check-status 接口的请求。
+ ///
+ public class CheckNewTaxControlFapiaoMerchantStatusRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string SubMerchantId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/CheckNewTaxControlFapiaoMerchantStatusResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/CheckNewTaxControlFapiaoMerchantStatusResponse.cs
new file mode 100644
index 00000000..cd74cf61
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/CheckNewTaxControlFapiaoMerchantStatusResponse.cs
@@ -0,0 +1,137 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /new-tax-control-fapiao/merchant/{sub_mchid}/check-status 接口的响应。
+ ///
+ public class CheckNewTaxControlFapiaoMerchantStatusResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class ThirdPartyMode
+ {
+ ///
+ /// 获取或设置接入状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public string Status { get; set; } = default!;
+ }
+
+ public class DigitalTaxMode
+ {
+ public static class Types
+ {
+ public class BillingPerson
+ {
+ ///
+ /// 获取或设置开票人 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("id")]
+ [System.Text.Json.Serialization.JsonPropertyName("id")]
+ public string Id { get; set; } = default!;
+
+ ///
+ /// 获取或设置开票人姓名。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+ }
+
+ public class Ability
+ {
+ ///
+ /// 获取或设置能力类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string Type { get; set; } = default!;
+
+ ///
+ /// 获取或设置授权状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public string AuthorizeStatus { get; set; } = default!;
+
+ ///
+ /// 获取或设置授权失败原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("authorize_fail_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("authorize_fail_reason")]
+ public string? AuthorizeFailReason { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置接入状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("status")]
+ [System.Text.Json.Serialization.JsonPropertyName("status")]
+ public string Status { get; set; } = default!;
+
+ ///
+ /// 获取或设置开票人信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("billing_person_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("billing_person_info")]
+ public Types.BillingPerson[]? BillingPersonList { get; set; }
+
+ ///
+ /// 获取或设置接入时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("access_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("access_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? AccessTime { get; set; }
+
+ ///
+ /// 获取或设置过期时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("expired_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("expired_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? ExpireTime { get; set; }
+
+ ///
+ /// 获取或设置接入失败原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("access_fail_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("access_fail_reason")]
+ public string? AccessFailReason { get; set; }
+
+ ///
+ /// 获取或设置能力信息列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("ability_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("ability_info")]
+ public Types.Ability[]? AbilityList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置第三方开票模式相关信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("third_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("third_mode")]
+ public Types.ThirdPartyMode? ThirdPartyMode { get; set; }
+
+ ///
+ /// 获取或设置数电发票模式相关信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("digital_tax_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("digital_tax_mode")]
+ public Types.DigitalTaxMode? DigitalTaxMode { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/GetNewTaxControlFapiaoMerchantDevelopmentConfigResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/GetNewTaxControlFapiaoMerchantDevelopmentConfigResponse.cs
index b2c44c2a..27446f75 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/GetNewTaxControlFapiaoMerchantDevelopmentConfigResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/GetNewTaxControlFapiaoMerchantDevelopmentConfigResponse.cs
@@ -10,6 +10,20 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonProperty("callback_url")]
[System.Text.Json.Serialization.JsonPropertyName("callback_url")]
- public string CallbackUrl { get; set; } = default!;
+ public string? CallbackUrl { get; set; }
+
+ ///
+ /// 获取或设置是否展示开发票入口开关。
+ ///
+ [Newtonsoft.Json.JsonProperty("show_fapiao_cell")]
+ [System.Text.Json.Serialization.JsonPropertyName("show_fapiao_cell")]
+ public bool? RequireShowFapiaoCell { get; set; }
+
+ ///
+ /// 获取或设置是否支持开电子专票。
+ ///
+ [Newtonsoft.Json.JsonProperty("support_vat_fapiao")]
+ [System.Text.Json.Serialization.JsonPropertyName("support_vat_fapiao")]
+ public bool? IsSupportVATFapiao { get; set; }
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigRequest.cs
index 53a2f76c..f4ae107f 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigRequest.cs
@@ -10,14 +10,14 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonProperty("sub_mch_code")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mch_code")]
- public string? SubMerchantId { get; set; }
+ public string SubMerchantId { get; set; } = string.Empty;
///
/// 获取或设置回调地址。
///
[Newtonsoft.Json.JsonProperty("callback_url")]
[System.Text.Json.Serialization.JsonPropertyName("callback_url")]
- public string CallbackUrl { get; set; } = string.Empty;
+ public string? CallbackUrl { get; set; }
///
/// 获取或设置是否展示开发票入口开关。
@@ -25,5 +25,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
[Newtonsoft.Json.JsonProperty("show_fapiao_cell")]
[System.Text.Json.Serialization.JsonPropertyName("show_fapiao_cell")]
public bool? RequireShowFapiaoCell { get; set; }
+
+ ///
+ /// 获取或设置是否支持开电子专票。
+ ///
+ [Newtonsoft.Json.JsonProperty("support_vat_fapiao")]
+ [System.Text.Json.Serialization.JsonPropertyName("support_vat_fapiao")]
+ public bool? IsSupportVATFapiao { get; set; }
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse.cs
index 1a84b32f..e3e88004 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse.cs
@@ -3,13 +3,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
/// 表示 [PATCH] /new-tax-control-fapiao/merchant/development-config 接口的响应。
///
- public class ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse : WechatTenpayResponse
+ public class ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse : GetNewTaxControlFapiaoMerchantDevelopmentConfigResponse
{
- ///
- /// 获取或设置回调地址。
- ///
- [Newtonsoft.Json.JsonProperty("callback_url")]
- [System.Text.Json.Serialization.JsonPropertyName("callback_url")]
- public string CallbackUrl { get; set; } = default!;
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleResponse.cs
index aac095f8..fbb3754b 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleResponse.cs
@@ -72,5 +72,33 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
[WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, algorithm: Constants.EncryptionAlgorithms.RSA_2048_ECB_PKCS8_OAEP_WITH_SHA1_AND_MGF1)]
[WechatTenpaySensitiveProperty(scheme: Constants.SignSchemes.WECHATPAY2_SM2_WITH_SM3, algorithm: Constants.EncryptionAlgorithms.SM2_C1C3C2_ASN1)]
public string? UserEmail { get; set; }
+
+ ///
+ /// 获取或设置订单金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public int? Amount { get; set; }
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string? OutTradeNumber { get; set; }
+
+ ///
+ /// 获取或设置开具发票类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("fapiao_bill_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("fapiao_bill_type")]
+ public string? FapiaoBillType { get; set; }
+
+ ///
+ /// 获取或设置用户留言信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_apply_message")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_apply_message")]
+ public string? UserApplyMessage { get; set; }
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleUrlResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleUrlResponse.cs
index 1b1bd078..9e9ad85c 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleUrlResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleUrlResponse.cs
@@ -20,10 +20,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string MiniProgramPagePath { get; set; } = default!;
///
- /// 获取或设置小程序用户名。
+ /// 获取或设置小程序账号。
///
[Newtonsoft.Json.JsonProperty("miniprogram_user_name")]
[System.Text.Json.Serialization.JsonPropertyName("miniprogram_user_name")]
- public string? MiniProgramUsername { get; set; } = default!;
+ public string? MiniProgramUsername { get; set; }
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantOperationManage/EnhancedDueDiligence/UploadMerchantOperationManageEnhancedDueDiligenceFileRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantOperationManage/EnhancedDueDiligence/UploadMerchantOperationManageEnhancedDueDiligenceFileRequest.cs
index fb9308c8..1d40cde8 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantOperationManage/EnhancedDueDiligence/UploadMerchantOperationManageEnhancedDueDiligenceFileRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MerchantOperationManage/EnhancedDueDiligence/UploadMerchantOperationManageEnhancedDueDiligenceFileRequest.cs
@@ -33,7 +33,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonProperty("file_digest")]
[System.Text.Json.Serialization.JsonPropertyName("file_digest")]
- public string? FileDigest { get; set; }
+ public string? FileHash { get; set; }
///
/// 获取或设置文件 Conent-Type。如果不指定将由系统自动生成。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TaxiInvoice/Card/UploadTaxiInvoiceCardFileRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TaxiInvoice/Card/UploadTaxiInvoiceCardFileRequest.cs
index 08883b51..423170a6 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TaxiInvoice/Card/UploadTaxiInvoiceCardFileRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/TaxiInvoice/Card/UploadTaxiInvoiceCardFileRequest.cs
@@ -16,17 +16,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
/// 获取或设置文件内容哈希算法。
+ /// 默认值:"SM3"
///
[Newtonsoft.Json.JsonProperty("digest_algorithm")]
[System.Text.Json.Serialization.JsonPropertyName("digest_algorithm")]
- public string FileHashAlgorithm { get; set; } = string.Empty;
+ public string FileHashAlgorithm { get; set; } = "SM3";
///
- /// 获取或设置文件内容哈希值。
+ /// 获取或设置文件内容哈希值。如果不指定将由系统自动生成。
///
[Newtonsoft.Json.JsonProperty("digest")]
[System.Text.Json.Serialization.JsonPropertyName("digest")]
- public string FileHashValue { get; set; } = string.Empty;
+ public string? FileHash { get; set; }
///
/// 获取或设置公司商户号。
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationCardRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationCardRequest.json
index b20a6de4..c6434d80 100644
--- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationCardRequest.json
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationCardRequest.json
@@ -9,7 +9,11 @@
"bank_name": "测试银行",
"bank_account": "62001234567890",
"phone": "18507550000",
- "email": "123110@qq.com"
+ "email": "123110@qq.com",
+ "amount": 1000,
+ "out_trade_no": "order_20200701_123456",
+ "fapiao_bill_type": "COMM_FAPIAO",
+ "user_apply_message": "用户留言"
},
"fapiao_card_information": [
{
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationIssueGeneralRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationIssueGeneralRequest.json
new file mode 100644
index 00000000..7adcdd62
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationIssueGeneralRequest.json
@@ -0,0 +1,50 @@
+{
+ "sub_mchid": "example_sub_mchid",
+ "fapiao_apply_id": "example_fapiao_apply_id",
+ "buyer_information": {
+ "type": "INDIVIDUAL",
+ "name": "深圳市南山区测试企业",
+ "taxpayer_id": "202003261233701778",
+ "address": "深圳市南山区深南大道10000号",
+ "telephone": "075512345678",
+ "bank_name": "测试银行",
+ "bank_account": "62001234567890",
+ "phone": "mI7HGEJ4Q2B91IGjHrl7FNN9QuFPDfzeXoaJM4B8ZghZPzXK+vNotEZu/Gthm87Szv0MK2AoC0/3ZMDgltMtdoY6O0qZ4F1iXiwCuqkkBe+9M4ggvdzpPGM+fyed2QU1seUGbii5RVVVB9s+zLEQ8nv74vsgl77MZx14nd5obtCcfAvPfDJob3oG7FqlThmYKJqjiOwBvvQse7p9R8onj/POzSrbM8re8ZYGp4LcehXopTLdk2ZVWRv8bnJgKZWArAcqMdahq4jY2UVYeY4vpMmq4xuRTYk6xNXvowBBKK2SX8SqM+jm1USyoBIazLu4oaNFNdBO3fip1a1rFW0vRw==",
+ "email": "NzJy3r0Z2u2Vs5l+WSH0A3CZ1oGlCZ66aa2wUlMXNmACbd4wU8LqqYCuTG4cYWxrVUSmviV59/Uy9vLdIwuHZVrMalYAZGtb8inWGhDj3wUqQnPkmBKBVGIWG5Y6XJmMvpXW6rIKsdzxs8NwWj30cRNfjanLxiWc0aIgl8Knwo0JcxlcYLo38T9ntsrRkQZMQEWHaMYnzjp7ysLbp6yW83OZb/NwEufERBdPnIbDbVE7DUd5MGhvO+tlr2YC1b4VCsrDmjryuTD5nvYYCGHyfXW2CM23hZdBm9tPc+mU18Z9d4XkasnfsecGWd2ISkpPmnk3DtapnD64Nw8JyLtkgw==",
+ "amount": 1000,
+ "out_trade_no": "order_20200701_123456",
+ "fapiao_bill_type": "COMM_FAPIAO",
+ "user_apply_message": "用户留言"
+ },
+ "fapiao_information": {
+ "fapiao_id": "20200701123456",
+ "total_amount": 382895,
+ "items": [
+ {
+ "tax_code": "3010101020203000000",
+ "goods_name": "*xxx*服务",
+ "specification": "米",
+ "unit": "米",
+ "quantity": 100000000,
+ "total_amount": 429900,
+ "tax_rate": 1300,
+ "discount": false,
+ "preferential_policy_code": 1
+ }
+ ],
+ "export_business_policy_code": 1,
+ "vat_refund_levy_code": 1,
+ "billing_person_id": "128279891283",
+ "billing_person": "example_billing_person",
+ "fapiao_bill_type": "COMM_FAPIAO",
+ "transaction_information": [
+ {
+ "pay_channel": "WECHAT_PAY",
+ "transaction_id": "4200000008202508080512076713",
+ "out_trade_no": "order_20200701_123456",
+ "amount": 382895
+ }
+ ],
+ "remark": "备注"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRealEstateLeasingRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRealEstateLeasingRequest.json
new file mode 100644
index 00000000..024348ea
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/CreateNewTaxControlFapiaoApplicationRealEstateLeasingRequest.json
@@ -0,0 +1,62 @@
+{
+ "sub_mchid": "1900000109",
+ "fapiao_apply_id": "4200000444201910177461284488",
+ "buyer_information": {
+ "type": "INDIVIDUAL",
+ "name": "深圳市南山区测试企业",
+ "taxpayer_id": "202003261233701778",
+ "address": "深圳市南山区深南大道10000号",
+ "telephone": "075512345678",
+ "bank_name": "测试银行",
+ "bank_account": "62001234567890",
+ "phone": "mI7HGEJ4Q2B91IGjHrl7FNN9QuFPDfzeXoaJM4B8ZghZPzXK+vNotEZu/Gthm87Szv0MK2AoC0/3ZMDgltMtdoY6O0qZ4F1iXiwCuqkkBe+9M4ggvdzpPGM+fyed2QU1seUGbii5RVVVB9s+zLEQ8nv74vsgl77MZx14nd5obtCcfAvPfDJob3oG7FqlThmYKJqjiOwBvvQse7p9R8onj/POzSrbM8re8ZYGp4LcehXopTLdk2ZVWRv8bnJgKZWArAcqMdahq4jY2UVYeY4vpMmq4xuRTYk6xNXvowBBKK2SX8SqM+jm1USyoBIazLu4oaNFNdBO3fip1a1rFW0vRw==",
+ "email": "NzJy3r0Z2u2Vs5l+WSH0A3CZ1oGlCZ66aa2wUlMXNmACbd4wU8LqqYCuTG4cYWxrVUSmviV59/Uy9vLdIwuHZVrMalYAZGtb8inWGhDj3wUqQnPkmBKBVGIWG5Y6XJmMvpXW6rIKsdzxs8NwWj30cRNfjanLxiWc0aIgl8Knwo0JcxlcYLo38T9ntsrRkQZMQEWHaMYnzjp7ysLbp6yW83OZb/NwEufERBdPnIbDbVE7DUd5MGhvO+tlr2YC1b4VCsrDmjryuTD5nvYYCGHyfXW2CM23hZdBm9tPc+mU18Z9d4XkasnfsecGWd2ISkpPmnk3DtapnD64Nw8JyLtkgw==",
+ "amount": 1000,
+ "out_trade_no": "order_20200701_123456",
+ "fapiao_bill_type": "COMM_FAPIAO",
+ "user_apply_message": "用户留言"
+ },
+ "fapiao_information": {
+ "fapiao_id": "20200701123456",
+ "total_amount": 382895,
+ "items": [
+ {
+ "tax_code": "3010101020203000000",
+ "goods_name": "*经营租赁*车辆停放服务",
+ "specification": "米",
+ "unit": "METER",
+ "quantity": 100000000,
+ "total_amount": 429900,
+ "tax_rate": 1300,
+ "discount": false,
+ "preferential_policy_code": 1,
+ "real_estate_leasing_information": {
+ "province": "重庆市",
+ "city": "涪陵区",
+ "address": "xx街道xx小区",
+ "lease_period_start": "2025-01-01T10:00:00+08:00",
+ "lease_period_end": "2025-07-01T12:00:00+08:00",
+ "cross_city_flag": true,
+ "certificate_no": "OVgc/slzCvzSebaz46sUA4tJmm5GbNC0Tkp0oKmuHev9aTDzzcNIy5fKuywKWa0aYIWPyitr3wCYVPUw5Bnw1VUr6jn9eCeQPQye2t+zNuuCM0vmr1NNhdI3a2FNIx5HxkBrdM0XuiLt2/46UaWuzcUbZ52CCtZGgRzxeuj6oF/RKVG+dzT2HOm3kbYi1cUM10hARPKN+kV84I5WnFglX1cPM7s+OHkWvj38xEAfJBJfj3lf0UTRo",
+ "plate_no": [
+ "渝A12345"
+ ]
+ }
+ }
+ ],
+ "export_business_policy_code": 1,
+ "vat_refund_levy_code": 1,
+ "billing_person_id": "187776276864872",
+ "billing_person": "张伟",
+ "fapiao_bill_type": "COMM_FAPIAO",
+ "transaction_information": [
+ {
+ "pay_channel": "WECHAT_PAY",
+ "transaction_id": "4200000008202508080512076713",
+ "out_trade_no": "order_20200701_123456",
+ "amount": 382895
+ }
+ ],
+ "remark": "备注"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse.json
index 872024fe..b1b52a55 100644
--- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse.json
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoApplications/GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse.json
@@ -45,7 +45,11 @@
"bank_name": "测试银行",
"bank_account": "62001234567890",
"phone": "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPttdY+aQ6zB",
- "email": "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPttdY+aQ6za"
+ "email": "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPttdY+aQ6za",
+ "amount": 1000,
+ "out_trade_no": "order_20200701_123456",
+ "fapiao_bill_type": "COMM_FAPIAO",
+ "user_apply_message": "用户留言"
},
"extra_information": {
"payee": "张三",
@@ -68,7 +72,9 @@
"discount": false
}
],
- "remark": "备注"
+ "remark": "备注",
+ "fapiao_error_code": "BIZ_ERROR",
+ "fapiao_error_message": "开票失败。授信额度不足,请联系主管税务机关或者登录电子税务局提额/申报。"
}
]
}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoMerchant/GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoMerchant/GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlResponse.json
new file mode 100644
index 00000000..95a24d3d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoMerchant/GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlResponse.json
@@ -0,0 +1,5 @@
+{
+ "invite_url": "https://wxacurl.cn?xxx=",
+ "miniprogram_appid": "wxb1170446a4c0a5a2",
+ "miniprogram_path": "pages/xxxPage"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoMerchant/QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoMerchant/QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsResponse.json
new file mode 100644
index 00000000..747ef538
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/FapiaoMerchant/QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsResponse.json
@@ -0,0 +1,17 @@
+{
+ "total_count": 50,
+ "offset": 10,
+ "limit": 1,
+ "mch_invite_result_list": [
+ {
+ "sub_mchid": "1999192837",
+ "mch_invite_status": "MCH_INVITE_SUCC",
+ "ep_name": "示例(深圳)有限公司",
+ "tax_id": "9144050071126766XG",
+ "invite_code": "code_20200101_123",
+ "operate_time": "2020-07-01T00:00:00",
+ "invite_failed_code": "UNKNOWN_TAX_INFO",
+ "invite_failed_reason": "示例失败原因"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/CheckNewTaxControlFapiaoMerchantStatusResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/CheckNewTaxControlFapiaoMerchantStatusResponse.json
new file mode 100644
index 00000000..70ed433e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/CheckNewTaxControlFapiaoMerchantStatusResponse.json
@@ -0,0 +1,25 @@
+{
+ "sub_mchid": "1900000109",
+ "third_mode": {
+ "status": "ENABLED"
+ },
+ "digital_tax_mode": {
+ "status": "ENABLED",
+ "billing_person_info": [
+ {
+ "id": "187776276864872",
+ "name": "张伟"
+ }
+ ],
+ "access_time": "2020-07-01T12:00:00+08:00",
+ "expired_time": "2020-07-02T12:00:00+08:00",
+ "access_fail_reason": "失败原因",
+ "ability_info": [
+ {
+ "type": "BASE_ABILITY",
+ "status": "AUTHORIZED",
+ "authorize_fail_reason": "失败原因"
+ }
+ ]
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigRequest.json
index fbef91b0..ad413972 100644
--- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigRequest.json
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigRequest.json
@@ -1,5 +1,6 @@
{
"callback_url": "https://pay.weixin.qq.com/callback",
"sub_mch_code": "1900000109",
- "show_fapiao_cell": false
+ "show_fapiao_cell": false,
+ "support_vat_fapiao": false
}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse.json
index 26e9fa12..8acb31ed 100644
--- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse.json
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/Merchant/ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse.json
@@ -1,3 +1,5 @@
{
- "callback_url": "https://pay.weixin.qq.com/callback"
+ "callback_url": "https://pay.weixin.qq.com/callback",
+ "show_fapiao_cell": false,
+ "support_vat_fapiao": false
}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleResponse.json
index 4651491a..315cad70 100644
--- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleResponse.json
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/NewTaxControlFapiao/UserTitle/GetNewTaxControlFapiaoUserTitleResponse.json
@@ -7,5 +7,9 @@
"bank_name": "测试银行",
"bank_account": "62001234567890",
"phone": "18507550000",
- "email": "123110@qq.com"
+ "email": "123110@qq.com",
+ "amount": 1000,
+ "out_trade_no": "order_20200701_123456",
+ "fapiao_bill_type": "COMM_FAPIAO",
+ "user_apply_message": "用户留言"
}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs
index c858b673..3f4aa867 100644
--- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_RequestEncryptionTests.cs
@@ -1693,6 +1693,59 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
}
}
+ [Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /new-tax-control-fapiao/fapiaomerchant/getspinviteurl)")]
+ public async Task TestEncryptRequestSensitiveProperty_GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlRequest()
+ {
+ static Models.GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlRequest GenerateMockRequestModel()
+ {
+ return new Models.GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlRequest()
+ {
+ OperateUser = MOCK_PLAIN_STR
+ };
+ }
+
+ static void AssertMockRequestModel(Models.GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlRequest request, Func decryptor)
+ {
+ Assert.NotEqual(MOCK_PLAIN_STR, request.OperateUser!);
+ Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.OperateUser!));
+ Assert.Equal(MOCK_CERT_SN, request.WechatpaySerialNumber!, ignoreCase: true);
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseRSA(autoEncrypt: false))
+ {
+ var request = GenerateMockRequestModel();
+ client.EncryptRequestSensitiveProperty(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+
+ using (var client = CreateMockClientUseRSA(autoEncrypt: true))
+ {
+ var request = GenerateMockRequestModel();
+ await client.ExecuteGetNewTaxControlFapiaoMerchantServicePartnerInviteUrlAsync(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+ }
+
+ if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey))
+ {
+ using (var client = CreateMockClientUseSM2(autoEncrypt: false))
+ {
+ var request = GenerateMockRequestModel();
+ client.EncryptRequestSensitiveProperty(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+
+ using (var client = CreateMockClientUseSM2(autoEncrypt: true))
+ {
+ var request = GenerateMockRequestModel();
+ await client.ExecuteGetNewTaxControlFapiaoMerchantServicePartnerInviteUrlAsync(request);
+ AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
+ }
+ }
+ }
+
[Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /papay/insurance-sign/contracts/pre-entrust-sign/h5)")]
public async Task TestEncryptRequestSensitiveProperty_PresignPAPayInsuranceSignContractEntrustH5Request()
{