feat(wxapi): 新增微信小店联盟带货机构商品订阅相关接口

This commit is contained in:
Fu Diwei 2025-06-07 23:03:09 +08:00
parent dfc1d4e470
commit fa434f0ab1
13 changed files with 332 additions and 0 deletions

View File

@ -1232,6 +1232,29 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECCategoryAllResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [GET] /channels/ec/category/league/all 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/leagueheadsupplier/API/basic/category/getallcategory.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECCategoryLeagueAllResponse> ExecuteChannelsECCategoryLeagueAllAsync(this WechatApiClient client, Models.ChannelsECCategoryLeagueAllRequest 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, "channels", "ec", "category", "league", "all")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECCategoryLeagueAllResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/category/detail 接口。</para>
/// <para>
@ -2935,6 +2958,77 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
}
#endregion
#region ECLeague/HeadSupplier/Subscription
/// <summary>
/// <para>异步调用 [POST] /channels/ec/league/headsupplier/subscription/subscribe 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/leagueheadsupplier/API/hs_subscribe.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECLeagueHeadSupplierSubscriptionSubscribeResponse> ExecuteChannelsECLeagueHeadSupplierSubscriptionSubscribeAsync(this WechatApiClient client, Models.ChannelsECLeagueHeadSupplierSubscriptionSubscribeRequest 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, "channels", "ec", "league", "headsupplier", "subscription", "subscribe")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECLeagueHeadSupplierSubscriptionSubscribeResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/league/headsupplier/subscription/unsubscribe 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/leagueheadsupplier/API/hs_unsubscribe.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECLeagueHeadSupplierSubscriptionUnsubscribeResponse> ExecuteChannelsECLeagueHeadSupplierSubscriptionUnsubscribeAsync(this WechatApiClient client, Models.ChannelsECLeagueHeadSupplierSubscriptionUnsubscribeRequest 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, "channels", "ec", "league", "headsupplier", "subscription", "unsubscribe")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECLeagueHeadSupplierSubscriptionUnsubscribeResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/league/headsupplier/subscription/getsubscribe 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developers.weixin.qq.com/doc/store/leagueheadsupplier/API/hs_getsubscribe.html ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECLeagueHeadSupplierSubscriptionGetSubscribeResponse> ExecuteChannelsECLeagueHeadSupplierSubscriptionGetSubscribeAsync(this WechatApiClient client, Models.ChannelsECLeagueHeadSupplierSubscriptionGetSubscribeRequest 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, "channels", "ec", "league", "headsupplier", "subscription", "getsubscribe")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.ChannelsECLeagueHeadSupplierSubscriptionGetSubscribeResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region ECLeague/HeadSupplier/Window
/// <summary>
/// <para>异步调用 [POST] /channels/ec/league/headsupplier/window/add 接口。</para>

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [GET] /channels/ec/category/league/all 接口的请求。</para>
/// </summary>
public class ChannelsECCategoryLeagueAllRequest : WechatApiRequest, IInferable<ChannelsECCategoryLeagueAllRequest, ChannelsECCategoryLeagueAllResponse>
{
}
}

View File

@ -0,0 +1,32 @@
using System;
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [GET] /channels/ec/category/league/all 接口的响应。</para>
/// </summary>
public class ChannelsECCategoryLeagueAllResponse : WechatApiResponse
{
public static class Types
{
public class Category : ChannelsECCategoryAllResponse.Types.Category
{
}
}
/// <summary>
/// 获取或设置类目列表。
/// </summary>
[Obsolete("相关接口或字段于 2024-10-28 下线。")]
[Newtonsoft.Json.JsonProperty("cats")]
[System.Text.Json.Serialization.JsonPropertyName("cats")]
public Types.Category[] CategoryList { get; set; } = default!;
/// <summary>
/// 获取或设置新版类目列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("cats_v2")]
[System.Text.Json.Serialization.JsonPropertyName("cats_v2")]
public Types.Category[] CategoryV2List { get; set; } = default!;
}
}

View File

