feat(tenpayv3): 新增直连商户委托代扣相关接口

This commit is contained in:
Fu Diwei
2024-05-07 15:25:26 +08:00
parent 8f0003de85
commit ddd8078ec9
62 changed files with 1508 additions and 32 deletions

View File

@@ -520,7 +520,7 @@
- 扣款服务
- 预扣费通知:`NotifyPAPayContract`
- 预扣费通知:`CreatePAPayContractNotification`
- 代扣服务切卡组件

View File

@@ -0,0 +1,117 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
{
/// <summary>
/// <para>表示委托代扣 ENTRUST.SIGN 通知的数据。</para>
/// <para>表示委托代扣 ENTRUST.TERMINATE 通知的数据。</para>
/// </summary>
public class PAPayEntrustResource : WechatTenpayEvent.Types.IDecryptedResource
{
public static class Types
{
public class Termination : Models.GetPAPaySignContractByOutContractCodeResponse.Types.Termination
{
}
public class DeductSchedule : Models.GetPAPaySignContractByOutContractCodeResponse.Types.DeductSchedule
{
}
}
/// <summary>
/// 获取或设置微信商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("mchid")]
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
public string MerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = default!;
/// <summary>
/// 获取或设置模板 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户签约协议号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_contract_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
public string OutContractCode { get; set; } = default!;
/// <summary>
/// 获取或设置委托代扣签约协议 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_id")]
[System.Text.Json.Serialization.JsonPropertyName("contract_id")]
public string ContractId { get; set; } = default!;
/// <summary>
/// 获取或设置协议状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_state")]
[System.Text.Json.Serialization.JsonPropertyName("contract_state")]
public string ContractState { get; set; } = default!;
/// <summary>
/// 获取或设置签署时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_signed_time")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
[System.Text.Json.Serialization.JsonPropertyName("contract_signed_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
public DateTimeOffset? SignTime { get; set; }
/// <summary>
/// 获取或设置到期时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_expired_time")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
[System.Text.Json.Serialization.JsonPropertyName("contract_expired_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
public DateTimeOffset? ExpireTime { get; set; }
/// <summary>
/// 获取或设置用户唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("openid")]
[System.Text.Json.Serialization.JsonPropertyName("openid")]
public string? OpenId { get; set; }
/// <summary>
/// 获取或设置用户账户展示名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_display_account")]
[System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
public string ContractDisplayAccount { get; set; } = default!;
/// <summary>
/// 获取或设置商户侧用户标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_user_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
public string? OutUserCode { get; set; }
/// <summary>
/// 获取或设置解约信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_terminate_info")]
[System.Text.Json.Serialization.JsonPropertyName("contract_terminate_info")]
public Types.Termination? Termination { get; set; }
/// <summary>
/// 获取或设置预约扣费场景的预约信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_schedule")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
public Types.DeductSchedule? DeductSchedule { get; set; }
}
}

View File

@@ -11,7 +11,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/h5-payment/payment-notice.html ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/native-payment/payment-notice.html ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/mini-program-payment/payment-notice.html ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/profit-sharing/notice-division.html ]]>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/profit-sharing/notice-division.html ]]> <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/entrusted-payment/deduct-result-notify.html ]]>
/// </para>
/// </summary>
public class TransactionResource : WechatTenpayEvent.Types.IDecryptedResource

View File

@@ -56,7 +56,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置用户唯一标识。

View File

@@ -41,7 +41,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Events
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置用户唯一标识。

View File

@@ -17,7 +17,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户侧签约协议号。

View File

@@ -26,7 +26,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户侧签约协议号。

View File

@@ -19,7 +19,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户侧签约协议号。

View File

@@ -10,6 +10,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("session_id")]
[System.Text.Json.Serialization.JsonPropertyName("session_id")]
public string SessionId { get; set; } = default!;
public string PresignSessionId { get; set; } = default!;
}
}

View File

@@ -10,6 +10,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("session_id")]
[System.Text.Json.Serialization.JsonPropertyName("session_id")]
public string SessionId { get; set; } = default!;
public string PresignSessionId { get; set; } = default!;
}
}

View File

