feat(tenpayv3): 新增微信全数电发票相关接口

This commit is contained in:
Fu Diwei
2025-09-24 20:55:14 +08:00
parent d2c1a8bb55
commit 449d605c98
35 changed files with 1522 additions and 213 deletions

View File

@@ -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!);

View File

@@ -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
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012529382 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474026 ]]>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474026 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015792562 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
@@ -33,6 +36,309 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
}
#endregion
#region FapiaoApplications
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/fapiao-applications 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538301 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474060 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateNewTaxControlFapiaoApplicationResponse> 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<Models.CreateNewTaxControlFapiaoApplicationResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/issue-general 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015792574 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateNewTaxControlFapiaoApplicationIssueGeneralResponse> 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<Models.CreateNewTaxControlFapiaoApplicationIssueGeneralResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/real-estate-leasing 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015941740 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateNewTaxControlFapiaoApplicationRealEstateLeasingResponse> 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<Models.CreateNewTaxControlFapiaoApplicationRealEstateLeasingResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/reverse 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538327 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474062 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015792575 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ReverseNewTaxControlFapiaoApplicationResponse> 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<Models.ReverseNewTaxControlFapiaoApplicationResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012531753 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012489258 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015792567 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse> 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<Models.GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/fapiao-files 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538335 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474067 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015792576 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetNewTaxControlFapiaoApplicationFilesResponse> 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<Models.GetNewTaxControlFapiaoApplicationFilesResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /{download_url} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012286040 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012071750 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015792569 ]]>
/// </para>
/// <para><i>(请注意此接口不受构造 <see cref="WechatTenpayClient" /> 时指定的 <see cref="WechatTenpayClientOptions.Endpoint"/> 参数控制。)</i></para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.DownloadNewTaxControlFapiaoApplicationFileResponse> 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<Models.DownloadNewTaxControlFapiaoApplicationFileResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/upload-fapiao-file 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012556605 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012696830 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015792580 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.UploadNewTaxControlFapiaoApplicationFapiaoFileResponse> 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<Models.UploadNewTaxControlFapiaoApplicationFapiaoFileResponse>(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/insert-cards 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538365 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474078 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015792579 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateNewTaxControlFapiaoApplicationCardResponse> 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<Models.CreateNewTaxControlFapiaoApplicationCardResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region FapiaoMerchant
/// <summary>
/// <para>异步调用 [GET] /new-tax-control-fapiao/fapiaomerchant/getspinviteurl 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015941495 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlResponse> 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<Models.GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /new-tax-control-fapiao/fapiaomerchant/listspinvitemchinfo 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015941524 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsResponse> 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<Models.QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region Merchant
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/merchant/{sub_mchid}/check 接口。</para>
@@ -56,6 +362,28 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync<Models.CheckNewTaxControlFapiaoMerchantResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/merchant/{sub_mchid}/check-status 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015792561 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CheckNewTaxControlFapiaoMerchantStatusResponse> 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<Models.CheckNewTaxControlFapiaoMerchantStatusResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [PATCH] /new-tax-control-fapiao/merchant/development-config 接口。</para>
/// <para>
@@ -108,7 +436,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538180 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474053 ]]>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474053 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015792563 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
@@ -160,7 +489,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538106 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474040 ]]>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474040 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015770776 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
@@ -194,7 +524,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538112 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474048 ]]>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474048 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015784260 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
@@ -215,184 +546,5 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync<Models.GetNewTaxControlFapiaoUserTitleResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region FapiaoApplication
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/fapiao-applications 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538301 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474060 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateNewTaxControlFapiaoApplicationResponse> 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<Models.CreateNewTaxControlFapiaoApplicationResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/reverse 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538327 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474062 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ReverseNewTaxControlFapiaoApplicationResponse> 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<Models.ReverseNewTaxControlFapiaoApplicationResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012531753 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012489258 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse> 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<Models.GetNewTaxControlFapiaoApplicationByFapiaoApplyIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/fapiao-files 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538335 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474067 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetNewTaxControlFapiaoApplicationFilesResponse> 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<Models.GetNewTaxControlFapiaoApplicationFilesResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /{download_url} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012286040 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012071750 ]]>
/// </para>
/// <para><i>(请注意此接口不受构造 <see cref="WechatTenpayClient" /> 时指定的 <see cref="WechatTenpayClientOptions.Endpoint"/> 参数控制。)</i></para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.DownloadNewTaxControlFapiaoApplicationFileResponse> 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<Models.DownloadNewTaxControlFapiaoApplicationFileResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/upload-fapiao-file 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012556605 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012696830 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.UploadNewTaxControlFapiaoApplicationFapiaoFileResponse> 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<Models.UploadNewTaxControlFapiaoApplicationFapiaoFileResponse>(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /new-tax-control-fapiao/fapiao-applications/{fapiao_apply_id}/insert-cards 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/merchant/4012538365 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012474078 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateNewTaxControlFapiaoApplicationCardResponse> 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<Models.CreateNewTaxControlFapiaoApplicationCardResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
}
}

