feat(tenpayv3): 新增平台收付通账号托管模式相关接口

This commit is contained in:
Fu Diwei
2025-09-24 13:29:40 +08:00
parent dff1f69fb1
commit 587dc0251b
45 changed files with 1035 additions and 4 deletions

View File

@@ -205,7 +205,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// <para>异步调用 [GET] /ecommerce/applyments/{applyment_id} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012691469 ]]>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012691469 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015616714 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
@@ -227,7 +228,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// <para>异步调用 [GET] /ecommerce/applyments/out-request-no/{out_request_no} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012691376 ]]>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4012691376 ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015616708 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
@@ -244,6 +246,94 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync<Models.GetEcommerceApplymentByOutRequestNumberResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /ecommerce/applyments/{applyment_id}/revoke 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015616720 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.RevokeEcommerceApplymentByApplymentIdResponse> ExecuteRevokeEcommerceApplymentByApplymentIdAsync(this WechatTenpayClient client, Models.RevokeEcommerceApplymentByApplymentIdRequest 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, "ecommerce", "applyments", request.ApplymentId.ToString(), "revoke");
return await client.SendFlurlRequestAsJsonAsync<Models.RevokeEcommerceApplymentByApplymentIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /ecommerce/applyments/out-request-no/{out_request_no}/revoke 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015616721 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.RevokeEcommerceApplymentByOutRequestNumberResponse> ExecuteRevokeEcommerceApplymentByOutRequestNumberAsync(this WechatTenpayClient client, Models.RevokeEcommerceApplymentByOutRequestNumberRequest 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, "ecommerce", "applyments", "out-request-no", request.OutRequestNumber, "revoke");
return await client.SendFlurlRequestAsJsonAsync<Models.RevokeEcommerceApplymentByOutRequestNumberResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /ecommerce/applyments/submit-account-hosting-applyment 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015616688 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateEcommerceApplymentForSubmitAccountHostingResponse> ExecuteCreateEcommerceApplymentForSubmitAccountHostingAsync(this WechatTenpayClient client, Models.CreateEcommerceApplymentForSubmitAccountHostingRequest 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, "ecommerce", "applyments", "submit-account-hosting-applyment");
return await client.SendFlurlRequestAsJsonAsync<Models.CreateEcommerceApplymentForSubmitAccountHostingResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /ecommerce/applyments/submit-sign-verify-info 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4015616722 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateEcommerceApplymentForSubmitSignVerifyInfoResponse> ExecuteCreateEcommerceApplymentForSubmitSignVerifyInfoAsync(this WechatTenpayClient client, Models.CreateEcommerceApplymentForSubmitSignVerifyInfoRequest 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, "ecommerce", "applyments", "submit-sign-verify-info");
return await client.SendFlurlRequestAsJsonAsync<Models.CreateEcommerceApplymentForSubmitSignVerifyInfoResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region Bill

View File