@ -0,0 +1,64 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/subscription/getsubscribe 接口的请求。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierSubscriptionGetSubscribeRequest : WechatApiRequest, IInferable<ChannelsECLeagueHeadSupplierSubscriptionGetSubscribeRequest, ChannelsECLeagueHeadSupplierSubscriptionGetSubscribeResponse>
{
public static class Types
{
public class Filter
{
/// <summary>
/// 获取或设置小店 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string? ShopAppId { get; set; }
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long? ProductId { get; set; }
/// <summary>
/// 获取或设置商品名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_name")]
[System.Text.Json.Serialization.JsonPropertyName("product_name")]
public string? ProductName { get; set; }
}
}
/// <summary>
/// 获取或设置筛选条件。
/// </summary>
[Newtonsoft.Json.JsonProperty("filter")]
[System.Text.Json.Serialization.JsonPropertyName("filter")]
public Types.Filter? Filter { get; set; }
/// <summary>
/// 获取或设置分页每页数量。
/// <para>默认值10</para>
/// </summary>
[Newtonsoft.Json.JsonProperty("page_size")]
[System.Text.Json.Serialization.JsonPropertyName("page_size")]
public int Limit { get; set; } = 10;
/// <summary>
/// 获取或设置翻页标记。
/// </summary>
[Newtonsoft.Json.JsonProperty("next_key")]
[System.Text.Json.Serialization.JsonPropertyName("next_key")]
public string? Cursor { get; set; }
/// <summary>
/// 获取或设置是否返回总数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("need_total_num")]
[System.Text.Json.Serialization.JsonPropertyName("need_total_num")]
public bool? RequireTotalCount { get; set; }
}
}

View File

@ -0,0 +1,56 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/subscription/getsubscribe 接口的响应。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierSubscriptionGetSubscribeResponse : WechatApiResponse
{
public static class Types
{
public class SubscribeInfo
{
/// <summary>
/// 获取或设置小店 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("shop_appid")]
[System.Text.Json.Serialization.JsonPropertyName("shop_appid")]
public string ShopAppId { get; set; } = default!;
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
}
}
/// <summary>
/// 获取或设置订阅的商品信息列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("subscribe_info_list")]
[System.Text.Json.Serialization.JsonPropertyName("subscribe_info_list")]
public Types.SubscribeInfo[] SubscribeInfoList { get; set; } = default!;
/// <summary>
/// 获取或设置总数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_num")]
[System.Text.Json.Serialization.JsonPropertyName("total_num")]
public int? TotalCount { get; set; }
/// <summary>
/// 获取或设置翻页标记。
/// </summary>
[Newtonsoft.Json.JsonProperty("next_key")]
[System.Text.Json.Serialization.JsonPropertyName("next_key")]
public string? NextCursor { get; set; }
/// <summary>
/// 获取或设置是否还有更多。
/// </summary>
[Newtonsoft.Json.JsonProperty("has_more")]
[System.Text.Json.Serialization.JsonPropertyName("has_more")]
public bool HasMore { get; set; }
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/subscription/subscribe 接口的请求。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierSubscriptionSubscribeRequest : WechatApiRequest, IInferable<ChannelsECLeagueHeadSupplierSubscriptionSubscribeRequest, ChannelsECLeagueHeadSupplierSubscriptionSubscribeResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/subscription/subscribe 接口的响应。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierSubscriptionSubscribeResponse : WechatApiResponse
{
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/subscription/unsubscribe 接口的请求。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierSubscriptionUnsubscribeRequest : WechatApiRequest, IInferable<ChannelsECLeagueHeadSupplierSubscriptionUnsubscribeRequest, ChannelsECLeagueHeadSupplierSubscriptionUnsubscribeResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/subscription/unsubscribe 接口的响应。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierSubscriptionUnsubscribeResponse : WechatApiResponse
{
}
}

View File

@ -0,0 +1,10 @@
{
"filter": {
"product_id": 10000207528058,
"product_name": "",
"appid": ""
},
"page_size": 20,
"next_key": "",
"need_total_num": true
}

View File

@ -0,0 +1,13 @@
{
"errcode": 0,
"errmsg": "ok",
"subscribe_info_list": [
{
"product_id": 10000207528058,
"shop_appid": "wx2b255582a7b4bfd0"
}
],
"total_num": 0,
"next_key": "",
"has_more": false
}