View File

@@ -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");

View File

@@ -0,0 +1,163 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /new-tax-control-fapiao/fapiao-applications/issue-general 接口的请求。</para>
/// </summary>
[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
{
/// <summary>
/// 获取或设置优惠政策标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("preferential_policy_code")]
[System.Text.Json.Serialization.JsonPropertyName("preferential_policy_code")]
public int? PreferentialPolicyCode { get; set; }
}
public class Transaction
{
/// <summary>
/// 获取或设置支付渠道。
/// </summary>
[Newtonsoft.Json.JsonProperty("pay_channel")]
[System.Text.Json.Serialization.JsonPropertyName("pay_channel")]
public string PayChannel { get; set; } = string.Empty;
/// <summary>
/// 获取或设置微信支付交易单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("transaction_id")]
[System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
public string? TransactionId { get; set; }
/// <summary>
/// 获取或设置商户订单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_trade_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
public string? OutTradeNumber { get; set; }
/// <summary>
/// 获取或设置交易金额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("amount")]
[System.Text.Json.Serialization.JsonPropertyName("amount")]
public int Amount { get; set; }
}
}
/// <summary>
/// 获取或设置商户发票单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_id")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_id")]
public string FapiaoId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置总价税合计(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_amount")]
[System.Text.Json.Serialization.JsonPropertyName("total_amount")]
public int TotalAmount { get; set; }
/// <summary>
/// 获取或设置发票行列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("items")]
[System.Text.Json.Serialization.JsonPropertyName("items")]
public IList<Types.Item>? ItemList { get; set; }
/// <summary>
/// 获取或设置交易信息列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("transaction_information")]
[System.Text.Json.Serialization.JsonPropertyName("transaction_information")]
public IList<Types.Transaction>? TransactionList { get; set; }
/// <summary>
/// 获取或设置出口业务适用政策代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("export_business_policy_code")]
[System.Text.Json.Serialization.JsonPropertyName("export_business_policy_code")]
public int? ExportBusinessPolicyCode { get; set; }
/// <summary>
/// 获取或设置增值税即征即退代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("vat_refund_levy_code")]
[System.Text.Json.Serialization.JsonPropertyName("vat_refund_levy_code")]
public int? VATRefundLevyCode { get; set; }
/// <summary>
/// 获取或设置开票人 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("billing_person_id")]
[System.Text.Json.Serialization.JsonPropertyName("billing_person_id")]
public string BillingPersonId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置开票人姓名。
/// </summary>
[Newtonsoft.Json.JsonProperty("billing_person")]
[System.Text.Json.Serialization.JsonPropertyName("billing_person")]
public string? BillingPersonName { get; set; }
/// <summary>
/// 获取或设置开具发票类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_bill_type")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_bill_type")]
public string? FapiaoBillType { get; set; } = string.Empty;
/// <summary>
/// 获取或设置备注信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("remark")]
[System.Text.Json.Serialization.JsonPropertyName("remark")]
public string? Remark { get; set; }
}
}
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
public string? SubMerchantId { get; set; }
/// <summary>
/// 获取或设置发票申请单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_apply_id")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_apply_id")]
public string FapiaoApplyId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置购买方信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("buyer_information")]
[System.Text.Json.Serialization.JsonPropertyName("buyer_information")]
public Types.Buyer Buyer { get; set; } = new Types.Buyer();
/// <summary>
/// 获取或设置电子发票信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_information")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_information")]
public Types.FapiaoInfo FapiaoInfo { get; set; } = new Types.FapiaoInfo();
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /new-tax-control-fapiao/fapiao-applications/issue-general 接口的响应。</para>
/// </summary>
public class CreateNewTaxControlFapiaoApplicationIssueGeneralResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,205 @@
using System;
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /new-tax-control-fapiao/fapiao-applications/real-estate-leasing 接口的请求。</para>
/// </summary>
[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
{
/// <summary>
/// 获取或设置省份。
/// </summary>
[Newtonsoft.Json.JsonProperty("province")]
[System.Text.Json.Serialization.JsonPropertyName("province")]
public string? Province { get; set; }
/// <summary>
/// 获取或设置城市。
/// </summary>
[Newtonsoft.Json.JsonProperty("city")]
[System.Text.Json.Serialization.JsonPropertyName("city")]
public string? City { get; set; }
/// <summary>
/// 获取或设置详细地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("address")]
[System.Text.Json.Serialization.JsonPropertyName("address")]
public string Address { get; set; } = string.Empty;
/// <summary>
/// 获取或设置是否跨市。
/// </summary>
[Newtonsoft.Json.JsonProperty("cross_city_flag")]
[System.Text.Json.Serialization.JsonPropertyName("cross_city_flag")]
public bool IsCrossCity { get; set; }
/// <summary>
/// 获取或设置租赁起始日期。
/// </summary>
[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; }
/// <summary>
/// 获取或设置租赁截止日期。
/// </summary>
[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; }
/// <summary>
/// 获取或设置产权证或不动产权证号(需使用平台公钥/证书加密)。
/// </summary>
[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; }
/// <summary>
/// 获取或设置车牌号列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("plate_no")]
[System.Text.Json.Serialization.JsonPropertyName("plate_no")]
public IList<string>? PlateNumberList { get; set; }
}
}
/// <summary>
/// 获取或设置不动产租赁特定行业额外信息。
/// </summary>
[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
{
}
}
/// <summary>
/// 获取或设置商户发票单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_id")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_id")]
public string FapiaoId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置总价税合计(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_amount")]
[System.Text.Json.Serialization.JsonPropertyName("total_amount")]
public int TotalAmount { get; set; }
/// <summary>
/// 获取或设置发票行列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("items")]
[System.Text.Json.Serialization.JsonPropertyName("items")]
public IList<Types.Item>? ItemList { get; set; }
/// <summary>
/// 获取或设置交易信息列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("transaction_information")]
[System.Text.Json.Serialization.JsonPropertyName("transaction_information")]
public IList<Types.Transaction>? TransactionList { get; set; }
/// <summary>
/// 获取或设置出口业务适用政策代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("export_business_policy_code")]
[System.Text.Json.Serialization.JsonPropertyName("export_business_policy_code")]
public int? ExportBusinessPolicyCode { get; set; }
/// <summary>
/// 获取或设置增值税即征即退代码。
/// </summary>
[Newtonsoft.Json.JsonProperty("vat_refund_levy_code")]
[System.Text.Json.Serialization.JsonPropertyName("vat_refund_levy_code")]
public int? VATRefundLevyCode { get; set; }
/// <summary>
/// 获取或设置开票人 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("billing_person_id")]
[System.Text.Json.Serialization.JsonPropertyName("billing_person_id")]
public string BillingPersonId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置开票人姓名。
/// </summary>
[Newtonsoft.Json.JsonProperty("billing_person")]
[System.Text.Json.Serialization.JsonPropertyName("billing_person")]
public string? BillingPersonName { get; set; }
/// <summary>
/// 获取或设置开具发票类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_bill_type")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_bill_type")]
public string? FapiaoBillType { get; set; } = string.Empty;
/// <summary>
/// 获取或设置备注信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("remark")]
[System.Text.Json.Serialization.JsonPropertyName("remark")]
public string? Remark { get; set; }
}
}
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
public string? SubMerchantId { get; set; }
/// <summary>
/// 获取或设置发票申请单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_apply_id")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_apply_id")]
public string FapiaoApplyId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置购买方信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("buyer_information")]
[System.Text.Json.Serialization.JsonPropertyName("buyer_information")]
public Types.Buyer Buyer { get; set; } = new Types.Buyer();
/// <summary>
/// 获取或设置电子发票信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_information")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_information")]
public Types.FapiaoInfo FapiaoInfo { get; set; } = new Types.FapiaoInfo();
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /new-tax-control-fapiao/fapiao-applications/real-estate-leasing 接口的响应。</para>
/// </summary>
public class CreateNewTaxControlFapiaoApplicationRealEstateLeasingResponse : WechatTenpayResponse
{
}
}

