diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md
index 5d1efab1..2167358f 100644
--- a/docs/WechatTenpayV3/Basic_ModelDefinition.md
+++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md
@@ -52,6 +52,7 @@
| √ | 经营能力:还款支付 | 合作伙伴 | |
| √ | 运营工具:代金券 | 直连商户 & 合作伙伴 | |
| √ | 运营工具:商家券 | 直连商户 & 合作伙伴 | |
+| √ | 运营工具:商品券 | 合作伙伴 | |
| √ | 运营工具:消费金 | 直连商户 | |
| √ | 运营工具:委托营销 | 直连商户 & 合作伙伴 | |
| √ | 运营工具:支付有礼 | 直连商户 & 合作伙伴 | |
@@ -1229,6 +1230,64 @@
- 向用户发放商品券:`SendMarketingBusifavorProductCoupon`
+ - 商品券(摇一摇有优惠)
+
+ - 商品券管理
+
+ - 创建商品券:`CreateMarketingPartnerProductCoupon`
+
+ - 修改商品券:`UpdateMarketingPartnerProductCoupon`
+
+ - 查询商品券:`GetMarketingPartnerProductCouponByProductCouponId`
+
+ - 失效商品券:`DeactivateMarketingPartnerProductCoupon`
+
+ - 商户券回调通知配置
+
+ - 获取商品券事件通知地址:`GetMarketingPartnerProductCouponNotifyConfig`
+
+ - 设置商品券事件通知地址:`UpdateMarketingPartnerProductCouponNotifyConfig`
+
+ - 商品券批次管理
+
+ - 添加商品券批次:`CreateMarketingPartnerProductCouponStock`
+
+ - 查询商品券批次列表:`QueryMarketingPartnerProductCouponStocks`
+
+ - 查询商品券指定批次:`GetMarketingPartnerProductCouponStockByStockId`
+
+ - 修改商品券批次:`UpdateMarketingPartnerProductCouponStock`
+
+ - 修改商品券批次发放预算:`UpdateMarketingPartnerProductCouponStockBudget`
+
+ - 失效商品券批次:`DeactivateMarketingPartnerProductCouponStock`
+
+ - 批次关联门店:`AssociateMarketingPartnerProductCouponStockToStores`
+
+ - 查询批次关联门店列表:`QueryMarketingPartnerProductCouponStockAssociatedStores`
+
+ - 批次取消关联门店:`DisassociateMarketingPartnerProductCouponStockFromStores`
+
+ - 预上传券 Code:`UploadMarketingPartnerProductCouponStockCouponCodes`
+
+ - 用户商品券管理
+
+ - 向用户发放商品券:`SendMarketingPartnerProductCouponUserCoupon`
+
+ - 确认发放用户商品券:`ConfirmMarketingPartnerProductCouponUserCoupon`
+
+ - 查询用户商品券详情:`GetMarketingPartnerProductCouponUserCouponByCouponCode`
+
+ - 指定券状态查询用户商品券列表:`QueryMarketingPartnerProductCouponUserCoupons`
+
+ - 核销用户商品券:`UseMarketingPartnerProductCouponUserCoupon`
+
+ - 失效用户商品券:`DeactivateMarketingPartnerProductCouponUserCoupon`
+
+ - 退券:`ReturnMarketingPartnerProductCouponUserCoupon`
+
+ - 图片上传:`UploadMarketingPartnerProductCouponMediaImage`
+
- 委托营销
- 建立合作关系:`BuildMarketingPartnership`
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnerProductCouponExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnerProductCouponExtensions.cs
new file mode 100644
index 00000000..cc75d79d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnerProductCouponExtensions.cs
@@ -0,0 +1,580 @@
+using System;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
+{
+ using SKIT.FlurlHttpClient;
+ using SKIT.FlurlHttpClient.Primitives;
+
+ public static class WechatTenpayClientExecuteMarketingPartnerProductCouponExtensions
+ {
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/product-coupons 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateMarketingPartnerProductCouponAsync(this WechatTenpayClient client, Models.CreateMarketingPartnerProductCouponRequest 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", "product-coupon", "product-coupons");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetMarketingPartnerProductCouponByProductCouponIdAsync(this WechatTenpayClient client, Models.GetMarketingPartnerProductCouponByProductCouponIdRequest 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", "product-coupon", "product-coupons", request.ProductCouponId)
+ .SetQueryParam("brand_id", request.BrandId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [PATCH] /marketing/partner/product-coupon/product-coupons/{product_coupon_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUpdateMarketingPartnerProductCouponAsync(this WechatTenpayClient client, Models.UpdateMarketingPartnerProductCouponRequest 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", "product-coupon", "product-coupons", request.ProductCouponId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/deactivate 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteDeactivateMarketingPartnerProductCouponAsync(this WechatTenpayClient client, Models.DeactivateMarketingPartnerProductCouponRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "deactivate");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/media/upload-image 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUploadMarketingPartnerProductCouponMediaImageAsync(this WechatTenpayClient client, Models.UploadMarketingPartnerProductCouponMediaImageRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ if (request.FileName is null)
+ request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".png";
+
+ if (request.FileHash is null)
+ request.FileHash = EncodedString.ToHexString(Utilities.SHA256Utility.Hash(request.FileBytes)).Value!.ToLower();
+
+ if (request.FileContentType is null)
+ request.FileContentType = MimeTypes.GetMimeMapping(request.FileName!);
+
+ IFlurlRequest flurlReq = client
+ .CreateFlurlRequest(request, HttpMethod.Post, "marketing", "partner", "product-coupon", "media", "image-upload");
+
+ using var httpContent = Utilities.HttpContentBuilder.BuildWithFile(fileName: request.FileName, fileBytes: request.FileBytes, fileContentType: request.FileContentType, fileMetaJson: client.JsonSerializer.Serialize(request));
+ return await client.SendFlurlRequestAsync(flurlReq, httpContent: httpContent, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ #region NotifyConfigs
+ ///
+ /// 异步调用 [GET] /marketing/partner/product-coupon/notify-configs 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetMarketingPartnerProductCouponNotifyConfigAsync(this WechatTenpayClient client, Models.GetMarketingPartnerProductCouponNotifyConfigRequest 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", "product-coupon", "notify-configs");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/notify-configs 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUpdateMarketingPartnerProductCouponNotifyConfigAsync(this WechatTenpayClient client, Models.UpdateMarketingPartnerProductCouponNotifyConfigRequest 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", "product-coupon", "notify-configs");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+
+ #region Stocks
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCreateMarketingPartnerProductCouponStockAsync(this WechatTenpayClient client, Models.CreateMarketingPartnerProductCouponStockRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "stocks");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteQueryMarketingPartnerProductCouponStocksAsync(this WechatTenpayClient client, Models.QueryMarketingPartnerProductCouponStocksRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "stocks")
+ .SetQueryParam("brand_id", request.BrandId)
+ .SetQueryParam("state", request.StockState)
+ .SetQueryParam("page_size", request.PageSize)
+ .SetQueryParam("page_token", request.PageToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetMarketingPartnerProductCouponStockByStockIdAsync(this WechatTenpayClient client, Models.GetMarketingPartnerProductCouponStockByStockIdRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "stocks", request.StockId)
+ .SetQueryParam("brand_id", request.BrandId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [PATCH] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUpdateMarketingPartnerProductCouponStockAsync(this WechatTenpayClient client, Models.UpdateMarketingPartnerProductCouponStockRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "stocks", request.StockId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/deactivate 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteDeactivateMarketingPartnerProductCouponStockAsync(this WechatTenpayClient client, Models.DeactivateMarketingPartnerProductCouponStockRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "stocks", request.StockId, "deactivate");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/update-budget 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUpdateMarketingPartnerProductCouponStockBudgetAsync(this WechatTenpayClient client, Models.UpdateMarketingPartnerProductCouponStockBudgetRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "stocks", request.StockId, "update-budget");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/upload-coupon-codes 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUploadMarketingPartnerProductCouponStockCouponCodesAsync(this WechatTenpayClient client, Models.UploadMarketingPartnerProductCouponStockCouponCodesRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "stocks", request.StockId, "upload-coupon-codes");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ #region /Stocks/Stores
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/associate-stores 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteAssociateMarketingPartnerProductCouponStockToStoresAsync(this WechatTenpayClient client, Models.AssociateMarketingPartnerProductCouponStockToStoresRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "stocks", request.StockId, "associate-stores");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/disassociate-stores 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteDisassociateMarketingPartnerProductCouponStockFromStoresAsync(this WechatTenpayClient client, Models.DisassociateMarketingPartnerProductCouponStockFromStoresRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "stocks", request.StockId, "disassociate-stores");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/associated-stores 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteQueryMarketingPartnerProductCouponStockAssociatedStoresAsync(this WechatTenpayClient client, Models.QueryMarketingPartnerProductCouponStockAssociatedStoresRequest 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", "product-coupon", "product-coupons", request.ProductCouponId, "stocks", request.StockId, "associated-stores")
+ .SetQueryParam("brand_id", request.BrandId)
+ .SetQueryParam("page_token", request.PageToken)
+ .SetQueryParam("page_size", request.PageSize);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+ #endregion
+
+ #region UserCoupons
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/users/{openid}/coupons 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteSendMarketingPartnerProductCouponUserCouponAsync(this WechatTenpayClient client, Models.SendMarketingPartnerProductCouponUserCouponRequest 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", "product-coupon", "users", request.OpenId, "coupons");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /marketing/partner/product-coupon/users/{openid}/coupons 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteQueryMarketingPartnerProductCouponUserCouponsAsync(this WechatTenpayClient client, Models.QueryMarketingPartnerProductCouponUserCouponsRequest 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", "product-coupon", "users", request.OpenId, "coupons")
+ .SetQueryParam("brand_id", request.BrandId)
+ .SetQueryParam("product_coupon_id", request.ProductCouponId)
+ .SetQueryParam("stock_id", request.StockId)
+ .SetQueryParam("appid", request.AppId)
+ .SetQueryParam("coupon_state", request.CouponState)
+ .SetQueryParam("page_size", request.PageSize)
+ .SetQueryParam("page_token", request.PageToken);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [GET] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code} 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteGetMarketingPartnerProductCouponUserCouponByCouponCodeAsync(this WechatTenpayClient client, Models.GetMarketingPartnerProductCouponUserCouponByCouponCodeRequest 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", "product-coupon", "users", request.OpenId, "coupons", request.CouponCode)
+ .SetQueryParam("brand_id", request.BrandId)
+ .SetQueryParam("product_coupon_id", request.ProductCouponId)
+ .SetQueryParam("stock_id", request.StockId)
+ .SetQueryParam("appid", request.AppId);
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/confirm 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteConfirmMarketingPartnerProductCouponUserCouponAsync(this WechatTenpayClient client, Models.ConfirmMarketingPartnerProductCouponUserCouponRequest 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", "product-coupon", "users", request.OpenId, "coupons", request.CouponCode, "confirm");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/use 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteUseMarketingPartnerProductCouponUserCouponAsync(this WechatTenpayClient client, Models.UseMarketingPartnerProductCouponUserCouponRequest 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", "product-coupon", "users", request.OpenId, "coupons", request.CouponCode, "use");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/deactivate 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteDeactivateMarketingPartnerProductCouponUserCouponAsync(this WechatTenpayClient client, Models.DeactivateMarketingPartnerProductCouponUserCouponRequest 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", "product-coupon", "users", request.OpenId, "coupons", request.CouponCode, "deactivate");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+
+ ///
+ /// 异步调用 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/return 接口。
+ ///
+ /// REF:
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteReturnMarketingPartnerProductCouponUserCouponAsync(this WechatTenpayClient client, Models.ReturnMarketingPartnerProductCouponUserCouponRequest 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", "product-coupon", "users", request.OpenId, "coupons", request.CouponCode, "return");
+
+ return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ #endregion
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponRequest.cs
new file mode 100644
index 00000000..b8b2eb0a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponRequest.cs
@@ -0,0 +1,293 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons 接口的请求。
+ ///
+ public class CreateMarketingPartnerProductCouponRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class SingleUsageInfo
+ {
+ public static class Types
+ {
+ public class NormalCoupon
+ {
+ ///
+ /// 获取或设置门槛金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public int Threshold { get; set; }
+
+ ///
+ /// 获取或设置固定减免金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_amount")]
+ public int DiscountAmount { get; set; }
+ }
+
+ public class DiscountCoupon
+ {
+ ///
+ /// 获取或设置门槛金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public int Threshold { get; set; }
+
+ ///
+ /// 获取或设置固定减免百分比(单位:百分数)。
+ ///
+ [Newtonsoft.Json.JsonProperty("percent_off")]
+ [System.Text.Json.Serialization.JsonPropertyName("percent_off")]
+ public int PercentOff { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置满减券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("normal_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("normal_coupon")]
+ public Types.NormalCoupon? NormalCoupon { get; set; }
+
+ ///
+ /// 获取或设置折扣券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_coupon")]
+ public Types.DiscountCoupon? DiscountCoupon { get; set; }
+ }
+
+ public class SequentialUsageInfo
+ {
+ ///
+ /// 获取或设置多次优惠规则类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string Type { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置可使用次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("count")]
+ [System.Text.Json.Serialization.JsonPropertyName("count")]
+ public int Count { get; set; }
+
+ ///
+ /// 获取或设置有效天数。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_days")]
+ [System.Text.Json.Serialization.JsonPropertyName("available_days")]
+ public int? AvailableDays { get; set; }
+
+ ///
+ /// 获取或设置使用间隔天数。
+ ///
+ [Newtonsoft.Json.JsonProperty("interval_days")]
+ [System.Text.Json.Serialization.JsonPropertyName("interval_days")]
+ public int? IntervalDays { get; set; }
+ }
+
+ public class DisplayInfo
+ {
+ public static class Types
+ {
+ public class ComboPackage
+ {
+ public static class Types
+ {
+ public class Choice
+ {
+ ///
+ /// 获取或设置单品名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置单品图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("image_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("image_url")]
+ public string? ImageUrl { get; set; }
+
+ ///
+ /// 获取或设置跳转小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_appid")]
+ public string? MiniProgramAppId { get; set; }
+
+ ///
+ /// 获取或设置跳转小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_path")]
+ public string? MiniProgramPagePath { get; set; }
+
+ ///
+ /// 获取或设置单品价格(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("price")]
+ [System.Text.Json.Serialization.JsonPropertyName("price")]
+ public int Price { get; set; }
+
+ ///
+ /// 获取或设置单品数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("count")]
+ [System.Text.Json.Serialization.JsonPropertyName("count")]
+ public int Count { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置套餐名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置可选单品数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("pick_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("pick_count")]
+ public int PickCount { get; set; }
+
+ ///
+ /// 获取或设置单品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("choice_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("choice_list")]
+ public IList ChoiceList { get; set; } = new List();
+ }
+ }
+
+ ///
+ /// 获取或设置商品券名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("image_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("image_url")]
+ public string ImageUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置背景图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("background_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("background_url")]
+ public string BackgroundUrl { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置详情图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("detail_image_url_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("detail_image_url_list")]
+ public IList? DetailImageUrlList { get; set; }
+
+ ///
+ /// 获取或设置商品原价。
+ ///
+ [Newtonsoft.Json.JsonProperty("original_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("original_price")]
+ public int? OriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置套餐组合列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("combo_package_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("combo_package_list")]
+ public IList? ComboPackageList { get; set; }
+ }
+
+ public class StockInfo : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumebr { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置优惠范围。
+ ///
+ [Newtonsoft.Json.JsonProperty("scope")]
+ [System.Text.Json.Serialization.JsonPropertyName("scope")]
+ public string Scope { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商品券类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string Type { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置使用模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("usage_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("usage_mode")]
+ public string UsageMode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置单券模式信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("single_usage_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("single_usage_info")]
+ public Types.SingleUsageInfo? SingleUsageInfo { get; set; }
+
+ ///
+ /// 获取或设置多次优惠模式信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("sequential_usage_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("sequential_usage_info")]
+ public Types.SequentialUsageInfo? SequentialUsageInfo { get; set; }
+
+ ///
+ /// 获取或设置展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("display_info")]
+ public Types.DisplayInfo DisplayInfo { get; set; } = new Types.DisplayInfo();
+
+ ///
+ /// 获取或设置外部商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_product_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_product_no")]
+ public string? OutProductNumber { get; set; }
+
+ ///
+ /// 获取或设置批次信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock")]
+ public Types.StockInfo? StockInfo { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponResponse.cs
new file mode 100644
index 00000000..560720cc
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponResponse.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons 接口的响应。
+ ///
+ public class CreateMarketingPartnerProductCouponResponse : GetMarketingPartnerProductCouponByProductCouponIdResponse
+ {
+ public static new class Types
+ {
+ public class StockInfo : QueryMarketingPartnerProductCouponStocksResponse.Types.Stock
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置批次信息1。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock")]
+ public Types.StockInfo? StockInfo { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponRequest.cs
new file mode 100644
index 00000000..6df0a10e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponRequest.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/deactivate 接口的请求。
+ ///
+ public class DeactivateMarketingPartnerProductCouponRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置失效原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_reason")]
+ public string Reason { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponResponse.cs
new file mode 100644
index 00000000..a2a57708
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/deactivate 接口的响应。
+ ///
+ public class DeactivateMarketingPartnerProductCouponResponse : GetMarketingPartnerProductCouponByProductCouponIdResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/GetMarketingPartnerProductCouponByProductCouponIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/GetMarketingPartnerProductCouponByProductCouponIdRequest.cs
new file mode 100644
index 00000000..c79eb7d3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/GetMarketingPartnerProductCouponByProductCouponIdRequest.cs
@@ -0,0 +1,22 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id} 接口的请求。
+ ///
+ public class GetMarketingPartnerProductCouponByProductCouponIdRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string BrandId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/GetMarketingPartnerProductCouponByProductCouponIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/GetMarketingPartnerProductCouponByProductCouponIdResponse.cs
new file mode 100644
index 00000000..8e32fcad
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/GetMarketingPartnerProductCouponByProductCouponIdResponse.cs
@@ -0,0 +1,311 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id} 接口的响应。
+ ///
+ public class GetMarketingPartnerProductCouponByProductCouponIdResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class SingleUsageInfo
+ {
+ public static class Types
+ {
+ public class NormalCoupon
+ {
+ ///
+ /// 获取或设置门槛金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public int Threshold { get; set; }
+
+ ///
+ /// 获取或设置固定减免金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_amount")]
+ public int DiscountAmount { get; set; }
+ }
+
+ public class DiscountCoupon
+ {
+ ///
+ /// 获取或设置门槛金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public int Threshold { get; set; }
+
+ ///
+ /// 获取或设置固定减免百分比(单位:百分数)。
+ ///
+ [Newtonsoft.Json.JsonProperty("percent_off")]
+ [System.Text.Json.Serialization.JsonPropertyName("percent_off")]
+ public int PercentOff { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置满减券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("normal_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("normal_coupon")]
+ public Types.NormalCoupon? NormalCoupon { get; set; }
+
+ ///
+ /// 获取或设置折扣券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_coupon")]
+ public Types.DiscountCoupon? DiscountCoupon { get; set; }
+ }
+
+ public class SequentialUsageInfo
+ {
+ ///
+ /// 获取或设置多次优惠规则类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string Type { get; set; } = default!;
+
+ ///
+ /// 获取或设置可使用次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("count")]
+ [System.Text.Json.Serialization.JsonPropertyName("count")]
+ public int Count { get; set; }
+
+ ///
+ /// 获取或设置有效天数。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_days")]
+ [System.Text.Json.Serialization.JsonPropertyName("available_days")]
+ public int? AvailableDays { get; set; }
+
+ ///
+ /// 获取或设置使用间隔天数。
+ ///
+ [Newtonsoft.Json.JsonProperty("interval_days")]
+ [System.Text.Json.Serialization.JsonPropertyName("interval_days")]
+ public int? IntervalDays { get; set; }
+ }
+
+ public class DisplayInfo
+ {
+ public static class Types
+ {
+ public class ComboPackage
+ {
+ public static class Types
+ {
+ public class Choice
+ {
+ ///
+ /// 获取或设置单品名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置单品图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("image_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("image_url")]
+ public string? ImageUrl { get; set; }
+
+ ///
+ /// 获取或设置跳转小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_appid")]
+ public string? MiniProgramAppId { get; set; }
+
+ ///
+ /// 获取或设置跳转小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_path")]
+ public string? MiniProgramPagePath { get; set; }
+
+ ///
+ /// 获取或设置单品价格(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("price")]
+ [System.Text.Json.Serialization.JsonPropertyName("price")]
+ public int Price { get; set; }
+
+ ///
+ /// 获取或设置单品数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("count")]
+ [System.Text.Json.Serialization.JsonPropertyName("count")]
+ public int Count { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置套餐名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置可选单品数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("pick_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("pick_count")]
+ public int PickCount { get; set; }
+
+ ///
+ /// 获取或设置单品列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("choice_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("choice_list")]
+ public Types.Choice[] ChoiceList { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置商品券名称。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("image_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("image_url")]
+ public string ImageUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置背景图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("background_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("background_url")]
+ public string BackgroundUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置详情图片 URL 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("detail_image_url_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("detail_image_url_list")]
+ public string[]? DetailImageUrlList { get; set; }
+
+ ///
+ /// 获取或设置商品原价。
+ ///
+ [Newtonsoft.Json.JsonProperty("original_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("original_price")]
+ public int? OriginalPrice { get; set; }
+
+ ///
+ /// 获取或设置套餐组合列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("combo_package_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("combo_package_list")]
+ public Types.ComboPackage[]? ComboPackageList { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 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("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠范围。
+ ///
+ [Newtonsoft.Json.JsonProperty("scope")]
+ [System.Text.Json.Serialization.JsonPropertyName("scope")]
+ public string Scope { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品券类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string Type { get; set; } = default!;
+
+ ///
+ /// 获取或设置使用模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("usage_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("usage_mode")]
+ public string UsageMode { get; set; } = default!;
+
+ ///
+ /// 获取或设置单券模式信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("single_usage_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("single_usage_info")]
+ public Types.SingleUsageInfo? SingleUsageInfo { get; set; }
+
+ ///
+ /// 获取或设置多次优惠模式信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("sequential_usage_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("sequential_usage_info")]
+ public Types.SequentialUsageInfo? SequentialUsageInfo { get; set; }
+
+ ///
+ /// 获取或设置展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("display_info")]
+ public Types.DisplayInfo DisplayInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置外部商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_product_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_product_no")]
+ public string? OutProductNumber { get; set; }
+
+ ///
+ /// 获取或设置商品券状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("state")]
+ [System.Text.Json.Serialization.JsonPropertyName("state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置失效请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_request_no")]
+ public string? DeactivateOutRequestNumber { get; set; }
+
+ ///
+ /// 获取或设置失效时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? DeactivateTime { get; set; }
+
+ ///
+ /// 获取或设置失效原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_reason")]
+ public string? DeactivateReason { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/GetMarketingPartnerProductCouponNotifyConfigRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/GetMarketingPartnerProductCouponNotifyConfigRequest.cs
new file mode 100644
index 00000000..d7d2212d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/GetMarketingPartnerProductCouponNotifyConfigRequest.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/notify-configs 接口的请求。
+ ///
+ public class GetMarketingPartnerProductCouponNotifyConfigRequest : WechatTenpayRequest
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/GetMarketingPartnerProductCouponNotifyConfigResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/GetMarketingPartnerProductCouponNotifyConfigResponse.cs
new file mode 100644
index 00000000..2c289392
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/GetMarketingPartnerProductCouponNotifyConfigResponse.cs
@@ -0,0 +1,26 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/notify-configs 接口的响应。
+ ///
+ public class GetMarketingPartnerProductCouponNotifyConfigResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置回调通知地址。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_url")]
+ public string NotifyUrl { get; set; } = default!;
+
+ ///
+ /// 获取或设置更新时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("update_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("update_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset UpdateTime { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigRequest.cs
new file mode 100644
index 00000000..bcf4210d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigRequest.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/notify-configs 接口的请求。
+ ///
+ public class UpdateMarketingPartnerProductCouponNotifyConfigRequest : 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/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigResponse.cs
new file mode 100644
index 00000000..8a725228
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigResponse.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/notify-configs 接口的响应。
+ ///
+ public class UpdateMarketingPartnerProductCouponNotifyConfigResponse : GetMarketingPartnerProductCouponNotifyConfigResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockRequest.cs
new file mode 100644
index 00000000..48863ab8
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockRequest.cs
@@ -0,0 +1,556 @@
+using System;
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks 接口的请求。
+ ///
+ public class CreateMarketingPartnerProductCouponStockRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class StockInfo
+ {
+ public static class Types
+ {
+ public class SendRule
+ {
+ ///
+ /// 获取或设置发放次数总上限。
+ ///
+ [Newtonsoft.Json.JsonProperty("max_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("max_count")]
+ public int MaxCount { get; set; }
+
+ ///
+ /// 获取或设置每日发放次数上限。
+ ///
+ [Newtonsoft.Json.JsonProperty("max_count_per_day")]
+ [System.Text.Json.Serialization.JsonPropertyName("max_count_per_day")]
+ public int? MaxCountPerDay { get; set; }
+
+ ///
+ /// 获取或设置每个用户领取次数上限。
+ ///
+ [Newtonsoft.Json.JsonProperty("max_count_per_user")]
+ [System.Text.Json.Serialization.JsonPropertyName("max_count_per_user")]
+ public int? MaxCountPerUser { get; set; }
+ }
+
+ public class UsageRule
+ {
+ public static class Types
+ {
+ public class AvailablePeriod
+ {
+ public static class Types
+ {
+ public class WeeklyPeriod
+ {
+ ///
+ /// 获取或设置每周可用星期数列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("day_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("day_list")]
+ public IList? DayList { get; set; }
+
+ ///
+ /// 获取或设置当天可用时间段列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("day_period_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("day_period_list")]
+ public IList? DayPeriodList { get; set; }
+ }
+
+ public class DayPeriod
+ {
+ ///
+ /// 获取或设置当天可用开始时间(单位:秒)。
+ ///
+ [Newtonsoft.Json.JsonProperty("begin_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("begin_time")]
+ public int BeginTime { get; set; }
+
+ ///
+ /// 获取或设置当天可用结束时间(单位:秒)。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public int EndTime { get; set; }
+ }
+
+ public class IrregularPeriod
+ {
+ ///
+ /// 获取或设置开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("begin_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("begin_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset BeginTime { get; set; }
+
+ ///
+ /// 获取或设置结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset EndTime { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_begin_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("available_begin_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset BeginTime { get; set; }
+
+ ///
+ /// 获取或设置结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("available_end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset EndTime { get; set; }
+
+ ///
+ /// 获取或设置生效后 N 天内有效。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_days")]
+ [System.Text.Json.Serialization.JsonPropertyName("available_days")]
+ public int? AvailableDays { get; set; }
+
+ ///
+ /// 获取或设置领取后 N 天开始生效。
+ ///
+ [Newtonsoft.Json.JsonProperty("wait_days_after_receive")]
+ [System.Text.Json.Serialization.JsonPropertyName("wait_days_after_receive")]
+ public int? WaitDaysAfterReceive { get; set; }
+
+ ///
+ /// 获取或设置每周固定可用时间信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("weekly_available_period")]
+ [System.Text.Json.Serialization.JsonPropertyName("weekly_available_period")]
+ public Types.WeeklyPeriod? WeeklyPeriod { get; set; }
+
+ ///
+ /// 获取或设置无规律的可用时间段信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("irregular_available_period_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("irregular_available_period_list")]
+ public IList? IrregularPeriodList { get; set; }
+ }
+
+ public class NormalCoupon
+ {
+ ///
+ /// 获取或设置门槛金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public int Threshold { get; set; }
+
+ ///
+ /// 获取或设置固定减免金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_amount")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_amount")]
+ public int DiscountAmount { get; set; }
+ }
+
+ public class DiscountCoupon
+ {
+ ///
+ /// 获取或设置门槛金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public int Threshold { get; set; }
+
+ ///
+ /// 获取或设置固定减免百分比(单位:百分数)。
+ ///
+ [Newtonsoft.Json.JsonProperty("percent_off")]
+ [System.Text.Json.Serialization.JsonPropertyName("percent_off")]
+ public int PercentOff { get; set; }
+ }
+
+ public class ExchangeCoupon
+ {
+ ///
+ /// 获取或设置门槛金额(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("threshold")]
+ [System.Text.Json.Serialization.JsonPropertyName("threshold")]
+ public int Threshold { get; set; }
+
+ ///
+ /// 获取或设置固定兑换价格(单位:分)。
+ ///
+ [Newtonsoft.Json.JsonProperty("exchange_price")]
+ [System.Text.Json.Serialization.JsonPropertyName("exchange_price")]
+ public int ExchangePrice { get; set; }
+ }
+ }
+ }
+
+ public class SingleUsageRule : UsageRule
+ {
+ ///
+ /// 获取或设置券可核销时间信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_available_period")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_available_period")]
+ public Types.AvailablePeriod AvailablePeriod { get; set; } = new Types.AvailablePeriod();
+
+ ///
+ /// 获取或设置满减券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("normal_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("normal_coupon")]
+ public Types.NormalCoupon? NormalCoupon { get; set; }
+
+ ///
+ /// 获取或设置折扣券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_coupon")]
+ public Types.DiscountCoupon? DiscountCoupon { get; set; }
+
+ ///
+ /// 获取或设置兑换券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("exchange_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("exchange_coupon")]
+ public Types.ExchangeCoupon? ExchangeCoupon { get; set; }
+ }
+
+ public class SequentialUsageRule : UsageRule
+ {
+ ///
+ /// 获取或设置券可核销时间信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_available_period")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_available_period")]
+ public Types.AvailablePeriod AvailablePeriod { get; set; } = new Types.AvailablePeriod();
+
+ ///
+ /// 获取或设置满减券使用规则列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("normal_coupon_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("normal_coupon_list")]
+ public IList? NormalCouponList { get; set; }
+
+ ///
+ /// 获取或设置折扣券使用规则列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_coupon_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_coupon_list")]
+ public IList? DiscountCouponList { get; set; }
+
+ ///
+ /// 获取或设置兑换券使用规则列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("exchange_coupon_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("exchange_coupon_list")]
+ public IList? ExchangeCouponList { get; set; }
+
+ ///
+ /// 获取或设置是否提供首笔特惠。
+ ///
+ [Newtonsoft.Json.JsonProperty("special_first")]
+ [System.Text.Json.Serialization.JsonPropertyName("special_first")]
+ public bool? IsSpecialFirst { get; set; }
+ }
+
+ public class UsageRuleDisplayInfo
+ {
+ public static class Types
+ {
+ public class AvailableStore
+ {
+ ///
+ /// 获取或设置可用门店描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("description")]
+ [System.Text.Json.Serialization.JsonPropertyName("description")]
+ public string Description { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置门店小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_appid")]
+ public string? MiniProgramAppId { get; set; }
+
+ ///
+ /// 获取或设置门店小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_path")]
+ public string? MiniProgramPagePath { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置券使用方式列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_usage_method_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_usage_method_list")]
+ public IList UsageMethodList { get; set; } = new List();
+
+ ///
+ /// 获取或设置券使用说明。
+ ///
+ [Newtonsoft.Json.JsonProperty("usage_description")]
+ [System.Text.Json.Serialization.JsonPropertyName("usage_description")]
+ public string? UsageDescription { get; set; }
+
+ ///
+ /// 获取或设置品牌方小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_appid")]
+ public string? MiniProgramAppId { get; set; }
+
+ ///
+ /// 获取或设置品牌方小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_path")]
+ public string? MiniProgramPagePath { get; set; }
+
+ ///
+ /// 获取或设置品牌方 App 跳转路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("app_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("app_path")]
+ public string? AppPath { get; set; }
+
+ ///
+ /// 获取或设置可用门店信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_available_store_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_available_store_info")]
+ public Types.AvailableStore? AvailableStore { get; set; }
+ }
+
+ public class CouponDisplayInfo
+ {
+ public static class Types
+ {
+ public class EntranceMiniProgram
+ {
+ ///
+ /// 获取或设置小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("path")]
+ [System.Text.Json.Serialization.JsonPropertyName("path")]
+ public string PagePath { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置入口文案。
+ ///
+ [Newtonsoft.Json.JsonProperty("entrance_wording")]
+ [System.Text.Json.Serialization.JsonPropertyName("entrance_wording")]
+ public string EntranceWording { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置引导文案。
+ ///
+ [Newtonsoft.Json.JsonProperty("guidance_wording")]
+ [System.Text.Json.Serialization.JsonPropertyName("guidance_wording")]
+ public string GuidanceWording { get; set; } = string.Empty;
+ }
+
+ public class EntranceOfficalAccount
+ {
+ ///
+ /// 获取或设置公众号 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+ }
+
+ public class EntranceFinder
+ {
+ ///
+ /// 获取或设置视频号 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("finder_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("finder_id")]
+ public string FinderId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置视频 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("finder_video_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("finder_video_id")]
+ public string VideoId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置视频封面图 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("finder_video_cover_image_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("finder_video_cover_image_url")]
+ public string VideoCoverImageUrl { get; set; } = string.Empty;
+ }
+ }
+
+ ///
+ /// 获取或设置券 Code 展示模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_display_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_display_mode")]
+ public string CodeDisplayMode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("background_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("background_color")]
+ public string? BackgroundColor { get; set; }
+
+ ///
+ /// 获取或设置小程序入口信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("entrance_mini_program")]
+ [System.Text.Json.Serialization.JsonPropertyName("entrance_mini_program")]
+ public Types.EntranceMiniProgram? EntranceMiniProgram { get; set; }
+
+ ///
+ /// 获取或设置公众号入口信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("entrance_official_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("entrance_official_account")]
+ public Types.EntranceOfficalAccount? EntranceOfficalAccount { get; set; }
+
+ ///
+ /// 获取或设置视频号入口信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("entrance_finder")]
+ [System.Text.Json.Serialization.JsonPropertyName("entrance_finder")]
+ public Types.EntranceFinder? EntranceFinder { get; set; }
+ }
+
+ public class NotifyConfig
+ {
+ ///
+ /// 获取或设置公众号或小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_appid")]
+ public string AppId { get; set; } = string.Empty;
+ }
+ }
+
+ ///
+ /// 获取或设置券 Code 分配模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code_mode")]
+ public string CouponCodeMode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置发放规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_send_rule")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_send_rule")]
+ public Types.SendRule SendRule { get; set; } = new Types.SendRule();
+
+ ///
+ /// 获取或设置单券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("single_usage_rule")]
+ [System.Text.Json.Serialization.JsonPropertyName("single_usage_rule")]
+ public Types.SingleUsageRule? SingleUsageRule { get; set; }
+
+ ///
+ /// 获取或设置多次优惠使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("sequential_usage_rule")]
+ [System.Text.Json.Serialization.JsonPropertyName("sequential_usage_rule")]
+ public Types.SequentialUsageRule? SequentialUsageRule { get; set; }
+
+ ///
+ /// 获取或设置使用规则展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("usage_rule_display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("usage_rule_display_info")]
+ public Types.UsageRuleDisplayInfo UsageRuleDisplayInfo { get; set; } = new Types.UsageRuleDisplayInfo();
+
+ ///
+ /// 获取或设置商品券展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_display_info")]
+ public Types.CouponDisplayInfo CouponDisplayInfo { get; set; } = new Types.CouponDisplayInfo();
+
+ ///
+ /// 获取或设置可用门店范围。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_scope")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_scope")]
+ public string StoreScope { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置事件通知配置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_config")]
+ public Types.NotifyConfig? NotifyConfig { get; set; }
+
+ ///
+ /// 获取或设置备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("remark")]
+ [System.Text.Json.Serialization.JsonPropertyName("remark")]
+ public string? Remark { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumebr { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock")]
+ public Types.StockInfo? StockInfo { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockResponse.cs
new file mode 100644
index 00000000..d000dfb0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks 接口的响应。
+ ///
+ public class CreateMarketingPartnerProductCouponStockResponse : GetMarketingPartnerProductCouponStockByStockIdResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockRequest.cs
new file mode 100644
index 00000000..431085dc
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockRequest.cs
@@ -0,0 +1,43 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/deactivate 接口的请求。
+ ///
+ public class DeactivateMarketingPartnerProductCouponStockRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumebr { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置失效原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_reason")]
+ public string Reason { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockResponse.cs
new file mode 100644
index 00000000..c8431aae
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/deactivate 接口的响应。
+ ///
+ public class DeactivateMarketingPartnerProductCouponStockResponse : GetMarketingPartnerProductCouponStockByStockIdResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/GetMarketingPartnerProductCouponStockByStockIdRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/GetMarketingPartnerProductCouponStockByStockIdRequest.cs
new file mode 100644
index 00000000..604ed590
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/GetMarketingPartnerProductCouponStockByStockIdRequest.cs
@@ -0,0 +1,29 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id} 接口的请求。
+ ///
+ public class GetMarketingPartnerProductCouponStockByStockIdRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 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 StockId { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/GetMarketingPartnerProductCouponStockByStockIdResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/GetMarketingPartnerProductCouponStockByStockIdResponse.cs
new file mode 100644
index 00000000..133566c3
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/GetMarketingPartnerProductCouponStockByStockIdResponse.cs
@@ -0,0 +1,173 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id} 接口的响应。
+ ///
+ public class GetMarketingPartnerProductCouponStockByStockIdResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class SendRule : QueryMarketingPartnerProductCouponStocksResponse.Types.Stock.Types.SendRule
+ {
+ }
+
+ public class SingleUsageRule : QueryMarketingPartnerProductCouponStocksResponse.Types.Stock.Types.SingleUsageRule
+ {
+ }
+
+ public class SequentialUsageRule : QueryMarketingPartnerProductCouponStocksResponse.Types.Stock.Types.SequentialUsageRule
+ {
+ }
+
+ public class UsageRuleDisplayInfo : QueryMarketingPartnerProductCouponStocksResponse.Types.Stock.Types.UsageRuleDisplayInfo
+ {
+ }
+
+ public class CouponDisplayInfo : QueryMarketingPartnerProductCouponStocksResponse.Types.Stock.Types.CouponDisplayInfo
+ {
+ }
+
+ public class NotifyConfig : QueryMarketingPartnerProductCouponStocksResponse.Types.Stock.Types.NotifyConfig
+ {
+ }
+
+ public class CodeCountInfo : QueryMarketingPartnerProductCouponStocksResponse.Types.Stock.Types.CodeCountInfo
+ {
+ }
+
+ public class SentCountInfo : QueryMarketingPartnerProductCouponStocksResponse.Types.Stock.Types.SentCountInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 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("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_id")]
+ public string StockId { get; set; } = default!;
+
+ ///
+ /// 获取或设置券 Code 分配模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code_mode")]
+ public string CouponCodeMode { get; set; } = default!;
+
+ ///
+ /// 获取或设置发放规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_send_rule")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_send_rule")]
+ public Types.SendRule SendRule { get; set; } = default!;
+
+ ///
+ /// 获取或设置单券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("single_usage_rule")]
+ [System.Text.Json.Serialization.JsonPropertyName("single_usage_rule")]
+ public Types.SingleUsageRule? SingleUsageRule { get; set; }
+
+ ///
+ /// 获取或设置多次优惠使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("sequential_usage_rule")]
+ [System.Text.Json.Serialization.JsonPropertyName("sequential_usage_rule")]
+ public Types.SequentialUsageRule? SequentialUsageRule { get; set; }
+
+ ///
+ /// 获取或设置使用规则展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("usage_rule_display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("usage_rule_display_info")]
+ public Types.UsageRuleDisplayInfo UsageRuleDisplayInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品券展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_display_info")]
+ public Types.CouponDisplayInfo CouponDisplayInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置可用门店范围。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_scope")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_scope")]
+ public string StoreScope { get; set; } = default!;
+
+ ///
+ /// 获取或设置事件通知配置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_config")]
+ public Types.NotifyConfig? NotifyConfig { get; set; }
+
+ ///
+ /// 获取或设置备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("remark")]
+ [System.Text.Json.Serialization.JsonPropertyName("remark")]
+ public string? Remark { get; set; }
+
+ ///
+ /// 获取或设置 Code 数量信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code_count_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code_count_info")]
+ public Types.CodeCountInfo CodeCountInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置已发放数量信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("sent_count_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("sent_count_info")]
+ public Types.SentCountInfo SentCountInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置批次状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("state")]
+ [System.Text.Json.Serialization.JsonPropertyName("state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置失效请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_request_no")]
+ public string? DeactivateOutRequestNumber { get; set; }
+
+ ///
+ /// 获取或设置失效时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? DeactivateTime { get; set; }
+
+ ///
+ /// 获取或设置失效原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_reason")]
+ public string? DeactivateReason { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/QueryMarketingPartnerProductCouponStocksRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/QueryMarketingPartnerProductCouponStocksRequest.cs
new file mode 100644
index 00000000..45476e0d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/QueryMarketingPartnerProductCouponStocksRequest.cs
@@ -0,0 +1,43 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks 接口的请求。
+ ///
+ public class QueryMarketingPartnerProductCouponStocksRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次状态。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? StockState { get; set; }
+
+ ///
+ /// 获取或设置分页游标。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? PageToken { get; set; }
+
+ ///
+ /// 获取或设置分页大小。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int? PageSize { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/QueryMarketingPartnerProductCouponStocksResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/QueryMarketingPartnerProductCouponStocksResponse.cs
new file mode 100644
index 00000000..5f385f53
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/QueryMarketingPartnerProductCouponStocksResponse.cs
@@ -0,0 +1,529 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks 接口的响应。
+ ///
+ public class QueryMarketingPartnerProductCouponStocksResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class Stock
+ {
+ public static class Types
+ {
+ public class SendRule : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.SendRule
+ {
+ }
+
+ public class UsageRule
+ {
+ public static class Types
+ {
+ public class AvailablePeriod
+ {
+ public static class Types
+ {
+ public class WeeklyPeriod
+ {
+ ///
+ /// 获取或设置每周可用星期数列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("day_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("day_list")]
+ public string[]? DayList { get; set; }
+
+ ///
+ /// 获取或设置当天可用时间段列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("day_period_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("day_period_list")]
+ public DayPeriod[]? DayPeriodList { get; set; }
+ }
+
+ public class DayPeriod
+ {
+ ///
+ /// 获取或设置当天可用开始时间(单位:秒)。
+ ///
+ [Newtonsoft.Json.JsonProperty("begin_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("begin_time")]
+ public int BeginTime { get; set; }
+
+ ///
+ /// 获取或设置当天可用结束时间(单位:秒)。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public int EndTime { get; set; }
+ }
+
+ public class IrregularPeriod
+ {
+ ///
+ /// 获取或设置开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("begin_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("begin_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset BeginTime { get; set; }
+
+ ///
+ /// 获取或设置结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset EndTime { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_begin_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("available_begin_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset BeginTime { get; set; }
+
+ ///
+ /// 获取或设置结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("available_end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset EndTime { get; set; }
+
+ ///
+ /// 获取或设置生效后 N 天内有效。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_days")]
+ [System.Text.Json.Serialization.JsonPropertyName("available_days")]
+ public int? AvailableDays { get; set; }
+
+ ///
+ /// 获取或设置领取后 N 天开始生效。
+ ///
+ [Newtonsoft.Json.JsonProperty("wait_days_after_receive")]
+ [System.Text.Json.Serialization.JsonPropertyName("wait_days_after_receive")]
+ public int? WaitDaysAfterReceive { get; set; }
+
+ ///
+ /// 获取或设置每周固定可用时间信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("weekly_available_period")]
+ [System.Text.Json.Serialization.JsonPropertyName("weekly_available_period")]
+ public Types.WeeklyPeriod? WeeklyPeriod { get; set; }
+
+ ///
+ /// 获取或设置无规律的可用时间段信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("irregular_available_period_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("irregular_available_period_list")]
+ public Types.IrregularPeriod[]? IrregularPeriodList { get; set; }
+ }
+
+ public class NormalCoupon : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.UsageRule.Types.NormalCoupon
+ {
+ }
+
+ public class DiscountCoupon : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.UsageRule.Types.DiscountCoupon
+ {
+ }
+
+ public class ExchangeCoupon : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.UsageRule.Types.ExchangeCoupon
+ {
+ }
+ }
+ }
+
+ public class SingleUsageRule : UsageRule
+ {
+ ///
+ /// 获取或设置券可核销时间信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_available_period")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_available_period")]
+ public Types.AvailablePeriod AvailablePeriod { get; set; } = default!;
+
+ ///
+ /// 获取或设置满减券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("normal_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("normal_coupon")]
+ public Types.NormalCoupon? NormalCoupon { get; set; }
+
+ ///
+ /// 获取或设置折扣券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_coupon")]
+ public Types.DiscountCoupon? DiscountCoupon { get; set; }
+
+ ///
+ /// 获取或设置兑换券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("exchange_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("exchange_coupon")]
+ public Types.ExchangeCoupon? ExchangeCoupon { get; set; }
+ }
+
+ public class SequentialUsageRule : UsageRule
+ {
+ ///
+ /// 获取或设置券可核销时间信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_available_period")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_available_period")]
+ public Types.AvailablePeriod AvailablePeriod { get; set; } = default!;
+
+ ///
+ /// 获取或设置满减券使用规则列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("normal_coupon_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("normal_coupon_list")]
+ public Types.NormalCoupon[]? NormalCouponList { get; set; }
+
+ ///
+ /// 获取或设置折扣券使用规则列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("discount_coupon_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("discount_coupon_list")]
+ public Types.DiscountCoupon[]? DiscountCouponList { get; set; }
+
+ ///
+ /// 获取或设置兑换券使用规则列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("exchange_coupon_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("exchange_coupon_list")]
+ public Types.ExchangeCoupon[]? ExchangeCouponList { get; set; }
+
+ ///
+ /// 获取或设置是否提供首笔特惠。
+ ///
+ [Newtonsoft.Json.JsonProperty("special_first")]
+ [System.Text.Json.Serialization.JsonPropertyName("special_first")]
+ public bool? IsSpecialFirst { get; set; }
+ }
+
+ public class UsageRuleDisplayInfo
+ {
+ public static class Types
+ {
+ public class AvailableStore
+ {
+ ///
+ /// 获取或设置可用门店描述。
+ ///
+ [Newtonsoft.Json.JsonProperty("description")]
+ [System.Text.Json.Serialization.JsonPropertyName("description")]
+ public string Description { get; set; } = default!;
+
+ ///
+ /// 获取或设置门店小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_appid")]
+ public string? MiniProgramAppId { get; set; }
+
+ ///
+ /// 获取或设置门店小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_path")]
+ public string? MiniProgramPagePath { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置券使用方式列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_usage_method_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_usage_method_list")]
+ public string[] UsageMethodList { get; set; } = default!;
+
+ ///
+ /// 获取或设置券使用说明。
+ ///
+ [Newtonsoft.Json.JsonProperty("usage_description")]
+ [System.Text.Json.Serialization.JsonPropertyName("usage_description")]
+ public string? UsageDescription { get; set; }
+
+ ///
+ /// 获取或设置品牌方小程序 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_appid")]
+ public string? MiniProgramAppId { get; set; }
+
+ ///
+ /// 获取或设置品牌方小程序页面路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("mini_program_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("mini_program_path")]
+ public string? MiniProgramPagePath { get; set; }
+
+ ///
+ /// 获取或设置品牌方 App 跳转路径。
+ ///
+ [Newtonsoft.Json.JsonProperty("app_path")]
+ [System.Text.Json.Serialization.JsonPropertyName("app_path")]
+ public string? AppPath { get; set; }
+
+ ///
+ /// 获取或设置可用门店信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_available_store_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_available_store_info")]
+ public Types.AvailableStore? AvailableStore { get; set; }
+ }
+
+ public class CouponDisplayInfo
+ {
+ public static class Types
+ {
+ public class EntranceMiniProgram : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.CouponDisplayInfo.Types.EntranceMiniProgram
+ {
+ }
+
+ public class EntranceOfficalAccount : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.CouponDisplayInfo.Types.EntranceOfficalAccount
+ {
+ }
+
+ public class EntranceFinder : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.CouponDisplayInfo.Types.EntranceFinder
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置券 Code 展示模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_display_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_display_mode")]
+ public string CodeDisplayMode { get; set; } = default!;
+
+ ///
+ /// 获取或设置背景颜色。
+ ///
+ [Newtonsoft.Json.JsonProperty("background_color")]
+ [System.Text.Json.Serialization.JsonPropertyName("background_color")]
+ public string? BackgroundColor { get; set; }
+
+ ///
+ /// 获取或设置小程序入口信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("entrance_mini_program")]
+ [System.Text.Json.Serialization.JsonPropertyName("entrance_mini_program")]
+ public Types.EntranceMiniProgram? EntranceMiniProgram { get; set; }
+
+ ///
+ /// 获取或设置公众号入口信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("entrance_official_account")]
+ [System.Text.Json.Serialization.JsonPropertyName("entrance_official_account")]
+ public Types.EntranceOfficalAccount? EntranceOfficalAccount { get; set; }
+
+ ///
+ /// 获取或设置视频号入口信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("entrance_finder")]
+ [System.Text.Json.Serialization.JsonPropertyName("entrance_finder")]
+ public Types.EntranceFinder? EntranceFinder { get; set; }
+ }
+
+ public class NotifyConfig : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.NotifyConfig
+ {
+ }
+
+ public class CodeCountInfo
+ {
+ ///
+ /// 获取或设置总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置可用数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("available_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("available_count")]
+ public int AvailableCount { get; set; }
+ }
+
+ public class SentCountInfo
+ {
+ ///
+ /// 获取或设置已发放总次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置当天已发放次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("today_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("today_count")]
+ public int TodayCount { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 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("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_id")]
+ public string StockId { get; set; } = default!;
+
+ ///
+ /// 获取或设置券 Code 分配模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code_mode")]
+ public string CouponCodeMode { get; set; } = default!;
+
+ ///
+ /// 获取或设置发放规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_send_rule")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_send_rule")]
+ public Types.SendRule SendRule { get; set; } = default!;
+
+ ///
+ /// 获取或设置单券使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("single_usage_rule")]
+ [System.Text.Json.Serialization.JsonPropertyName("single_usage_rule")]
+ public Types.SingleUsageRule? SingleUsageRule { get; set; }
+
+ ///
+ /// 获取或设置多次优惠使用规则信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("sequential_usage_rule")]
+ [System.Text.Json.Serialization.JsonPropertyName("sequential_usage_rule")]
+ public Types.SequentialUsageRule? SequentialUsageRule { get; set; }
+
+ ///
+ /// 获取或设置使用规则展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("usage_rule_display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("usage_rule_display_info")]
+ public Types.UsageRuleDisplayInfo UsageRuleDisplayInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品券展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_display_info")]
+ public Types.CouponDisplayInfo CouponDisplayInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置可用门店范围。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_scope")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_scope")]
+ public string StoreScope { get; set; } = default!;
+
+ ///
+ /// 获取或设置事件通知配置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_config")]
+ public Types.NotifyConfig? NotifyConfig { get; set; }
+
+ ///
+ /// 获取或设置备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("remark")]
+ [System.Text.Json.Serialization.JsonPropertyName("remark")]
+ public string? Remark { get; set; }
+
+ ///
+ /// 获取或设置 Code 数量信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code_count_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code_count_info")]
+ public Types.CodeCountInfo CodeCountInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置已发放数量信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("sent_count_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("sent_count_info")]
+ public Types.SentCountInfo SentCountInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置批次状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("state")]
+ [System.Text.Json.Serialization.JsonPropertyName("state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置失效请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_request_no")]
+ public string? DeactivateOutRequestNumber { get; set; }
+
+ ///
+ /// 获取或设置失效时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? DeactivateTime { get; set; }
+
+ ///
+ /// 获取或设置失效原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_reason")]
+ public string? DeactivateReason { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置批次列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_list")]
+ public Types.Stock[] StockList { get; set; } = default!;
+
+ ///
+ /// 获取或设置下一页分页游标。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_page_token")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_page_token")]
+ public string? NextPageToken { get; set; }
+
+ ///
+ /// 获取或设置券总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresRequest.cs
new file mode 100644
index 00000000..7dc55a43
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresRequest.cs
@@ -0,0 +1,51 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/associate-stores 接口的请求。
+ ///
+ public class AssociateMarketingPartnerProductCouponStockToStoresRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class Store
+ {
+ ///
+ /// 获取或设置门店 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_id")]
+ public string StoreId { get; set; } = string.Empty;
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置门店列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_list")]
+ public IList StoreList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresResponse.cs
new file mode 100644
index 00000000..24074acf
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresResponse.cs
@@ -0,0 +1,56 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/associate-stores 接口的响应。
+ ///
+ public class AssociateMarketingPartnerProductCouponStockToStoresResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class Store
+ {
+ ///
+ /// 获取或设置门店 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_id")]
+ public string StoreId { get; set; } = default!;
+
+ ///
+ /// 获取或设置错误码。
+ ///
+ [Newtonsoft.Json.JsonProperty("code")]
+ [System.Text.Json.Serialization.JsonPropertyName("code")]
+ public string? ErrorCode { get; set; }
+
+ ///
+ /// 获取或设置错误信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("message")]
+ [System.Text.Json.Serialization.JsonPropertyName("message")]
+ public string? ErrorMessage { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置门店总数。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置关联成功的门店列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("success_store_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("success_store_list")]
+ public Types.Store[]? SucceededStoreList { get; set; }
+
+ ///
+ /// 获取或设置关联失败的门店列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("failed_store_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("failed_store_list")]
+ public Types.Store[]? FailedStoreList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresRequest.cs
new file mode 100644
index 00000000..3d72ffe7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresRequest.cs
@@ -0,0 +1,45 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/disassociate-stores 接口的请求。
+ ///
+ public class DisassociateMarketingPartnerProductCouponStockFromStoresRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class Store : AssociateMarketingPartnerProductCouponStockToStoresRequest.Types.Store
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置门店列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_list")]
+ public IList StoreList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresResponse.cs
new file mode 100644
index 00000000..e4210572
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresResponse.cs
@@ -0,0 +1,36 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/disassociate-stores 接口的响应。
+ ///
+ public class DisassociateMarketingPartnerProductCouponStockFromStoresResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class Store : AssociateMarketingPartnerProductCouponStockToStoresResponse.Types.Store
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置门店总数。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置取消关联成功的门店列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("success_store_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("success_store_list")]
+ public Types.Store[]? SucceededStoreList { get; set; }
+
+ ///
+ /// 获取或设置取消关联失败的门店列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("failed_store_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("failed_store_list")]
+ public Types.Store[]? FailedStoreList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/QueryMarketingPartnerProductCouponStockAssociatedStoresRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/QueryMarketingPartnerProductCouponStockAssociatedStoresRequest.cs
new file mode 100644
index 00000000..1a6f3f3a
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/QueryMarketingPartnerProductCouponStockAssociatedStoresRequest.cs
@@ -0,0 +1,43 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/associated-stores 接口的请求。
+ ///
+ public class QueryMarketingPartnerProductCouponStockAssociatedStoresRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 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 StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置分页游标。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? PageToken { get; set; }
+
+ ///
+ /// 获取或设置分页大小。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int? PageSize { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/QueryMarketingPartnerProductCouponStockAssociatedStoresResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/QueryMarketingPartnerProductCouponStockAssociatedStoresResponse.cs
new file mode 100644
index 00000000..00ceb965
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/QueryMarketingPartnerProductCouponStockAssociatedStoresResponse.cs
@@ -0,0 +1,42 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/associated-stores 接口的响应。
+ ///
+ public class QueryMarketingPartnerProductCouponStockAssociatedStoresResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class Store
+ {
+ ///
+ /// 获取或设置门店 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_id")]
+ public string StoreId { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置门店列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_list")]
+ public Types.Store[] StoreList { get; set; } = default!;
+
+ ///
+ /// 获取或设置下一页分页游标。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_page_token")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_page_token")]
+ public string? NextPageToken { get; set; }
+
+ ///
+ /// 获取或设置券总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetRequest.cs
new file mode 100644
index 00000000..48b7e2c7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetRequest.cs
@@ -0,0 +1,71 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/update-budget 接口的请求。
+ ///
+ public class UpdateMarketingPartnerProductCouponStockBudgetRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumebr { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置更新模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("update_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("update_mode")]
+ public string UpdateMode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置当前批次发放次数总上限。
+ ///
+ [Newtonsoft.Json.JsonProperty("current_max_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("current_max_count")]
+ public int? CurrentMaxCount { get; set; }
+
+ ///
+ /// 获取或设置目标批次发放次数总上限。
+ ///
+ [Newtonsoft.Json.JsonProperty("target_max_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("target_max_count")]
+ public int? TargetMaxCount { get; set; }
+
+ ///
+ /// 获取或设置当前批次每日发放次数上限。
+ ///
+ [Newtonsoft.Json.JsonProperty("current_max_count_per_day")]
+ [System.Text.Json.Serialization.JsonPropertyName("current_max_count_per_day")]
+ public int? CurrentMaxCountPerDay { get; set; }
+
+ ///
+ /// 获取或设置目标批次每日发放次数上限。
+ ///
+ [Newtonsoft.Json.JsonProperty("target_max_count_per_day")]
+ [System.Text.Json.Serialization.JsonPropertyName("target_max_count_per_day")]
+ public int? TargetMaxCountPerDay { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetResponse.cs
new file mode 100644
index 00000000..083a4404
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/update-budget 接口的响应。
+ ///
+ public class UpdateMarketingPartnerProductCouponStockBudgetResponse : GetMarketingPartnerProductCouponStockByStockIdResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockRequest.cs
new file mode 100644
index 00000000..513ac28c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockRequest.cs
@@ -0,0 +1,86 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [PATCH] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id} 接口的请求。
+ ///
+ public class UpdateMarketingPartnerProductCouponStockRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class UsageRuleDisplayInfo : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.UsageRuleDisplayInfo
+ {
+ }
+
+ public class CouponDisplayInfo : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.CouponDisplayInfo
+ {
+ }
+
+ public class NotifyConfig : CreateMarketingPartnerProductCouponStockRequest.Types.StockInfo.Types.NotifyConfig
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumebr { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置使用规则展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("usage_rule_display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("usage_rule_display_info")]
+ public Types.UsageRuleDisplayInfo? UsageRuleDisplayInfo { get; set; }
+
+ ///
+ /// 获取或设置商品券展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_display_info")]
+ public Types.CouponDisplayInfo? CouponDisplayInfo { get; set; }
+
+ ///
+ /// 获取或设置可用门店范围。
+ ///
+ [Newtonsoft.Json.JsonProperty("store_scope")]
+ [System.Text.Json.Serialization.JsonPropertyName("store_scope")]
+ public string? StoreScope { get; set; }
+
+ ///
+ /// 获取或设置事件通知配置信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("notify_config")]
+ [System.Text.Json.Serialization.JsonPropertyName("notify_config")]
+ public Types.NotifyConfig? NotifyConfig { get; set; }
+
+ ///
+ /// 获取或设置备注。
+ ///
+ [Newtonsoft.Json.JsonProperty("remark")]
+ [System.Text.Json.Serialization.JsonPropertyName("remark")]
+ public string? Remark { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockResponse.cs
new file mode 100644
index 00000000..2f8bffa5
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [PATCH] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id} 接口的响应。
+ ///
+ public class UpdateMarketingPartnerProductCouponStockResponse : GetMarketingPartnerProductCouponStockByStockIdResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesRequest.cs
new file mode 100644
index 00000000..5a22d4a9
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesRequest.cs
@@ -0,0 +1,45 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/upload-coupon-codes 接口的请求。
+ ///
+ public class UploadMarketingPartnerProductCouponStockCouponCodesRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumebr { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置券 Code 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("code_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("code_list")]
+ public IList CodeList { get; set; } = new List();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesResponse.cs
new file mode 100644
index 00000000..9098e810
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesResponse.cs
@@ -0,0 +1,70 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/product-coupons/{product_coupon_id}/stocks/{stock_id}/upload-coupon-codes 接口的响应。
+ ///
+ public class UploadMarketingPartnerProductCouponStockCouponCodesResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class FailCode
+ {
+ ///
+ /// 获取或设置上传失败的券 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code")]
+ public string CouponCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置上传失败错误码。
+ ///
+ [Newtonsoft.Json.JsonProperty("code")]
+ [System.Text.Json.Serialization.JsonPropertyName("code")]
+ public string ErrorCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置上传失败错误信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("message")]
+ [System.Text.Json.Serialization.JsonPropertyName("message")]
+ public string ErrorMessage { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置去重后上传 Code 总数。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置上传成功的 Code 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("success_code_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("success_code_list")]
+ public string[]? SuccessCodeList { get; set; }
+
+ ///
+ /// 获取或设置上传失败的 Code 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("failed_code_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("failed_code_list")]
+ public Types.FailCode[]? FailCodeList { get; set; }
+
+ ///
+ /// 获取或设置已存在的 Code 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("already_exist_code_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("already_exist_code_list")]
+ public string[]? AlreadyExistedCodeList { get; set; }
+
+ ///
+ /// 获取或设置本次请求中重复的 Code 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("duplicate_code_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("duplicate_code_list")]
+ public string[]? DuplicateCodeList { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponRequest.cs
new file mode 100644
index 00000000..422c6d5e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponRequest.cs
@@ -0,0 +1,43 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [PATCH] /marketing/partner/product-coupon/product-coupons/{product_coupon_id} 接口的请求。
+ ///
+ public class UpdateMarketingPartnerProductCouponRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class DisplayInfo : CreateMarketingPartnerProductCouponRequest.Types.DisplayInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumebr { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("display_info")]
+ public Types.DisplayInfo DisplayInfo { get; set; } = new Types.DisplayInfo();
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponResponse.cs
new file mode 100644
index 00000000..e8ab3c21
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [PATCH] /marketing/partner/product-coupon/product-coupons/{product_coupon_id} 接口的响应。
+ ///
+ public class UpdateMarketingPartnerProductCouponResponse : GetMarketingPartnerProductCouponByProductCouponIdResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageRequest.cs
new file mode 100644
index 00000000..a15b656d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageRequest.cs
@@ -0,0 +1,38 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/media/upload-image 接口的请求。
+ ///
+ public class UploadMarketingPartnerProductCouponMediaImageRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置图片文件字节数组。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public byte[] FileBytes { get; set; } = Array.Empty();
+
+ ///
+ /// 获取或设置图片文件名(必须以 jpg、bmp、png 为后缀)。如果不指定将由系统自动生成。
+ ///
+ [Newtonsoft.Json.JsonProperty("filename")]
+ [System.Text.Json.Serialization.JsonPropertyName("filename")]
+ public string? FileName { get; set; }
+
+ ///
+ /// 获取或设置图片文件摘要。如果不指定将由系统自动生成。
+ ///
+ [Newtonsoft.Json.JsonProperty("sha256")]
+ [System.Text.Json.Serialization.JsonPropertyName("sha256")]
+ public string? FileHash { get; set; }
+
+ ///
+ /// 获取或设置图片文件 Conent-Type。如果不指定将由系统自动生成。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? FileContentType { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageResponse.cs
new file mode 100644
index 00000000..c0d3014e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageResponse.cs
@@ -0,0 +1,15 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/media/upload-image 接口的响应。
+ ///
+ public class UploadMarketingPartnerProductCouponMediaImageResponse : WechatTenpayResponse
+ {
+ ///
+ /// 获取或设置图片 URL。
+ ///
+ [Newtonsoft.Json.JsonProperty("image_url")]
+ [System.Text.Json.Serialization.JsonPropertyName("image_url")]
+ public string ImageUrl { get; set; } = default!;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponRequest.cs
new file mode 100644
index 00000000..ebd00d28
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponRequest.cs
@@ -0,0 +1,57 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/confirm 接口的请求。
+ ///
+ public class ConfirmMarketingPartnerProductCouponUserCouponRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 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("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_id")]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置券 Code。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string CouponCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponResponse.cs
new file mode 100644
index 00000000..e93570ae
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/confirm 接口的响应。
+ ///
+ public class ConfirmMarketingPartnerProductCouponUserCouponResponse : GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponRequest.cs
new file mode 100644
index 00000000..1efa18b7
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponRequest.cs
@@ -0,0 +1,64 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/deactivate 接口的请求。
+ ///
+ public class DeactivateMarketingPartnerProductCouponUserCouponRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 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("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_id")]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置券 Code。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string CouponCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置失效原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_reason")]
+ public string Reason { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponResponse.cs
new file mode 100644
index 00000000..0d024c6c
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/deactivate 接口的响应。
+ ///
+ public class DeactivateMarketingPartnerProductCouponUserCouponResponse : GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/GetMarketingPartnerProductCouponUserCouponByCouponCodeRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/GetMarketingPartnerProductCouponUserCouponByCouponCodeRequest.cs
new file mode 100644
index 00000000..857c0813
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/GetMarketingPartnerProductCouponUserCouponByCouponCodeRequest.cs
@@ -0,0 +1,50 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code} 接口的请求。
+ ///
+ public class GetMarketingPartnerProductCouponUserCouponByCouponCodeRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string ProductCouponId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置品牌 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 StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置券 Code。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string CouponCode { get; set; } = string.Empty;
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse.cs
new file mode 100644
index 00000000..b7ad55b5
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse.cs
@@ -0,0 +1,183 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code} 接口的响应。
+ ///
+ public class GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class SingleUsageDetail : QueryMarketingPartnerProductCouponUserCouponsResponse.Types.UserCoupon.Types.SingleUsageDetail
+ {
+ }
+
+ public class SequentialUsageDetail : QueryMarketingPartnerProductCouponUserCouponsResponse.Types.UserCoupon.Types.SequentialUsageDetail
+ {
+ }
+
+ public class ProductCouponInfo : QueryMarketingPartnerProductCouponUserCouponsResponse.Types.UserCoupon.Types.ProductCouponInfo
+ {
+ }
+
+ public class StockInfo : QueryMarketingPartnerProductCouponUserCouponsResponse.Types.UserCoupon.Types.StockInfo
+ {
+ }
+
+ public class TagInfo : QueryMarketingPartnerProductCouponUserCouponsResponse.Types.UserCoupon.Types.TagInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置券 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code")]
+ public string CouponCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置券状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_state")]
+ public string CouponState { get; set; } = default!;
+
+ ///
+ /// 获取或设置有效期开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_begin_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_begin_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ValidBeginTime { get; set; }
+
+ ///
+ /// 获取或设置有效期结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ValidEndTime { get; set; }
+
+ ///
+ /// 获取或设置领券时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("receive_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("receive_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ReceiveTime { get; set; }
+
+ ///
+ /// 获取或设置发券请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("send_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("send_request_no")]
+ public string SendOutRequestNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置发券渠道。
+ ///
+ [Newtonsoft.Json.JsonProperty("send_channel")]
+ [System.Text.Json.Serialization.JsonPropertyName("send_channel")]
+ public string SendChannel { get; set; } = default!;
+
+ ///
+ /// 获取或设置确认请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("confirm_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("confirm_request_no")]
+ public string? ConfirmOutRequestNumber { get; set; }
+
+ ///
+ /// 获取或设置确认发放时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("confirm_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("confirm_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? ConfirmTime { get; set; }
+
+ ///
+ /// 获取或设置失效请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_request_no")]
+ public string? DeactivateOutRequestNumber { get; set; }
+
+ ///
+ /// 获取或设置失效时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? DeactivateTime { get; set; }
+
+ ///
+ /// 获取或设置失效原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_reason")]
+ public string? DeactivateReason { get; set; }
+
+ ///
+ /// 获取或设置单券使用详情。
+ ///
+ [Newtonsoft.Json.JsonProperty("single_usage_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("single_usage_detail")]
+ public Types.SingleUsageDetail? SingleUsageDetail { get; set; }
+
+ ///
+ /// 获取或设置多次优惠使用详情。
+ ///
+ [Newtonsoft.Json.JsonProperty("sequential_usage_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("sequential_usage_detail")]
+ public Types.SequentialUsageDetail? SequentialUsageDetail { get; set; }
+
+ ///
+ /// 获取或设置商品券信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_coupon")]
+ public Types.ProductCouponInfo ProductCouponInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置批次信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock")]
+ public Types.StockInfo StockInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置附加信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置渠道自定义信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("channel_custom_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("channel_custom_info")]
+ public string? ChannelCustomInfo { get; set; }
+
+ ///
+ /// 获取或设置标签信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_tag_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_tag_info")]
+ public Types.TagInfo? TagInfo { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/QueryMarketingPartnerProductCouponUserCouponsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/QueryMarketingPartnerProductCouponUserCouponsRequest.cs
new file mode 100644
index 00000000..76d7c626
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/QueryMarketingPartnerProductCouponUserCouponsRequest.cs
@@ -0,0 +1,64 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/users/{openid}/coupons 接口的请求。
+ ///
+ public class QueryMarketingPartnerProductCouponUserCouponsRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 ID。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? ProductCouponId { get; set; }
+
+ ///
+ /// 获取或设置品牌 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? StockId { get; set; }
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置券状态。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? CouponState { get; set; }
+
+ ///
+ /// 获取或设置分页游标。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string? PageToken { get; set; }
+
+ ///
+ /// 获取或设置分页大小。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public int? PageSize { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/QueryMarketingPartnerProductCouponUserCouponsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/QueryMarketingPartnerProductCouponUserCouponsResponse.cs
new file mode 100644
index 00000000..7f81427e
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/QueryMarketingPartnerProductCouponUserCouponsResponse.cs
@@ -0,0 +1,452 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [GET] /marketing/partner/product-coupon/users/{openid}/coupons 接口的响应。
+ ///
+ public class QueryMarketingPartnerProductCouponUserCouponsResponse : WechatTenpayResponse
+ {
+ public static class Types
+ {
+ public class UserCoupon
+ {
+ public static class Types
+ {
+ public class UsageDetail
+ {
+ public static class Types
+ {
+ public class AssociatedOrder : UseMarketingPartnerProductCouponUserCouponRequest.Types.AssociatedOrder
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置核销请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("use_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("use_request_no")]
+ public string? UseOutRequestNumber { 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("return_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("return_request_no")]
+ public string? ReturnOutRequestNumber { get; set; }
+
+ ///
+ /// 获取或设置退券时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("return_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("return_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? ReturnTime { get; set; }
+
+ ///
+ /// 获取或设置关联订单信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("associated_order_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("associated_order_info")]
+ public Types.AssociatedOrder? AssociatedOrder { get; set; }
+ }
+
+ public class SingleUsageDetail : UsageDetail
+ {
+ }
+
+ public class SequentialUsageDetail
+ {
+ public static class Types
+ {
+ public class DetailItem : UsageDetail
+ {
+ ///
+ /// 获取或设置轮次使用详情状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("detail_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("detail_state")]
+ public string DetailState { get; set; } = default!;
+
+ ///
+ /// 获取或设置有效期开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_begin_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_begin_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ValidBeginTime { get; set; }
+
+ ///
+ /// 获取或设置有效期结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ValidEndTime { get; set; }
+
+ ///
+ /// 获取或设置删除时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("delete_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("delete_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? DeleteTime { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置总可使用次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+
+ ///
+ /// 获取或设置已使用次数。
+ ///
+ [Newtonsoft.Json.JsonProperty("used_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("used_count")]
+ public int UsedCount { get; set; }
+
+ ///
+ /// 获取或设置轮次使用详情列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("detail_item_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("detail_item_list")]
+ public Types.DetailItem[]? DetailItemList { get; set; }
+ }
+
+ public class ProductCouponInfo
+ {
+ public static class Types
+ {
+ public class SingleUsageInfo : GetMarketingPartnerProductCouponByProductCouponIdResponse.Types.SingleUsageInfo
+ {
+ }
+
+ public class SequentialUsageInfo : GetMarketingPartnerProductCouponByProductCouponIdResponse.Types.SequentialUsageInfo
+ {
+ }
+
+ public class DisplayInfo : GetMarketingPartnerProductCouponByProductCouponIdResponse.Types.DisplayInfo
+ {
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 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("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置优惠范围。
+ ///
+ [Newtonsoft.Json.JsonProperty("scope")]
+ [System.Text.Json.Serialization.JsonPropertyName("scope")]
+ public string Scope { get; set; } = default!;
+
+ ///
+ /// 获取或设置商品券类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public string Type { get; set; } = default!;
+
+ ///
+ /// 获取或设置使用模式。
+ ///
+ [Newtonsoft.Json.JsonProperty("usage_mode")]
+ [System.Text.Json.Serialization.JsonPropertyName("usage_mode")]
+ public string UsageMode { get; set; } = default!;
+
+ ///
+ /// 获取或设置单券模式信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("single_usage_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("single_usage_info")]
+ public Types.SingleUsageInfo? SingleUsageInfo { get; set; }
+
+ ///
+ /// 获取或设置多次优惠模式信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("sequential_usage_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("sequential_usage_info")]
+ public Types.SequentialUsageInfo? SequentialUsageInfo { get; set; }
+
+ ///
+ /// 获取或设置展示信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("display_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("display_info")]
+ public Types.DisplayInfo DisplayInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置外部商品 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_product_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_product_no")]
+ public string? OutProductNumber { get; set; }
+
+ ///
+ /// 获取或设置商品券状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("state")]
+ [System.Text.Json.Serialization.JsonPropertyName("state")]
+ public string State { get; set; } = default!;
+
+ ///
+ /// 获取或设置失效请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_request_no")]
+ public string? DeactivateOutRequestNumber { get; set; }
+
+ ///
+ /// 获取或设置失效时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? DeactivateTime { get; set; }
+
+ ///
+ /// 获取或设置失效原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_reason")]
+ public string? DeactivateReason { get; set; }
+ }
+
+ public class StockInfo : QueryMarketingPartnerProductCouponStocksResponse.Types.Stock
+ {
+ }
+
+ public class TagInfo
+ {
+ public static class Types
+ {
+ public class MemberTag
+ {
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("member_card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("member_card_id")]
+ public string MemberCardId { get; set; } = default!;
+ }
+ }
+
+ ///
+ /// 获取或设置用户商品券标签列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_tag_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_tag_list")]
+ public string[]? CouponTagList { get; set; }
+
+ ///
+ /// 获取或设置会员标签信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("member_tag_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("member_tag_info")]
+ public Types.MemberTag? MemberTag { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置品牌 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = default!;
+
+ ///
+ /// 获取或设置券 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code")]
+ public string CouponCode { get; set; } = default!;
+
+ ///
+ /// 获取或设置券状态。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_state")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_state")]
+ public string CouponState { get; set; } = default!;
+
+ ///
+ /// 获取或设置有效期开始时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_begin_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_begin_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ValidBeginTime { get; set; }
+
+ ///
+ /// 获取或设置有效期结束时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("valid_end_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("valid_end_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ValidEndTime { get; set; }
+
+ ///
+ /// 获取或设置领券时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("receive_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("receive_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset ReceiveTime { get; set; }
+
+ ///
+ /// 获取或设置发券请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("send_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("send_request_no")]
+ public string SendOutRequestNumber { get; set; } = default!;
+
+ ///
+ /// 获取或设置发券渠道。
+ ///
+ [Newtonsoft.Json.JsonProperty("send_channel")]
+ [System.Text.Json.Serialization.JsonPropertyName("send_channel")]
+ public string SendChannel { get; set; } = default!;
+
+ ///
+ /// 获取或设置确认请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("confirm_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("confirm_request_no")]
+ public string? ConfirmOutRequestNumber { get; set; }
+
+ ///
+ /// 获取或设置确认发放时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("confirm_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("confirm_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? ConfirmTime { get; set; }
+
+ ///
+ /// 获取或设置失效请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_request_no")]
+ public string? DeactivateOutRequestNumber { get; set; }
+
+ ///
+ /// 获取或设置失效时间。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_time")]
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Common.Rfc3339DateTimeOffsetConverter))]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_time")]
+ [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Common.Rfc3339DateTimeOffsetConverter))]
+ public DateTimeOffset? DeactivateTime { get; set; }
+
+ ///
+ /// 获取或设置失效原因。
+ ///
+ [Newtonsoft.Json.JsonProperty("deactivate_reason")]
+ [System.Text.Json.Serialization.JsonPropertyName("deactivate_reason")]
+ public string? DeactivateReason { get; set; }
+
+ ///
+ /// 获取或设置单券使用详情。
+ ///
+ [Newtonsoft.Json.JsonProperty("single_usage_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("single_usage_detail")]
+ public Types.SingleUsageDetail? SingleUsageDetail { get; set; }
+
+ ///
+ /// 获取或设置多次优惠使用详情。
+ ///
+ [Newtonsoft.Json.JsonProperty("sequential_usage_detail")]
+ [System.Text.Json.Serialization.JsonPropertyName("sequential_usage_detail")]
+ public Types.SequentialUsageDetail? SequentialUsageDetail { get; set; }
+
+ ///
+ /// 获取或设置商品券信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("product_coupon")]
+ [System.Text.Json.Serialization.JsonPropertyName("product_coupon")]
+ public Types.ProductCouponInfo ProductCouponInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置批次信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock")]
+ public Types.StockInfo StockInfo { get; set; } = default!;
+
+ ///
+ /// 获取或设置附加信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置渠道自定义信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("channel_custom_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("channel_custom_info")]
+ public string? ChannelCustomInfo { get; set; }
+
+ ///
+ /// 获取或设置标签信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_tag_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_tag_info")]
+ public Types.TagInfo? TagInfo { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置用户券列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("user_coupon_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("user_coupon_list")]
+ public Types.UserCoupon[] UserCouponList { get; set; } = default!;
+
+ ///
+ /// 获取或设置下一页分页游标。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_page_token")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_page_token")]
+ public string? NextPageToken { get; set; }
+
+ ///
+ /// 获取或设置券总数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("total_count")]
+ [System.Text.Json.Serialization.JsonPropertyName("total_count")]
+ public int TotalCount { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponRequest.cs
new file mode 100644
index 00000000..0eb472cd
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponRequest.cs
@@ -0,0 +1,64 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/return 接口的请求。
+ ///
+ public class ReturnMarketingPartnerProductCouponUserCouponRequest : WechatTenpayRequest
+ {
+ ///
+ /// 获取或设置商品券 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("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_id")]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置券 Code。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string CouponCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置多次优惠索引。
+ ///
+ [Newtonsoft.Json.JsonProperty("sequential_coupon_index")]
+ [System.Text.Json.Serialization.JsonPropertyName("sequential_coupon_index")]
+ public int? SequentialCouponIndex { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponResponse.cs
new file mode 100644
index 00000000..f6b9cc66
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/return 接口的响应。
+ ///
+ public class ReturnMarketingPartnerProductCouponUserCouponResponse : GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponRequest.cs
new file mode 100644
index 00000000..1bd211ce
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponRequest.cs
@@ -0,0 +1,106 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/users/{openid}/coupons 接口的请求。
+ ///
+ public class SendMarketingPartnerProductCouponUserCouponRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class TagInfo
+ {
+ public static class Types
+ {
+ public class MemberTag
+ {
+ ///
+ /// 获取或设置会员卡模板 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("member_card_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("member_card_id")]
+ public string MemberCardId { get; set; } = string.Empty;
+ }
+ }
+
+ ///
+ /// 获取或设置用户商品券标签列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_tag_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_tag_list")]
+ public IList? CouponTagList { get; set; }
+
+ ///
+ /// 获取或设置会员标签信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("member_tag_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("member_tag_info")]
+ public Types.MemberTag? MemberTag { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 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("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_id")]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置券 Code。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_code")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_code")]
+ public string? CouponCode { get; set; }
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("send_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("send_request_no")]
+ public string OutRequestNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置附加信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("attach")]
+ [System.Text.Json.Serialization.JsonPropertyName("attach")]
+ public string? Attachment { get; set; }
+
+ ///
+ /// 获取或设置标签信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("coupon_tag_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("coupon_tag_info")]
+ public Types.TagInfo? TagInfo { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponResponse.cs
new file mode 100644
index 00000000..d434ebd0
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/users/{openid}/coupons 接口的响应。
+ ///
+ public class SendMarketingPartnerProductCouponUserCouponResponse : GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse
+ {
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponRequest.cs
new file mode 100644
index 00000000..cc8b5e12
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponRequest.cs
@@ -0,0 +1,116 @@
+using System;
+
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/use 接口的请求。
+ ///
+ public class UseMarketingPartnerProductCouponUserCouponRequest : WechatTenpayRequest
+ {
+ public static class Types
+ {
+ public class AssociatedOrder
+ {
+ ///
+ /// 获取或设置微信商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("mchid")]
+ public string? MerchantId { get; set; }
+
+ ///
+ /// 获取或设置子商户号。
+ ///
+ [Newtonsoft.Json.JsonProperty("sub_mchid")]
+ [System.Text.Json.Serialization.JsonPropertyName("sub_mchid")]
+ public string? SubMerchantId { get; set; }
+
+ ///
+ /// 获取或设置商户订单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_trade_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_trade_no")]
+ public string? OutTradeNumber { get; set; }
+
+ ///
+ /// 获取或设置微信支付单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("transaction_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("transaction_id")]
+ public string? TransactionId { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置商品券 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("brand_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("brand_id")]
+ public string BrandId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置批次 ID。
+ ///
+ [Newtonsoft.Json.JsonProperty("stock_id")]
+ [System.Text.Json.Serialization.JsonPropertyName("stock_id")]
+ public string StockId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置微信 AppId。
+ ///
+ [Newtonsoft.Json.JsonProperty("appid")]
+ [System.Text.Json.Serialization.JsonPropertyName("appid")]
+ public string AppId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置用户的 OpenId。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string OpenId { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置券 Code。
+ ///
+ [Newtonsoft.Json.JsonIgnore]
+ [System.Text.Json.Serialization.JsonIgnore]
+ public string CouponCode { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置商户请求单号。
+ ///
+ [Newtonsoft.Json.JsonProperty("out_request_no")]
+ [System.Text.Json.Serialization.JsonPropertyName("out_request_no")]
+ public string OutRequestNumber { get; set; } = string.Empty;
+
+ ///
+ /// 获取或设置核销时间。
+ ///
+ [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("associated_order_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("associated_order_info")]
+ public Types.AssociatedOrder AssociatedOrder { get; set; } = new Types.AssociatedOrder();
+
+ ///
+ /// 获取或设置多次优惠索引。
+ ///
+ [Newtonsoft.Json.JsonProperty("sequential_coupon_index")]
+ [System.Text.Json.Serialization.JsonPropertyName("sequential_coupon_index")]
+ public int? SequentialCouponIndex { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponResponse.cs
new file mode 100644
index 00000000..cc9b20d6
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponResponse.cs
@@ -0,0 +1,9 @@
+namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models
+{
+ ///
+ /// 表示 [POST] /marketing/partner/product-coupon/users/{openid}/coupons/{coupon_code}/use 接口的响应。
+ ///
+ public class UseMarketingPartnerProductCouponUserCouponResponse : GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse
+ {
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponRequest.json
new file mode 100644
index 00000000..75c0a613
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponRequest.json
@@ -0,0 +1,83 @@
+{
+ "out_product_no": "Product_1234567890",
+ "scope": "ALL",
+ "usage_mode": "SINGLE",
+ "display_info": {
+ "name": "全场满100立打8折",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ]
+ },
+ "single_usage_info": {
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 20
+ }
+ },
+ "type": "DISCOUNT",
+ "stock": {
+ "remark": "8月工作日有效批次",
+ "coupon_code_mode": "UPLOAD",
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-08-01T00:00:00+08:00",
+ "available_end_time": "2025-08-31T23:59:59+08:00",
+ "available_days": 30,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY",
+ "TUESDAY",
+ "WEDNESDAY",
+ "THURSDAY",
+ "FRIDAY"
+ ]
+ }
+ }
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "OFFLINE",
+ "MINI_PROGRAM",
+ "PAYMENT_CODE"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "usage_description": "工作日可用",
+ "coupon_available_store_info": {
+ "description": "所有门店可用,可使用小程序查看门店列表",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "store_scope": "NONE",
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ }
+ },
+ "out_request_no": "12345_20250101_A3489",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponResponse.json
new file mode 100644
index 00000000..e1f0dedf
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/CreateMarketingPartnerProductCouponResponse.json
@@ -0,0 +1,96 @@
+{
+ "product_coupon_id": "1000000013",
+ "scope": "ALL",
+ "type": "DISCOUNT",
+ "usage_mode": "SINGLE",
+ "single_usage_info": {
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 20
+ }
+ },
+ "display_info": {
+ "name": "全场满100立打8折",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ]
+ },
+ "state": "EFFECTIVE",
+ "out_product_no": "Product_1234567890",
+ "stock": {
+ "product_coupon_id": "1000000013",
+ "stock_id": "1000000013001",
+ "remark": "8月工作日有效批次",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 0,
+ "available_count": 0
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-08-01T00:00:00+08:00",
+ "available_end_time": "2025-08-31T23:59:59+08:00",
+ "available_days": 30,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY",
+ "TUESDAY",
+ "WEDNESDAY",
+ "THURSDAY",
+ "FRIDAY"
+ ]
+ }
+ }
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "OFFLINE",
+ "MINI_PROGRAM",
+ "PAYMENT_CODE"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "usage_description": "工作日可用",
+ "coupon_available_store_info": {
+ "description": "所有门店可用,可使用小程序查看门店列表",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "NONE",
+ "sent_count_info": {
+ "total_count": 0,
+ "today_count": 0
+ },
+ "state": "SENDING",
+ "brand_id": "120344"
+ },
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponRequest.json
new file mode 100644
index 00000000..c70536de
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponRequest.json
@@ -0,0 +1,5 @@
+{
+ "out_request_no": "34657_20250101_123456",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponResponse.json
new file mode 100644
index 00000000..4f047ffc
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/DeactivateMarketingPartnerProductCouponResponse.json
@@ -0,0 +1,53 @@
+{
+ "product_coupon_id": "1002323",
+ "scope": "ALL",
+ "type": "NORMAL",
+ "usage_mode": "SEQUENTIAL",
+ "single_usage_info": {
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ },
+ "sequential_usage_info": {
+ "type": "EQUAL",
+ "count": 10,
+ "available_days": 10,
+ "interval_days": 1
+ },
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "out_product_no": "Product_1234567890",
+ "state": "AUDITING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-06-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下架",
+ "brand_id": "120344"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/GetMarketingPartnerProductCouponByProductCouponIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/GetMarketingPartnerProductCouponByProductCouponIdResponse.json
new file mode 100644
index 00000000..b16b16d1
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/GetMarketingPartnerProductCouponByProductCouponIdResponse.json
@@ -0,0 +1,53 @@
+{
+ "product_coupon_id": "1002323",
+ "scope": "ALL",
+ "type": "NORMAL",
+ "usage_mode": "SEQUENTIAL",
+ "single_usage_info": {
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ },
+ "sequential_usage_info": {
+ "type": "EQUAL",
+ "count": 10,
+ "available_days": 10,
+ "interval_days": 1
+ },
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "out_product_no": "Product_1234567890",
+ "state": "AUDITING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-06-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下架",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/GetMarketingPartnerProductCouponNotifyConfigResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/GetMarketingPartnerProductCouponNotifyConfigResponse.json
new file mode 100644
index 00000000..186c9db8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/GetMarketingPartnerProductCouponNotifyConfigResponse.json
@@ -0,0 +1,4 @@
+{
+ "notify_url": "https://www.example.com/notify",
+ "update_time": "2025-01-01T00:00+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigRequest.json
new file mode 100644
index 00000000..294d2b0a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigRequest.json
@@ -0,0 +1,3 @@
+{
+ "notify_url": "https://www.example.com/notify"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigResponse.json
new file mode 100644
index 00000000..186c9db8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/NotifyConfigs/UpdateMarketingPartnerProductCouponNotifyConfigResponse.json
@@ -0,0 +1,4 @@
+{
+ "notify_url": "https://www.example.com/notify",
+ "update_time": "2025-01-01T00:00+08:00"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockRequest.json
new file mode 100644
index 00000000..b7f2e276
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockRequest.json
@@ -0,0 +1,129 @@
+{
+ "out_request_no": "34657_20250101_123456",
+ "stock": {
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC"
+ },
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockResponse.json
new file mode 100644
index 00000000..98d39da2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/CreateMarketingPartnerProductCouponStockResponse.json
@@ -0,0 +1,140 @@
+{
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockRequest.json
new file mode 100644
index 00000000..c70536de
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockRequest.json
@@ -0,0 +1,5 @@
+{
+ "out_request_no": "34657_20250101_123456",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockResponse.json
new file mode 100644
index 00000000..98d39da2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/DeactivateMarketingPartnerProductCouponStockResponse.json
@@ -0,0 +1,140 @@
+{
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/GetMarketingPartnerProductCouponStockByStockIdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/GetMarketingPartnerProductCouponStockByStockIdResponse.json
new file mode 100644
index 00000000..98d39da2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/GetMarketingPartnerProductCouponStockByStockIdResponse.json
@@ -0,0 +1,140 @@
+{
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/QueryMarketingPartnerProductCouponStocksResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/QueryMarketingPartnerProductCouponStocksResponse.json
new file mode 100644
index 00000000..f4b14a63
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/QueryMarketingPartnerProductCouponStocksResponse.json
@@ -0,0 +1,146 @@
+{
+ "total_count": 100,
+ "stock_list": [
+ {
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+ }
+ ],
+ "next_page_token": "MTIzNDUK"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresRequest.json
new file mode 100644
index 00000000..fa5d557c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresRequest.json
@@ -0,0 +1,8 @@
+{
+ "store_list": [
+ {
+ "store_id": "100000001"
+ }
+ ],
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresResponse.json
new file mode 100644
index 00000000..12b9a5e8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/AssociateMarketingPartnerProductCouponStockToStoresResponse.json
@@ -0,0 +1,15 @@
+{
+ "total_count": 10,
+ "success_store_list": [
+ {
+ "store_id": "100000001"
+ }
+ ],
+ "failed_store_list": [
+ {
+ "store_id": "100000001",
+ "code": "INVALID_REQUEST",
+ "message": "门店ID非法或不属于当前品牌"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresRequest.json
new file mode 100644
index 00000000..fa5d557c
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresRequest.json
@@ -0,0 +1,8 @@
+{
+ "store_list": [
+ {
+ "store_id": "100000001"
+ }
+ ],
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresResponse.json
new file mode 100644
index 00000000..12b9a5e8
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/DisassociateMarketingPartnerProductCouponStockFromStoresResponse.json
@@ -0,0 +1,15 @@
+{
+ "total_count": 10,
+ "success_store_list": [
+ {
+ "store_id": "100000001"
+ }
+ ],
+ "failed_store_list": [
+ {
+ "store_id": "100000001",
+ "code": "INVALID_REQUEST",
+ "message": "门店ID非法或不属于当前品牌"
+ }
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/QueryMarketingPartnerProductCouponStockAssociatedStoresResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/QueryMarketingPartnerProductCouponStockAssociatedStoresResponse.json
new file mode 100644
index 00000000..ef8b7bc3
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/Stores/QueryMarketingPartnerProductCouponStockAssociatedStoresResponse.json
@@ -0,0 +1,9 @@
+{
+ "total_count": 500,
+ "store_list": [
+ {
+ "store_id": "100000001"
+ }
+ ],
+ "next_page_token": "MTIzNDUK"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetRequest.json
new file mode 100644
index 00000000..0c5f1f32
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetRequest.json
@@ -0,0 +1,9 @@
+{
+ "out_request_no": "BUDGET1212512514",
+ "update_mode": "MAX_COUNT",
+ "current_max_count": 1,
+ "target_max_count": 1,
+ "current_max_count_per_day": 1,
+ "target_max_count_per_day": 1,
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetResponse.json
new file mode 100644
index 00000000..98d39da2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockBudgetResponse.json
@@ -0,0 +1,140 @@
+{
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockRequest.json
new file mode 100644
index 00000000..6b634674
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockRequest.json
@@ -0,0 +1,41 @@
+{
+ "out_request_no": "34657_20250101_123456",
+ "remark": "疯狂星期四项目专用",
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockResponse.json
new file mode 100644
index 00000000..98d39da2
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UpdateMarketingPartnerProductCouponStockResponse.json
@@ -0,0 +1,140 @@
+{
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesRequest.json
new file mode 100644
index 00000000..88936f40
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesRequest.json
@@ -0,0 +1,7 @@
+{
+ "out_request_no": "34657_20250101_123456",
+ "code_list": [
+ "vCode_1234567890"
+ ],
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesResponse.json
new file mode 100644
index 00000000..64142e60
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/Stocks/UploadMarketingPartnerProductCouponStockCouponCodesResponse.json
@@ -0,0 +1,19 @@
+{
+ "total_count": 1,
+ "success_code_list": [
+ "vCode_8888888888"
+ ],
+ "failed_code_list": [
+ {
+ "coupon_code": "vCode_1234567890",
+ "code": "SYSTEM_ERROR",
+ "message": "系统失败"
+ }
+ ],
+ "already_exist_code_list": [
+ "vCode_1111111111"
+ ],
+ "duplicate_code_list": [
+ "vCode_8888888888"
+ ]
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponRequest.json
new file mode 100644
index 00000000..8bcc0906
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponRequest.json
@@ -0,0 +1,29 @@
+{
+ "out_request_no": "34657_20250101_123456",
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponResponse.json
new file mode 100644
index 00000000..b16b16d1
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UpdateMarketingPartnerProductCouponResponse.json
@@ -0,0 +1,53 @@
+{
+ "product_coupon_id": "1002323",
+ "scope": "ALL",
+ "type": "NORMAL",
+ "usage_mode": "SEQUENTIAL",
+ "single_usage_info": {
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ },
+ "sequential_usage_info": {
+ "type": "EQUAL",
+ "count": 10,
+ "available_days": 10,
+ "interval_days": 1
+ },
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "out_product_no": "Product_1234567890",
+ "state": "AUDITING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-06-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下架",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageRequest.json
new file mode 100644
index 00000000..ef5c1127
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageRequest.json
@@ -0,0 +1,4 @@
+{
+ "filename": "header.jpg",
+ "sha256": "6aa6c99ce1d04afc2668154126c607af5a680734fa119e2a096529f6d6f2c0a2"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageResponse.json
new file mode 100644
index 00000000..4df8af3a
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UploadMarketingPartnerProductCouponMediaImageResponse.json
@@ -0,0 +1,3 @@
+{
+ "image_url": "https://qpic.cn/xxx"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponRequest.json
new file mode 100644
index 00000000..8858fd5d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponRequest.json
@@ -0,0 +1,7 @@
+{
+ "product_coupon_id": "1002323",
+ "stock_id": "100232301",
+ "appid": "wx233544546545989",
+ "out_request_no": "MCHCONFIRM202003101234",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponResponse.json
new file mode 100644
index 00000000..8f861e6d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ConfirmMarketingPartnerProductCouponUserCouponResponse.json
@@ -0,0 +1,252 @@
+{
+ "coupon_code": "123446565767",
+ "coupon_state": "USED",
+ "valid_begin_time": "2025-01-01T00:00+08:00",
+ "valid_end_time": "2025-01-30T23:59:59+08:00",
+ "receive_time": "2025-01-01T09:10:00+08:00",
+ "send_request_no": "MCHSEND202003101234",
+ "send_channel": "API",
+ "confirm_request_no": "MCHCONFIRM202003101234",
+ "confirm_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下线",
+ "single_usage_detail": {
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00"
+ },
+ "sequential_usage_detail": {
+ "total_count": 10,
+ "used_count": 3,
+ "detail_item_list": [
+ {
+ "detail_state": "USED",
+ "valid_begin_time": "2025-07-24T00:00+08:00",
+ "valid_end_time": "2025-07-30T23:59:59+08:00",
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00",
+ "delete_time": "2025-07-20T14:29:35+08:00"
+ }
+ ]
+ },
+ "product_coupon": {
+ "product_coupon_id": "1002323",
+ "scope": "ALL",
+ "type": "NORMAL",
+ "usage_mode": "SEQUENTIAL",
+ "single_usage_info": {
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ },
+ "sequential_usage_info": {
+ "type": "EQUAL",
+ "count": 10,
+ "available_days": 10,
+ "interval_days": 1
+ },
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "out_product_no": "Product_1234567890",
+ "state": "AUDITING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-06-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下架",
+ "brand_id": "120344"
+ },
+ "stock": {
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+ },
+ "attach": "example_attach",
+ "channel_custom_info": "example_channel_custom_info",
+ "brand_id": "120344",
+ "coupon_tag_info": {
+ "coupon_tag_list": [
+ "MEMBER"
+ ],
+ "member_tag_info": {
+ "member_card_id": "MemberCardId_1234567890"
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponRequest.json
new file mode 100644
index 00000000..fe183a26
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponRequest.json
@@ -0,0 +1,8 @@
+{
+ "product_coupon_id": "1002323",
+ "stock_id": "100232301",
+ "appid": "wx233544546545989",
+ "out_request_no": "1002600620019090123144054436",
+ "deactivate_reason": "商品已下线,使用户商品券失效",
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponResponse.json
new file mode 100644
index 00000000..8f861e6d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/DeactivateMarketingPartnerProductCouponUserCouponResponse.json
@@ -0,0 +1,252 @@
+{
+ "coupon_code": "123446565767",
+ "coupon_state": "USED",
+ "valid_begin_time": "2025-01-01T00:00+08:00",
+ "valid_end_time": "2025-01-30T23:59:59+08:00",
+ "receive_time": "2025-01-01T09:10:00+08:00",
+ "send_request_no": "MCHSEND202003101234",
+ "send_channel": "API",
+ "confirm_request_no": "MCHCONFIRM202003101234",
+ "confirm_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下线",
+ "single_usage_detail": {
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00"
+ },
+ "sequential_usage_detail": {
+ "total_count": 10,
+ "used_count": 3,
+ "detail_item_list": [
+ {
+ "detail_state": "USED",
+ "valid_begin_time": "2025-07-24T00:00+08:00",
+ "valid_end_time": "2025-07-30T23:59:59+08:00",
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00",
+ "delete_time": "2025-07-20T14:29:35+08:00"
+ }
+ ]
+ },
+ "product_coupon": {
+ "product_coupon_id": "1002323",
+ "scope": "ALL",
+ "type": "NORMAL",
+ "usage_mode": "SEQUENTIAL",
+ "single_usage_info": {
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ },
+ "sequential_usage_info": {
+ "type": "EQUAL",
+ "count": 10,
+ "available_days": 10,
+ "interval_days": 1
+ },
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "out_product_no": "Product_1234567890",
+ "state": "AUDITING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-06-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下架",
+ "brand_id": "120344"
+ },
+ "stock": {
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+ },
+ "attach": "example_attach",
+ "channel_custom_info": "example_channel_custom_info",
+ "brand_id": "120344",
+ "coupon_tag_info": {
+ "coupon_tag_list": [
+ "MEMBER"
+ ],
+ "member_tag_info": {
+ "member_card_id": "MemberCardId_1234567890"
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse.json
new file mode 100644
index 00000000..8f861e6d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/GetMarketingPartnerProductCouponUserCouponByCouponCodeResponse.json
@@ -0,0 +1,252 @@
+{
+ "coupon_code": "123446565767",
+ "coupon_state": "USED",
+ "valid_begin_time": "2025-01-01T00:00+08:00",
+ "valid_end_time": "2025-01-30T23:59:59+08:00",
+ "receive_time": "2025-01-01T09:10:00+08:00",
+ "send_request_no": "MCHSEND202003101234",
+ "send_channel": "API",
+ "confirm_request_no": "MCHCONFIRM202003101234",
+ "confirm_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下线",
+ "single_usage_detail": {
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00"
+ },
+ "sequential_usage_detail": {
+ "total_count": 10,
+ "used_count": 3,
+ "detail_item_list": [
+ {
+ "detail_state": "USED",
+ "valid_begin_time": "2025-07-24T00:00+08:00",
+ "valid_end_time": "2025-07-30T23:59:59+08:00",
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00",
+ "delete_time": "2025-07-20T14:29:35+08:00"
+ }
+ ]
+ },
+ "product_coupon": {
+ "product_coupon_id": "1002323",
+ "scope": "ALL",
+ "type": "NORMAL",
+ "usage_mode": "SEQUENTIAL",
+ "single_usage_info": {
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ },
+ "sequential_usage_info": {
+ "type": "EQUAL",
+ "count": 10,
+ "available_days": 10,
+ "interval_days": 1
+ },
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "out_product_no": "Product_1234567890",
+ "state": "AUDITING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-06-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下架",
+ "brand_id": "120344"
+ },
+ "stock": {
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+ },
+ "attach": "example_attach",
+ "channel_custom_info": "example_channel_custom_info",
+ "brand_id": "120344",
+ "coupon_tag_info": {
+ "coupon_tag_list": [
+ "MEMBER"
+ ],
+ "member_tag_info": {
+ "member_card_id": "MemberCardId_1234567890"
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/QueryMarketingPartnerProductCouponUserCouponsResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/QueryMarketingPartnerProductCouponUserCouponsResponse.json
new file mode 100644
index 00000000..0a2a4e69
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/QueryMarketingPartnerProductCouponUserCouponsResponse.json
@@ -0,0 +1,258 @@
+{
+ "total_count": 20,
+ "user_coupon_list": [
+ {
+ "coupon_code": "123446565767",
+ "coupon_state": "USED",
+ "valid_begin_time": "2025-01-01T00:00+08:00",
+ "valid_end_time": "2025-01-30T23:59:59+08:00",
+ "receive_time": "2025-01-01T09:10:00+08:00",
+ "send_request_no": "MCHSEND202003101234",
+ "send_channel": "API",
+ "confirm_request_no": "MCHCONFIRM202003101234",
+ "confirm_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下线",
+ "single_usage_detail": {
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00"
+ },
+ "sequential_usage_detail": {
+ "total_count": 10,
+ "used_count": 3,
+ "detail_item_list": [
+ {
+ "detail_state": "USED",
+ "valid_begin_time": "2025-07-24T00:00+08:00",
+ "valid_end_time": "2025-07-30T23:59:59+08:00",
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00",
+ "delete_time": "2025-07-20T14:29:35+08:00"
+ }
+ ]
+ },
+ "product_coupon": {
+ "product_coupon_id": "1002323",
+ "scope": "ALL",
+ "type": "NORMAL",
+ "usage_mode": "SEQUENTIAL",
+ "single_usage_info": {
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ },
+ "sequential_usage_info": {
+ "type": "EQUAL",
+ "count": 10,
+ "available_days": 10,
+ "interval_days": 1
+ },
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "out_product_no": "Product_1234567890",
+ "state": "AUDITING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-06-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下架",
+ "brand_id": "120344"
+ },
+ "stock": {
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+ },
+ "attach": "example_attach",
+ "channel_custom_info": "example_channel_custom_info",
+ "brand_id": "120344",
+ "coupon_tag_info": {
+ "coupon_tag_list": [
+ "MEMBER"
+ ],
+ "member_tag_info": {
+ "member_card_id": "MemberCardId_1234567890"
+ }
+ }
+ }
+ ],
+ "next_page_token": "MTIzNDUK"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponRequest.json
new file mode 100644
index 00000000..a87df88d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponRequest.json
@@ -0,0 +1,8 @@
+{
+ "product_coupon_id": "1002323",
+ "stock_id": "100232301",
+ "appid": "wx233544546545989",
+ "out_request_no": "MCHRETURN202003101234",
+ "sequential_coupon_index": 0,
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponResponse.json
new file mode 100644
index 00000000..8f861e6d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/ReturnMarketingPartnerProductCouponUserCouponResponse.json
@@ -0,0 +1,252 @@
+{
+ "coupon_code": "123446565767",
+ "coupon_state": "USED",
+ "valid_begin_time": "2025-01-01T00:00+08:00",
+ "valid_end_time": "2025-01-30T23:59:59+08:00",
+ "receive_time": "2025-01-01T09:10:00+08:00",
+ "send_request_no": "MCHSEND202003101234",
+ "send_channel": "API",
+ "confirm_request_no": "MCHCONFIRM202003101234",
+ "confirm_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下线",
+ "single_usage_detail": {
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00"
+ },
+ "sequential_usage_detail": {
+ "total_count": 10,
+ "used_count": 3,
+ "detail_item_list": [
+ {
+ "detail_state": "USED",
+ "valid_begin_time": "2025-07-24T00:00+08:00",
+ "valid_end_time": "2025-07-30T23:59:59+08:00",
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00",
+ "delete_time": "2025-07-20T14:29:35+08:00"
+ }
+ ]
+ },
+ "product_coupon": {
+ "product_coupon_id": "1002323",
+ "scope": "ALL",
+ "type": "NORMAL",
+ "usage_mode": "SEQUENTIAL",
+ "single_usage_info": {
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ },
+ "sequential_usage_info": {
+ "type": "EQUAL",
+ "count": 10,
+ "available_days": 10,
+ "interval_days": 1
+ },
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "out_product_no": "Product_1234567890",
+ "state": "AUDITING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-06-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下架",
+ "brand_id": "120344"
+ },
+ "stock": {
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+ },
+ "attach": "example_attach",
+ "channel_custom_info": "example_channel_custom_info",
+ "brand_id": "120344",
+ "coupon_tag_info": {
+ "coupon_tag_list": [
+ "MEMBER"
+ ],
+ "member_tag_info": {
+ "member_card_id": "MemberCardId_1234567890"
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponRequest.json
new file mode 100644
index 00000000..9d283289
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponRequest.json
@@ -0,0 +1,17 @@
+{
+ "product_coupon_id": "200000001",
+ "stock_id": "100232301",
+ "coupon_code": "123446565767",
+ "appid": "wx233544546545989",
+ "send_request_no": "34657_20250101_123456",
+ "attach": "example_attach",
+ "brand_id": "120344",
+ "coupon_tag_info": {
+ "coupon_tag_list": [
+ "MEMBER"
+ ],
+ "member_tag_info": {
+ "member_card_id": "MemberCardId_1234567890"
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponResponse.json
new file mode 100644
index 00000000..8f861e6d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/SendMarketingPartnerProductCouponUserCouponResponse.json
@@ -0,0 +1,252 @@
+{
+ "coupon_code": "123446565767",
+ "coupon_state": "USED",
+ "valid_begin_time": "2025-01-01T00:00+08:00",
+ "valid_end_time": "2025-01-30T23:59:59+08:00",
+ "receive_time": "2025-01-01T09:10:00+08:00",
+ "send_request_no": "MCHSEND202003101234",
+ "send_channel": "API",
+ "confirm_request_no": "MCHCONFIRM202003101234",
+ "confirm_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下线",
+ "single_usage_detail": {
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00"
+ },
+ "sequential_usage_detail": {
+ "total_count": 10,
+ "used_count": 3,
+ "detail_item_list": [
+ {
+ "detail_state": "USED",
+ "valid_begin_time": "2025-07-24T00:00+08:00",
+ "valid_end_time": "2025-07-30T23:59:59+08:00",
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00",
+ "delete_time": "2025-07-20T14:29:35+08:00"
+ }
+ ]
+ },
+ "product_coupon": {
+ "product_coupon_id": "1002323",
+ "scope": "ALL",
+ "type": "NORMAL",
+ "usage_mode": "SEQUENTIAL",
+ "single_usage_info": {
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ },
+ "sequential_usage_info": {
+ "type": "EQUAL",
+ "count": 10,
+ "available_days": 10,
+ "interval_days": 1
+ },
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "out_product_no": "Product_1234567890",
+ "state": "AUDITING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-06-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下架",
+ "brand_id": "120344"
+ },
+ "stock": {
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+ },
+ "attach": "example_attach",
+ "channel_custom_info": "example_channel_custom_info",
+ "brand_id": "120344",
+ "coupon_tag_info": {
+ "coupon_tag_list": [
+ "MEMBER"
+ ],
+ "member_tag_info": {
+ "member_card_id": "MemberCardId_1234567890"
+ }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponRequest.json
new file mode 100644
index 00000000..8e31e69e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponRequest.json
@@ -0,0 +1,15 @@
+{
+ "product_coupon_id": "1002323",
+ "stock_id": "100232301",
+ "appid": "wx233544546545989",
+ "use_time": "2025-07-24T00:00+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "out_request_no": "MCHUSE202003101234",
+ "sequential_coupon_index": 0,
+ "brand_id": "120344"
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponResponse.json
new file mode 100644
index 00000000..8f861e6d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/_Partner/MarketingPartnerProductCoupon/UserCoupons/UseMarketingPartnerProductCouponUserCouponResponse.json
@@ -0,0 +1,252 @@
+{
+ "coupon_code": "123446565767",
+ "coupon_state": "USED",
+ "valid_begin_time": "2025-01-01T00:00+08:00",
+ "valid_end_time": "2025-01-30T23:59:59+08:00",
+ "receive_time": "2025-01-01T09:10:00+08:00",
+ "send_request_no": "MCHSEND202003101234",
+ "send_channel": "API",
+ "confirm_request_no": "MCHCONFIRM202003101234",
+ "confirm_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下线",
+ "single_usage_detail": {
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00"
+ },
+ "sequential_usage_detail": {
+ "total_count": 10,
+ "used_count": 3,
+ "detail_item_list": [
+ {
+ "detail_state": "USED",
+ "valid_begin_time": "2025-07-24T00:00+08:00",
+ "valid_end_time": "2025-07-30T23:59:59+08:00",
+ "use_request_no": "MCHUSE202003101234",
+ "use_time": "2025-07-20T13:29:35+08:00",
+ "associated_order_info": {
+ "transaction_id": "4200000000123456789123456789",
+ "out_trade_no": "trade_no_20250724123456",
+ "mchid": "1234567890",
+ "sub_mchid": "1234567890"
+ },
+ "return_request_no": "MCHRETURN202003101234",
+ "return_time": "2025-07-20T14:29:35+08:00",
+ "delete_time": "2025-07-20T14:29:35+08:00"
+ }
+ ]
+ },
+ "product_coupon": {
+ "product_coupon_id": "1002323",
+ "scope": "ALL",
+ "type": "NORMAL",
+ "usage_mode": "SEQUENTIAL",
+ "single_usage_info": {
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ },
+ "sequential_usage_info": {
+ "type": "EQUAL",
+ "count": 10,
+ "available_days": 10,
+ "interval_days": 1
+ },
+ "display_info": {
+ "name": "全场满100可减10元",
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "background_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "detail_image_url_list": [
+ "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ ],
+ "original_price": 10000,
+ "combo_package_list": [
+ {
+ "name": "咖啡2选1",
+ "pick_count": 3,
+ "choice_list": [
+ {
+ "name": "美式",
+ "price": 10000,
+ "count": 2,
+ "image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx",
+ "mini_program_appid": "wx4fd12345678",
+ "mini_program_path": "/pages/index/index"
+ }
+ ]
+ }
+ ]
+ },
+ "out_product_no": "Product_1234567890",
+ "state": "AUDITING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-06-20T13:29:35+08:00",
+ "deactivate_reason": "商品已下架",
+ "brand_id": "120344"
+ },
+ "stock": {
+ "product_coupon_id": "200000001",
+ "stock_id": "123456789",
+ "remark": "满减券",
+ "coupon_code_mode": "UPLOAD",
+ "coupon_code_count_info": {
+ "total_count": 10000,
+ "available_count": 999
+ },
+ "stock_send_rule": {
+ "max_count": 10000000,
+ "max_count_per_day": 10000,
+ "max_count_per_user": 1
+ },
+ "single_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "available_days": 10,
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon": {
+ "threshold": 10000,
+ "discount_amount": 100
+ },
+ "discount_coupon": {
+ "threshold": 10000,
+ "percent_off": 30
+ },
+ "exchange_coupon": {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ },
+ "sequential_usage_rule": {
+ "coupon_available_period": {
+ "available_begin_time": "2025-01-01T00:00:00+08:00",
+ "available_end_time": "2025-10-01T00:00:00+08:00",
+ "wait_days_after_receive": 1,
+ "weekly_available_period": {
+ "day_list": [
+ "MONDAY"
+ ],
+ "day_period_list": [
+ {
+ "begin_time": 60,
+ "end_time": 86399
+ }
+ ]
+ },
+ "irregular_available_period_list": [
+ {
+ "begin_time": "2025-01-01T00:00:00+08:00",
+ "end_time": "2025-10-01T00:00:00+08:00"
+ }
+ ]
+ },
+ "normal_coupon_list": [
+ {
+ "threshold": 10000,
+ "discount_amount": 100
+ }
+ ],
+ "discount_coupon_list": [
+ {
+ "threshold": 10000,
+ "percent_off": 30
+ }
+ ],
+ "exchange_coupon_list": [
+ {
+ "threshold": 10000,
+ "exchange_price": 100
+ }
+ ],
+ "special_first": false
+ },
+ "usage_rule_display_info": {
+ "coupon_usage_method_list": [
+ "MINI_PROGRAM"
+ ],
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/product",
+ "app_path": "https://www.example.com/jump-to-app",
+ "usage_description": "全场可用",
+ "coupon_available_store_info": {
+ "description": "可在上海市区的所有门店使用,详细列表参考小程序内信息为准",
+ "mini_program_appid": "wx1234567890",
+ "mini_program_path": "/pages/index/store-list"
+ }
+ },
+ "coupon_display_info": {
+ "code_display_mode": "QRCODE",
+ "background_color": "Color010",
+ "entrance_mini_program": {
+ "appid": "wx1234567890",
+ "path": "/pages/index/product",
+ "entrance_wording": "欢迎选购",
+ "guidance_wording": "获取更多优惠"
+ },
+ "entrance_official_account": {
+ "appid": "wx1234567890"
+ },
+ "entrance_finder": {
+ "finder_id": "gh_12345678",
+ "finder_video_id": "UDFsdf24df34dD456Hdf34",
+ "finder_video_cover_image_url": "https://wxpaylogo.qpic.cn/wxpaylogo/xxxxx/xxx"
+ }
+ },
+ "notify_config": {
+ "notify_appid": "wx4fd12345678"
+ },
+ "store_scope": "SPECIFIC",
+ "sent_count_info": {
+ "total_count": 100,
+ "today_count": 10
+ },
+ "state": "SENDING",
+ "deactivate_request_no": "1002600620019090123143254436",
+ "deactivate_time": "2025-01-01T00:00+08:00",
+ "deactivate_reason": "批次信息有误,重新创建",
+ "brand_id": "120344"
+ },
+ "attach": "example_attach",
+ "channel_custom_info": "example_channel_custom_info",
+ "brand_id": "120344",
+ "coupon_tag_info": {
+ "coupon_tag_list": [
+ "MEMBER"
+ ],
+ "member_tag_info": {
+ "member_card_id": "MemberCardId_1234567890"
+ }
+ }
+}