diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md
index 617d180f..6c7abd7a 100644
--- a/docs/WechatTenpayV3/Basic_ModelDefinition.md
+++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md
@@ -520,7 +520,7 @@
- 扣款服务
- - 预扣费通知:`NotifyPAPayContract`
+ - 预扣费通知:`CreatePAPayContractNotification`
- 代扣服务切卡组件
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/PAPay/PAPayEntrustResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/PAPay/PAPayEntrustResource.cs
new file mode 100644
index 00000000..97039ac9
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/PAPay/PAPayEntrustResource.cs
@@ -0,0 +1,117 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
+{
+ ///
+ /// 表示委托代扣 ENTRUST.SIGN 通知的数据。
+ /// 表示委托代扣 ENTRUST.TERMINATE 通知的数据。
+ ///
+ public class PAPayEntrustResource : WechatTenpayEvent.Types.IDecryptedResource
+ {
+ public static class Types
+ {
+ public class Termination : Models.GetPAPaySignContractByOutContractCodeResponse.Types.Termination
+ {
+ }
+
+ public class DeductSchedule : Models.GetPAPaySignContractByOutContractCodeResponse.Types.DeductSchedule
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string MerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_id")]
+ public long PlanId { get; set; }
+
+ ///
+ /// 获取或设置商户签约协议号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_contract_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
+ public string OutContractCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置委托代扣签约协议 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_id")]
+ public string ContractId { get; set; } = default!;
+
+ ///
+ /// 获取或设置协议状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_state")]
+ public string ContractState { get; set; } = default!;
+
+ ///
+ /// 获取或设置签署时间。
+ ///
+ [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; }
+
+ ///
+ /// 获取或设置到期时间。
+ ///
+ [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; }
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string? OpenId { get; set; }
+
+ ///
+ /// 获取或设置用户账户展示名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_display_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
+ public string ContractDisplayAccount { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户侧用户标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_user_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
+ public string? OutUserCode { get; set; }
+
+ ///
+ /// 获取或设置解约信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_terminate_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_terminate_info")]
+ public Types.Termination? Termination { get; set; }
+
+ ///
+ /// 获取或设置预约扣费场景的预约信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_schedule")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
+ public Types.DeductSchedule? DeductSchedule { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transactions/TransactionResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transactions/TransactionResource.cs
index 63429dfd..f0978aa7 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transactions/TransactionResource.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/Transactions/TransactionResource.cs
@@ -11,7 +11,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
///
///
///
- ///
+ ///
+ ///
///
///
public class TransactionResource : WechatTenpayEvent.Types.IDecryptedResource
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/Ecommerce/EcommerceEntrustResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/Ecommerce/EcommerceEntrustResource.cs
index ba070955..2b0c733a 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/Ecommerce/EcommerceEntrustResource.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/Ecommerce/EcommerceEntrustResource.cs
@@ -56,7 +56,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
///
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置用户唯一标识。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Events/PAPay/PAPayContractResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Events/PAPay/PAPayContractResource.cs
index e21e18a4..d17f314e 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Events/PAPay/PAPayContractResource.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Events/PAPay/PAPayContractResource.cs
@@ -41,7 +41,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Events
///
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置用户唯一标识。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/GetPAPayContractByOutContractCodeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/GetPAPayContractByOutContractCodeRequest.cs
index c9dd591d..93df1324 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/GetPAPayContractByOutContractCodeRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/GetPAPayContractByOutContractCodeRequest.cs
@@ -17,7 +17,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models
///
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置商户侧签约协议号。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/GetPAPayContractByOutContractCodeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/GetPAPayContractByOutContractCodeResponse.cs
index 3456c0e3..e257b630 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/GetPAPayContractByOutContractCodeResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/GetPAPayContractByOutContractCodeResponse.cs
@@ -26,7 +26,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models
///
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置商户侧签约协议号。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustAppRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustAppRequest.cs
index 773aab28..d5bd3ac2 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustAppRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustAppRequest.cs
@@ -19,7 +19,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models
///
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置商户侧签约协议号。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustAppResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustAppResponse.cs
index c56cc492..f1b1b041 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustAppResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustAppResponse.cs
@@ -10,6 +10,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models
///
[Newtonsoft.Json.JsonProperty("session_id")]
[System.Text.Json.Serialization.JsonPropertyName("session_id")]
- public string SessionId { get; set; } = default!;
+ public string PresignSessionId { get; set; } = default!;
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustMiniProgramResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustMiniProgramResponse.cs
index fd1e8202..6b21eaef 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustMiniProgramResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Models/PAPay/PresignPAPayContractEntrustMiniProgramResponse.cs
@@ -10,6 +10,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models
///
[Newtonsoft.Json.JsonProperty("session_id")]
[System.Text.Json.Serialization.JsonPropertyName("session_id")]
- public string SessionId { get; set; } = default!;
+ public string PresignSessionId { get; set; } = default!;
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePAPayExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePAPayExtensions.cs
index 9ecffaad..bd1d6d9e 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePAPayExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePAPayExtensions.cs
@@ -19,7 +19,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
///
///
///
- public static async Task ExecuteNotifyPAPayContractAsync(this WechatTenpayClient client, Models.NotifyPAPayContractRequest request, CancellationToken cancellationToken = default)
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
+
+ #region PaySchedules
+ ///
+ /// 异步调用 [GET] /papay/pay/schedules/contract-id/{contract_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /papay/pay/schedules/contract-id/{contract_id}/schedule 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
+ #region PayTransactions
+ ///
+ /// 异步调用 [POST] /papay/pay/transactions/apply 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
+ #region ScheduledDeductSign
+ ///
+ /// 异步调用 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/app 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/h5 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/jsapi 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/mini-program 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
+ #region SignContracts
+ ///
+ /// 异步调用 [GET] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code}/terminate 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePartnerPAPayExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePartnerPAPayExtensions.cs
index dce84d25..165549f6 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePartnerPAPayExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePartnerPAPayExtensions.cs
@@ -19,7 +19,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
///
///
///
- public static async Task ExecuteNotifyPartnerPAPayContractAsync(this WechatTenpayClient client, Models.NotifyPartnerPAPayContractRequest request, CancellationToken cancellationToken = default)
+ public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/EducationPAPay/PresignEducationPAPayContractRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/EducationPAPay/PresignEducationPAPayContractRequest.cs
index 4dde8cf3..12c3847e 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/EducationPAPay/PresignEducationPAPayContractRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/EducationPAPay/PresignEducationPAPayContractRequest.cs
@@ -27,11 +27,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string OpenId { get; set; } = string.Empty;
///
- /// 获取或设置商户用户账号。
+ /// 获取或设置商户用户账号标识。
///
[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;
///
/// 获取或设置首次扣款日期字符串(格式:yyyy-MM-dd)。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/NotifyPAPayContractRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/CreatePAPayContractNotificationRequest.cs
similarity index 96%
rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/NotifyPAPayContractRequest.cs
rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/CreatePAPayContractNotificationRequest.cs
index 6c6d1d6a..2173f926 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/NotifyPAPayContractRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/CreatePAPayContractNotificationRequest.cs
@@ -3,7 +3,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
/// 表示 [POST] /papay/contracts/{contract_id}/notify 接口的请求。
///
- public class NotifyPAPayContractRequest : WechatTenpayRequest
+ public class CreatePAPayContractNotificationRequest : WechatTenpayRequest
{
public static class Types
{
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/NotifyPAPayContractResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/CreatePAPayContractNotificationResponse.cs
similarity index 71%
rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/NotifyPAPayContractResponse.cs
rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/CreatePAPayContractNotificationResponse.cs
index f6082ba7..99be16e2 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/NotifyPAPayContractResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/CreatePAPayContractNotificationResponse.cs
@@ -3,7 +3,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
/// 表示 [POST] /papay/contracts/{contract_id}/notify 接口的响应。
///
- public class NotifyPAPayContractResponse : WechatTenpayResponse
+ public class CreatePAPayContractNotificationResponse : WechatTenpayResponse
{
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleRequest.cs
new file mode 100644
index 00000000..f59ff283
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleRequest.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/pay/schedules/contract-id/{contract_id}/schedule 接口的请求。
+ ///
+ public class CreatePAPayPaySchedulesContractScheduleRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class Amount : PresignPAPayScheduledDeductSignContractEntrustAppRequest.Types.DeductSchedule.Types.Amount
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置委托代扣签约协议 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ContractId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置预约的金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("schedule_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("schedule_amount")]
+ public Types.Amount ScheduleAmount { get; set; } = new Types.Amount();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleResponse.cs
new file mode 100644
index 00000000..b45c4320
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/pay/schedules/contract-id/{contract_id}/schedule 接口的响应。
+ ///
+ public class CreatePAPayPaySchedulesContractScheduleResponse : GetPAPayPaySchedulesContractByContractIdResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/GetPAPayPaySchedulesContractByContractIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/GetPAPayPaySchedulesContractByContractIdRequest.cs
new file mode 100644
index 00000000..37fa98ca
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/GetPAPayPaySchedulesContractByContractIdRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /papay/pay/schedules/contract-id/{contract_id} 接口的请求。
+ ///
+ public class GetPAPayPaySchedulesContractByContractIdRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置委托代扣签约协议 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ContractId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/GetPAPayPaySchedulesContractByContractIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/GetPAPayPaySchedulesContractByContractIdResponse.cs
new file mode 100644
index 00000000..d1f54a3a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PaySchedules/GetPAPayPaySchedulesContractByContractIdResponse.cs
@@ -0,0 +1,70 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /papay/pay/schedules/contract-id/{contract_id} 接口的响应。
+ ///
+ public class GetPAPayPaySchedulesContractByContractIdResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class Amount
+ {
+ ///
+ /// 获取或设置金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total")]
+ [System.Text.Json.Serialization.JsonPropertyName("total")]
+ public int Total { get; set; }
+
+ ///
+ /// 获取或设置货币类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("currency")]
+ [System.Text.Json.Serialization.JsonPropertyName("currency")]
+ public string? Currency { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置扣费预约状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("schedule_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("schedule_state")]
+ public string ScheduleState { get; set; } = default!;
+
+ ///
+ /// 获取或设置可扣费开始日期字符串(格式:yyyy-MM-dd)。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_start_date")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_start_date")]
+ public string? DeductStartDateString { get; set; }
+
+ ///
+ /// 获取或设置可扣费结束日期字符串(格式:yyyy-MM-dd)。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_end_date")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_end_date")]
+ public string? DeductEndDateString { get; set; }
+
+ ///
+ /// 获取或设置已预约的扣费金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("scheduled_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("scheduled_amount")]
+ public Types.Amount? ScheduledAmount { get; set; }
+
+ ///
+ /// 获取或设置实际扣费金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_amount")]
+ public Types.Amount? DeductAmount { get; set; }
+
+ ///
+ /// 获取或设置实际扣费日期字符串(格式:yyyy-MM-dd)。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_date")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_date")]
+ public string? DeductDateString { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PayTransactions/ApplyPAPayPayTransactionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PayTransactions/ApplyPAPayPayTransactionRequest.cs
new file mode 100644
index 00000000..9de420c9
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PayTransactions/ApplyPAPayPayTransactionRequest.cs
@@ -0,0 +1,71 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/pay/transactions/apply 接口的请求。
+ ///
+ public class ApplyPAPayPayTransactionRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class Amount : PresignPAPayScheduledDeductSignContractEntrustAppRequest.Types.DeductSchedule.Types.Amount
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string OutTradeNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("description")]
+ [System.Text.Json.Serialization.JsonPropertyName("description")]
+ public string Description { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置委托代扣签约协议 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_id")]
+ public string ContractId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_notify_url")]
+ public string NotifyUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置订单优惠标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("goods_tag")]
+ [System.Text.Json.Serialization.JsonPropertyName("goods_tag")]
+ public string? GoodsTag { get; set; }
+
+ ///
+ /// 获取或设置附加数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public Types.Amount Amount { get; set; } = new Types.Amount();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PayTransactions/ApplyPAPayPayTransactionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PayTransactions/ApplyPAPayPayTransactionResponse.cs
new file mode 100644
index 00000000..995d405f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/PayTransactions/ApplyPAPayPayTransactionResponse.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/pay/transactions/apply 接口的响应。
+ ///
+ public class ApplyPAPayPayTransactionResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class Amount : GetPAPayPaySchedulesContractByContractIdResponse.Types.Amount
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string OutTradeNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置扣费金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("amount")]
+ public Types.Amount Amount { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppRequest.cs
new file mode 100644
index 00000000..d0d6a390
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppRequest.cs
@@ -0,0 +1,111 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/app 接口的请求。
+ ///
+ public class PresignPAPayScheduledDeductSignContractEntrustAppRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class DeductSchedule
+ {
+ public static class Types
+ {
+ public class Amount
+ {
+ ///
+ /// 获取或设置金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total")]
+ [System.Text.Json.Serialization.JsonPropertyName("total")]
+ public int Total { get; set; }
+
+ ///
+ /// 获取或设置货币类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("currency")]
+ [System.Text.Json.Serialization.JsonPropertyName("currency")]
+ public string? Currency { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置预计扣费的日期字符串(格式:yyyy-MM-dd)。
+ ///
+ [Newtonsoft.Json.JsonProperty("estimated_deduct_date")]
+ [System.Text.Json.Serialization.JsonPropertyName("estimated_deduct_date")]
+ public string EstimatedDeductDateString { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置预计的扣费金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("estimated_deduct_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("estimated_deduct_amount")]
+ public Types.Amount EstimatedDeductAmount { get; set; } = new Types.Amount();
+
+ ///
+ /// 获取或设置商品描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("description")]
+ [System.Text.Json.Serialization.JsonPropertyName("description")]
+ public string Description { get; set; } = string.Empty;
+ }
+ }
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_id")]
+ public long PlanId { get; set; }
+
+ ///
+ /// 获取或设置商户签约协议号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_contract_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
+ public string OutContractCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string? OpenId { get; set; }
+
+ ///
+ /// 获取或设置用户账户展示名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_display_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
+ public string ContractDisplayAccount { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置签约结果回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_notify_url")]
+ public string ContractNotifyUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户侧用户标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_user_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
+ public string? OutUserCode { get; set; }
+
+ ///
+ /// 获取或设置预约信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_schedule")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
+ public Types.DeductSchedule? DeductSchedule { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppResponse.cs
new file mode 100644
index 00000000..49f7a7ad
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/app 接口的响应。
+ ///
+ public class PresignPAPayScheduledDeductSignContractEntrustAppResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置预签约会话 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("pre_entrustweb_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("pre_entrustweb_id")]
+ public string PresignSessionId { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Request.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Request.cs
new file mode 100644
index 00000000..345a5154
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Request.cs
@@ -0,0 +1,94 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/h5 接口的请求。
+ ///
+ 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
+ {
+ ///
+ /// 获取或设置跳转应用的 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("jump_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("jump_appid")]
+ public string JumpAppId { get; set; } = string.Empty;
+ }
+ }
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_id")]
+ public long PlanId { get; set; }
+
+ ///
+ /// 获取或设置商户签约协议号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_contract_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
+ public string OutContractCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string? OpenId { get; set; }
+
+ ///
+ /// 获取或设置用户账户展示名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_display_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
+ public string ContractDisplayAccount { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置签约结果回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_notify_url")]
+ public string ContractNotifyUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户侧用户标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_user_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
+ public string? OutUserCode { get; set; }
+
+ ///
+ /// 获取或设置预约信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_schedule")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
+ public Types.DeductSchedule? DeductSchedule { get; set; }
+
+ ///
+ /// 获取或设置跳转控制信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("jump_control")]
+ [System.Text.Json.Serialization.JsonPropertyName("jump_control")]
+ public Types.JumpControl? JumpControl { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Response.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Response.cs
new file mode 100644
index 00000000..5e9550af
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Response.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/h5 接口的响应。
+ ///
+ public class PresignPAPayScheduledDeductSignContractEntrustH5Response : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置跳转 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("redirect_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("redirect_url")]
+ public string RedirectUrl { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiRequest.cs
new file mode 100644
index 00000000..41e1a4a4
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiRequest.cs
@@ -0,0 +1,77 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/jsapi 接口的请求。
+ ///
+ 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
+ {
+ }
+ }
+ }
+ }
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_id")]
+ public long PlanId { get; set; }
+
+ ///
+ /// 获取或设置商户签约协议号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_contract_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
+ public string OutContractCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string? OpenId { get; set; }
+
+ ///
+ /// 获取或设置用户账户展示名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_display_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
+ public string ContractDisplayAccount { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置签约结果回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_notify_url")]
+ public string ContractNotifyUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户侧用户标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_user_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
+ public string? OutUserCode { get; set; }
+
+ ///
+ /// 获取或设置预约信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_schedule")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
+ public Types.DeductSchedule? DeductSchedule { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiResponse.cs
new file mode 100644
index 00000000..c395fa44
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/jsapi 接口的响应。
+ ///
+ public class PresignPAPayScheduledDeductSignContractEntrustJsapiResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置跳转 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("redirect_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("redirect_url")]
+ public string RedirectUrl { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramRequest.cs
new file mode 100644
index 00000000..45ec2298
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramRequest.cs
@@ -0,0 +1,77 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/mini-program 接口的请求。
+ ///
+ 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
+ {
+ }
+ }
+ }
+ }
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_id")]
+ public long PlanId { get; set; }
+
+ ///
+ /// 获取或设置商户签约协议号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_contract_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
+ public string OutContractCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string? OpenId { get; set; }
+
+ ///
+ /// 获取或设置用户账户展示名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_display_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
+ public string ContractDisplayAccount { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置签约结果回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_notify_url")]
+ public string ContractNotifyUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户侧用户标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_user_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
+ public string? OutUserCode { get; set; }
+
+ ///
+ /// 获取或设置预约信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_schedule")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
+ public Types.DeductSchedule? DeductSchedule { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramResponse.cs
new file mode 100644
index 00000000..2da87fdd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramResponse.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/scheduled-deduct-sign/contracts/pre-entrust-sign/mini-program 接口的响应。
+ ///
+ public class PresignPAPayScheduledDeductSignContractEntrustMiniProgramResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置预签约会话 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("pre_entrustweb_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("pre_entrustweb_id")]
+ public string PresignSessionId { get; set; } = default!;
+
+ ///
+ /// 获取或设置跳转小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("redirect_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("redirect_appid")]
+ public string RedirectAppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置跳转小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("redirect_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("redirect_path")]
+ public string RedirectPagePath { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/GetPAPaySignContractByOutContractCodeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/GetPAPaySignContractByOutContractCodeRequest.cs
new file mode 100644
index 00000000..b6b03a78
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/GetPAPaySignContractByOutContractCodeRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code} 接口的请求。
+ ///
+ public class GetPAPaySignContractByOutContractCodeRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商户签约协议号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OutContractCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置模板 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public long PlanId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/GetPAPaySignContractByOutContractCodeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/GetPAPaySignContractByOutContractCodeResponse.cs
new file mode 100644
index 00000000..3679350c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/GetPAPaySignContractByOutContractCodeResponse.cs
@@ -0,0 +1,186 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code} 接口的响应。
+ ///
+ public class GetPAPaySignContractByOutContractCodeResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class Termination
+ {
+ ///
+ /// 获取或设置解约时间。
+ ///
+ [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; }
+
+ ///
+ /// 获取或设置解约方式。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_termination_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_termination_mode")]
+ public string TerminationMode { get; set; } = default!;
+
+ ///
+ /// 获取或设置解约备注。
+ ///
+ [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
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置预计扣费的日期字符串(格式:yyyy-MM-dd)。
+ ///
+ [Newtonsoft.Json.JsonProperty("estimated_deduct_date")]
+ [System.Text.Json.Serialization.JsonPropertyName("estimated_deduct_date")]
+ public string EstimatedDeductDateString { get; set; } = default!;
+
+ ///
+ /// 获取或设置预计的扣费金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("estimated_deduct_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("estimated_deduct_amount")]
+ public Types.Amount EstimatedDeductAmount { get; set; } = default!;
+
+ ///
+ /// 获取或设置扣费预约状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("schedule_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("schedule_state")]
+ public string ScheduleState { get; set; } = default!;
+
+ ///
+ /// 获取或设置已预约的扣费金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("scheduled_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("scheduled_amount")]
+ public Types.Amount? ScheduledAmount { get; set; }
+
+ ///
+ /// 获取或设置实际扣费金额信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_amount")]
+ public Types.Amount? DeductAmount { get; set; }
+
+ ///
+ /// 获取或设置实际扣费日期字符串(格式:yyyy-MM-dd)。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_date")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_date")]
+ public string? DeductDateString { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string MerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_id")]
+ public long PlanId { get; set; }
+
+ ///
+ /// 获取或设置商户签约协议号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_contract_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_contract_code")]
+ public string OutContractCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置委托代扣签约协议 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_id")]
+ public string ContractId { get; set; } = default!;
+
+ ///
+ /// 获取或设置协议状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_state")]
+ public string ContractState { get; set; } = default!;
+
+ ///
+ /// 获取或设置签署时间。
+ ///
+ [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; }
+
+ ///
+ /// 获取或设置到期时间。
+ ///
+ [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; }
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string? OpenId { get; set; }
+
+ ///
+ /// 获取或设置用户账户展示名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_display_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_display_account")]
+ public string ContractDisplayAccount { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户侧用户标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_user_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_user_code")]
+ public string? OutUserCode { get; set; }
+
+ ///
+ /// 获取或设置解约信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_terminate_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_terminate_info")]
+ public Types.Termination? Termination { get; set; }
+
+ ///
+ /// 获取或设置预约扣费场景的预约信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduct_schedule")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduct_schedule")]
+ public Types.DeductSchedule? DeductSchedule { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/TerminatePAPaySignContractRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/TerminatePAPaySignContractRequest.cs
new file mode 100644
index 00000000..53ba046f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/TerminatePAPaySignContractRequest.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code}/terminate 接口的请求。
+ ///
+ public class TerminatePAPaySignContractRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商户签约协议号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OutContractCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置模板 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public long PlanId { get; set; }
+
+ ///
+ /// 获取或设置解约备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("contract_termination_remark")]
+ [System.Text.Json.Serialization.JsonPropertyName("contract_termination_remark")]
+ public string TerminationRemark { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/TerminatePAPaySignContractResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/TerminatePAPaySignContractResponse.cs
new file mode 100644
index 00000000..06dc146d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PAPay/SignContracts/TerminatePAPaySignContractResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /papay/sign/contracts/plan-id/{plan_id}/out-contract-code/{out_contract_code}/terminate 接口的响应。
+ ///
+ public class TerminatePAPaySignContractResponse : GetPAPaySignContractByOutContractCodeResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/GetEcommerceCombinePAPayContractByOutContractCodeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/GetEcommerceCombinePAPayContractByOutContractCodeRequest.cs
index d07e6db6..4ae70529 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/GetEcommerceCombinePAPayContractByOutContractCodeRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/GetEcommerceCombinePAPayContractByOutContractCodeRequest.cs
@@ -10,7 +10,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置商户侧签约协议号。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/GetEcommerceCombinePAPayContractByOutContractCodeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/GetEcommerceCombinePAPayContractByOutContractCodeResponse.cs
index 48e3bcae..7d95170c 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/GetEcommerceCombinePAPayContractByOutContractCodeResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/GetEcommerceCombinePAPayContractByOutContractCodeResponse.cs
@@ -55,7 +55,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置商户签约协议号。
@@ -83,7 +83,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonProperty("contract_state")]
[System.Text.Json.Serialization.JsonPropertyName("contract_state")]
- public string State { get; set; } = default!;
+ public string ContractState { get; set; } = default!;
///
/// 获取或设置用户唯一标识。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/PresignEcommerceCombinePAPayContractEntrustAppRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/PresignEcommerceCombinePAPayContractEntrustAppRequest.cs
index a28649d1..56c96ba0 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/PresignEcommerceCombinePAPayContractEntrustAppRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/PresignEcommerceCombinePAPayContractEntrustAppRequest.cs
@@ -17,7 +17,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置商户签约协议号。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/PresignEcommerceCombinePAPayContractEntrustAppResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/PresignEcommerceCombinePAPayContractEntrustAppResponse.cs
index 7d2ea447..9e8679c9 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/PresignEcommerceCombinePAPayContractEntrustAppResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/PresignEcommerceCombinePAPayContractEntrustAppResponse.cs
@@ -17,7 +17,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置商户签约协议号。
@@ -31,6 +31,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[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!;
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/TerminateEcommerceCombinePAPayContractRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/TerminateEcommerceCombinePAPayContractRequest.cs
index ba199096..afd377fe 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/TerminateEcommerceCombinePAPayContractRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/TerminateEcommerceCombinePAPayContractRequest.cs
@@ -10,7 +10,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置商户侧签约协议号。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/TerminateEcommerceCombinePAPayContractResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/TerminateEcommerceCombinePAPayContractResponse.cs
index ea7be9d0..47b22df5 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/TerminateEcommerceCombinePAPayContractResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/Ecommerce/CombinePAPay/TerminateEcommerceCombinePAPayContractResponse.cs
@@ -19,7 +19,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonProperty("plan_id")]
[System.Text.Json.Serialization.JsonPropertyName("plan_id")]
- public int PlanId { get; set; }
+ public long PlanId { get; set; }
///
/// 获取或设置商户签约协议号。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/CreateEducationSchoolPayTransactionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/CreateEducationSchoolPayTransactionRequest.cs
index a31eaae8..6f5a923f 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/CreateEducationSchoolPayTransactionRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/CreateEducationSchoolPayTransactionRequest.cs
@@ -77,11 +77,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string ContractId { get; set; } = string.Empty;
///
- /// 获取或设置商户用户账号。
+ /// 获取或设置商户用户账号标识。
///
[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;
///
/// 获取或设置商户订单号。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/PresignEducationSchoolPayContractRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/PresignEducationSchoolPayContractRequest.cs
index e8df0743..79a5299e 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/PresignEducationSchoolPayContractRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/PresignEducationSchoolPayContractRequest.cs
@@ -94,11 +94,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
public string OpenId { get; set; } = string.Empty;
///
- /// 获取或设置商户用户账号。
+ /// 获取或设置商户用户账号标识。
///
[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;
///
/// 获取或设置学校编号。
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/NotifyPartnerPAPayContractRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/CreatePartnerPAPayContractNotificationRequest.cs
similarity index 92%
rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/NotifyPartnerPAPayContractRequest.cs
rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/CreatePartnerPAPayContractNotificationRequest.cs
index f469117a..2ffb815e 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/NotifyPartnerPAPayContractRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/CreatePartnerPAPayContractNotificationRequest.cs
@@ -3,11 +3,11 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
/// 表示 [POST] /partner-papay/contracts/{contract_id}/notify 接口的请求。
///
- public class NotifyPartnerPAPayContractRequest : WechatTenpayRequest
+ public class CreatePartnerPAPayContractNotificationRequest : WechatTenpayRequest
{
public static class Types
{
- public class Amount : NotifyPAPayContractRequest.Types.Amount
+ public class Amount : CreatePAPayContractNotificationRequest.Types.Amount
{
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/NotifyPartnerPAPayContractResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/CreatePartnerPAPayContractNotificationResponse.cs
similarity index 70%
rename from src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/NotifyPartnerPAPayContractResponse.cs
rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/CreatePartnerPAPayContractNotificationResponse.cs
index 1ef02eb9..bcd148b5 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/NotifyPartnerPAPayContractResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PAPay/CreatePartnerPAPayContractNotificationResponse.cs
@@ -3,7 +3,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
/// 表示 [POST] /partner-papay/contracts/{contract_id}/notify 接口的响应。
///
- public class NotifyPartnerPAPayContractResponse : WechatTenpayResponse
+ public class CreatePartnerPAPayContractNotificationResponse : WechatTenpayResponse
{
}
}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/PAPay/PAPayEntrustResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/PAPay/PAPayEntrustResource.json
new file mode 100644
index 00000000..f26a02d9
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/PAPay/PAPayEntrustResource.json
@@ -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
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/NotifyPAPayContractRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/CreatePAPayContractNotificationRequest.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/NotifyPAPayContractRequest.json
rename to test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/CreatePAPayContractNotificationRequest.json
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleRequest.json
new file mode 100644
index 00000000..a929f5ab
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleRequest.json
@@ -0,0 +1,7 @@
+{
+ "appid": "wxd678efh567hg6787",
+ "schedule_amount": {
+ "total": 1,
+ "currency": "CNY"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleResponse.json
new file mode 100644
index 00000000..bd49fd58
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PaySchedules/CreatePAPayPaySchedulesContractScheduleResponse.json
@@ -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"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PaySchedules/GetPAPayPaySchedulesContractByContractIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PaySchedules/GetPAPayPaySchedulesContractByContractIdResponse.json
new file mode 100644
index 00000000..bd49fd58
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PaySchedules/GetPAPayPaySchedulesContractByContractIdResponse.json
@@ -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"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PayTransactions/ApplyPAPayPayTransactionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PayTransactions/ApplyPAPayPayTransactionRequest.json
new file mode 100644
index 00000000..93e734d4
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PayTransactions/ApplyPAPayPayTransactionRequest.json
@@ -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": "自定义数据"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PayTransactions/ApplyPAPayPayTransactionResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PayTransactions/ApplyPAPayPayTransactionResponse.json
new file mode 100644
index 00000000..b00f2f76
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/PayTransactions/ApplyPAPayPayTransactionResponse.json
@@ -0,0 +1,7 @@
+{
+ "out_trade_no": "1217752501201407033233368018",
+ "amount": {
+ "total": 1,
+ "currency": "CNY"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppRequest.json
new file mode 100644
index 00000000..54697a67
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppRequest.json
@@ -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区沧海之耀)"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppResponse.json
new file mode 100644
index 00000000..255e0127
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustAppResponse.json
@@ -0,0 +1,3 @@
+{
+ "pre_entrustweb_id": "5778aadY9nltAsZzXixCkFIGYnV2V"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Request.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Request.json
new file mode 100644
index 00000000..3aa7313d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Request.json
@@ -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"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Response.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Response.json
new file mode 100644
index 00000000..9649bd25
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustH5Response.json
@@ -0,0 +1,3 @@
+{
+ "redirect_url": "https://www.xxx.com/xxxtemplate?session_id=wx12334"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiRequest.json
new file mode 100644
index 00000000..54697a67
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiRequest.json
@@ -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区沧海之耀)"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiResponse.json
new file mode 100644
index 00000000..c2b3f00c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustJsapiResponse.json
@@ -0,0 +1,3 @@
+{
+ "redirect_url": "https://www.xxx.com?pre_entrust_id=wx12334"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramRequest.json
new file mode 100644
index 00000000..54697a67
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramRequest.json
@@ -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区沧海之耀)"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramResponse.json
new file mode 100644
index 00000000..baa0ec81
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/ScheduledDeductSign/PresignPAPayScheduledDeductSignContractEntrustMiniProgramResponse.json
@@ -0,0 +1,5 @@
+{
+ "pre_entrustweb_id": "5778aadY9nltAsZzXixCkFIGYnV2V",
+ "redirect_appid": "wxbd687630cd02ce1d",
+ "redirect_path": "pages/PwdExemptContract/index"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/SignContracts/GetPAPaySignContractByOutContractCodeResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/SignContracts/GetPAPaySignContractByOutContractCodeResponse.json
new file mode 100644
index 00000000..ba5eeca2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/SignContracts/GetPAPaySignContractByOutContractCodeResponse.json
@@ -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"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/SignContracts/TerminatePAPaySignContractRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/SignContracts/TerminatePAPaySignContractRequest.json
new file mode 100644
index 00000000..4394aed8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/SignContracts/TerminatePAPaySignContractRequest.json
@@ -0,0 +1,3 @@
+{
+ "contract_termination_remark": "用户解约"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/SignContracts/TerminatePAPaySignContractResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/SignContracts/TerminatePAPaySignContractResponse.json
new file mode 100644
index 00000000..ba5eeca2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PAPay/SignContracts/TerminatePAPaySignContractResponse.json
@@ -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"
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PAPay/NotifyPartnerPAPayContractRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PAPay/CreatePartnerPAPayContractNotificationRequest.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PAPay/NotifyPartnerPAPayContractRequest.json
rename to test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PAPay/CreatePartnerPAPayContractNotificationRequest.json