View File

@@ -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; }
/// <summary>
/// 获取或设置订单金额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("amount")]
[System.Text.Json.Serialization.JsonPropertyName("amount")]
public int? Amount { get; set; }
/// <summary>
/// 获取或设置商户订单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_trade_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
public string? OutTradeNumber { get; set; }
/// <summary>
/// 获取或设置开具发票类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_bill_type")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_bill_type")]
public string? FapiaoBillType { get; set; }
/// <summary>
/// 获取或设置用户留言信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("user_apply_message")]
[System.Text.Json.Serialization.JsonPropertyName("user_apply_message")]
public string? UserApplyMessage { get; set; }
}
public class Fapiao

View File

@@ -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; }
/// <summary>
/// 获取或设置订单金额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("amount")]
[System.Text.Json.Serialization.JsonPropertyName("amount")]
public int? Amount { get; set; }
/// <summary>
/// 获取或设置商户订单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_trade_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
public string? OutTradeNumber { get; set; }
/// <summary>
/// 获取或设置开具发票类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_bill_type")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_bill_type")]
public string? FapiaoBillType { get; set; }
/// <summary>
/// 获取或设置用户留言信息。
/// </summary>
[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; }
/// <summary>
/// 获取或设置开票失败错误码。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_error_code")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_error_code")]
public string? FapiaoErrorCode { get; set; }
/// <summary>
/// 获取或设置开票失败错误信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_error_message")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_error_message")]
public string? FapiaoErrorMessage { get; set; }
}
}