@@ -19,7 +19,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.NotifyPAPayContractResponse> ExecuteNotifyPAPayContractAsync(this WechatTenpayClient client, Models.NotifyPAPayContractRequest request, CancellationToken cancellationToken = default)
public static async Task<Models.CreatePAPayContractNotificationResponse> ExecuteCreatePAPayContractNotificationAsync(this WechatTenpayClient client, Models.CreatePAPayContractNotificationRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
@@ -30,7 +30,213 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "papay", "contracts", request.ContractId, "notify");
return await client.SendFlurlRequestAsJsonAsync<Models.NotifyPAPayContractResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
return await client.SendFlurlRequestAsJsonAsync<Models.CreatePAPayContractNotificationResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#region PaySchedules
/// <summary>
/// <para>异步调用 [GET] /papay/pay/schedules/contract-id/{contract_id} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/entrusted-payment/normal/normal-query-deduct-schedule.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetPAPayPaySchedulesContractByContractIdResponse> ExecuteGetPAPayPaySchedulesContractByContractIdAsync(this WechatTenpayClient client, Models.GetPAPayPaySchedulesContractByContractIdRequest 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, "papay", "pay", "schedules", "contract-id", request.ContractId);
return await client.SendFlurlRequestAsJsonAsync<Models.GetPAPayPaySchedulesContractByContractIdResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /papay/pay/schedules/contract-id/{contract_id}/schedule 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/entrusted-payment/normal/normal-schedule-deduction.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CreatePAPayPaySchedulesContractScheduleResponse> ExecuteCreatePAPayPaySchedulesContractScheduleAsync(this WechatTenpayClient client, Models.CreatePAPayPaySchedulesContractScheduleRequest 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, "papay", "pay", "schedules", "contract-id", request.ContractId, "schedule");
return await client.SendFlurlRequestAsJsonAsync<Models.CreatePAPayPaySchedulesContractScheduleResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region PayTransactions
/// <summary>
/// <para>异步调用 [POST] /papay/pay/transactions/apply 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/entrusted-payment/normal/normal-schedule-deduction.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ApplyPAPayPayTransactionResponse> ExecuteApplyPAPayPayTransactionAsync(this WechatTenpayClient client, Models.ApplyPAPayPayTransactionRequest 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, "papay", "pay", "transactions", "apply");
return await client.SendFlurlRequestAsJsonAsync<Models.ApplyPAPayPayTransactionResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region ScheduledDeductSign
/// <summary>
/// <para>异步调用 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/app 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/entrusted-payment/normal/normal-app-scheduled-deduct-pre-sign.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.PresignPAPayScheduledDeductSignContractEntrustAppResponse> ExecutePresignPAPayScheduledDeductSignContractEntrustAppAsync(this WechatTenpayClient client, Models.PresignPAPayScheduledDeductSignContractEntrustAppRequest 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, "papay", "scheduled-deduct-sign", "contracts", "pre-entrust-sign", "app");
return await client.SendFlurlRequestAsJsonAsync<Models.PresignPAPayScheduledDeductSignContractEntrustAppResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/h5 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/entrusted-payment/normal/normal-h5-scheduled-deduct-pre-sign.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.PresignPAPayScheduledDeductSignContractEntrustH5Response> ExecutePresignPAPayScheduledDeductSignContractEntrustH5Async(this WechatTenpayClient client, Models.PresignPAPayScheduledDeductSignContractEntrustH5Request 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, "papay", "scheduled-deduct-sign", "contracts", "pre-entrust-sign", "h5");
return await client.SendFlurlRequestAsJsonAsync<Models.PresignPAPayScheduledDeductSignContractEntrustH5Response>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/jsapi 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/entrusted-payment/normal/jsapi-scheduled-deduct-pre-sign.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.PresignPAPayScheduledDeductSignContractEntrustJsapiResponse> ExecutePresignPAPayScheduledDeductSignContractEntrustJsapiAsync(this WechatTenpayClient client, Models.PresignPAPayScheduledDeductSignContractEntrustJsapiRequest 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, "papay", "scheduled-deduct-sign", "contracts", "pre-entrust-sign", "jsapi");
return await client.SendFlurlRequestAsJsonAsync<Models.PresignPAPayScheduledDeductSignContractEntrustJsapiResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/mini-program 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/entrusted-payment/normal/mini-program-scheduled-deduct-pre-sign.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.PresignPAPayScheduledDeductSignContractEntrustMiniProgramResponse> ExecutePresignPAPayScheduledDeductSignContractEntrustMiniProgramAsync(this WechatTenpayClient client, Models.PresignPAPayScheduledDeductSignContractEntrustMiniProgramRequest 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, "papay", "scheduled-deduct-sign", "contracts", "pre-entrust-sign", "mini-program");
return await client.SendFlurlRequestAsJsonAsync<Models.PresignPAPayScheduledDeductSignContractEntrustMiniProgramResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region SignContracts
/// <summary>
/// <para>异步调用 [GET] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code} 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/entrusted-payment/normal/normal-get-contract-by-code.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.GetPAPaySignContractByOutContractCodeResponse> ExecuteGetPAPaySignContractByOutContractCodeAsync(this WechatTenpayClient client, Models.GetPAPaySignContractByOutContractCodeRequest 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, "papay", "sign", "contracts", "plan-id", request.PlanId, "out-contract-code", request.OutContractCode);
return await client.SendFlurlRequestAsJsonAsync<Models.GetPAPaySignContractByOutContractCodeResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code}/terminate 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://pay.weixin.qq.com/docs/merchant/apis/entrusted-payment/normal/normal-terminate-contract-by-code.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.TerminatePAPaySignContractResponse> ExecuteTerminatePAPaySignContractAsync(this WechatTenpayClient client, Models.TerminatePAPaySignContractRequest 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, "papay", "sign", "contracts", "plan-id", request.PlanId, "out-contract-code", request.OutContractCode, "terminate");
return await client.SendFlurlRequestAsJsonAsync<Models.TerminatePAPaySignContractResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
}
}

View File