@@ -8,6 +8,97 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
{
public static class WechatTenpayClientExecuteMerchantAlterApplyExtensions
{
#region MerchantContact
/// <summary>
/// <para>异步调用 [POST] /mchalterapply/mchcontactalterapplyment 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014090649 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreateMerchantAlterApplyMerchantContactAlterApplymentResponse> ExecuteCreateMerchantAlterApplyMerchantContactAlterApplymentAsync(this WechatTenpayClient client, Models.CreateMerchantAlterApplyMerchantContactAlterApplymentRequest 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, "mchalterapply", "mchcontactalterapplyment");
return await client.SendFlurlRequestAsJsonAsync<Models.CreateMerchantAlterApplyMerchantContactAlterApplymentResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /mchalterapply/mchcontactalterapplyment/{apply_id}/revoke 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014090672 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.RevokeMerchantAlterApplyMerchantContactAlterApplymentResponse> ExecuteRevokeMerchantAlterApplyMerchantContactAlterApplymentAsync(this WechatTenpayClient client, Models.RevokeMerchantAlterApplyMerchantContactAlterApplymentRequest 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, "mchalterapply", "mchcontactalterapplyment", request.ApplymentId, "revoke");
return await client.SendFlurlRequestAsJsonAsync<Models.RevokeMerchantAlterApplyMerchantContactAlterApplymentResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /mchalterapply/mchcontactalterapplyment/merchant/{merchant_code}/out-request-no/{out_request_no} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014090667 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetMerchantAlterApplyMerchantContactAlterApplymentByOutRequestNumberResponse> ExecuteGetMerchantAlterApplyMerchantContactAlterApplymentByOutRequestNumberAsync(this WechatTenpayClient client, Models.GetMerchantAlterApplyMerchantContactAlterApplymentByOutRequestNumberRequest 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, "mchalterapply", "mchcontactalterapplyment", "merchant", request.SubMerchantId, "out-request-no", request.OutRequestNumber);
return await client.SendFlurlRequestAsJsonAsync<Models.GetMerchantAlterApplyMerchantContactAlterApplymentByOutRequestNumberResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /mchalterapply/mchcontactalterapplyment/{apply_id} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/doc/v3/partner/4014090655 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetMerchantAlterApplyMerchantContactAlterApplymentByApplymentIdResponse> ExecuteGetMerchantAlterApplyMerchantContactAlterApplymentByApplymentIdAsync(this WechatTenpayClient client, Models.GetMerchantAlterApplyMerchantContactAlterApplymentByApplymentIdRequest 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, "mchalterapply", "mchcontactalterapplyment", request.ApplymentId);
return await client.SendFlurlRequestAsJsonAsync<Models.GetMerchantAlterApplyMerchantContactAlterApplymentByApplymentIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region MerchantSubject
/// <summary>
/// <para>异步调用 [POST] /mchalterapply/mchsubjectalterapplyment 接口。</para>
/// <para>
@@ -95,5 +186,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync<Models.GetMerchantAlterApplyMerchantSubjectAlterApplymentByApplymentIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
}
}

View File

