diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionPromoterExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionPromoterExtensions.cs index 33abcfec..7a690b34 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionPromoterExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionPromoterExtensions.cs @@ -258,6 +258,26 @@ namespace SKIT.FlurlHttpClient.Wechat.Api return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + + /// + /// 异步调用 [POST] /union/promoter/product/parse_tag 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/access-guidelines/promoter/api/parse_tag.html + /// + /// + /// + /// + /// + public static async Task ExecuteUnionPromoterProductParseTagAsync(this WechatApiClient client, Models.UnionPromoterProductParseTagRequest 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 + .CreateRequest(request, HttpMethod.Post, "union", "promoter", "product", "parse_tag") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } #endregion #region OpenProduct diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductParseTagRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductParseTagRequest.cs new file mode 100644 index 00000000..ad169862 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductParseTagRequest.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /union/promoter/product/parse_tag 接口的请求。 + /// + public class UnionPromoterProductParseTagRequest : WechatApiRequest, IInferable + { + /// + /// 获取或设置商品推广 Tag 列表。 + /// + [Newtonsoft.Json.JsonProperty("tagList")] + [System.Text.Json.Serialization.JsonPropertyName("tagList")] + public IList TagList { get; set; } = new List(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductParseTagResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductParseTagResponse.cs new file mode 100644 index 00000000..abcacd42 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductParseTagResponse.cs @@ -0,0 +1,58 @@ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [POST] /union/promoter/product/parse_tag 接口的响应。 + /// + public class UnionPromoterProductParseTagResponse : WechatApiResponse + { + public static class Types + { + public class Tag + { + /// + /// 获取或设置商品 ID。 + /// + [Newtonsoft.Json.JsonProperty("productId")] + [System.Text.Json.Serialization.JsonPropertyName("productId")] + [System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)] + public long ProductId { get; set; } + + /// + /// 获取或设置商品来源。 + /// + [Newtonsoft.Json.JsonProperty("source")] + [System.Text.Json.Serialization.JsonPropertyName("source")] + public int Source { get; set; } + + /// + /// 获取或设置小商店 AppId。 + /// + [Newtonsoft.Json.JsonProperty("productAppid")] + [System.Text.Json.Serialization.JsonPropertyName("productAppid")] + public string AppId { get; set; } = default!; + + /// + /// 获取或设置错误码。 + /// + [Newtonsoft.Json.JsonProperty("errcode")] + [System.Text.Json.Serialization.JsonPropertyName("errcode")] + public int? ErrorCode { get; set; } + + /// + /// 获取或设置错误描述。 + /// + [Newtonsoft.Json.JsonProperty("errmsg")] + [System.Text.Json.Serialization.JsonPropertyName("errmsg")] + public string? ErrorMessage { get; set; } + } + } + + /// + /// 获取或设置商品推广 Tag 列表。 + /// + [Newtonsoft.Json.JsonProperty("tagList")] + [System.Text.Json.Serialization.JsonPropertyName("tagList")] + + public Types.Tag[] TagList { get; set; } = default!; + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductParseTagRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductParseTagRequest.json new file mode 100644 index 00000000..33b36f65 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductParseTagRequest.json @@ -0,0 +1,3 @@ +{ + "tagList": ["#小程序://好物精选/测试商品***/YcaJDQiDOFEFr5g"] +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductParseTagResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductParseTagResponse.json new file mode 100644 index 00000000..3159f825 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductParseTagResponse.json @@ -0,0 +1,11 @@ +{ + "errcode": 0, + "errmsg": "ok", + "tagList": [ + { + "productId": "523480", + "source": 1, + "productAppid": "wx645f5f855bf419" + } + ] +}