diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md
index b0f95ab8..050f114b 100644
--- a/docs/WechatTenpayV3/Basic_ModelDefinition.md
+++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md
@@ -45,6 +45,7 @@
| × | 运营工具:转账到银行卡 | 直连商户 & 合作伙伴 | 官方未提供 v3 API |
| √ | 经营能力:微信支付分 | 直连商户 & 合作伙伴 | |
| √ | 经营能力:微信支付分停车 | 直连商户 & 合作伙伴 | |
+| √ | 经营能力:微信支付分签约计划 | 直连商户 & 合作伙伴 | |
| √ | 经营能力:平台收付通 | 合作伙伴 | |
| √ | 运营工具:代金券 | 直连商户 & 合作伙伴 | |
| √ | 运营工具:商家券 | 直连商户 & 合作伙伴 | |
@@ -258,6 +259,28 @@
- 查询订单:`GetVehicleTransactionByOutTradeNumber`
+ - 微信支付分签约计划
+
+ - 支付分计划操作
+
+ - 创建支付分计划:`CreatePayScorePlan`
+
+ - 查询支付分计划:`GetPayScorePlanByOutPlanNumber`
+
+ - 停止支付分计划:`StopPayScorePlan`
+
+ - 签约计划详情对应的服务订单
+
+ - 创建用户的签约计划详情对应的服务订单:`CreatePayScoreSignPlanServiceOrder`
+
+ - 管理签约计划
+
+ - 创建用户的签约计划:`CreatePayScoreSignPlanUserSignPlan`
+
+ - 查询用户的签约计划:`GetPayScoreSignPlanUserSignPlanByOutSignPlanNumber`
+
+ - 停止用户的签约计划:`StopPayScoreSignPlanUserSignPlan`
+
- 代金券
- 创建代金券批次:`CreateMarketingFavorStock`
@@ -740,6 +763,28 @@
- 查询订单:`GetVehicleTransactionByOutTradeNumber`
+ - 微信支付分签约计划
+
+ - 支付分计划操作
+
+ - 创建支付分计划:`CreatePayScorePartnerPlan`
+
+ - 查询支付分计划:`GetPayScorePartnerPlanByOutPlanNumber`
+
+ - 停止支付分计划:`StopPayScorePartnerPlan`
+
+ - 签约计划详情对应的服务订单
+
+ - 创建用户的签约计划详情对应的服务订单:`CreatePayScorePartnerSignPlanServiceOrder`
+
+ - 管理签约计划
+
+ - 创建用户的签约计划:`CreatePayScorePartnerSignPlanUserSignPlan`
+
+ - 查询用户的签约计划:`GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumber`
+
+ - 停止用户的签约计划:`StopPayScorePartnerSignPlanUserSignPlan`
+
- 平台收付通(商户进件)
- 二级商户进件:`CreateEcommerceApplyment`
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/PayScore/PayScoreUserSignPlanResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/PayScore/PayScoreUserSignPlanResource.cs
new file mode 100644
index 00000000..43bfac01
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/PayScore/PayScoreUserSignPlanResource.cs
@@ -0,0 +1,168 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
+{
+ ///
+ /// 表示 PAYSCORE.USER_SIGN_PLAN(针对直连商户)通知的数据。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ public class PayScoreUserSignPlanResource : WechatTenpayEvent.Types.IDecryptedResource
+ {
+ public static class Types
+ {
+ public class SignPlanDetail : Models.GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse.Types.SignPlanDetail
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [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 string PlanId { get; set; } = default!;
+
+ ///
+ /// 获取或设置计划名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_name")]
+ public string PlanName { get; set; } = default!;
+
+ ///
+ /// 获取或设置服务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_id")]
+ public string ServiceId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户签约计划单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_sign_plan_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_sign_plan_no")]
+ public string OutSignPlanNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置签约计划 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_plan_id")]
+ public string SignPlanId { get; set; } = default!;
+
+ ///
+ /// 获取或设置计划状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_state")]
+ public string SignState { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_callback_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_callback_url")]
+ public string? NotifyUrl { get; set; }
+
+ ///
+ /// 获取或设置目前用户进行到的计划明细序号。
+ ///
+ [Newtonsoft.Json.JsonProperty("going_detail_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("going_detail_no")]
+ public int GoingDetailNumber { get; set; }
+
+ ///
+ /// 获取或设置计划过期时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_over_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_over_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset PlanOverTime { get; set; }
+
+ ///
+ /// 获取或设置扣费次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduction_quantity")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduction_quantity")]
+ public int DeductionQuantity { get; set; }
+
+ ///
+ /// 获取或设置原总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_origin_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_origin_price")]
+ public int TotalOriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置实际总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_actual_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_actual_price")]
+ public int TotalActualPrice { get; set; }
+
+ ///
+ /// 获取或设置签约时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SignTime { get; set; }
+
+ ///
+ /// 获取或设置取消类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_sign_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_sign_type")]
+ public string? CancelType { get; set; }
+
+ ///
+ /// 获取或设置取消原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_reason")]
+ public string? CancelReason { get; set; }
+
+ ///
+ /// 获取或设置取消时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_sign_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_sign_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? CancelTime { get; set; }
+
+ ///
+ /// 获取或设置签约计划明细列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("signed_detail_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("signed_detail_list")]
+ public Types.SignPlanDetail[]? SignPlanDetailList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/PayScore/PayScorePartnerUserSignPlanResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/PayScore/PayScorePartnerUserSignPlanResource.cs
new file mode 100644
index 00000000..5c08aed0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/PayScore/PayScorePartnerUserSignPlanResource.cs
@@ -0,0 +1,189 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events
+{
+ ///
+ /// 表示 PAYSCORE.USER_SIGN_PLAN(针对服务商)通知的数据。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ public class PayScorePartnerUserSignPlanResource : WechatTenpayEvent.Types.IDecryptedResource
+ {
+ public static class Types
+ {
+ public class SignPlanDetail : Models.GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberResponse.Types.SignPlanDetail
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string MerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = default!;
+
+ ///
+ /// 获取或设置子商户 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
+ public string? SubAppId { get; set; }
+
+ ///
+ /// 获取或设置支付分计划 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_id")]
+ public string PlanId { get; set; } = default!;
+
+ ///
+ /// 获取或设置计划名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_name")]
+ public string PlanName { get; set; } = default!;
+
+ ///
+ /// 获取或设置服务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_id")]
+ public string ServiceId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户签约计划单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_sign_plan_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_sign_plan_no")]
+ public string OutSignPlanNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置签约计划 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_plan_id")]
+ public string SignPlanId { get; set; } = default!;
+
+ ///
+ /// 获取或设置计划状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_state")]
+ public string SignState { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户在子商户下的唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_openid")]
+ public string? SubOpenId { get; set; }
+
+ ///
+ /// 获取或设置回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_callback_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_callback_url")]
+ public string? NotifyUrl { get; set; }
+
+ ///
+ /// 获取或设置目前用户进行到的计划明细序号。
+ ///
+ [Newtonsoft.Json.JsonProperty("going_detail_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("going_detail_no")]
+ public int GoingDetailNumber { get; set; }
+
+ ///
+ /// 获取或设置计划过期时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_over_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_over_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset PlanOverTime { get; set; }
+
+ ///
+ /// 获取或设置扣费次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduction_quantity")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduction_quantity")]
+ public int DeductionQuantity { get; set; }
+
+ ///
+ /// 获取或设置原总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_origin_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_origin_price")]
+ public int TotalOriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置实际总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_actual_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_actual_price")]
+ public int TotalActualPrice { get; set; }
+
+ ///
+ /// 获取或设置签约时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SignTime { get; set; }
+
+ ///
+ /// 获取或设置取消类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_sign_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_sign_type")]
+ public string? CancelType { get; set; }
+
+ ///
+ /// 获取或设置取消原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_reason")]
+ public string? CancelReason { get; set; }
+
+ ///
+ /// 获取或设置取消时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_sign_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_sign_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? CancelTime { get; set; }
+
+ ///
+ /// 获取或设置签约计划明细列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("signed_detail_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("signed_detail_list")]
+ public Types.SignPlanDetail[]? SignPlanDetailList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayScoreExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayScoreExtensions.cs
index 70611a41..a7bd95f6 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayScoreExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayScoreExtensions.cs
@@ -124,6 +124,74 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
}
#endregion
+ #region Plan
+ ///
+ /// 异步调用 [POST] /payscore/plan/payscore-plans 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreatePayScorePlanAsync(this WechatTenpayClient client, Models.CreatePayScorePlanRequest 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, "payscore", "plan", "payscore-plans");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /payscore/plan/payscore-plans/merchant-plan-no/{merchant_plan_no} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetPayScorePlanByOutPlanNumberAsync(this WechatTenpayClient client, Models.GetPayScorePlanByOutPlanNumberRequest 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, "payscore", "plan", "payscore-plans", "merchant-plan-no", request.OutPlanNumber);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /payscore/plan/payscore-plans/merchant-plan-no/{merchant_plan_no}/stop 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteStopPayScorePlanAsync(this WechatTenpayClient client, Models.StopPayScorePlanRequest 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, "payscore", "plan", "payscore-plans", "merchant-plan-no", request.OutPlanNumber, "stop");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
#region ServiceOrder
///
/// 异步调用 [POST] /payscore/serviceorder/direct-complete 接口。
@@ -329,5 +397,95 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
+
+ #region SignPlan
+ ///
+ /// 异步调用 [POST] /payscore/sign-plan/serviceorder 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreatePayScoreSignPlanServiceOrderAsync(this WechatTenpayClient client, Models.CreatePayScoreSignPlanServiceOrderRequest 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, "payscore", "sign-plan", "serviceorder");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /payscore/sign-plan/user-sign-plans 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreatePayScoreSignPlanUserSignPlanAsync(this WechatTenpayClient client, Models.CreatePayScoreSignPlanUserSignPlanRequest 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, "payscore", "sign-plan", "user-sign-plans");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /payscore/sign-plan/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetPayScoreSignPlanUserSignPlanByOutSignPlanNumberAsync(this WechatTenpayClient client, Models.GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberRequest 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, "payscore", "sign-plan", "user-sign-plans", "merchant-sign-plan-no", request.OutSignPlanNumber);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /payscore/sign-plan/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no}/stop 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteStopPayScoreSignPlanUserSignPlanAsync(this WechatTenpayClient client, Models.StopPayScoreSignPlanUserSignPlanRequest 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, "payscore", "sign-plan", "user-sign-plans", "merchant-sign-plan-no", request.OutSignPlanNumber, "stop");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayScorePartnerExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayScorePartnerExtensions.cs
index 51ab6aed..747fe4e8 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayScorePartnerExtensions.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayScorePartnerExtensions.cs
@@ -133,6 +133,75 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
}
#endregion
+ #region Plan
+ ///
+ /// 异步调用 [POST] /payscore/plan/partner/payscore-plans 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreatePayScorePartnerPlanAsync(this WechatTenpayClient client, Models.CreatePayScorePartnerPlanRequest 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, "payscore", "plan", "partner", "payscore-plans");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /payscore/plan/partner/payscore-plans/merchant-plan-no/{merchant_plan_no} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetPayScorePartnerPlanByOutPlanNumberAsync(this WechatTenpayClient client, Models.GetPayScorePartnerPlanByOutPlanNumberRequest 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, "payscore", "plan", "partner", "payscore-plans", "merchant-plan-no", request.OutPlanNumber)
+ .SetQueryParam("sub_mchid", request.SubMerchantId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /payscore/plan/partner/payscore-plans/merchant-plan-no/{merchant_plan_no}/stop 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteStopPayScorePartnerPlanAsync(this WechatTenpayClient client, Models.StopPayScorePartnerPlanRequest 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, "payscore", "plan", "partner", "payscore-plans", "merchant-plan-no", request.OutPlanNumber, "stop");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
#region ServiceOrder
///
/// 异步调用 [POST] /payscore/partner/serviceorder 接口。
@@ -344,5 +413,96 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
+
+ #region SignPlan
+ ///
+ /// 异步调用 [POST] /payscore/sign-plan/partner/serviceorder 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreatePayScorePartnerSignPlanServiceOrderAsync(this WechatTenpayClient client, Models.CreatePayScorePartnerSignPlanServiceOrderRequest 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, "payscore", "sign-plan", "partner", "serviceorder");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /payscore/sign-plan/partner/user-sign-plans 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreatePayScorePartnerSignPlanUserSignPlanAsync(this WechatTenpayClient client, Models.CreatePayScorePartnerSignPlanUserSignPlanRequest 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, "payscore", "sign-plan", "partner", "user-sign-plans");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /payscore/sign-plan/partner/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberAsync(this WechatTenpayClient client, Models.GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberRequest 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, "payscore", "sign-plan", "partner", "user-sign-plans", "merchant-sign-plan-no", request.OutSignPlanNumber)
+ .SetQueryParam("sub_mchid", request.SubMerchantId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /payscore/sign-plan/partner/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no}/stop 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteStopPayScorePartnerSignPlanUserSignPlanAsync(this WechatTenpayClient client, Models.StopPayScorePartnerSignPlanUserSignPlanRequest 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, "payscore", "sign-plan", "partner", "user-sign-plans", "merchant-sign-plan-no", request.OutSignPlanNumber, "stop");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
}
}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/CreatePayScorePlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/CreatePayScorePlanRequest.cs
new file mode 100644
index 00000000..d935ed35
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/CreatePayScorePlanRequest.cs
@@ -0,0 +1,107 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/plan/payscore-plans 接口的请求。
+ ///
+ public class CreatePayScorePlanRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class PlanDetail
+ {
+ ///
+ /// 获取或设置明细名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_detail_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_detail_name")]
+ public string DetailName { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置优惠说明。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_discount_description")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_discount_description")]
+ public string? DiscountDescription { get; set; }
+
+ ///
+ /// 获取或设置原支付金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("original_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("original_price")]
+ public int OriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置实际支付金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("actual_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("actual_price")]
+ public int ActualPrice { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户计划号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_plan_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_plan_no")]
+ public string OutPlanNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置服务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_id")]
+ public string ServiceId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置计划名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_name")]
+ public string PlanName { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置计划有效期(单位:天)。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_duration")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_duration")]
+ public int PlanDuration { get; set; }
+
+ ///
+ /// 获取或设置扣费次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduction_quantity")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduction_quantity")]
+ public int DeductionQuantity { get; set; }
+
+ ///
+ /// 获取或设置原总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_original_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_original_price")]
+ public int TotalOriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置实际总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_actual_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_actual_price")]
+ public int TotalActualPrice { get; set; }
+
+ ///
+ /// 获取或设置计划明细列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_detail_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_detail_list")]
+ public IList? PlanDetailList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/CreatePayScorePlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/CreatePayScorePlanResponse.cs
new file mode 100644
index 00000000..2bd6965b
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/CreatePayScorePlanResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/plan/payscore-plans 接口的响应。
+ ///
+ public class CreatePayScorePlanResponse : GetPayScorePlanByOutPlanNumberResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/GetPayScorePlanByOutPlanNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/GetPayScorePlanByOutPlanNumberRequest.cs
new file mode 100644
index 00000000..a59436be
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/GetPayScorePlanByOutPlanNumberRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /payscore/plan/payscore-plans/merchant-plan-no/{merchant_plan_no} 接口的请求。
+ ///
+ public class GetPayScorePlanByOutPlanNumberRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商户计划号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OutPlanNumber { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/GetPayScorePlanByOutPlanNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/GetPayScorePlanByOutPlanNumberResponse.cs
new file mode 100644
index 00000000..e888bca2
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/GetPayScorePlanByOutPlanNumberResponse.cs
@@ -0,0 +1,151 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /payscore/plan/payscore-plans/merchant-plan-no/{merchant_plan_no} 接口的响应。
+ ///
+ public class GetPayScorePlanByOutPlanNumberResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class PlanDetail
+ {
+ ///
+ /// 获取或设置明细序号。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_detail_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_detail_no")]
+ public int DetailNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置明细名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_detail_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_detail_name")]
+ public string DetailName { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠说明。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_discount_description")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_discount_description")]
+ public string? DiscountDescription { get; set; }
+
+ ///
+ /// 获取或设置原支付金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("original_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("original_price")]
+ public int OriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置实际支付金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("actual_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("actual_price")]
+ public int ActualPrice { 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!;
+
+ ///
+ /// 获取或设置商户计划号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_plan_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_plan_no")]
+ public string OutPlanNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置支付分计划 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_id")]
+ public string PlanId { get; set; } = default!;
+
+ ///
+ /// 获取或设置服务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_id")]
+ public string ServiceId { get; set; } = default!;
+
+ ///
+ /// 获取或设置计划名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_name")]
+ public string PlanName { get; set; } = default!;
+
+ ///
+ /// 获取或设置计划有效期(单位:天)。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_duration")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_duration")]
+ public int PlanDuration { get; set; }
+
+ ///
+ /// 获取或设置计划状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_state")]
+ public string PlanState { get; set; } = default!;
+
+ ///
+ /// 获取或设置扣费次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduction_quantity")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduction_quantity")]
+ public int DeductionQuantity { get; set; }
+
+ ///
+ /// 获取或设置原总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_original_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_original_price")]
+ public int TotalOriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置实际总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_actual_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_actual_price")]
+ public int TotalActualPrice { get; set; }
+
+ ///
+ /// 获取或设置计划明细列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_detail_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_detail_list")]
+ public Types.PlanDetail[]? PlanDetailList { get; set; }
+
+ ///
+ /// 获取或设置终止方商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("stop_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("stop_mchid")]
+ public string? StopMerchantId { get; set; }
+
+ ///
+ /// 获取或设置终止时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("stop_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("stop_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? StopTime { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/StopPayScorePlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/StopPayScorePlanRequest.cs
new file mode 100644
index 00000000..ff546217
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/StopPayScorePlanRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/plan/payscore-plans/merchant-plan-no/{merchant_plan_no}/stop 接口的请求。
+ ///
+ public class StopPayScorePlanRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商户计划号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OutPlanNumber { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/StopPayScorePlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/StopPayScorePlanResponse.cs
new file mode 100644
index 00000000..5185e89e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/Plan/StopPayScorePlanResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/plan/payscore-plans/merchant-plan-no/{merchant_plan_no}/stop 接口的响应。
+ ///
+ public class StopPayScorePlanResponse : GetPayScorePlanByOutPlanNumberResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/ServiceOrder/CreatePayScoreServiceOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/ServiceOrder/CreatePayScoreServiceOrderRequest.cs
index 5461e135..1cdc1ae1 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/ServiceOrder/CreatePayScoreServiceOrderRequest.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/ServiceOrder/CreatePayScoreServiceOrderRequest.cs
@@ -109,14 +109,14 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
///
[Newtonsoft.Json.JsonProperty("start_location")]
[System.Text.Json.Serialization.JsonPropertyName("start_location")]
- public string StartLocation { get; set; } = string.Empty;
+ public string? StartLocation { get; set; }
///
/// 获取或设置服务结束地点。
///
[Newtonsoft.Json.JsonProperty("end_location")]
[System.Text.Json.Serialization.JsonPropertyName("end_location")]
- public string EndLocation { get; set; } = string.Empty;
+ public string? EndLocation { get; set; }
}
public class RiskFund
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderRequest.cs
new file mode 100644
index 00000000..06806df0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderRequest.cs
@@ -0,0 +1,96 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/serviceorder 接口的请求。
+ ///
+ public class CreatePayScoreSignPlanServiceOrderRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class TimeRange : CreatePayScoreServiceOrderRequest.Types.TimeRange
+ {
+ }
+
+ public class Location : CreatePayScoreServiceOrderRequest.Types.Location
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置待签约支付分计划 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_plan_id")]
+ public string SignPlanId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置签约计划明细序号。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_detail_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_detail_no")]
+ public int PlanDetailNumber { get; set; }
+
+ ///
+ /// 获取或设置服务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_id")]
+ public string ServiceId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置服务信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_introduction")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_introduction")]
+ public string ServiceInstruction { 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("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置附加数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_url")]
+ public string? NotifyUrl { get; set; }
+
+ ///
+ /// 获取或设置服务时间段信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("time_range")]
+ [System.Text.Json.Serialization.JsonPropertyName("time_range")]
+ public Types.TimeRange TimeRange { get; set; } = new Types.TimeRange();
+
+ ///
+ /// 获取或设置服务位置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("location")]
+ [System.Text.Json.Serialization.JsonPropertyName("location")]
+ public Types.Location? Location { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderResponse.cs
new file mode 100644
index 00000000..163373bf
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/serviceorder 接口的响应。
+ ///
+ public class CreatePayScoreSignPlanServiceOrderResponse : GetPayScoreServiceOrderByOutOrderNumberResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanRequest.cs
new file mode 100644
index 00000000..08a624cd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanRequest.cs
@@ -0,0 +1,79 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/user-sign-plans 接口的请求。
+ ///
+ public class CreatePayScoreSignPlanUserSignPlanRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class SignPlanDetail
+ {
+ ///
+ /// 获取或设置计划明细序号。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_detail_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_detail_no")]
+ public int PlanDetailNumber { get; set; }
+
+ ///
+ /// 获取或设置商户计划明细使用订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_plan_detail_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_plan_detail_no")]
+ public string OutPlanDetailNumber { 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 string PlanId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置服务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_id")]
+ public string ServiceId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户签约计划单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_sign_plan_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_sign_plan_no")]
+ public string OutSignPlanNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_url")]
+ public string? NotifyUrl { get; set; }
+
+ ///
+ /// 获取或设置签约计划明细列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_plan_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_plan_detail")]
+ public IList? SignPlanDetailList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanResponse.cs
new file mode 100644
index 00000000..286e0541
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanResponse.cs
@@ -0,0 +1,183 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/user-sign-plans 接口的响应。
+ ///
+ public class CreatePayScoreSignPlanUserSignPlanResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class SignPlan
+ {
+ public static class Types
+ {
+ public class SignPlanDetail : GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse.Types.SignPlanDetail
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [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 string PlanId { get; set; } = default!;
+
+ ///
+ /// 获取或设置计划名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_name")]
+ public string PlanName { get; set; } = default!;
+
+ ///
+ /// 获取或设置服务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_id")]
+ public string ServiceId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户签约计划单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_sign_plan_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_sign_plan_no")]
+ public string OutSignPlanNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置签约计划 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_plan_id")]
+ public string SignPlanId { get; set; } = default!;
+
+ ///
+ /// 获取或设置计划状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_state")]
+ public string SignState { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_callback_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_callback_url")]
+ public string? NotifyUrl { get; set; }
+
+ ///
+ /// 获取或设置目前用户进行到的计划明细序号。
+ ///
+ [Newtonsoft.Json.JsonProperty("going_detail_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("going_detail_no")]
+ public int GoingDetailNumber { get; set; }
+
+ ///
+ /// 获取或设置计划过期时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_over_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_over_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset PlanOverTime { get; set; }
+
+ ///
+ /// 获取或设置扣费次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduction_quantity")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduction_quantity")]
+ public int DeductionQuantity { get; set; }
+
+ ///
+ /// 获取或设置原总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_origin_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_origin_price")]
+ public int TotalOriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置实际总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_actual_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_actual_price")]
+ public int TotalActualPrice { get; set; }
+
+ ///
+ /// 获取或设置签约时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SignTime { get; set; }
+
+ ///
+ /// 获取或设置取消类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_sign_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_sign_type")]
+ public string? CancelType { get; set; }
+
+ ///
+ /// 获取或设置取消原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_reason")]
+ public string? CancelReason { get; set; }
+
+ ///
+ /// 获取或设置取消时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_sign_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_sign_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? CancelTime { get; set; }
+
+ ///
+ /// 获取或设置签约计划明细列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("signed_detail_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("signed_detail_list")]
+ public Types.SignPlanDetail[]? SignPlanDetailList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置跳转微信侧小程序订单数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("package")]
+ [System.Text.Json.Serialization.JsonPropertyName("package")]
+ public string Package { get; set; } = default!;
+
+ ///
+ /// 获取或设置待签约计划信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_plan")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_plan")]
+ public Types.SignPlan SignPlan { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberRequest.cs
new file mode 100644
index 00000000..077372f0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /payscore/sign-plan/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no} 接口的请求。
+ ///
+ public class GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商户签约计划单号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OutSignPlanNumber { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse.cs
new file mode 100644
index 00000000..cc04a8c6
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse.cs
@@ -0,0 +1,252 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /payscore/sign-plan/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no} 接口的响应。
+ ///
+ public class GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class SignPlanDetail
+ {
+ ///
+ /// 获取或设置计划明细序号。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_detail_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_detail_no")]
+ public int PlanDetailNumber { get; set; }
+
+ ///
+ /// 获取或设置明细名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_detail_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_detail_name")]
+ public string PlanDetailName { get; set; } = default!;
+
+ ///
+ /// 获取或设置明细状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_detail_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_detail_state")]
+ public string PlanDetailState { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠说明。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_discount_description")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_discount_description")]
+ public string? DiscountDescription { get; set; }
+
+ ///
+ /// 获取或设置原支付金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("original_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("original_price")]
+ public int OriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置实际支付金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("actual_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("actual_price")]
+ public int ActualPrice { get; set; }
+
+ ///
+ /// 获取或设置实际支付金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("actual_pay_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("actual_pay_price")]
+ public int? ActualPayPrice { get; set; }
+
+ ///
+ /// 获取或设置商户计划明细使用订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_plan_detail_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_plan_detail_no")]
+ public string OutPlanDetailNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置微信支付服务订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("order_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("order_id")]
+ public string? OrderId { get; set; }
+
+ ///
+ /// 获取或设置使用时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("use_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("use_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? UseTime { get; set; }
+
+ ///
+ /// 获取或设置完成时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("complete_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("complete_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? CompleteTime { get; set; }
+
+ ///
+ /// 获取或设置取消时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? CancelTime { 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 string PlanId { get; set; } = default!;
+
+ ///
+ /// 获取或设置计划名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_name")]
+ public string PlanName { get; set; } = default!;
+
+ ///
+ /// 获取或设置服务 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("service_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("service_id")]
+ public string ServiceId { get; set; } = default!;
+
+ ///
+ /// 获取或设置商户签约计划单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_sign_plan_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_sign_plan_no")]
+ public string OutSignPlanNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置签约计划 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_plan_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_plan_id")]
+ public string SignPlanId { get; set; } = default!;
+
+ ///
+ /// 获取或设置计划状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_state")]
+ public string SignState { get; set; } = default!;
+
+ ///
+ /// 获取或设置用户唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("openid")]
+ public string OpenId { get; set; } = default!;
+
+ ///
+ /// 获取或设置回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("merchant_callback_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("merchant_callback_url")]
+ public string? NotifyUrl { get; set; }
+
+ ///
+ /// 获取或设置目前用户进行到的计划明细序号。
+ ///
+ [Newtonsoft.Json.JsonProperty("going_detail_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("going_detail_no")]
+ public int GoingDetailNumber { get; set; }
+
+ ///
+ /// 获取或设置计划过期时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("plan_over_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("plan_over_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset PlanOverTime { get; set; }
+
+ ///
+ /// 获取或设置扣费次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("deduction_quantity")]
+ [System.Text.Json.Serialization.JsonPropertyName("deduction_quantity")]
+ public int DeductionQuantity { get; set; }
+
+ ///
+ /// 获取或设置原总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_origin_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_origin_price")]
+ public int TotalOriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置实际总金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_actual_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_actual_price")]
+ public int TotalActualPrice { get; set; }
+
+ ///
+ /// 获取或设置签约时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? SignTime { get; set; }
+
+ ///
+ /// 获取或设置取消类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_sign_type")]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_sign_type")]
+ public string? CancelType { get; set; }
+
+ ///
+ /// 获取或设置取消原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_reason")]
+ public string? CancelReason { get; set; }
+
+ ///
+ /// 获取或设置取消时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("cancel_sign_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("cancel_sign_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? CancelTime { get; set; }
+
+ ///
+ /// 获取或设置签约计划明细列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("signed_detail_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("signed_detail_list")]
+ public Types.SignPlanDetail[]? SignPlanDetailList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanRequest.cs
new file mode 100644
index 00000000..a2ff5148
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no}/stop 接口的请求。
+ ///
+ public class StopPayScoreSignPlanUserSignPlanRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商户签约计划单号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OutSignPlanNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置停止原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("stop_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("stop_reason")]
+ public string? StopReason { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanResponse.cs
new file mode 100644
index 00000000..0373431f
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no}/stop 接口的响应。
+ ///
+ public class StopPayScoreSignPlanUserSignPlanResponse : GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/GetEducationSchoolPayTransactionByOutTradeNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/GetEducationSchoolPayTransactionByOutTradeNumberResponse.cs
index fadd0d3b..27d91ffc 100644
--- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/GetEducationSchoolPayTransactionByOutTradeNumberResponse.cs
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/EducationSchoolPay/GetEducationSchoolPayTransactionByOutTradeNumberResponse.cs
@@ -11,12 +11,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
{
public class Payer : GetEducationPAPayTransactionByOutTradeNumberResponse.Types.Payer
{
- ///
- /// 获取或设置用户在子商户下唯一标识。
- ///
- [Newtonsoft.Json.JsonProperty("sub_openid")]
- [System.Text.Json.Serialization.JsonPropertyName("sub_openid")]
- public string? SubOpenId { get; set; }
}
public class Amount : GetEducationPAPayTransactionByOutTradeNumberResponse.Types.Amount
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/CreatePayScorePartnerPlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/CreatePayScorePartnerPlanRequest.cs
new file mode 100644
index 00000000..ec88ad70
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/CreatePayScorePartnerPlanRequest.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/plan/partner/payscore-plans 接口的请求。
+ ///
+ public class CreatePayScorePartnerPlanRequest : CreatePayScorePlanRequest
+ {
+ public static new class Types
+ {
+ public class PlanDetail : CreatePayScorePlanRequest.Types.PlanDetail
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置子商户 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置子商户 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
+ public string? SubAppId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/CreatePayScorePartnerPlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/CreatePayScorePartnerPlanResponse.cs
new file mode 100644
index 00000000..44d270c5
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/CreatePayScorePartnerPlanResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/plan/partner/payscore-plans 接口的响应。
+ ///
+ public class CreatePayScorePartnerPlanResponse : GetPayScorePartnerPlanByOutPlanNumberResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/GetPayScorePartnerPlanByOutPlanNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/GetPayScorePartnerPlanByOutPlanNumberRequest.cs
new file mode 100644
index 00000000..1d0e3b26
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/GetPayScorePartnerPlanByOutPlanNumberRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /payscore/plan/partner/payscore-plans/merchant-plan-no/{merchant_plan_no} 接口的请求。
+ ///
+ public class GetPayScorePartnerPlanByOutPlanNumberRequest : GetPayScorePlanByOutPlanNumberRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string SubMerchantId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/GetPayScorePartnerPlanByOutPlanNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/GetPayScorePartnerPlanByOutPlanNumberResponse.cs
new file mode 100644
index 00000000..3f73ff23
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/GetPayScorePartnerPlanByOutPlanNumberResponse.cs
@@ -0,0 +1,24 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /payscore/plan/partner/payscore-plans/merchant-plan-no/{merchant_plan_no} 接口的响应。
+ ///
+ public class GetPayScorePartnerPlanByOutPlanNumberResponse : GetPayScorePlanByOutPlanNumberResponse
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置子商户 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
+ public string? SubAppId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/StopPayScorePartnerPlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/StopPayScorePartnerPlanRequest.cs
new file mode 100644
index 00000000..3033e399
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/StopPayScorePartnerPlanRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/plan/partner/payscore-plans/merchant-plan-no/{merchant_plan_no}/stop 接口的请求。
+ ///
+ public class StopPayScorePartnerPlanRequest : StopPayScorePlanRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/StopPayScorePartnerPlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/StopPayScorePartnerPlanResponse.cs
new file mode 100644
index 00000000..7273e167
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/Plan/StopPayScorePartnerPlanResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/plan/partner/payscore-plans/merchant-plan-no/{merchant_plan_no}/stop 接口的响应。
+ ///
+ public class StopPayScorePartnerPlanResponse : GetPayScorePartnerPlanByOutPlanNumberResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderRequest.cs
new file mode 100644
index 00000000..d3ec2c7e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderRequest.cs
@@ -0,0 +1,40 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/partner/serviceorder 接口的请求。
+ ///
+ public class CreatePayScorePartnerSignPlanServiceOrderRequest : CreatePayScoreSignPlanServiceOrderRequest
+ {
+ public static new class Types
+ {
+ public class TimeRange : CreatePayScorePartnerServiceOrderRequest.Types.TimeRange
+ {
+ }
+
+ public class Location : CreatePayScorePartnerServiceOrderRequest.Types.Location
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置子商户 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
+ public string? SubAppId { get; set; }
+
+ ///
+ /// 获取或设置用户在子商户下的唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_openid")]
+ public string? SubOpenId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderResponse.cs
new file mode 100644
index 00000000..d552cb9d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/partner/serviceorder 接口的响应。
+ ///
+ public class CreatePayScorePartnerSignPlanServiceOrderResponse : GetPayScorePartnerServiceOrderByOutOrderNumberResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanRequest.cs
new file mode 100644
index 00000000..da19c84e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanRequest.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/partner/user-sign-plans 接口的请求。
+ ///
+ public class CreatePayScorePartnerSignPlanUserSignPlanRequest : CreatePayScoreSignPlanUserSignPlanRequest
+ {
+ public static new class Types
+ {
+ public class SignPlanDetail : CreatePayScoreSignPlanUserSignPlanRequest.Types.SignPlanDetail
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置子商户 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
+ public string SubAppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户在子商户下的唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_openid")]
+ public string? SubOpenId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanResponse.cs
new file mode 100644
index 00000000..11bc2fd6
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanResponse.cs
@@ -0,0 +1,49 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/partner/user-sign-plans 接口的响应。
+ ///
+ public class CreatePayScorePartnerSignPlanUserSignPlanResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class SignPlan : CreatePayScoreSignPlanUserSignPlanResponse.Types.SignPlan
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置子商户 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
+ public string? SubAppId { get; set; }
+
+ ///
+ /// 获取或设置用户在子商户下的唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_openid")]
+ public string? SubOpenId { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置跳转微信侧小程序订单数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("package")]
+ [System.Text.Json.Serialization.JsonPropertyName("package")]
+ public string Package { get; set; } = default!;
+
+ ///
+ /// 获取或设置待签约计划信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("sign_plan")]
+ [System.Text.Json.Serialization.JsonPropertyName("sign_plan")]
+ public Types.SignPlan SignPlan { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberRequest.cs
new file mode 100644
index 00000000..0c6cf008
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /payscore/sign-plan/partner/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no} 接口的请求。
+ ///
+ public class GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberRequest : GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string SubMerchantId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberResponse.cs
new file mode 100644
index 00000000..e8d9e7c1
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberResponse.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /payscore/sign-plan/partner/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no} 接口的响应。
+ ///
+ public class GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberResponse : GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = default!;
+
+ ///
+ /// 获取或设置子商户 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_appid")]
+ public string? SubAppId { get; set; }
+
+ ///
+ /// 获取或设置用户在子商户下的唯一标识。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_openid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_openid")]
+ public string? SubOpenId { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanRequest.cs
new file mode 100644
index 00000000..135e23b8
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/partner/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no}/stop 接口的请求。
+ ///
+ public class StopPayScorePartnerSignPlanUserSignPlanRequest : StopPayScoreSignPlanUserSignPlanRequest
+ {
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string SubMerchantId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanResponse.cs
new file mode 100644
index 00000000..523c79d3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /payscore/sign-plan/partner/user-sign-plans/merchant-sign-plan-no/{merchant_sign_plan_no}/stop 接口的响应。
+ ///
+ public class StopPayScorePartnerSignPlanUserSignPlanResponse : GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberResponse
+ {
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/PayScore/PayScoreUserSignPlanResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/PayScore/PayScoreUserSignPlanResource.json
new file mode 100644
index 00000000..1b5a073a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/PayScore/PayScoreUserSignPlanResource.json
@@ -0,0 +1,93 @@
+{
+ "sign_plan_id": "01020033210023606914000000007830",
+ "openid": "oBgbt4sGN3Vl76KF7QgLF37UdjDU",
+ "service_id": "00109000000000169034377913212082",
+ "mchid": "2480262201",
+ "appid": "wxa620f17681c6b0c7",
+ "merchant_sign_plan_no": "1693882928726",
+ "merchant_callback_url": "https://payapp.weixin.qq.com/wxvaluetest/common/indirect_bank/2492014071/listennotify",
+ "plan_id": "01000033210032606914000000007983",
+ "going_detail_no": 0,
+ "sign_state": "SIGNED",
+ "cancel_sign_time": "",
+ "cancel_sign_type": "NOT_CANCEL",
+ "cancel_reason": "",
+ "plan_name": "瑜伽课5节",
+ "plan_over_time": "2024-07-02T00:00:00+08:00",
+ "total_origin_price": 1000,
+ "deduction_quantity": 5,
+ "total_actual_price": 500,
+ "signed_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "original_price": 200,
+ "plan_discount_description": "享受五折",
+ "actual_price": 100,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "",
+ "merchant_plan_detail_no": "1693882928727",
+ "plan_detail_name": "服务费1",
+ "actual_pay_price": 0,
+ "use_time": "",
+ "complete_time": "",
+ "cancel_time": ""
+ },
+ {
+ "plan_detail_no": 2,
+ "original_price": 200,
+ "plan_discount_description": "享受五折",
+ "actual_price": 100,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "",
+ "merchant_plan_detail_no": "1693882928728",
+ "plan_detail_name": "服务费2",
+ "actual_pay_price": 0,
+ "use_time": "",
+ "complete_time": "",
+ "cancel_time": ""
+ },
+ {
+ "plan_detail_no": 3,
+ "original_price": 200,
+ "plan_discount_description": "享受五折",
+ "actual_price": 100,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "",
+ "merchant_plan_detail_no": "1693882928729",
+ "plan_detail_name": "服务费3",
+ "actual_pay_price": 0,
+ "use_time": "",
+ "complete_time": "",
+ "cancel_time": ""
+ },
+ {
+ "plan_detail_no": 4,
+ "original_price": 200,
+ "plan_discount_description": "享受五折",
+ "actual_price": 100,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "",
+ "merchant_plan_detail_no": "1693882928730",
+ "plan_detail_name": "服务费4",
+ "actual_pay_price": 0,
+ "use_time": "",
+ "complete_time": "",
+ "cancel_time": ""
+ },
+ {
+ "plan_detail_no": 5,
+ "original_price": 200,
+ "plan_discount_description": "享受五折",
+ "actual_price": 100,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "",
+ "merchant_plan_detail_no": "1693882928731",
+ "plan_detail_name": "服务费5",
+ "actual_pay_price": 0,
+ "use_time": "",
+ "complete_time": "",
+ "cancel_time": ""
+ }
+ ],
+ "sign_time": "2023-09-05T11:03:56+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/PayScore/PayScorePartnerUserSignPlanResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/PayScore/PayScorePartnerUserSignPlanResource.json
new file mode 100644
index 00000000..4430b9f3
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/PayScore/PayScorePartnerUserSignPlanResource.json
@@ -0,0 +1,95 @@
+{
+ "sign_plan_id": "01020033210023606914000000007830",
+ "openid": "oBgbt4sGN3Vl76KF7QgLF37UdjDU",
+ "service_id": "00109000000000169034377913212082",
+ "mchid": "2480262201",
+ "sub_mchid": "2480262211",
+ "appid": "wxa620f17681c6b0c7",
+ "sub_appid": "",
+ "merchant_sign_plan_no": "1693882928726",
+ "merchant_callback_url": "https://payapp.weixin.qq.com/wxvaluetest/common/indirect_bank/2492014071/listennotify",
+ "plan_id": "01000033210032606914000000007983",
+ "going_detail_no": 0,
+ "sign_state": "SIGNED",
+ "cancel_sign_time": "",
+ "cancel_sign_type": "NOT_CANCEL",
+ "cancel_reason": "",
+ "plan_name": "瑜伽课5节",
+ "plan_over_time": "2024-07-02T00:00:00+08:00",
+ "total_origin_price": 1000,
+ "deduction_quantity": 5,
+ "total_actual_price": 500,
+ "signed_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "original_price": 200,
+ "plan_discount_description": "享受五折",
+ "actual_price": 100,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "",
+ "merchant_plan_detail_no": "1693882928727",
+ "plan_detail_name": "服务费1",
+ "actual_pay_price": 0,
+ "use_time": "",
+ "complete_time": "",
+ "cancel_time": ""
+ },
+ {
+ "plan_detail_no": 2,
+ "original_price": 200,
+ "plan_discount_description": "享受五折",
+ "actual_price": 100,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "",
+ "merchant_plan_detail_no": "1693882928728",
+ "plan_detail_name": "服务费2",
+ "actual_pay_price": 0,
+ "use_time": "",
+ "complete_time": "",
+ "cancel_time": ""
+ },
+ {
+ "plan_detail_no": 3,
+ "original_price": 200,
+ "plan_discount_description": "享受五折",
+ "actual_price": 100,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "",
+ "merchant_plan_detail_no": "1693882928729",
+ "plan_detail_name": "服务费3",
+ "actual_pay_price": 0,
+ "use_time": "",
+ "complete_time": "",
+ "cancel_time": ""
+ },
+ {
+ "plan_detail_no": 4,
+ "original_price": 200,
+ "plan_discount_description": "享受五折",
+ "actual_price": 100,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "",
+ "merchant_plan_detail_no": "1693882928730",
+ "plan_detail_name": "服务费4",
+ "actual_pay_price": 0,
+ "use_time": "",
+ "complete_time": "",
+ "cancel_time": ""
+ },
+ {
+ "plan_detail_no": 5,
+ "original_price": 200,
+ "plan_discount_description": "享受五折",
+ "actual_price": 100,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "",
+ "merchant_plan_detail_no": "1693882928731",
+ "plan_detail_name": "服务费5",
+ "actual_pay_price": 0,
+ "use_time": "",
+ "complete_time": "",
+ "cancel_time": ""
+ }
+ ],
+ "sign_time": "2023-09-05T11:03:56+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/CreatePayScorePlanRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/CreatePayScorePlanRequest.json
new file mode 100644
index 00000000..372af6b2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/CreatePayScorePlanRequest.json
@@ -0,0 +1,18 @@
+{
+ "service_id": "2002000000000558128851361561536",
+ "appid": "wxd678efh567hg6787",
+ "plan_name": "瑜伽课20节",
+ "plan_duration": 300,
+ "deduction_quantity": 10,
+ "total_original_price": 15000,
+ "total_actual_price": 15000,
+ "plan_detail_list": [
+ {
+ "original_price": 15000,
+ "plan_discount_description": "享受九折",
+ "actual_price": 14000,
+ "plan_detail_name": "第八节课"
+ }
+ ],
+ "merchant_plan_no": "1234323JKHDFE1243252"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/CreatePayScorePlanResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/CreatePayScorePlanResponse.json
new file mode 100644
index 00000000..6e379ce3
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/CreatePayScorePlanResponse.json
@@ -0,0 +1,24 @@
+{
+ "plan_id": "01000033210000324638000000376258",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "merchant_plan_no": "1234323JKHDFE1243252",
+ "plan_name": "瑜伽课20节",
+ "plan_duration": 10,
+ "plan_state": "NORMAL",
+ "total_original_price": 15000,
+ "deduction_quantity": 10,
+ "total_actual_price": 140000,
+ "plan_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "plan_detail_name": "第8节课",
+ "original_price": 15000,
+ "plan_discount_description": "享受九折优惠",
+ "actual_price": 14000
+ }
+ ],
+ "stop_mchid": "1900000109",
+ "stop_time": "2021-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/GetPayScorePlanByOutPlanNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/GetPayScorePlanByOutPlanNumberResponse.json
new file mode 100644
index 00000000..6e379ce3
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/GetPayScorePlanByOutPlanNumberResponse.json
@@ -0,0 +1,24 @@
+{
+ "plan_id": "01000033210000324638000000376258",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "merchant_plan_no": "1234323JKHDFE1243252",
+ "plan_name": "瑜伽课20节",
+ "plan_duration": 10,
+ "plan_state": "NORMAL",
+ "total_original_price": 15000,
+ "deduction_quantity": 10,
+ "total_actual_price": 140000,
+ "plan_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "plan_detail_name": "第8节课",
+ "original_price": 15000,
+ "plan_discount_description": "享受九折优惠",
+ "actual_price": 14000
+ }
+ ],
+ "stop_mchid": "1900000109",
+ "stop_time": "2021-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/StopPayScorePlanResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/StopPayScorePlanResponse.json
new file mode 100644
index 00000000..6e379ce3
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/Plan/StopPayScorePlanResponse.json
@@ -0,0 +1,24 @@
+{
+ "plan_id": "01000033210000324638000000376258",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "merchant_plan_no": "1234323JKHDFE1243252",
+ "plan_name": "瑜伽课20节",
+ "plan_duration": 10,
+ "plan_state": "NORMAL",
+ "total_original_price": 15000,
+ "deduction_quantity": 10,
+ "total_actual_price": 140000,
+ "plan_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "plan_detail_name": "第8节课",
+ "original_price": 15000,
+ "plan_discount_description": "享受九折优惠",
+ "actual_price": 14000
+ }
+ ],
+ "stop_mchid": "1900000109",
+ "stop_time": "2021-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderRequest.json
new file mode 100644
index 00000000..ceeaafae
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderRequest.json
@@ -0,0 +1,21 @@
+{
+ "service_id": "2002000000000558128851361561536",
+ "sign_plan_id": "01000033210000324638000000376258",
+ "plan_detail_no": 2,
+ "appid": "wxd678efh567hg6787",
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "notify_url": "https://api.test.com",
+ "service_introduction": "羽毛球课基础练习课程",
+ "time_range": {
+ "start_time": "20091225091010",
+ "end_time": "20091225121010",
+ "start_time_remark": "备注1",
+ "end_time_remark": "备注2"
+ },
+ "location": {
+ "start_location": "嗨客时尚主题展餐厅",
+ "end_location": "嗨客时尚主题展餐厅"
+ },
+ "attach": "Easdfowealsdkjfnlaksjdlfkwqoi&wl3l2sald",
+ "out_trade_no": "1514323JSVDFE1243252"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderResponse.json
new file mode 100644
index 00000000..d4e46c54
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanServiceOrderResponse.json
@@ -0,0 +1,38 @@
+{
+ "out_order_no": "1234323JKHDFE1243252",
+ "service_id": "2002000000000558128851361561536",
+ "appid": "wxd678efh567hg6787",
+ "mchid": "1230000109",
+ "service_introduction": "羽毛球课程基础训练",
+ "state": "CREATED",
+ "state_description": "USER_CONFIRM",
+ "post_payments": [
+ {
+ "name": "瑜伽课程20节",
+ "amount": 40000,
+ "description": "第6节课"
+ }
+ ],
+ "post_discounts": [
+ {
+ "name": "享9折优惠",
+ "amount": 100
+ }
+ ],
+ "risk_fund": {
+ "amount": 10000
+ },
+ "time_range": {
+ "start_time": "20091225091010",
+ "end_time": "20091225121010",
+ "start_time_remark": "备注1",
+ "end_time_remark": "备注2"
+ },
+ "location": {
+ "start_location": "嗨客时尚主题展餐厅",
+ "end_location": "嗨客时尚主题展餐厅"
+ },
+ "attach": "Easdfowealsdkjfnlaksjdlfkwqoi&wl3l2sald",
+ "notify_url": "https://api.test.com",
+ "order_id": "0000300001201908301055157220022"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanRequest.json
new file mode 100644
index 00000000..635b44fb
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanRequest.json
@@ -0,0 +1,14 @@
+{
+ "service_id": "2002000000000558128851361561536",
+ "plan_id": "01000033210000324638000000376258",
+ "appid": "wxd678efh567hg6787",
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "merchant_sign_plan_no": "1234323JKHDFE1243252",
+ "notify_url": "https://api.test.com",
+ "sign_plan_detail": [
+ {
+ "plan_detail_no": 1,
+ "merchant_plan_detail_no": "1234323JKHDFE1243252"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanResponse.json
new file mode 100644
index 00000000..6538e9c4
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/CreatePayScoreSignPlanUserSignPlanResponse.json
@@ -0,0 +1,40 @@
+{
+ "sign_plan": {
+ "sign_plan_id": "01010033210001424338000019876258",
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "merchant_sign_plan_no": "1234323JKHDFE1243252",
+ "merchant_callback_url": "https://api.test.com",
+ "plan_id": "01000033210000324638000000376258",
+ "going_detail_no": 2,
+ "sign_state": "UNSIGNED",
+ "cancel_sign_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_sign_type": "NOT_CANCEL",
+ "cancel_reason": "用户放弃课程",
+ "plan_name": "瑜伽晨练课10次",
+ "plan_over_time": "2021-05-20T13:29:35.120+08:00",
+ "total_origin_price": 150000,
+ "deduction_quantity": 10,
+ "total_actual_price": 120000,
+ "signed_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "original_price": 30000,
+ "plan_discount_description": "享9折优惠",
+ "actual_price": 27000,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "0000300001201908301055157220022",
+ "merchant_plan_detail_no": "1234323JKHDFE1243252",
+ "plan_detail_name": "第一节课",
+ "actual_pay_price": 50000,
+ "use_time": "2021-05-20T13:29:35.120+08:00",
+ "complete_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_time": "2021-05-20T13:29:35.120+08:00"
+ }
+ ],
+ "sign_time": "2021-05-20T13:29:35.120+08:00"
+ },
+ "package": "Easdfowealsdkjfnlaksjdlfkwqoi&wl3l2sald"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse.json
new file mode 100644
index 00000000..fd475ed9
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/GetPayScoreSignPlanUserSignPlanByOutSignPlanNumberResponse.json
@@ -0,0 +1,37 @@
+{
+ "sign_plan_id": "01010033210001424338000019876258",
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "merchant_sign_plan_no": "1234323JKHDFE1243252",
+ "merchant_callback_url": "https://api.test.com",
+ "plan_id": "01000033210000324638000000376258",
+ "going_detail_no": 2,
+ "sign_state": "UNSIGNED",
+ "cancel_sign_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_sign_type": "NOT_CANCEL",
+ "cancel_reason": "用户放弃课程",
+ "plan_name": "瑜伽晨练课10次",
+ "plan_over_time": "2021-05-20T13:29:35.120+08:00",
+ "total_origin_price": 150000,
+ "deduction_quantity": 10,
+ "total_actual_price": 120000,
+ "signed_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "original_price": 30000,
+ "plan_discount_description": "享9折优惠",
+ "actual_price": 27000,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "0000300001201908301055157220022",
+ "merchant_plan_detail_no": "1234323JKHDFE1243252",
+ "plan_detail_name": "第一节课",
+ "actual_pay_price": 50000,
+ "use_time": "2021-05-20T13:29:35.120+08:00",
+ "complete_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_time": "2021-05-20T13:29:35.120+08:00"
+ }
+ ],
+ "sign_time": "2021-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanRequest.json
new file mode 100644
index 00000000..bde8908c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanRequest.json
@@ -0,0 +1,3 @@
+{
+ "stop_reason": "用户协商后停止"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanResponse.json
new file mode 100644
index 00000000..fd475ed9
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/PayScore/SignPlan/StopPayScoreSignPlanUserSignPlanResponse.json
@@ -0,0 +1,37 @@
+{
+ "sign_plan_id": "01010033210001424338000019876258",
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "merchant_sign_plan_no": "1234323JKHDFE1243252",
+ "merchant_callback_url": "https://api.test.com",
+ "plan_id": "01000033210000324638000000376258",
+ "going_detail_no": 2,
+ "sign_state": "UNSIGNED",
+ "cancel_sign_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_sign_type": "NOT_CANCEL",
+ "cancel_reason": "用户放弃课程",
+ "plan_name": "瑜伽晨练课10次",
+ "plan_over_time": "2021-05-20T13:29:35.120+08:00",
+ "total_origin_price": 150000,
+ "deduction_quantity": 10,
+ "total_actual_price": 120000,
+ "signed_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "original_price": 30000,
+ "plan_discount_description": "享9折优惠",
+ "actual_price": 27000,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "0000300001201908301055157220022",
+ "merchant_plan_detail_no": "1234323JKHDFE1243252",
+ "plan_detail_name": "第一节课",
+ "actual_pay_price": 50000,
+ "use_time": "2021-05-20T13:29:35.120+08:00",
+ "complete_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_time": "2021-05-20T13:29:35.120+08:00"
+ }
+ ],
+ "sign_time": "2021-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/CreatePayScorePartnerPlanRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/CreatePayScorePartnerPlanRequest.json
new file mode 100644
index 00000000..dd1a9428
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/CreatePayScorePartnerPlanRequest.json
@@ -0,0 +1,20 @@
+{
+ "service_id": "2002000000000558128851361561536",
+ "appid": "wxd678efh567hg6787",
+ "sub_mchid": "1900000109",
+ "sub_appid": "wxd678efh567hg6787",
+ "plan_name": "瑜伽课20节",
+ "plan_duration": 300,
+ "deduction_quantity": 10,
+ "total_original_price": 15000,
+ "total_actual_price": 15000,
+ "plan_detail_list": [
+ {
+ "original_price": 15000,
+ "plan_discount_description": "享受九折",
+ "actual_price": 14000,
+ "plan_detail_name": "第八节课"
+ }
+ ],
+ "merchant_plan_no": "1234323JKHDFE1243252"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/CreatePayScorePartnerPlanResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/CreatePayScorePartnerPlanResponse.json
new file mode 100644
index 00000000..d190b681
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/CreatePayScorePartnerPlanResponse.json
@@ -0,0 +1,26 @@
+{
+ "plan_id": "01000033210000324638000000376258",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "sub_mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "sub_appid": "wxd678efh567hg6787",
+ "merchant_plan_no": "1234323JKHDFE1243252",
+ "plan_name": "瑜伽课20节",
+ "plan_duration": 10,
+ "plan_state": "NORMAL",
+ "total_original_price": 15000,
+ "deduction_quantity": 10,
+ "total_actual_price": 140000,
+ "plan_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "plan_detail_name": "第8节课",
+ "original_price": 15000,
+ "plan_discount_description": "享受九折优惠",
+ "actual_price": 14000
+ }
+ ],
+ "stop_mchid": "1900000109",
+ "stop_time": "2021-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/GetPayScorePartnerPlanByOutPlanNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/GetPayScorePartnerPlanByOutPlanNumberResponse.json
new file mode 100644
index 00000000..d190b681
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/GetPayScorePartnerPlanByOutPlanNumberResponse.json
@@ -0,0 +1,26 @@
+{
+ "plan_id": "01000033210000324638000000376258",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "sub_mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "sub_appid": "wxd678efh567hg6787",
+ "merchant_plan_no": "1234323JKHDFE1243252",
+ "plan_name": "瑜伽课20节",
+ "plan_duration": 10,
+ "plan_state": "NORMAL",
+ "total_original_price": 15000,
+ "deduction_quantity": 10,
+ "total_actual_price": 140000,
+ "plan_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "plan_detail_name": "第8节课",
+ "original_price": 15000,
+ "plan_discount_description": "享受九折优惠",
+ "actual_price": 14000
+ }
+ ],
+ "stop_mchid": "1900000109",
+ "stop_time": "2021-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/StopPayScorePartnerPlanRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/StopPayScorePartnerPlanRequest.json
new file mode 100644
index 00000000..9f8b42b7
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/StopPayScorePartnerPlanRequest.json
@@ -0,0 +1,3 @@
+{
+ "sub_mchid": "1900000109"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/StopPayScorePartnerPlanResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/StopPayScorePartnerPlanResponse.json
new file mode 100644
index 00000000..d190b681
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/Plan/StopPayScorePartnerPlanResponse.json
@@ -0,0 +1,26 @@
+{
+ "plan_id": "01000033210000324638000000376258",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "sub_mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "sub_appid": "wxd678efh567hg6787",
+ "merchant_plan_no": "1234323JKHDFE1243252",
+ "plan_name": "瑜伽课20节",
+ "plan_duration": 10,
+ "plan_state": "NORMAL",
+ "total_original_price": 15000,
+ "deduction_quantity": 10,
+ "total_actual_price": 140000,
+ "plan_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "plan_detail_name": "第8节课",
+ "original_price": 15000,
+ "plan_discount_description": "享受九折优惠",
+ "actual_price": 14000
+ }
+ ],
+ "stop_mchid": "1900000109",
+ "stop_time": "2021-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderRequest.json
new file mode 100644
index 00000000..baa02da4
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderRequest.json
@@ -0,0 +1,24 @@
+{
+ "service_id": "2002000000000558128851361561536",
+ "sign_plan_id": "01000033210000324638000000376258",
+ "plan_detail_no": 2,
+ "appid": "wxd678efh567hg6787",
+ "sub_mchid": "1900000109",
+ "sub_appid": "wxd678efh567hg6999",
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "notify_url": "https://api.test.com",
+ "service_introduction": "羽毛球课基础练习课程",
+ "time_range": {
+ "start_time": "20091225091010",
+ "end_time": "20091225121010",
+ "start_time_remark": "备注1",
+ "end_time_remark": "备注2"
+ },
+ "location": {
+ "start_location": "嗨客时尚主题展餐厅",
+ "end_location": "嗨客时尚主题展餐厅"
+ },
+ "attach": "Easdfowealsdkjfnlaksjdlfkwqoi&wl3l2sald",
+ "out_trade_no": "1514323JSVDFE1243252"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderResponse.json
new file mode 100644
index 00000000..fed79f62
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanServiceOrderResponse.json
@@ -0,0 +1,40 @@
+{
+ "out_order_no": "1234323JKHDFE1243252",
+ "service_id": "2002000000000558128851361561536",
+ "appid": "wxd678efh567hg6787",
+ "mchid": "1230000109",
+ "sub_appid": "wxd678efh567hg6999",
+ "sub_mchid": "1900000109",
+ "service_introduction": "羽毛球课程基础训练",
+ "state": "CREATED",
+ "state_description": "USER_CONFIRM",
+ "post_payments": [
+ {
+ "name": "瑜伽课程20节",
+ "amount": 40000,
+ "description": "第6节课"
+ }
+ ],
+ "post_discounts": [
+ {
+ "name": "享9折优惠",
+ "amount": 100
+ }
+ ],
+ "risk_fund": {
+ "amount": 10000
+ },
+ "time_range": {
+ "start_time": "20091225091010",
+ "end_time": "20091225121010",
+ "start_time_remark": "备注1",
+ "end_time_remark": "备注2"
+ },
+ "location": {
+ "start_location": "嗨客时尚主题展餐厅",
+ "end_location": "嗨客时尚主题展餐厅"
+ },
+ "attach": "Easdfowealsdkjfnlaksjdlfkwqoi&wl3l2sald",
+ "notify_url": "https://api.test.com",
+ "order_id": "0000300001201908301055157220022"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanRequest.json
new file mode 100644
index 00000000..a1cfabab
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanRequest.json
@@ -0,0 +1,17 @@
+{
+ "service_id": "2002000000000558128851361561536",
+ "plan_id": "01000033210000324638000000376258",
+ "appid": "wxd678efh567hg6787",
+ "sub_mchid": "1900000109",
+ "sub_appid": "wxd678efh567hg6999",
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "merchant_sign_plan_no": "1234323JKHDFE1243252",
+ "notify_url": "https://api.test.com",
+ "sign_plan_detail": [
+ {
+ "plan_detail_no": 1,
+ "merchant_plan_detail_no": "1234323JKHDFE1243252"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanResponse.json
new file mode 100644
index 00000000..5778e813
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/CreatePayScorePartnerSignPlanUserSignPlanResponse.json
@@ -0,0 +1,43 @@
+{
+ "sign_plan": {
+ "sign_plan_id": "01010033210001424338000019876258",
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "sub_mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "sub_appid": "wxd678efh567hg6787",
+ "merchant_sign_plan_no": "1234323JKHDFE1243252",
+ "merchant_callback_url": "https://api.test.com",
+ "plan_id": "01000033210000324638000000376258",
+ "going_detail_no": 2,
+ "sign_state": "UNSIGNED",
+ "cancel_sign_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_sign_type": "NOT_CANCEL",
+ "cancel_reason": "用户放弃课程",
+ "plan_name": "瑜伽晨练课10次",
+ "plan_over_time": "2021-05-20T13:29:35.120+08:00",
+ "total_origin_price": 150000,
+ "deduction_quantity": 10,
+ "total_actual_price": 120000,
+ "signed_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "original_price": 30000,
+ "plan_discount_description": "享9折优惠",
+ "actual_price": 27000,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "0000300001201908301055157220022",
+ "merchant_plan_detail_no": "1234323JKHDFE1243252",
+ "plan_detail_name": "第一节课",
+ "actual_pay_price": 50000,
+ "use_time": "2021-05-20T13:29:35.120+08:00",
+ "complete_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_time": "2021-05-20T13:29:35.120+08:00"
+ }
+ ],
+ "sign_time": "2021-05-20T13:29:35.120+08:00"
+ },
+ "package": "Easdfowealsdkjfnlaksjdlfkwqoi&wl3l2sald"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberResponse.json
new file mode 100644
index 00000000..a05617d4
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/GetPayScorePartnerSignPlanUserSignPlanByOutSignPlanNumberResponse.json
@@ -0,0 +1,40 @@
+{
+ "sign_plan_id": "01010033210001424338000019876258",
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "sub_mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "sub_appid": "wxd678efh567hg6787",
+ "merchant_sign_plan_no": "1234323JKHDFE1243252",
+ "merchant_callback_url": "https://api.test.com",
+ "plan_id": "01000033210000324638000000376258",
+ "going_detail_no": 2,
+ "sign_state": "UNSIGNED",
+ "cancel_sign_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_sign_type": "NOT_CANCEL",
+ "cancel_reason": "用户放弃课程",
+ "plan_name": "瑜伽晨练课10次",
+ "plan_over_time": "2021-05-20T13:29:35.120+08:00",
+ "total_origin_price": 150000,
+ "deduction_quantity": 10,
+ "total_actual_price": 120000,
+ "signed_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "original_price": 30000,
+ "plan_discount_description": "享9折优惠",
+ "actual_price": 27000,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "0000300001201908301055157220022",
+ "merchant_plan_detail_no": "1234323JKHDFE1243252",
+ "plan_detail_name": "第一节课",
+ "actual_pay_price": 50000,
+ "use_time": "2021-05-20T13:29:35.120+08:00",
+ "complete_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_time": "2021-05-20T13:29:35.120+08:00"
+ }
+ ],
+ "sign_time": "2021-05-20T13:29:35.120+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanRequest.json
new file mode 100644
index 00000000..ea40a0e1
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanRequest.json
@@ -0,0 +1,4 @@
+{
+ "sub_mchid": "1900000109",
+ "stop_reason": "用户协商后停止"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanResponse.json
new file mode 100644
index 00000000..a05617d4
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/PayScore/SignPlan/StopPayScorePartnerSignPlanUserSignPlanResponse.json
@@ -0,0 +1,40 @@
+{
+ "sign_plan_id": "01010033210001424338000019876258",
+ "openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
+ "service_id": "2002000000000558128851361561536",
+ "mchid": "1900000109",
+ "sub_mchid": "1900000109",
+ "appid": "wxd678efh567hg6787",
+ "sub_appid": "wxd678efh567hg6787",
+ "merchant_sign_plan_no": "1234323JKHDFE1243252",
+ "merchant_callback_url": "https://api.test.com",
+ "plan_id": "01000033210000324638000000376258",
+ "going_detail_no": 2,
+ "sign_state": "UNSIGNED",
+ "cancel_sign_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_sign_type": "NOT_CANCEL",
+ "cancel_reason": "用户放弃课程",
+ "plan_name": "瑜伽晨练课10次",
+ "plan_over_time": "2021-05-20T13:29:35.120+08:00",
+ "total_origin_price": 150000,
+ "deduction_quantity": 10,
+ "total_actual_price": 120000,
+ "signed_detail_list": [
+ {
+ "plan_detail_no": 1,
+ "original_price": 30000,
+ "plan_discount_description": "享9折优惠",
+ "actual_price": 27000,
+ "plan_detail_state": "NOT_USED",
+ "order_id": "0000300001201908301055157220022",
+ "merchant_plan_detail_no": "1234323JKHDFE1243252",
+ "plan_detail_name": "第一节课",
+ "actual_pay_price": 50000,
+ "use_time": "2021-05-20T13:29:35.120+08:00",
+ "complete_time": "2021-05-20T13:29:35.120+08:00",
+ "cancel_time": "2021-05-20T13:29:35.120+08:00"
+ }
+ ],
+ "sign_time": "2021-05-20T13:29:35.120+08:00"
+}