mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2025-12-29 01:44:42 +08:00
feat(tenpayv3): 新增微信全数电发票相关接口
This commit is contained in:
@@ -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`
|
||||
|
||||
- 用户抬头
|
||||
|
||||
|
||||
@@ -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!);
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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!;
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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!;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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。如果不指定将由系统自动生成。
|
||||
|
||||
@@ -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>
|
||||
/// 获取或设置公司商户号。
|
||||
|
||||
@@ -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": [
|
||||
{
|
||||
|
||||
@@ -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": "备注"
|
||||
}
|
||||
}
|
||||
@@ -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": "备注"
|
||||
}
|
||||
}
|
||||
@@ -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": "开票失败。授信额度不足,请联系主管税务机关或者登录电子税务局提额/申报。"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"invite_url": "https://wxacurl.cn?xxx=",
|
||||
"miniprogram_appid": "wxb1170446a4c0a5a2",
|
||||
"miniprogram_path": "pages/xxxPage"
|
||||
}
|
||||
@@ -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": "示例失败原因"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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": "失败原因"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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": "用户留言"
|
||||
}
|
||||
|
||||
@@ -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<string, string> 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()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user