@@ -19,7 +19,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.NotifyPartnerPAPayContractResponse> ExecuteNotifyPartnerPAPayContractAsync(this WechatTenpayClient client, Models.NotifyPartnerPAPayContractRequest request, CancellationToken cancellationToken = default)
public static async Task<Models.CreatePartnerPAPayContractNotificationResponse> ExecuteCreatePartnerPAPayContractNotificationAsync(this WechatTenpayClient client, Models.CreatePartnerPAPayContractNotificationRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
@@ -30,7 +30,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "partner-papay", "contracts", request.ContractId, "notify");
return await client.SendFlurlRequestAsJsonAsync<Models.NotifyPartnerPAPayContractResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
return await client.SendFlurlRequestAsJsonAsync<Models.CreatePartnerPAPayContractNotificationResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
}
}

View File

@@ -27,11 +27,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string OpenId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户用户账号。
/// 获取或设置商户用户账号标识
/// </summary>
[Newtonsoft.Json.JsonProperty("user_id")]
[System.Text.Json.Serialization.JsonPropertyName("user_id")]
public string UserDisplayId { get; set; } = string.Empty;
public string OutUserId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置首次扣款日期字符串格式yyyy-MM-dd

View File

@@ -3,7 +3,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// <summary>
/// <para>表示 [POST] /papay/contracts/{contract_id}/notify 接口的请求。</para>
/// </summary>
public class NotifyPAPayContractRequest : WechatTenpayRequest
public class CreatePAPayContractNotificationRequest : WechatTenpayRequest
{
public static class Types
{

View File

@@ -3,7 +3,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// <summary>
/// <para>表示 [POST] /papay/contracts/{contract_id}/notify 接口的响应。</para>
/// </summary>
public class NotifyPAPayContractResponse : WechatTenpayResponse
public class CreatePAPayContractNotificationResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,36 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/pay/schedules/contract-id/{contract_id}/schedule 接口的请求。</para>
/// </summary>
public class CreatePAPayPaySchedulesContractScheduleRequest : WechatTenpayRequest
{
public static class Types
{
public class Amount : PresignPAPayScheduledDeductSignContractEntrustAppRequest.Types.DeductSchedule.Types.Amount
{
}
}
/// <summary>
/// 获取或设置委托代扣签约协议 ID。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string ContractId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置预约的金额信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("schedule_amount")]
[System.Text.Json.Serialization.JsonPropertyName("schedule_amount")]
public Types.Amount ScheduleAmount { get; set; } = new Types.Amount();
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/pay/schedules/contract-id/{contract_id}/schedule 接口的响应。</para>
/// </summary>
public class CreatePAPayPaySchedulesContractScheduleResponse : GetPAPayPaySchedulesContractByContractIdResponse
{
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /papay/pay/schedules/contract-id/{contract_id} 接口的请求。</para>
/// </summary>
public class GetPAPayPaySchedulesContractByContractIdRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置委托代扣签约协议 ID。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string ContractId { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,70 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /papay/pay/schedules/contract-id/{contract_id} 接口的响应。</para>
/// </summary>
public class GetPAPayPaySchedulesContractByContractIdResponse : WechatTenpayResponse
{
public static class Types
{
public class Amount
{
/// <summary>
/// 获取或设置金额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("total")]
[System.Text.Json.Serialization.JsonPropertyName("total")]
public int Total { get; set; }
/// <summary>
/// 获取或设置货币类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("currency")]
[System.Text.Json.Serialization.JsonPropertyName("currency")]
public string? Currency { get; set; }
}
}
/// <summary>
/// 获取或设置扣费预约状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("schedule_state")]
[System.Text.Json.Serialization.JsonPropertyName("schedule_state")]
public string ScheduleState { get; set; } = default!;
/// <summary>
/// 获取或设置可扣费开始日期字符串格式yyyy-MM-dd
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_start_date")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_start_date")]
public string? DeductStartDateString { get; set; }
/// <summary>
/// 获取或设置可扣费结束日期字符串格式yyyy-MM-dd
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_end_date")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_end_date")]
public string? DeductEndDateString { get; set; }
/// <summary>
/// 获取或设置已预约的扣费金额信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("scheduled_amount")]
[System.Text.Json.Serialization.JsonPropertyName("scheduled_amount")]
public Types.Amount? ScheduledAmount { get; set; }
/// <summary>
/// 获取或设置实际扣费金额信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_amount")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_amount")]
public Types.Amount? DeductAmount { get; set; }
/// <summary>
/// 获取或设置实际扣费日期字符串格式yyyy-MM-dd
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_date")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_date")]
public string? DeductDateString { get; set; }
}
}

View File

@@ -0,0 +1,71 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/pay/transactions/apply 接口的请求。</para>
/// </summary>
public class ApplyPAPayPayTransactionRequest : WechatTenpayRequest
{
public static class Types
{
public class Amount : PresignPAPayScheduledDeductSignContractEntrustAppRequest.Types.DeductSchedule.Types.Amount
{
}
}
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户订单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_trade_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
public string OutTradeNumber { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商品描述。
/// </summary>
[Newtonsoft.Json.JsonProperty("description")]
[System.Text.Json.Serialization.JsonPropertyName("description")]
public string Description { get; set; } = string.Empty;
/// <summary>
/// 获取或设置委托代扣签约协议 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_id")]
[System.Text.Json.Serialization.JsonPropertyName("contract_id")]
public string ContractId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置回调通知地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("transaction_notify_url")]
[System.Text.Json.Serialization.JsonPropertyName("transaction_notify_url")]
public string NotifyUrl { get; set; } = string.Empty;
/// <summary>
/// 获取或设置订单优惠标记。
/// </summary>
[Newtonsoft.Json.JsonProperty("goods_tag")]
[System.Text.Json.Serialization.JsonPropertyName("goods_tag")]
public string? GoodsTag { get; set; }
/// <summary>
/// 获取或设置附加数据。
/// </summary>
[Newtonsoft.Json.JsonProperty("attach")]
[System.Text.Json.Serialization.JsonPropertyName("attach")]
public string? Attachment { get; set; }
/// <summary>
/// 获取或设置金额信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("amount")]
[System.Text.Json.Serialization.JsonPropertyName("amount")]
public Types.Amount Amount { get; set; } = new Types.Amount();
}
}