@@ -0,0 +1,189 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /ecommerce/applyments/submit-account-hosting-applyment 接口的请求。</para>
/// </summary>
[WechatTenpaySensitive]
public class CreateEcommerceApplymentForSubmitAccountHostingRequest : WechatTenpayRequest
{
public static class Types
{
public class BusinessLicense : CreateEcommerceApplymentRequest.Types.BusinessLicense
{
}
public class FinanceInstitutionLicense : CreateEcommerceApplymentRequest.Types.FinanceInstitutionLicense
{
}
public class IdCard : CreateEcommerceApplymentRequest.Types.IdCard
{
}
public class IdDocument : CreateEcommerceApplymentRequest.Types.IdDocument
{
}
public class Contact : CreateEcommerceApplymentRequest.Types.Contact
{
}
public class UBO : CreateEcommerceApplymentRequest.Types.UBO
{
}
public class BankAccount : CreateEcommerceApplymentRequest.Types.BankAccount
{
}
public class SaleScene : CreateEcommerceApplymentRequest.Types.SaleScene
{
}
public class Settlement : CreateEcommerceApplymentRequest.Types.Settlement
{
}
}
/// <summary>
/// 获取或设置业务申请编号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_request_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
public string OutRequestNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户简称。
/// </summary>
[Newtonsoft.Json.JsonProperty("merchant_shortname")]
[System.Text.Json.Serialization.JsonPropertyName("merchant_shortname")]
public string MerchantShortName { get; set; } = string.Empty;
/// <summary>
/// 获取或设置主体类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("organization_type")]
[System.Text.Json.Serialization.JsonPropertyName("organization_type")]
public string SubjectType { get; set; } = string.Empty;
/// <summary>
/// 获取或设置是否是金融机构。
/// </summary>
[Newtonsoft.Json.JsonProperty("finance_institution")]
[System.Text.Json.Serialization.JsonPropertyName("finance_institution")]
public bool? IsFinanceInstitution { get; set; }
/// <summary>
/// 获取或设置营业执照信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("business_license_info")]
[System.Text.Json.Serialization.JsonPropertyName("business_license_info")]
public Types.BusinessLicense? BusinessLicense { get; set; }
/// <summary>
/// 获取或设置金融机构许可证信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("finance_institution_info")]
[System.Text.Json.Serialization.JsonPropertyName("finance_institution_info")]
public Types.FinanceInstitutionLicense? FinanceInstitutionLicense { get; set; }
/// <summary>
/// 获取或设置证件持有人类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("id_holder_type")]
[System.Text.Json.Serialization.JsonPropertyName("id_holder_type")]
public string? IdHolderType { get; set; }
/// <summary>
/// 获取或设置法人证件类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("id_doc_type")]
[System.Text.Json.Serialization.JsonPropertyName("id_doc_type")]
public string IdentityType { get; set; } = string.Empty;
/// <summary>
/// 获取或设置身份证信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("id_card_info")]
[System.Text.Json.Serialization.JsonPropertyName("id_card_info")]
public Types.IdCard? IdCard { get; set; }
/// <summary>
/// 获取或设置其他类型证件信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("id_doc_info")]
[System.Text.Json.Serialization.JsonPropertyName("id_doc_info")]
public Types.IdDocument? IdDocument { get; set; }
/// <summary>
/// 获取或设置法人代表授权函媒体文件标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("authorize_letter_copy")]
[System.Text.Json.Serialization.JsonPropertyName("authorize_letter_copy")]
public string? AuthorizeLetterCopyMediaId { get; set; }
/// <summary>
/// 获取或设置最终受益人列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("ubo_info_list")]
[System.Text.Json.Serialization.JsonPropertyName("ubo_info_list")]
public IList<Types.UBO>? UBOList { get; set; }
/// <summary>
/// 获取或设置结算银行账户信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("account_info")]
[System.Text.Json.Serialization.JsonPropertyName("account_info")]
public Types.BankAccount BankAccount { get; set; } = new Types.BankAccount();
/// <summary>
/// 获取或设置超级管理员信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("contact_info")]
[System.Text.Json.Serialization.JsonPropertyName("contact_info")]
public Types.Contact Contact { get; set; } = new Types.Contact();
/// <summary>
/// 获取或设置销售场景信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("sales_scene_info")]
[System.Text.Json.Serialization.JsonPropertyName("sales_scene_info")]
public Types.SaleScene SaleScene { get; set; } = new Types.SaleScene();
/// <summary>
/// 获取或设置结算规则信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("settlement_info")]
[System.Text.Json.Serialization.JsonPropertyName("settlement_info")]
public Types.Settlement? Settlement { get; set; }
/// <summary>
/// 获取或设置特殊资质图片媒体文件标识 ID 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("qualifications")]
[System.Text.Json.Serialization.JsonPropertyName("qualifications")]
public IList<string>? QualificationPictureMediaIdList { get; set; }
/// <summary>
/// 获取或设置补充材料媒体文件标识 ID 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("business_addition_pics")]
[System.Text.Json.Serialization.JsonPropertyName("business_addition_pics")]
public IList<string>? BusinessAdditionPictureMediaIdList { get; set; }
/// <summary>
/// 获取或设置补充说明。
/// </summary>
[Newtonsoft.Json.JsonProperty("business_addition_desc")]
[System.Text.Json.Serialization.JsonPropertyName("business_addition_desc")]
public string? BusinessAdditionDescription { get; set; }
/// <summary>
/// 获取或设置是否走平台代理签约和代理核身入驻模式。
/// </summary>
[Newtonsoft.Json.JsonProperty("proxy_sign_verify_mode")]
[System.Text.Json.Serialization.JsonPropertyName("proxy_sign_verify_mode")]
public bool IsProxySignVerifyMode { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /ecommerce/applyments/submit-account-hosting-applyment 接口的响应。</para>
/// </summary>
public class CreateEcommerceApplymentForSubmitAccountHostingResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置业务申请编号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_request_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
public string OutRequestNumber { get; set; } = default!;
/// <summary>
/// 获取或设置申请单编号。
/// </summary>
[Newtonsoft.Json.JsonProperty("applyment_id")]
[System.Text.Json.Serialization.JsonPropertyName("applyment_id")]
public long ApplymentId { get; set; }
}
}