View File

@@ -31,16 +31,17 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// <summary>
/// 获取或设置文件内容哈希算法。
/// <para>默认值:"SM3"</para>
/// </summary>
[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";
/// <summary>
/// 获取或设置文件内容哈希值。
/// 获取或设置文件内容哈希值。如果不指定将由系统自动生成。
/// </summary>
[Newtonsoft.Json.JsonProperty("digest")]
[System.Text.Json.Serialization.JsonPropertyName("digest")]
public string FileHashValue { get; set; } = string.Empty;
public string? FileHash { get; set; }
}
}

View File

@@ -0,0 +1,62 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /new-tax-control-fapiao/fapiaomerchant/getspinviteurl 接口的请求。</para>
/// </summary>
[WechatTenpaySensitive]
public class GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置操作类型。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string OperationType { get; set; } = string.Empty;
/// <summary>
/// 获取或设置操作人员(需使用平台公钥/证书加密)。
/// </summary>
[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; }
/// <summary>
/// 获取或设置开票模式。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string FapiaoMode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置发票能力类型。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public IList<string>? FapiaoAbilityTypeList { get; set; }
/// <summary>
/// 获取或设置服务商邀请渠道。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string? InviteChannel { get; set; }
/// <summary>
/// 获取或设置邀请码。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string InviteCode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置受邀商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string? SubMerchantId { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /new-tax-control-fapiao/fapiaomerchant/getspinviteurl 接口的响应。</para>
/// </summary>
public class GetNewTaxControlFapiaoMerchantServicePartnerInviteUrlResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置邀请开通二维码链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("invite_url")]
[System.Text.Json.Serialization.JsonPropertyName("invite_url")]
public string InviteUrl { get; set; } = default!;
/// <summary>
/// 获取或设置开通小程序 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("miniprogram_appid")]
[System.Text.Json.Serialization.JsonPropertyName("miniprogram_appid")]
public string MiniProgramAppId { get; set; } = default!;
/// <summary>
/// 获取或设置开通小程序页面路径。
/// </summary>
[Newtonsoft.Json.JsonProperty("miniprogram_path")]
[System.Text.Json.Serialization.JsonPropertyName("miniprogram_path")]
public string MiniProgramPagePath { get; set; } = default!;
}
}