View File

@@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/pay/transactions/apply 接口的响应。</para>
/// </summary>
public class ApplyPAPayPayTransactionResponse : WechatTenpayResponse
{
public static class Types
{
public class Amount : GetPAPayPaySchedulesContractByContractIdResponse.Types.Amount
{
}
}
/// <summary>
/// 获取或设置商户订单号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_trade_no")]
[System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
public string OutTradeNumber { get; set; } = default!;
/// <summary>
/// 获取或设置扣费金额信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("amount")]
[System.Text.Json.Serialization.JsonPropertyName("amount")]
public Types.Amount Amount { get; set; } = default!;
}
}

View File

@@ -0,0 +1,111 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/app 接口的请求。</para>
/// </summary>
public class PresignPAPayScheduledDeductSignContractEntrustAppRequest : WechatTenpayRequest
{
public static class Types
{
public class DeductSchedule
{
public static class Types
{
public class Amount
{
/// <summary>
/// 获取或设置金额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("total")]
[System.Text.Json.Serialization.JsonPropertyName("total")]
public int Total { get; set; }
/// <summary>
/// 获取或设置货币类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("currency")]
[System.Text.Json.Serialization.JsonPropertyName("currency")]
public string? Currency { get; set; }
}
}
/// <summary>
/// 获取或设置预计扣费的日期字符串格式yyyy-MM-dd
/// </summary>
[Newtonsoft.Json.JsonProperty("estimated_deduct_date")]
[System.Text.Json.Serialization.JsonPropertyName("estimated_deduct_date")]
public string EstimatedDeductDateString { get; set; } = string.Empty;
/// <summary>
/// 获取或设置预计的扣费金额信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("estimated_deduct_amount")]
[System.Text.Json.Serialization.JsonPropertyName("estimated_deduct_amount")]
public Types.Amount EstimatedDeductAmount { get; set; } = new Types.Amount();
/// <summary>
/// 获取或设置商品描述。
/// </summary>
[Newtonsoft.Json.JsonProperty("description")]
[System.Text.Json.Serialization.JsonPropertyName("description")]
public string Description { get; set; } = string.Empty;
}
}
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置模板 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户签约协议号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_contract_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
public string OutContractCode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置用户唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("openid")]
[System.Text.Json.Serialization.JsonPropertyName("openid")]
public string? OpenId { get; set; }
/// <summary>
/// 获取或设置用户账户展示名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_display_account")]
[System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
public string ContractDisplayAccount { get; set; } = string.Empty;
/// <summary>
/// 获取或设置签约结果回调通知地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_notify_url")]
[System.Text.Json.Serialization.JsonPropertyName("contract_notify_url")]
public string ContractNotifyUrl { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户侧用户标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_user_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
public string? OutUserCode { get; set; }
/// <summary>
/// 获取或设置预约信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_schedule")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
public Types.DeductSchedule? DeductSchedule { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/app 接口的响应。</para>
/// </summary>
public class PresignPAPayScheduledDeductSignContractEntrustAppResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置预签约会话 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("pre_entrustweb_id")]
[System.Text.Json.Serialization.JsonPropertyName("pre_entrustweb_id")]
public string PresignSessionId { get; set; } = default!;
}
}

View File