View File

@@ -0,0 +1,60 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /ecommerce/applyments/submit-sign-verify-info 接口的请求。</para>
/// </summary>
public class CreateEcommerceApplymentForSubmitSignVerifyInfoRequest : WechatTenpayRequest
{
public static class Types
{
public class ProxyVerifyIdentity
{
/// <summary>
/// 获取或设置核身方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("verify_identity_type")]
[System.Text.Json.Serialization.JsonPropertyName("verify_identity_type")]
public string VerifyIdentityType { get; set; } = string.Empty;
/// <summary>
/// 获取或设置核身结果。
/// </summary>
[Newtonsoft.Json.JsonProperty("verify_identity_result")]
[System.Text.Json.Serialization.JsonPropertyName("verify_identity_result")]
public bool VerifyIdentityResult { get; set; }
}
}
/// <summary>
/// 获取或设置业务申请编号。与字段 <see cref="ApplymentId"/> 二选一。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_request_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
public string? OutRequestNumber { get; set; }
/// <summary>
/// 获取或设置申请单编号。与字段 <see cref="OutRequestNumber"/> 二选一。
/// </summary>
[Newtonsoft.Json.JsonProperty("applyment_id")]
[System.Text.Json.Serialization.JsonPropertyName("applyment_id")]
public long? ApplymentId { get; set; }
/// <summary>
/// 获取或设置预签署微信支付协议时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("pre_sign_time")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
[System.Text.Json.Serialization.JsonPropertyName("pre_sign_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
public DateTimeOffset? PresignTime { get; set; }
/// <summary>
/// 获取或设置平台代理核身信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("proxy_verify_identity_info")]
[System.Text.Json.Serialization.JsonPropertyName("proxy_verify_identity_info")]
public Types.ProxyVerifyIdentity? ProxyVerifyIdentity { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /ecommerce/applyments/submit-sign-verify-info 接口的响应。</para>
/// </summary>
public class CreateEcommerceApplymentForSubmitSignVerifyInfoResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置申请单编号。
/// </summary>
[Newtonsoft.Json.JsonProperty("applyment_id")]
[System.Text.Json.Serialization.JsonPropertyName("applyment_id")]
public long ApplymentId { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /ecommerce/applyments/{applyment_id}/revoke 接口的请求。</para>
/// </summary>
public class RevokeEcommerceApplymentByApplymentIdRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置申请单编号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public long ApplymentId { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /ecommerce/applyments/{applyment_id}/revoke 接口的响应。</para>
/// </summary>
public class RevokeEcommerceApplymentByApplymentIdResponse : RevokeEcommerceApplymentByOutRequestNumberResponse
{
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /ecommerce/applyments/out-request-no/{out_request_no}/revoke 接口的请求。</para>
/// </summary>
public class RevokeEcommerceApplymentByOutRequestNumberRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置业务申请编号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string OutRequestNumber { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /ecommerce/applyments/out-request-no/{out_request_no}/revoke 接口的响应。</para>
/// </summary>
public class RevokeEcommerceApplymentByOutRequestNumberResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置申请单编号。
/// </summary>
[Newtonsoft.Json.JsonProperty("applyment_id")]
[System.Text.Json.Serialization.JsonPropertyName("applyment_id")]
public long ApplymentId { get; set; }
/// <summary>
/// 获取或设置业务申请编号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_request_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
public string OutRequestNumber { get; set; } = default!;
}
}

View File

@@ -0,0 +1,98 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /mchalterapply/mchcontactalterapplyment 接口的请求。</para>
/// </summary>
[WechatTenpaySensitive]
public class CreateMerchantAlterApplyMerchantContactAlterApplymentRequest : WechatTenpayRequest
{
public static class Types
{
public class Contact
{
/// <summary>
/// 获取或设置超级管理员姓名(需使用平台公钥/证书加密)。
/// </summary>
[Newtonsoft.Json.JsonProperty("contact_name")]
[System.Text.Json.Serialization.JsonPropertyName("contact_name")]
[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 ContactName { get; set; } = string.Empty;
/// <summary>
/// 获取或设置超级管理员证件类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("contact_id_doc_type")]
[System.Text.Json.Serialization.JsonPropertyName("contact_id_doc_type")]
public string? IdentityType { get; set; }
/// <summary>
/// 获取或设置超级管理员证件号码(需使用平台公钥/证书加密)。与字段 <see cref="OpenId"/> 二选一。
/// </summary>
[Newtonsoft.Json.JsonProperty("contact_id_card_number")]
[System.Text.Json.Serialization.JsonPropertyName("contact_id_card_number")]
[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? IdNumber { get; set; }
/// <summary>
/// 获取或设置超级管理员证件正面照片媒体文件标识 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("contact_id_doc_copy")]
[System.Text.Json.Serialization.JsonPropertyName("contact_id_doc_copy")]
public string? IdFrontCopyMediaId { get; set; }
/// <summary>
/// 获取或设置超级管理员证件背面照片媒体文件标识 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("contact_id_doc_copy_back")]
[System.Text.Json.Serialization.JsonPropertyName("contact_id_doc_copy_back")]
public string? IdBackCopyMediaId { get; set; }
/// <summary>
/// 获取或设置超级管理员证件有效期开始日期字符串格式yyyy-MM-dd
/// </summary>
[Newtonsoft.Json.JsonProperty("contact_id_doc_period_begin")]
[System.Text.Json.Serialization.JsonPropertyName("contact_id_doc_period_begin")]
public string? IdPeriodBeginDateString { get; set; }
/// <summary>
/// 获取或设置超级管理员证件有效期结束日期字符串格式yyyy-MM-dd / "长期")。
/// </summary>
[Newtonsoft.Json.JsonProperty("contact_id_doc_period_end")]
[System.Text.Json.Serialization.JsonPropertyName("contact_id_doc_period_end")]
public string? IdPeriodEndDateString { get; set; }
/// <summary>
/// 获取或设置联系人手机号(需使用平台公钥/证书加密)。
/// </summary>
[Newtonsoft.Json.JsonProperty("mobile_phone")]
[System.Text.Json.Serialization.JsonPropertyName("mobile_phone")]
[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 MobileNumber { get; set; } = string.Empty;
}
}
/// <summary>
/// 获取或设置特约商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("merchant_code")]
[System.Text.Json.Serialization.JsonPropertyName("merchant_code")]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置业务申请编号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_request_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
public string OutRequestNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置超级管理员信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("contact_info")]
[System.Text.Json.Serialization.JsonPropertyName("contact_info")]
public Types.Contact Contact { get; set; } = new Types.Contact();
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /mchalterapply/mchcontactalterapplyment 接口的响应。</para>
/// </summary>
public class CreateMerchantAlterApplyMerchantContactAlterApplymentResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置申请单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply_id")]
[System.Text.Json.Serialization.JsonPropertyName("apply_id")]
public string ApplymentId { get; set; } = default!;
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /mchalterapply/mchcontactalterapplyment/{apply_id} 接口的请求。</para>
/// </summary>
public class GetMerchantAlterApplyMerchantContactAlterApplymentByApplymentIdRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置申请单号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string ApplymentId { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /mchalterapply/mchcontactalterapplyment/{apply_id} 接口的响应。</para>
/// </summary>
public class GetMerchantAlterApplyMerchantContactAlterApplymentByApplymentIdResponse : GetMerchantAlterApplyMerchantContactAlterApplymentByOutRequestNumberResponse
{
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /mchalterapply/mchcontactalterapplyment/merchant/{merchant_code}/out-request-no/{out_request_no} 接口的请求。</para>
/// </summary>
public class GetMerchantAlterApplyMerchantContactAlterApplymentByOutRequestNumberRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置特约商户号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string SubMerchantId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置业务申请编号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string OutRequestNumber { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,70 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /mchalterapply/mchcontactalterapplyment/merchant/{merchant_code}/out-request-no/{out_request_no} 接口的响应。</para>
/// </summary>
public class GetMerchantAlterApplyMerchantContactAlterApplymentByOutRequestNumberResponse : WechatTenpayResponse
{
public static class Types
{
public class AuditRejectDetail
{
/// <summary>
/// 获取或设置参数名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("param_name")]
[System.Text.Json.Serialization.JsonPropertyName("param_name")]
public string ParameterName { get; set; } = default!;
/// <summary>
/// 获取或设置驳回原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("reject_reason")]
[System.Text.Json.Serialization.JsonPropertyName("reject_reason")]
public string RejectReason { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置特约商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("merchant_code")]
[System.Text.Json.Serialization.JsonPropertyName("merchant_code")]
public string SubMerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置业务申请编号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_request_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
public string OutRequestNumber { get; set; } = default!;
/// <summary>
/// 获取或设置申请单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply_id")]
[System.Text.Json.Serialization.JsonPropertyName("apply_id")]
public string ApplymentId { get; set; } = default!;
/// <summary>
/// 获取或设置申请单状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("state")]
[System.Text.Json.Serialization.JsonPropertyName("state")]
public string ApplymentState { get; set; } = default!;
/// <summary>
/// 获取或设置驳回原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("audit_reject_reason")]
[System.Text.Json.Serialization.JsonPropertyName("audit_reject_reason")]
public string? AuditRejectReason { get; set; }
/// <summary>
/// 获取或设置驳回原因详情列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("audit_reject_detail")]
[System.Text.Json.Serialization.JsonPropertyName("audit_reject_detail")]
public Types.AuditRejectDetail[]? AuditRejectDetailList { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /mchalterapply/mchcontactalterapplyment/{apply_id}/revoke 接口的请求。</para>
/// </summary>
public class RevokeMerchantAlterApplyMerchantContactAlterApplymentRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置申请单号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string ApplymentId { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /mchalterapply/mchcontactalterapplyment/{apply_id}/revoke 接口的响应。</para>
/// </summary>
public class RevokeMerchantAlterApplyMerchantContactAlterApplymentResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置申请单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply_id")]
[System.Text.Json.Serialization.JsonPropertyName("apply_id")]
public string ApplymentId { get; set; } = default!;
/// <summary>
/// 获取或设置申请单状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("state")]
[System.Text.Json.Serialization.JsonPropertyName("state")]
public string ApplymentState { get; set; } = default!;
}
}

View File

@@ -62,7 +62,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string? CompanyAddress { get; set; }
}
public class FinanceInstitutionLicense : CreateApplyForSubjectApplymentRequest.Types.Subject.Types.FinanceInstitutionLicense
public class FinanceInstitutionLicense : CreateApplyForSubMerchantApplymentRequest.Types.Subject.Types.FinanceInstitutionLicense
{
}

View File

@@ -9,7 +9,7 @@
### 【功能特性】
- 基于微信支付 v3 版 API 封装。
- 支持商户(直连模式)、合作伙伴(服务商、渠道商、机构、银行模式)两种角色模式。
- 支持普通商户(直连)、合作伙伴(服务商、渠道商、机构、银行)两种接入模式。\
- 请求时自动生成签名(支持国际 RSA 算法或国密 SM 算法),无需开发者手动干预。
- 提供了微信支付所需的 AES、RSA、SM2/SM3/SM4、SHA-256 等算法工具类。
- 提供了调起支付签名、解析响应敏感数据、解析回调通知事件敏感数据等扩展方法。