View File

@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /new-tax-control-fapiao/fapiaomerchant/listspinvitemchinfo 接口的请求。</para>
/// </summary>
public class QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置查询起始时间。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public DateTimeOffset? QueryStartTime { get; set; }
/// <summary>
/// 获取或设置查询截止时间。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public DateTimeOffset? QueryEndTime { get; set; }
/// <summary>
/// 获取或设置分页大小。
/// <para>默认值0</para>
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int Limit { get; set; } = 0;
/// <summary>
/// 获取或设置分页开始位置。
/// <para>默认值10</para>
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int Offset { get; set; } = 10;
/// <summary>
/// 获取或设置邀请码。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string? InviteCode { get; set; }
/// <summary>
/// 获取或设置商户邀请状态。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string? MerchantInviteStatus { get; set; }
}
}

View File

@@ -0,0 +1,103 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /new-tax-control-fapiao/fapiaomerchant/listspinvitemchinfo 接口的响应。</para>
/// </summary>
public class QueryNewTaxControlFapiaoMerchantServicePartnerInvitedMerchantsResponse : WechatTenpayResponse
{
public static class Types
{
public class MerchantInviteResult
{
/// <summary>
/// 获取或设置受邀商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
public string? SubMerchantId { get; set; }
/// <summary>
/// 获取或设置商户邀请状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("mch_invite_status")]
[System.Text.Json.Serialization.JsonPropertyName("mch_invite_status")]
public string MerchantInviteStatus { get; set; } = default!;
/// <summary>
/// 获取或设置商户名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("ep_name")]
[System.Text.Json.Serialization.JsonPropertyName("ep_name")]
public string MerchantName { get; set; } = default!;
/// <summary>
/// 获取或设置商户税号。
/// </summary>
[Newtonsoft.Json.JsonProperty("tax_id")]
[System.Text.Json.Serialization.JsonPropertyName("tax_id")]
public string TaxId { get; set; } = default!;
/// <summary>
/// 获取或设置邀请码。
/// </summary>
[Newtonsoft.Json.JsonProperty("invite_code")]
[System.Text.Json.Serialization.JsonPropertyName("invite_code")]
public string InviteCode { get; set; } = default!;
/// <summary>
/// 获取或设置操作时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置邀请失败错误码。
/// </summary>
[Newtonsoft.Json.JsonProperty("invite_failed_code")]
[System.Text.Json.Serialization.JsonPropertyName("invite_failed_code")]
public string? InviteFailCode { get; set; }
/// <summary>
/// 获取或设置邀请失败原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("invite_failed_reason")]
[System.Text.Json.Serialization.JsonPropertyName("invite_failed_reason")]
public string? InviteFailReason { get; set; }
}
}
/// <summary>
/// 获取或设置邀请的商户结果列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("mch_invite_result_list")]
[System.Text.Json.Serialization.JsonPropertyName("mch_invite_result_list")]
public Types.MerchantInviteResult[] MerchantInviteResultList { get; set; } = default!;
/// <summary>
/// 获取或设置总数量。
/// </summary>
[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; }
/// <summary>
/// 获取或设置分页大小。
/// </summary>
[Newtonsoft.Json.JsonProperty("limit")]
[System.Text.Json.Serialization.JsonPropertyName("limit")]
public int Limit { get; set; }
/// <summary>
/// 获取或设置分页开始位置。
/// </summary>
[Newtonsoft.Json.JsonProperty("offset")]
[System.Text.Json.Serialization.JsonPropertyName("offset")]
public int Offset { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /new-tax-control-fapiao/merchant/{sub_mchid}/check-status 接口的请求。</para>
/// </summary>
public class CheckNewTaxControlFapiaoMerchantStatusRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string SubMerchantId { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,137 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /new-tax-control-fapiao/merchant/{sub_mchid}/check-status 接口的响应。</para>
/// </summary>
public class CheckNewTaxControlFapiaoMerchantStatusResponse : WechatTenpayResponse
{
public static class Types
{
public class ThirdPartyMode
{
/// <summary>
/// 获取或设置接入状态。
/// </summary>
[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
{
/// <summary>
/// 获取或设置开票人 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("id")]
[System.Text.Json.Serialization.JsonPropertyName("id")]
public string Id { get; set; } = default!;
/// <summary>
/// 获取或设置开票人姓名。
/// </summary>
[Newtonsoft.Json.JsonProperty("name")]
[System.Text.Json.Serialization.JsonPropertyName("name")]
public string Name { get; set; } = default!;
}
public class Ability
{
/// <summary>
/// 获取或设置能力类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("type")]
[System.Text.Json.Serialization.JsonPropertyName("type")]
public string Type { get; set; } = default!;
/// <summary>
/// 获取或设置授权状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
public string AuthorizeStatus { get; set; } = default!;
/// <summary>
/// 获取或设置授权失败原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("authorize_fail_reason")]
[System.Text.Json.Serialization.JsonPropertyName("authorize_fail_reason")]
public string? AuthorizeFailReason { get; set; }
}
}
/// <summary>
/// 获取或设置接入状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
public string Status { get; set; } = default!;
/// <summary>
/// 获取或设置开票人信息列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("billing_person_info")]
[System.Text.Json.Serialization.JsonPropertyName("billing_person_info")]
public Types.BillingPerson[]? BillingPersonList { get; set; }
/// <summary>
/// 获取或设置接入时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置过期时间。
/// </summary>
[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; }
/// <summary>
/// 获取或设置接入失败原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("access_fail_reason")]
[System.Text.Json.Serialization.JsonPropertyName("access_fail_reason")]
public string? AccessFailReason { get; set; }
/// <summary>
/// 获取或设置能力信息列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("ability_info")]
[System.Text.Json.Serialization.JsonPropertyName("ability_info")]
public Types.Ability[]? AbilityList { get; set; }
}
}
/// <summary>
/// 获取或设置子商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_mchid")]
[System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
public string SubMerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置第三方开票模式相关信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("third_mode")]
[System.Text.Json.Serialization.JsonPropertyName("third_mode")]
public Types.ThirdPartyMode? ThirdPartyMode { get; set; }
/// <summary>
/// 获取或设置数电发票模式相关信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("digital_tax_mode")]
[System.Text.Json.Serialization.JsonPropertyName("digital_tax_mode")]
public Types.DigitalTaxMode? DigitalTaxMode { get; set; }
}
}

View File

@@ -10,6 +10,20 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("callback_url")]
[System.Text.Json.Serialization.JsonPropertyName("callback_url")]
public string CallbackUrl { get; set; } = default!;
public string? CallbackUrl { get; set; }
/// <summary>
/// 获取或设置是否展示开发票入口开关。
/// </summary>
[Newtonsoft.Json.JsonProperty("show_fapiao_cell")]
[System.Text.Json.Serialization.JsonPropertyName("show_fapiao_cell")]
public bool? RequireShowFapiaoCell { get; set; }
/// <summary>
/// 获取或设置是否支持开电子专票。
/// </summary>
[Newtonsoft.Json.JsonProperty("support_vat_fapiao")]
[System.Text.Json.Serialization.JsonPropertyName("support_vat_fapiao")]
public bool? IsSupportVATFapiao { get; set; }
}
}