@@ -0,0 +1,94 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/h5 接口的请求。</para>
/// </summary>
public class PresignPAPayScheduledDeductSignContractEntrustH5Request : WechatTenpayRequest
{
public static class Types
{
public class DeductSchedule : PresignPAPayScheduledDeductSignContractEntrustAppRequest.Types.DeductSchedule
{
public static new class Types
{
public class Amount : PresignPAPayScheduledDeductSignContractEntrustAppRequest.Types.DeductSchedule.Types.Amount
{
}
}
}
public class JumpControl
{
/// <summary>
/// 获取或设置跳转应用的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("jump_appid")]
[System.Text.Json.Serialization.JsonPropertyName("jump_appid")]
public string JumpAppId { get; set; } = string.Empty;
}
}
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置模板 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户签约协议号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_contract_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
public string OutContractCode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置用户唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("openid")]
[System.Text.Json.Serialization.JsonPropertyName("openid")]
public string? OpenId { get; set; }
/// <summary>
/// 获取或设置用户账户展示名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_display_account")]
[System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
public string ContractDisplayAccount { get; set; } = string.Empty;
/// <summary>
/// 获取或设置签约结果回调通知地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_notify_url")]
[System.Text.Json.Serialization.JsonPropertyName("contract_notify_url")]
public string ContractNotifyUrl { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户侧用户标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_user_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
public string? OutUserCode { get; set; }
/// <summary>
/// 获取或设置预约信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_schedule")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
public Types.DeductSchedule? DeductSchedule { get; set; }
/// <summary>
/// 获取或设置跳转控制信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("jump_control")]
[System.Text.Json.Serialization.JsonPropertyName("jump_control")]
public Types.JumpControl? JumpControl { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/h5 接口的响应。</para>
/// </summary>
public class PresignPAPayScheduledDeductSignContractEntrustH5Response : WechatTenpayResponse
{
/// <summary>
/// 获取或设置跳转 URL。
/// </summary>
[Newtonsoft.Json.JsonProperty("redirect_url")]
[System.Text.Json.Serialization.JsonPropertyName("redirect_url")]
public string RedirectUrl { get; set; } = default!;
}
}

View File

@@ -0,0 +1,77 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/jsapi 接口的请求。</para>
/// </summary>
public class PresignPAPayScheduledDeductSignContractEntrustJsapiRequest : WechatTenpayRequest
{
public static class Types
{
public class DeductSchedule : PresignPAPayScheduledDeductSignContractEntrustAppRequest.Types.DeductSchedule
{
public static new class Types
{
public class Amount : PresignPAPayScheduledDeductSignContractEntrustAppRequest.Types.DeductSchedule.Types.Amount
{
}
}
}
}
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置模板 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户签约协议号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_contract_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
public string OutContractCode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置用户唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("openid")]
[System.Text.Json.Serialization.JsonPropertyName("openid")]
public string? OpenId { get; set; }
/// <summary>
/// 获取或设置用户账户展示名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_display_account")]
[System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
public string ContractDisplayAccount { get; set; } = string.Empty;
/// <summary>
/// 获取或设置签约结果回调通知地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_notify_url")]
[System.Text.Json.Serialization.JsonPropertyName("contract_notify_url")]
public string ContractNotifyUrl { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户侧用户标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_user_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
public string? OutUserCode { get; set; }
/// <summary>
/// 获取或设置预约信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_schedule")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
public Types.DeductSchedule? DeductSchedule { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/jsapi 接口的响应。</para>
/// </summary>
public class PresignPAPayScheduledDeductSignContractEntrustJsapiResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置跳转 URL。
/// </summary>
[Newtonsoft.Json.JsonProperty("redirect_url")]
[System.Text.Json.Serialization.JsonPropertyName("redirect_url")]
public string RedirectUrl { get; set; } = default!;
}
}

View File

@@ -0,0 +1,77 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/mini-program 接口的请求。</para>
/// </summary>
public class PresignPAPayScheduledDeductSignContractEntrustMiniProgramRequest : WechatTenpayRequest
{
public static class Types
{
public class DeductSchedule : PresignPAPayScheduledDeductSignContractEntrustAppRequest.Types.DeductSchedule
{
public static new class Types
{
public class Amount : PresignPAPayScheduledDeductSignContractEntrustAppRequest.Types.DeductSchedule.Types.Amount
{
}
}
}
}
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置模板 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户签约协议号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_contract_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
public string OutContractCode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置用户唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("openid")]
[System.Text.Json.Serialization.JsonPropertyName("openid")]
public string? OpenId { get; set; }
/// <summary>
/// 获取或设置用户账户展示名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_display_account")]
[System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
public string ContractDisplayAccount { get; set; } = string.Empty;
/// <summary>
/// 获取或设置签约结果回调通知地址。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_notify_url")]
[System.Text.Json.Serialization.JsonPropertyName("contract_notify_url")]
public string ContractNotifyUrl { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户侧用户标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_user_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
public string? OutUserCode { get; set; }
/// <summary>
/// 获取或设置预约信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_schedule")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
public Types.DeductSchedule? DeductSchedule { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/mini-program 接口的响应。</para>
/// </summary>
public class PresignPAPayScheduledDeductSignContractEntrustMiniProgramResponse : WechatTenpayResponse
{
/// <summary>
/// 获取或设置预签约会话 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("pre_entrustweb_id")]
[System.Text.Json.Serialization.JsonPropertyName("pre_entrustweb_id")]
public string PresignSessionId { get; set; } = default!;
/// <summary>
/// 获取或设置跳转小程序 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("redirect_appid")]
[System.Text.Json.Serialization.JsonPropertyName("redirect_appid")]
public string RedirectAppId { get; set; } = default!;
/// <summary>
/// 获取或设置跳转小程序页面路径。
/// </summary>
[Newtonsoft.Json.JsonProperty("redirect_path")]
[System.Text.Json.Serialization.JsonPropertyName("redirect_path")]
public string RedirectPagePath { get; set; } = default!;
}
}

View File

@@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code} 接口的请求。</para>
/// </summary>
public class GetPAPaySignContractByOutContractCodeRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置商户签约协议号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string OutContractCode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置模板 ID。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public long PlanId { get; set; }
}
}

View File

@@ -0,0 +1,186 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [GET] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code} 接口的响应。</para>
/// </summary>
public class GetPAPaySignContractByOutContractCodeResponse : WechatTenpayResponse
{
public static class Types
{
public class Termination
{
/// <summary>
/// 获取或设置解约时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_terminated_time")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
[System.Text.Json.Serialization.JsonPropertyName("contract_terminated_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
public DateTimeOffset TerminateTime { get; set; }
/// <summary>
/// 获取或设置解约方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_termination_mode")]
[System.Text.Json.Serialization.JsonPropertyName("contract_termination_mode")]
public string TerminationMode { get; set; } = default!;
/// <summary>
/// 获取或设置解约备注。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_termination_remark")]
[System.Text.Json.Serialization.JsonPropertyName("contract_termination_remark")]
public string TerminationRemark { get; set; } = default!;
}
public class DeductSchedule
{
public static class Types
{
public class Amount : GetPAPayPaySchedulesContractByContractIdResponse.Types.Amount
{
}
}
/// <summary>
/// 获取或设置预计扣费的日期字符串格式yyyy-MM-dd
/// </summary>
[Newtonsoft.Json.JsonProperty("estimated_deduct_date")]
[System.Text.Json.Serialization.JsonPropertyName("estimated_deduct_date")]
public string EstimatedDeductDateString { get; set; } = default!;
/// <summary>
/// 获取或设置预计的扣费金额信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("estimated_deduct_amount")]
[System.Text.Json.Serialization.JsonPropertyName("estimated_deduct_amount")]
public Types.Amount EstimatedDeductAmount { get; set; } = default!;
/// <summary>
/// 获取或设置扣费预约状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("schedule_state")]
[System.Text.Json.Serialization.JsonPropertyName("schedule_state")]
public string ScheduleState { get; set; } = default!;
/// <summary>
/// 获取或设置已预约的扣费金额信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("scheduled_amount")]
[System.Text.Json.Serialization.JsonPropertyName("scheduled_amount")]
public Types.Amount? ScheduledAmount { get; set; }
/// <summary>
/// 获取或设置实际扣费金额信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_amount")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_amount")]
public Types.Amount? DeductAmount { get; set; }
/// <summary>
/// 获取或设置实际扣费日期字符串格式yyyy-MM-dd
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_date")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_date")]
public string? DeductDateString { get; set; }
}
}
/// <summary>
/// 获取或设置微信商户号。
/// </summary>
[Newtonsoft.Json.JsonProperty("mchid")]
[System.Text.Json.Serialization.JsonPropertyName("mchid")]
public string MerchantId { get; set; } = default!;
/// <summary>
/// 获取或设置微信 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = default!;
/// <summary>
/// 获取或设置模板 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户签约协议号。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_contract_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
public string OutContractCode { get; set; } = default!;
/// <summary>
/// 获取或设置委托代扣签约协议 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_id")]
[System.Text.Json.Serialization.JsonPropertyName("contract_id")]
public string ContractId { get; set; } = default!;
/// <summary>
/// 获取或设置协议状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_state")]
[System.Text.Json.Serialization.JsonPropertyName("contract_state")]
public string ContractState { get; set; } = default!;
/// <summary>
/// 获取或设置签署时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_signed_time")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
[System.Text.Json.Serialization.JsonPropertyName("contract_signed_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
public DateTimeOffset? SignTime { get; set; }
/// <summary>
/// 获取或设置到期时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_expired_time")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
[System.Text.Json.Serialization.JsonPropertyName("contract_expired_time")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
public DateTimeOffset? ExpireTime { get; set; }
/// <summary>
/// 获取或设置用户唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("openid")]
[System.Text.Json.Serialization.JsonPropertyName("openid")]
public string? OpenId { get; set; }
/// <summary>
/// 获取或设置用户账户展示名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_display_account")]
[System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
public string ContractDisplayAccount { get; set; } = default!;
/// <summary>
/// 获取或设置商户侧用户标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("out_user_code")]
[System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
public string? OutUserCode { get; set; }
/// <summary>
/// 获取或设置解约信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_terminate_info")]
[System.Text.Json.Serialization.JsonPropertyName("contract_terminate_info")]
public Types.Termination? Termination { get; set; }
/// <summary>
/// 获取或设置预约扣费场景的预约信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("deduct_schedule")]
[System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
public Types.DeductSchedule? DeductSchedule { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code}/terminate 接口的请求。</para>
/// </summary>
public class TerminatePAPaySignContractRequest : WechatTenpayRequest
{
/// <summary>
/// 获取或设置商户签约协议号。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public string OutContractCode { get; set; } = string.Empty;
/// <summary>
/// 获取或设置模板 ID。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public long PlanId { get; set; }
/// <summary>
/// 获取或设置解约备注。
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_termination_remark")]
[System.Text.Json.Serialization.JsonPropertyName("contract_termination_remark")]
public string TerminationRemark { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
/// <summary>
/// <para>表示 [POST] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code}/terminate 接口的响应。</para>
/// </summary>
public class TerminatePAPaySignContractResponse : GetPAPaySignContractByOutContractCodeResponse
{
}
}

View File

@@ -10,7 +10,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户侧签约协议号。

View File

@@ -55,7 +55,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户签约协议号。
@@ -83,7 +83,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("contract_state")]
[System.Text.Json.Serialization.JsonPropertyName("contract_state")]
public string State { get; set; } = default!;
public string ContractState { get; set; } = default!;
/// <summary>
/// 获取或设置用户唯一标识。

View File

@@ -17,7 +17,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户签约协议号。

View File

@@ -17,7 +17,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户签约协议号。
@@ -31,6 +31,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("pre_entrustweb_id")]
[System.Text.Json.Serialization.JsonPropertyName("pre_entrustweb_id")]
public string SessionId { get; set; } = default!;
public string PresignSessionId { get; set; } = default!;
}
}

View File

@@ -10,7 +10,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户侧签约协议号。

View File

@@ -19,7 +19,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// </summary>
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
public int PlanId { get; set; }
public long PlanId { get; set; }
/// <summary>
/// 获取或设置商户签约协议号。

View File

@@ -77,11 +77,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string ContractId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户用户账号。
/// 获取或设置商户用户账号标识
/// </summary>
[Newtonsoft.Json.JsonProperty("user_id")]
[System.Text.Json.Serialization.JsonPropertyName("user_id")]
public string UserDisplayId { get; set; } = string.Empty;
public string OutUserId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户订单号。

View File

@@ -94,11 +94,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string OpenId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置商户用户账号。
/// 获取或设置商户用户账号标识
/// </summary>
[Newtonsoft.Json.JsonProperty("user_id")]
[System.Text.Json.Serialization.JsonPropertyName("user_id")]
public string UserDisplayId { get; set; } = string.Empty;
public string OutUserId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置学校编号。

View File

@@ -3,11 +3,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// <summary>
/// <para>表示 [POST] /partner-papay/contracts/{contract_id}/notify 接口的请求。</para>
/// </summary>
public class NotifyPartnerPAPayContractRequest : WechatTenpayRequest
public class CreatePartnerPAPayContractNotificationRequest : WechatTenpayRequest
{
public static class Types
{
public class Amount : NotifyPAPayContractRequest.Types.Amount
public class Amount : CreatePAPayContractNotificationRequest.Types.Amount
{
}
}

View File

@@ -3,7 +3,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
/// <summary>
/// <para>表示 [POST] /partner-papay/contracts/{contract_id}/notify 接口的响应。</para>
/// </summary>
public class NotifyPartnerPAPayContractResponse : WechatTenpayResponse
public class CreatePartnerPAPayContractNotificationResponse : WechatTenpayResponse
{
}
}

View File

@@ -0,0 +1,30 @@
{
"appid": "wxd678efh567hg6787",
"contract_display_account": "微信代扣用户A",
"contract_expired_time": "2021-09-10T13:29:35+08:00",
"contract_id": "123124412412423431",
"contract_signed_time": "2020-09-10T13:29:35+08:00",
"contract_state": "SIGNED",
"deduct_schedule": {
"deduct_amount": {
"currency": "CNY",
"total": 1
},
"deduct_date": "2019-11-22",
"estimated_deduct_amount": {
"currency": "CNY",
"total": 1
},
"estimated_deduct_date": "2019-11-22",
"schedule_state": "PAID",
"scheduled_amount": {
"currency": "CNY",
"total": 1
}
},
"mchid": "1900000109",
"openid": "o-MYE42l80oelYMDE34nYD456Xoy",
"out_contract_code": "wxwtdk20200910100000",
"out_user_code": "用户A",
"plan_id": 12535
}

View File

@@ -0,0 +1,7 @@
{
"appid": "wxd678efh567hg6787",
"schedule_amount": {
"total": 1,
"currency": "CNY"
}
}

View File

@@ -0,0 +1,14 @@
{
"schedule_state": "NO_SCHEDULED",
"deduct_start_date": "2019-11-22",
"deduct_end_date": "2019-11-22",
"scheduled_amount": {
"total": 1,
"currency": "CNY"
},
"deduct_amount": {
"total": 1,
"currency": "CNY"
},
"deduct_date": "2019-11-22"
}

View File

@@ -0,0 +1,14 @@
{
"schedule_state": "NO_SCHEDULED",
"deduct_start_date": "2019-11-22",
"deduct_end_date": "2019-11-22",
"scheduled_amount": {
"total": 1,
"currency": "CNY"
},
"deduct_amount": {
"total": 1,
"currency": "CNY"
},
"deduct_date": "2019-11-22"
}

View File

@@ -0,0 +1,13 @@
{
"appid": "wxd678efh567hg6787",
"out_trade_no": "1217752501201407033233368018",
"description": "Image形象店-深圳腾大-QQ公仔",
"transaction_notify_url": "https://www.qq.com/",
"contract_id": "123124412412423431",
"amount": {
"total": 1,
"currency": "CNY"
},
"goods_tag": "DISCOUNTS",
"attach": "自定义数据"
}

View File

@@ -0,0 +1,7 @@
{
"out_trade_no": "1217752501201407033233368018",
"amount": {
"total": 1,
"currency": "CNY"
}
}

View File

@@ -0,0 +1,17 @@
{
"appid": "wxd678efh567hg6787",
"openid": "oYobu0MVnQfWpSMOYJz2AHPG_gQw",
"plan_id": 12535,
"out_contract_code": "wxwtdk20200910100000",
"contract_display_account": "微信代扣用户A",
"contract_notify_url": "https://yourapp.com/notify",
"out_user_code": "用户A",
"deduct_schedule": {
"estimated_deduct_date": "2019-11-22",
"estimated_deduct_amount": {
"total": 1,
"currency": "CNY"
},
"description": "小乔-碎云皮肤微信83区沧海之耀"
}
}

View File

@@ -0,0 +1,20 @@
{
"appid": "wxd678efh567hg6787",
"openid": "oYobu0MVnQfWpSMOYJz2AHPG_gQw",
"plan_id": 12535,
"out_contract_code": "wxwtdk20200910100000",
"contract_display_account": "微信代扣用户A",
"contract_notify_url": "https://yourapp.com/notify",
"out_user_code": "用户A",
"deduct_schedule": {
"estimated_deduct_date": "2019-11-22",
"estimated_deduct_amount": {
"total": 1,
"currency": "CNY"
},
"description": "小乔-碎云皮肤微信83区沧海之耀"
},
"jump_control": {
"jump_appid": "wxd678efh567hg6787"
}
}

View File

@@ -0,0 +1,3 @@
{
"redirect_url": "https://www.xxx.com/xxxtemplate?session_id=wx12334"
}

View File

@@ -0,0 +1,17 @@
{
"appid": "wxd678efh567hg6787",
"openid": "oYobu0MVnQfWpSMOYJz2AHPG_gQw",
"plan_id": 12535,
"out_contract_code": "wxwtdk20200910100000",
"contract_display_account": "微信代扣用户A",
"contract_notify_url": "https://yourapp.com/notify",
"out_user_code": "用户A",
"deduct_schedule": {
"estimated_deduct_date": "2019-11-22",
"estimated_deduct_amount": {
"total": 1,
"currency": "CNY"
},
"description": "小乔-碎云皮肤微信83区沧海之耀"
}
}

View File

@@ -0,0 +1,3 @@
{
"redirect_url": "https://www.xxx.com?pre_entrust_id=wx12334"
}

View File

@@ -0,0 +1,17 @@
{
"appid": "wxd678efh567hg6787",
"openid": "oYobu0MVnQfWpSMOYJz2AHPG_gQw",
"plan_id": 12535,
"out_contract_code": "wxwtdk20200910100000",
"contract_display_account": "微信代扣用户A",
"contract_notify_url": "https://yourapp.com/notify",
"out_user_code": "用户A",
"deduct_schedule": {
"estimated_deduct_date": "2019-11-22",
"estimated_deduct_amount": {
"total": 1,
"currency": "CNY"
},
"description": "小乔-碎云皮肤微信83区沧海之耀"
}
}

View File

@@ -0,0 +1,5 @@
{
"pre_entrustweb_id": "5778aadY9nltAsZzXixCkFIGYnV2V",
"redirect_appid": "wxbd687630cd02ce1d",
"redirect_path": "pages/PwdExemptContract/index"
}

View File

@@ -0,0 +1,35 @@
{
"mchid": "1900000109",
"contract_id": "123124412412423431",
"appid": "wxd678efh567hg6787",
"plan_id": 12535,
"out_contract_code": "wxwtdk20200910100000",
"contract_display_account": "微信代扣用户A",
"contract_state": "SIGNED",
"contract_signed_time": "2020-09-10T13:29:35+08:00",
"contract_expired_time": "2021-09-10T13:29:35+08:00",
"openid": "o-MYE42l80oelYMDE34nYD456Xoy",
"contract_terminate_info": {
"contract_termination_mode": "USER_TERMINATE",
"contract_terminated_time": "2020-10-10T13:29:35+08:00",
"contract_termination_remark": "用户解约"
},
"out_user_code": "用户A",
"deduct_schedule": {
"estimated_deduct_date": "2019-11-22",
"estimated_deduct_amount": {
"total": 1,
"currency": "CNY"
},
"schedule_state": "NO_SCHEDULED",
"scheduled_amount": {
"total": 1,
"currency": "CNY"
},
"deduct_amount": {
"total": 1,
"currency": "CNY"
},
"deduct_date": "2019-11-22"
}
}

View File

@@ -0,0 +1,3 @@
{
"contract_termination_remark": "用户解约"
}

View File

@@ -0,0 +1,35 @@
{
"mchid": "1900000109",
"contract_id": "123124412412423431",
"appid": "wxd678efh567hg6787",
"plan_id": 12535,
"out_contract_code": "wxwtdk20200910100000",
"contract_display_account": "微信代扣用户A",
"contract_state": "SIGNED",
"contract_signed_time": "2020-09-10T13:29:35+08:00",
"contract_expired_time": "2021-09-10T13:29:35+08:00",
"openid": "o-MYE42l80oelYMDE34nYD456Xoy",
"contract_terminate_info": {
"contract_termination_mode": "USER_TERMINATE",
"contract_terminated_time": "2020-10-10T13:29:35+08:00",
"contract_termination_remark": "用户解约"
},
"out_user_code": "用户A",
"deduct_schedule": {
"estimated_deduct_date": "2019-11-22",
"estimated_deduct_amount": {
"total": 1,
"currency": "CNY"
},
"schedule_state": "NO_SCHEDULED",
"scheduled_amount": {
"total": 1,
"currency": "CNY"
},
"deduct_amount": {
"total": 1,
"currency": "CNY"
},
"deduct_date": "2019-11-22"
}
}