From 69f9f4fe016d06def73d5c216232118100c96d08 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Thu, 6 Nov 2025 19:51:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(tenpayv3):=20=E6=96=B0=E5=A2=9E=E5=93=81?= =?UTF-8?q?=E7=89=8C=E6=B4=BB=E5=8A=A8=E6=8A=95=E6=94=BE=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/WechatTenpayV3/Basic_ModelDefinition.md | 12 ++ .../MarketingPartnerDeliveryPlanResource.cs | 51 +++++++ ...eMarketingPartnerDeliveryPlanExtensions.cs | 121 +++++++++++++++++ ...eateMarketingPartnerDeliveryPlanRequest.cs | 98 ++++++++++++++ ...ateMarketingPartnerDeliveryPlanResponse.cs | 22 +++ ...eryMarketingPartnerDeliveryPlansRequest.cs | 50 +++++++ ...ryMarketingPartnerDeliveryPlansResponse.cs | 125 ++++++++++++++++++ ...nateMarketingPartnerDeliveryPlanRequest.cs | 15 +++ ...ateMarketingPartnerDeliveryPlanResponse.cs | 9 ++ ...tingPartnerDeliveryPlanNotifyUrlRequest.cs | 15 +++ ...ingPartnerDeliveryPlanNotifyUrlResponse.cs | 15 +++ ...dateMarketingPartnerDeliveryPlanRequest.cs | 82 ++++++++++++ ...ateMarketingPartnerDeliveryPlanResponse.cs | 22 +++ .../MarketingPartnerDeliveryPlanResource.json | 7 + ...teMarketingPartnerDeliveryPlanRequest.json | 14 ++ ...eMarketingPartnerDeliveryPlanResponse.json | 17 +++ ...MarketingPartnerDeliveryPlansResponse.json | 20 +++ ...ngPartnerDeliveryPlanNotifyUrlRequest.json | 3 + ...gPartnerDeliveryPlanNotifyUrlResponse.json | 3 + ...teMarketingPartnerDeliveryPlanRequest.json | 11 ++ ...eMarketingPartnerDeliveryPlanResponse.json | 17 +++ 21 files changed, 729 insertions(+) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/MarketingDeliveryPlan/MarketingPartnerDeliveryPlanResource.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnerDeliveryPlanExtensions.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/TerminateMarketingPartnerDeliveryPlanRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/TerminateMarketingPartnerDeliveryPlanResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanResponse.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/MarketingDeliveryPlan/MarketingPartnerDeliveryPlanResource.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlResponse.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanResponse.json diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md index 0d58b963..b8d85654 100644 --- a/docs/WechatTenpayV3/Basic_ModelDefinition.md +++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md @@ -1288,6 +1288,18 @@ - 图片上传:`UploadMarketingPartnerProductCouponMediaImage` + - 投放计划 + + - 创建投放计划:`CreateMarketingPartnerDeliveryPlan` + + - 分页查询投放计划列表:`QueryMarketingPartnerDeliveryPlans` + + - 更新投放计划:`UpdateMarketingPartnerDeliveryPlan` + + - 终止投放计划:`TerminateMarketingPartnerDeliveryPlan` + + - 设置投放计划回调地址:`UpdateMarketingPartnerDeliveryPlanNotifyUrl` + - 委托营销 - 建立合作关系:`BuildMarketingPartnership` diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/MarketingDeliveryPlan/MarketingPartnerDeliveryPlanResource.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/MarketingDeliveryPlan/MarketingPartnerDeliveryPlanResource.cs new file mode 100644 index 00000000..bfa29c35 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Events/_Partner/MarketingDeliveryPlan/MarketingPartnerDeliveryPlanResource.cs @@ -0,0 +1,51 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Events +{ + /// + /// 表示 DELIVERY_PLAN.CHANGE (仅限服务商)通知的数据。 + /// + /// REF:
+ /// + ///
+ ///
+ public class MarketingPartnerDeliveryPlanResource : WechatTenpayEvent.Types.IDecryptedResource + { + /// + /// 获取或设置投放计划 ID。 + /// + [Newtonsoft.Json.JsonProperty("plan_id")] + [System.Text.Json.Serialization.JsonPropertyName("plan_id")] + public string PlanId { get; set; } = default!; + + /// + /// 获取或设置投放计划状态。 + /// + [Newtonsoft.Json.JsonProperty("plan_state")] + [System.Text.Json.Serialization.JsonPropertyName("plan_state")] + public string PlanState { get; set; } = default!; + + /// + /// 获取或设置审核状态。 + /// + [Newtonsoft.Json.JsonProperty("audit_state")] + [System.Text.Json.Serialization.JsonPropertyName("audit_state")] + public string? AuditState { get; set; } + + /// + /// 获取或设置变更原因。 + /// + [Newtonsoft.Json.JsonProperty("change_reason")] + [System.Text.Json.Serialization.JsonPropertyName("change_reason")] + public string? ChangeReason { get; set; } + + /// + /// 获取或设置修改时间。 + /// + [Newtonsoft.Json.JsonProperty("modify_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("modify_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset ModifyTime { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnerDeliveryPlanExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnerDeliveryPlanExtensions.cs new file mode 100644 index 00000000..934d725f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnerDeliveryPlanExtensions.cs @@ -0,0 +1,121 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Flurl.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 +{ + public static class WechatTenpayClientExecuteMarketingPartnerDeliveryPlanExtensions + { + /// + /// 异步调用 [POST] /marketing/partner/delivery-plan/delivery-plans 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteCreateMarketingPartnerDeliveryPlanAsync(this WechatTenpayClient client, Models.CreateMarketingPartnerDeliveryPlanRequest 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, "marketing", "partner", "delivery-plan", "delivery-plans"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [GET] /marketing/partner/delivery-plan/delivery-plans/{brand_id}/delivery-plans 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteQueryMarketingPartnerDeliveryPlansAsync(this WechatTenpayClient client, Models.QueryMarketingPartnerDeliveryPlansRequest 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, "marketing", "partner", "delivery-plan", "delivery-plans", request.BrandId, "delivery-plans"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [PATCH] /marketing/partner/delivery-plan/delivery-plans/{plan_id} 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteUpdateMarketingPartnerDeliveryPlanAsync(this WechatTenpayClient client, Models.UpdateMarketingPartnerDeliveryPlanRequest 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, new HttpMethod("PATCH"), "marketing", "partner", "delivery-plan", "delivery-plans", request.PlanId); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /marketing/partner/delivery-plan/delivery-plans/{plan_id}/terminate 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteTerminateMarketingPartnerDeliveryPlanAsync(this WechatTenpayClient client, Models.TerminateMarketingPartnerDeliveryPlanRequest 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, "marketing", "partner", "delivery-plan", "delivery-plans", request.PlanId, "terminate"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// 异步调用 [POST] /marketing/partner/delivery-plan/{sp_mchid}/notify-url 接口。 + /// + /// REF:
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteUpdateMarketingPartnerDeliveryPlanNotifyUrlAsync(this WechatTenpayClient client, Models.UpdateMarketingPartnerDeliveryPlanNotifyUrlRequest 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, "marketing", "partner", "delivery-plan", client.Credentials.MerchantId, "notify-url"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanRequest.cs new file mode 100644 index 00000000..b7f4ae92 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanRequest.cs @@ -0,0 +1,98 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/partner/delivery-plan/delivery-plans 接口的请求。 + /// + public class CreateMarketingPartnerDeliveryPlanRequest : WechatTenpayRequest + { + /// + /// 获取或设置商户请求单号。 + /// + [Newtonsoft.Json.JsonProperty("out_request_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_request_no")] + public string? OutRequestNumber { get; set; } + + /// + /// 获取或设置品牌 ID。 + /// + [Newtonsoft.Json.JsonProperty("brand_id")] + [System.Text.Json.Serialization.JsonPropertyName("brand_id")] + public string BrandId { get; set; } = string.Empty; + + /// + /// 获取或设置商品券 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_coupon_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_coupon_id")] + public string ProductCouponId { get; set; } = string.Empty; + + /// + /// 获取或设置商品券批次 ID。 + /// + [Newtonsoft.Json.JsonProperty("stock_id")] + [System.Text.Json.Serialization.JsonPropertyName("stock_id")] + public string StockId { get; set; } = string.Empty; + + /// + /// 获取或设置是否复用商品券和批次信。 + /// + [Newtonsoft.Json.JsonProperty("reuse_coupon_config")] + [System.Text.Json.Serialization.JsonPropertyName("reuse_coupon_config")] + public bool IsReuseCouponConfig { get; set; } + + /// + /// 获取或设置投放计划名称。 + /// + [Newtonsoft.Json.JsonProperty("plan_name")] + [System.Text.Json.Serialization.JsonPropertyName("plan_name")] + public string? PlanName { get; set; } + + /// + /// 获取或设置总库存数量。 + /// + [Newtonsoft.Json.JsonProperty("total_count")] + [System.Text.Json.Serialization.JsonPropertyName("total_count")] + public int? TotalCount { get; set; } + + /// + /// 获取或设置单用户限领数量。 + /// + [Newtonsoft.Json.JsonProperty("user_limit")] + [System.Text.Json.Serialization.JsonPropertyName("user_limit")] + public int? UserLimitCount { get; set; } + + /// + /// 获取或设置单日限领数量。 + /// + [Newtonsoft.Json.JsonProperty("daily_limit")] + [System.Text.Json.Serialization.JsonPropertyName("daily_limit")] + public int? DailyLimitCount { get; set; } + + /// + /// 获取或设置开始时间。 + /// + [Newtonsoft.Json.JsonProperty("delivery_start_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("delivery_start_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? StartTime { get; set; } + + /// + /// 获取或设置结束时间。 + /// + [Newtonsoft.Json.JsonProperty("delivery_end_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("delivery_end_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? EndTime { get; set; } + + /// + /// 获取或设置营销自定义文案。 + /// + [Newtonsoft.Json.JsonProperty("recommend_word")] + [System.Text.Json.Serialization.JsonPropertyName("recommend_word")] + public string? RecommentWording { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanResponse.cs new file mode 100644 index 00000000..a35ccb0d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanResponse.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/partner/delivery-plan/delivery-plans 接口的响应。 + /// + public class CreateMarketingPartnerDeliveryPlanResponse : WechatTenpayResponse + { + public static class Types + { + public class Plan : QueryMarketingPartnerDeliveryPlansResponse.Types.Plan + { + } + } + + /// + /// 获取或设置投放计划信息。 + /// + [Newtonsoft.Json.JsonProperty("plan")] + [System.Text.Json.Serialization.JsonPropertyName("plan")] + public Types.Plan Plan { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansRequest.cs new file mode 100644 index 00000000..ea130b16 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansRequest.cs @@ -0,0 +1,50 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /marketing/partner/delivery-plan/delivery-plans/{brand_id}/delivery-plans 接口的请求。 + /// + public class QueryMarketingPartnerDeliveryPlansRequest : WechatTenpayRequest + { + /// + /// 获取或设置品牌 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string BrandId { get; set; } = string.Empty; + + /// + /// 获取或设置投放计划 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? PlanId { get; set; } + + /// + /// 获取或设置投放计划状态。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? PlanState { get; set; } + + /// + /// 获取或设置审核状态。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string? AuditState { get; set; } + + /// + /// 获取或设置分页起始位置。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Offset { get; set; } + + /// + /// 获取或设置分页大小。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? Limit { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansResponse.cs new file mode 100644 index 00000000..833db7f0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansResponse.cs @@ -0,0 +1,125 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [GET] /marketing/partner/delivery-plan/delivery-plans/{brand_id}/delivery-plans 接口的响应。 + /// + public class QueryMarketingPartnerDeliveryPlansResponse : WechatTenpayResponse + { + public static class Types + { + public class Plan + { + /// + /// 获取或设置投放计划 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!; + + /// + /// 获取或设置投放计划状态。 + /// + [Newtonsoft.Json.JsonProperty("plan_state")] + [System.Text.Json.Serialization.JsonPropertyName("plan_state")] + public string PlanState { get; set; } = default!; + + /// + /// 获取或设置品牌 ID。 + /// + [Newtonsoft.Json.JsonProperty("brand_id")] + [System.Text.Json.Serialization.JsonPropertyName("brand_id")] + public string BrandId { get; set; } = default!; + + /// + /// 获取或设置商品券 ID。 + /// + [Newtonsoft.Json.JsonProperty("product_coupon_id")] + [System.Text.Json.Serialization.JsonPropertyName("product_coupon_id")] + public string ProductCouponId { get; set; } = default!; + + /// + /// 获取或设置商品券批次 ID。 + /// + [Newtonsoft.Json.JsonProperty("stock_id")] + [System.Text.Json.Serialization.JsonPropertyName("stock_id")] + public string StockId { get; set; } = default!; + + /// + /// 获取或设置是否复用商品券和批次信。 + /// + [Newtonsoft.Json.JsonProperty("reuse_coupon_config")] + [System.Text.Json.Serialization.JsonPropertyName("reuse_coupon_config")] + public bool IsReuseCouponConfig { get; set; } + + /// + /// 获取或设置总库存数量。 + /// + [Newtonsoft.Json.JsonProperty("total_count")] + [System.Text.Json.Serialization.JsonPropertyName("total_count")] + public int? TotalCount { get; set; } + + /// + /// 获取或设置单用户限领数量。 + /// + [Newtonsoft.Json.JsonProperty("user_limit")] + [System.Text.Json.Serialization.JsonPropertyName("user_limit")] + public int? UserLimitCount { get; set; } + + /// + /// 获取或设置单日限领数量。 + /// + [Newtonsoft.Json.JsonProperty("daily_limit")] + [System.Text.Json.Serialization.JsonPropertyName("daily_limit")] + public int? DailyLimitCount { get; set; } + + /// + /// 获取或设置开始时间。 + /// + [Newtonsoft.Json.JsonProperty("delivery_start_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("delivery_start_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? StartTime { get; set; } + + /// + /// 获取或设置结束时间。 + /// + [Newtonsoft.Json.JsonProperty("delivery_end_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("delivery_end_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? EndTime { get; set; } + + /// + /// 获取或设置营销自定义文案。 + /// + [Newtonsoft.Json.JsonProperty("recommend_word")] + [System.Text.Json.Serialization.JsonPropertyName("recommend_word")] + public string? RecommentWording { get; set; } + } + } + + /// + /// 获取或设置总数量。 + /// + [Newtonsoft.Json.JsonProperty("total_count")] + [System.Text.Json.Serialization.JsonPropertyName("total_count")] + public int TotalCount { get; set; } + + /// + /// 获取或设置投放计划列表。 + /// + [Newtonsoft.Json.JsonProperty("plan_list")] + [System.Text.Json.Serialization.JsonPropertyName("plan_list")] + public Types.Plan[] PlanList { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/TerminateMarketingPartnerDeliveryPlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/TerminateMarketingPartnerDeliveryPlanRequest.cs new file mode 100644 index 00000000..7f47f553 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/TerminateMarketingPartnerDeliveryPlanRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/partner/delivery-plan/delivery-plans/{plan_id}/terminate 接口的请求。 + /// + public class TerminateMarketingPartnerDeliveryPlanRequest : WechatTenpayRequest + { + /// + /// 获取或设置投放计划 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string PlanId { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/TerminateMarketingPartnerDeliveryPlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/TerminateMarketingPartnerDeliveryPlanResponse.cs new file mode 100644 index 00000000..dff5039d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/TerminateMarketingPartnerDeliveryPlanResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/partner/delivery-plan/delivery-plans/{plan_id}/terminate 接口的响应。 + /// + public class TerminateMarketingPartnerDeliveryPlanResponse : WechatTenpayResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlRequest.cs new file mode 100644 index 00000000..cc96d61c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlRequest.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/partner/delivery-plan/{sp_mchid}/notify-url 接口的请求。 + /// + public class UpdateMarketingPartnerDeliveryPlanNotifyUrlRequest : WechatTenpayRequest + { + /// + /// 获取或设置回调通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string NotifyUrl { get; set; } = string.Empty; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlResponse.cs new file mode 100644 index 00000000..83ed0451 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlResponse.cs @@ -0,0 +1,15 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/partner/delivery-plan/{sp_mchid}/notify-url 接口的响应。 + /// + public class UpdateMarketingPartnerDeliveryPlanNotifyUrlResponse : WechatTenpayResponse + { + /// + /// 获取或设置回调通知地址。 + /// + [Newtonsoft.Json.JsonProperty("notify_url")] + [System.Text.Json.Serialization.JsonPropertyName("notify_url")] + public string NotifyUrl { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanRequest.cs new file mode 100644 index 00000000..9d0b1d45 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanRequest.cs @@ -0,0 +1,82 @@ +using System; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [PATCH] /marketing/partner/delivery-plan/delivery-plans/{plan_id} 接口的请求。 + /// + public class UpdateMarketingPartnerDeliveryPlanRequest : WechatTenpayRequest + { + public static class Types + { + public class ModifyContent + { + + /// + /// 获取或设置投放计划名称。 + /// + [Newtonsoft.Json.JsonProperty("plan_name")] + [System.Text.Json.Serialization.JsonPropertyName("plan_name")] + public string? PlanName { get; set; } + + /// + /// 获取或设置总库存数量。 + /// + [Newtonsoft.Json.JsonProperty("total_count")] + [System.Text.Json.Serialization.JsonPropertyName("total_count")] + public int? TotalCount { get; set; } + + /// + /// 获取或设置单用户限领数量。 + /// + [Newtonsoft.Json.JsonProperty("user_limit")] + [System.Text.Json.Serialization.JsonPropertyName("user_limit")] + public int? UserLimitCount { get; set; } + + /// + /// 获取或设置单日限领数量。 + /// + [Newtonsoft.Json.JsonProperty("daily_limit")] + [System.Text.Json.Serialization.JsonPropertyName("daily_limit")] + public int? DailyLimitCount { get; set; } + + /// + /// 获取或设置结束时间。 + /// + [Newtonsoft.Json.JsonProperty("delivery_end_time")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))] + [System.Text.Json.Serialization.JsonPropertyName("delivery_end_time")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))] + public DateTimeOffset? EndTime { get; set; } + + /// + /// 获取或设置营销自定义文案。 + /// + [Newtonsoft.Json.JsonProperty("recommend_word")] + [System.Text.Json.Serialization.JsonPropertyName("recommend_word")] + public string? RecommentWording { get; set; } + } + } + + /// + /// 获取或设置投放计划 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public string PlanId { get; set; } = string.Empty; + + /// + /// 获取或设置商户请求单号。 + /// + [Newtonsoft.Json.JsonProperty("out_request_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_request_no")] + public string? OutRequestNumber { get; set; } + + /// + /// 获取或设置修改内容。 + /// + [Newtonsoft.Json.JsonProperty("modify_content")] + [System.Text.Json.Serialization.JsonPropertyName("modify_content")] + public Types.ModifyContent ModifyContent { get; set; } = new Types.ModifyContent(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanResponse.cs new file mode 100644 index 00000000..4fd28ca0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanResponse.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [PATCH] /marketing/partner/delivery-plan/delivery-plans/{plan_id} 接口的响应。 + /// + public class UpdateMarketingPartnerDeliveryPlanResponse : WechatTenpayResponse + { + public static class Types + { + public class Plan : CreateMarketingPartnerDeliveryPlanResponse.Types.Plan + { + } + } + + /// + /// 获取或设置投放计划信息。 + /// + [Newtonsoft.Json.JsonProperty("plan")] + [System.Text.Json.Serialization.JsonPropertyName("plan")] + public Types.Plan Plan { get; set; } = default!; + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/MarketingDeliveryPlan/MarketingPartnerDeliveryPlanResource.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/MarketingDeliveryPlan/MarketingPartnerDeliveryPlanResource.json new file mode 100644 index 00000000..f9884673 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/EventSamples/_/_Partner/MarketingDeliveryPlan/MarketingPartnerDeliveryPlanResource.json @@ -0,0 +1,7 @@ +{ + "plan_id": "7000", + "plan_state": "CREATED", + "audit_state": "PASSED", + "change_reason": "审核通过", + "modify_time": "2025-05-20T13:29:35.120+08:00" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanRequest.json new file mode 100644 index 00000000..527279a4 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanRequest.json @@ -0,0 +1,14 @@ +{ + "out_request_no": "asdf-1234-40016", + "brand_id": "40016", + "product_coupon_id": "701146876221757924829193824428", + "stock_id": "701246876221757924829194755312", + "reuse_coupon_config": false, + "plan_name": "冬季饮料投放", + "total_count": 1, + "user_limit": 1, + "daily_limit": 1, + "delivery_start_time": "2025-01-01T00:00:00+08:00", + "delivery_end_time": "2025-01-01T00:00:00+08:00", + "recommend_word": "天天有惊喜" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanResponse.json new file mode 100644 index 00000000..a14e519b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/CreateMarketingPartnerDeliveryPlanResponse.json @@ -0,0 +1,17 @@ +{ + "plan": { + "plan_id": "12000", + "plan_name": "冬季优惠投放", + "plan_state": "PLAN_CREATED", + "delivery_start_time": "2025-01-01T00:00:00+08:00", + "delivery_end_time": "2025-01-01T00:00:00+08:00", + "stock_id": "123456789", + "product_coupon_id": "1000000013", + "recommend_word": "天天有惊喜", + "brand_id": "40016", + "total_count": 11000, + "user_limit": 5, + "daily_limit": 100, + "reuse_coupon_config": false + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansResponse.json new file mode 100644 index 00000000..4019eb5a --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/QueryMarketingPartnerDeliveryPlansResponse.json @@ -0,0 +1,20 @@ +{ + "total_count": 1234, + "plan_list": [ + { + "plan_id": "12000", + "plan_name": "冬季优惠投放", + "plan_state": "PLAN_CREATED", + "delivery_start_time": "2025-01-01T00:00:00+08:00", + "delivery_end_time": "2025-01-01T00:00:00+08:00", + "stock_id": "123456789", + "product_coupon_id": "1000000013", + "recommend_word": "天天有惊喜", + "brand_id": "40016", + "total_count": 11000, + "user_limit": 5, + "daily_limit": 100, + "reuse_coupon_config": false + } + ] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlRequest.json new file mode 100644 index 00000000..294d2b0a --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlRequest.json @@ -0,0 +1,3 @@ +{ + "notify_url": "https://www.example.com/notify" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlResponse.json new file mode 100644 index 00000000..294d2b0a --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanNotifyUrlResponse.json @@ -0,0 +1,3 @@ +{ + "notify_url": "https://www.example.com/notify" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanRequest.json new file mode 100644 index 00000000..b9731bbb --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanRequest.json @@ -0,0 +1,11 @@ +{ + "modify_content": { + "plan_name": "冬季促销", + "delivery_end_time": "2025-01-01T00:00:00+08:00", + "total_count": 1, + "user_limit": 1, + "daily_limit": 1, + "recommend_word": "冬季优惠" + }, + "out_request_no": "abcd-1234-1000" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanResponse.json new file mode 100644 index 00000000..a14e519b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerDeliveryPlan/UpdateMarketingPartnerDeliveryPlanResponse.json @@ -0,0 +1,17 @@ +{ + "plan": { + "plan_id": "12000", + "plan_name": "冬季优惠投放", + "plan_state": "PLAN_CREATED", + "delivery_start_time": "2025-01-01T00:00:00+08:00", + "delivery_end_time": "2025-01-01T00:00:00+08:00", + "stock_id": "123456789", + "product_coupon_id": "1000000013", + "recommend_word": "天天有惊喜", + "brand_id": "40016", + "total_count": 11000, + "user_limit": 5, + "daily_limit": 100, + "reuse_coupon_config": false + } +}