View File

@@ -10,14 +10,14 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[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;
/// <summary>
/// 获取或设置回调地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("callback_url")]
[System.Text.Json.Serialization.JsonPropertyName("callback_url")]
public string CallbackUrl { get; set; } = string.Empty;
public string? CallbackUrl { get; set; }
/// <summary>
/// 获取或设置是否展示开发票入口开关。
@@ -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; }
/// <summary>
/// 获取或设置是否支持开电子专票。
/// </summary>
[Newtonsoft.Json.JsonProperty("support_vat_fapiao")]
[System.Text.Json.Serialization.JsonPropertyName("support_vat_fapiao")]
public bool? IsSupportVATFapiao { get; set; }
}
}

View File

@@ -3,13 +3,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// <summary>
/// <para>表示 [PATCH] /new-tax-control-fapiao/merchant/development-config 接口的响应。</para>
/// </summary>
public class ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse : WechatTenpayResponse
public class ModifyNewTaxControlFapiaoMerchantDevelopmentConfigResponse : GetNewTaxControlFapiaoMerchantDevelopmentConfigResponse
{
/// <summary>
/// 获取或设置回调地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("callback_url")]
[System.Text.Json.Serialization.JsonPropertyName("callback_url")]
public string CallbackUrl { get; set; } = default!;
}
}

