From d5aa9e3f2b4ce05404bbb14bdbd943d729f25cbe Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Wed, 24 Sep 2025 09:53:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(tenpayv3):=20=E6=96=B0=E5=A2=9E=E5=90=91?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=8F=91=E6=94=BE=E5=95=86=E5=93=81=E5=88=B8?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/WechatTenpayV3/Basic_ModelDefinition.md | 4 ++ ...ientExecuteMarketingBusifavorExtensions.cs | 23 ++++++++ ...dMarketingBusifavorProductCouponRequest.cs | 57 +++++++++++++++++++ ...MarketingBusifavorProductCouponResponse.cs | 42 ++++++++++++++ .../WechatTenpayClientOptions.cs | 2 +- ...arketingBusifavorProductCouponRequest.json | 9 +++ ...rketingBusifavorProductCouponResponse.json | 7 +++ 7 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponResponse.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponResponse.json diff --git a/docs/WechatTenpayV3/Basic_ModelDefinition.md b/docs/WechatTenpayV3/Basic_ModelDefinition.md index 05b32871..c1527176 100644 --- a/docs/WechatTenpayV3/Basic_ModelDefinition.md +++ b/docs/WechatTenpayV3/Basic_ModelDefinition.md @@ -403,6 +403,8 @@ - 图片上传:`UploadMerchantMediaImage` + - 向用户发放商品券:`SendMarketingBusifavorProductCoupon` + - 消费金 - 下载批次退款明细:`GetMultiuseStockRefundFlow` @@ -1189,6 +1191,8 @@ - 图片上传:`UploadMarketingMediaImage` + - 向用户发放商品券:`SendMarketingBusifavorProductCoupon` + - 委托营销 - 建立合作关系:`BuildMarketingPartnership` diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBusifavorExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBusifavorExtensions.cs index 324cebfa..9c78f52f 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBusifavorExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBusifavorExtensions.cs @@ -473,5 +473,28 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); } + + /// + /// 异步调用 [POST] /marketing/busifavor/product-coupons/send 接口。 + /// + /// REF:
+ ///
+ /// + ///
+ ///
+ /// + /// + /// + /// + public static async Task ExecuteSendMarketingBusifavorProductCouponAsync(this WechatTenpayClient client, Models.SendMarketingBusifavorProductCouponRequest 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", "busifavor", "product-coupons", "send"); + + return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponRequest.cs new file mode 100644 index 00000000..0bdffc0a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponRequest.cs @@ -0,0 +1,57 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/busifavor/product-coupons/send 接口的请求。 + /// + public class SendMarketingBusifavorProductCouponRequest : WechatTenpayRequest + { + /// + /// 获取或设置会员卡 ID。 + /// + [Newtonsoft.Json.JsonProperty("member_card_id")] + [System.Text.Json.Serialization.JsonPropertyName("member_card_id")] + public string? MemberCardId { get; set; } + + /// + /// 获取或设置微信 AppId。 + /// + [Newtonsoft.Json.JsonProperty("appid")] + [System.Text.Json.Serialization.JsonPropertyName("appid")] + public string AppId { get; set; } = string.Empty; + + /// + /// 获取或设置用户唯一标识。 + /// + [Newtonsoft.Json.JsonProperty("openid")] + [System.Text.Json.Serialization.JsonPropertyName("openid")] + public string OpenId { get; set; } = string.Empty; + + /// + /// 获取或设置批次号。 + /// + [Newtonsoft.Json.JsonProperty("stock_id")] + [System.Text.Json.Serialization.JsonPropertyName("stock_id")] + public string StockId { 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; + + /// + /// 获取或设置商家券 Code。 + /// + [Newtonsoft.Json.JsonProperty("coupon_code")] + [System.Text.Json.Serialization.JsonPropertyName("coupon_code")] + public string? CouponCode { get; set; } + + /// + /// 获取或设置商家券类型。 + /// + [Newtonsoft.Json.JsonProperty("coupon_type")] + [System.Text.Json.Serialization.JsonPropertyName("coupon_type")] + public string? CouponType { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponResponse.cs new file mode 100644 index 00000000..d7661ea0 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Models/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponResponse.cs @@ -0,0 +1,42 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Models +{ + /// + /// 表示 [POST] /marketing/busifavor/product-coupons/send 接口的响应。 + /// + public class SendMarketingBusifavorProductCouponResponse : WechatTenpayResponse + { + public static class Types + { + public class Result + { + /// + /// 获取或设置批次号。 + /// + [Newtonsoft.Json.JsonProperty("stock_id")] + [System.Text.Json.Serialization.JsonPropertyName("stock_id")] + public string StockId { get; set; } = default!; + + /// + /// 获取或设置商户单据号。 + /// + [Newtonsoft.Json.JsonProperty("out_request_no")] + [System.Text.Json.Serialization.JsonPropertyName("out_request_no")] + public string OutRequestNumber { 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("send_coupon_result")] + [System.Text.Json.Serialization.JsonPropertyName("send_coupon_result")] + public Types.Result Result { get; set; } = default!; + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClientOptions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClientOptions.cs index 149a1bf6..603affe2 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClientOptions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClientOptions.cs @@ -76,7 +76,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// /// 获取或设置微信支付平台 API 认证方案回退开关。
/// 开启后会在验证签名时根据响应或回调中接收到的序列号自动推测使用哪种认证方案。
- /// 开启后会有一定的性能损耗,建议仅在灰度切换期间时开启,待切换进度为百分之百后请关闭。 + /// 开启后会有一定的性能损失,建议仅在灰度切换期间时开启,待切换进度为百分之百后请关闭。 /// /// 默认值:false /// diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponRequest.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponRequest.json new file mode 100644 index 00000000..0bfed400 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponRequest.json @@ -0,0 +1,9 @@ +{ + "openid": "xsd3434454567676", + "appid": "wx1234567889999", + "stock_id": "12312354", + "out_request_no": "2335465", + "coupon_code": "202007019999", + "coupon_type": "NORMAL", + "member_card_id": "pbLatjvWOibDc5-TBnbUk1pD12o0" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponResponse.json b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponResponse.json new file mode 100644 index 00000000..371f006a --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/ModelSamples/_/MarketingBusifavor/ProductCoupons/SendMarketingBusifavorProductCouponResponse.json @@ -0,0 +1,7 @@ +{ + "send_coupon_result": { + "stock_id": "1262260000000268", + "out_request_no": "2335465", + "coupon_code": "2312323" + } +}