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
+ }
+}