View File

@@ -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; }
/// <summary>
/// 获取或设置订单金额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("amount")]
[System.Text.Json.Serialization.JsonPropertyName("amount")]
public int? Amount { get; set; }
/// <summary>
/// 获取或设置商户订单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_trade_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
public string? OutTradeNumber { get; set; }
/// <summary>
/// 获取或设置开具发票类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("fapiao_bill_type")]
[System.Text.Json.Serialization.JsonPropertyName("fapiao_bill_type")]
public string? FapiaoBillType { get; set; }
/// <summary>
/// 获取或设置用户留言信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("user_apply_message")]
[System.Text.Json.Serialization.JsonPropertyName("user_apply_message")]
public string? UserApplyMessage { get; set; }
}
}

View File

@@ -20,10 +20,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string MiniProgramPagePath { get; set; } = default!;
/// <summary>
/// 获取或设置小程序用户名
/// 获取或设置小程序账号
/// </summary>
[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; }
}
}

View File

@@ -33,7 +33,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("file_digest")]
[System.Text.Json.Serialization.JsonPropertyName("file_digest")]
public string? FileDigest { get; set; }
public string? FileHash { get; set; }
/// <summary>
/// 获取或设置文件 Conent-Type。如果不指定将由系统自动生成。

View File

@@ -16,17 +16,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// <summary>
/// 获取或设置文件内容哈希算法。
/// <para>默认值:"SM3"</para>
/// </summary>
[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";
/// <summary>
/// 获取或设置文件内容哈希值。
/// 获取或设置文件内容哈希值。如果不指定将由系统自动生成。
/// </summary>
[Newtonsoft.Json.JsonProperty("digest")]
[System.Text.Json.Serialization.JsonPropertyName("digest")]
public string FileHashValue { get; set; } = string.Empty;
public string? FileHash { get; set; }
/// <summary>
/// 获取或设置公司商户号。