feat(wxapi): 新增视频号小店团长合作达人管理相关接口

This commit is contained in:
Fu Diwei 2023-03-29 10:37:37 +08:00
parent d9b1908cf8
commit 24366c108d
24 changed files with 622 additions and 1 deletions

View File

@ -2041,6 +2041,130 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
return await client.SendRequestWithJsonAsync<Models.ChannelsECLeagueItemListGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
#region ECLeague/HeadSupplier
#region ECLeague/HeadSupplier/Window
/// <summary>
/// <para>异步调用 [POST] /channels/ec/league/headsupplier/window/add 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/windowproduct/add.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECLeagueHeadSupplierWindowAddResponse> ExecuteChannelsECLeagueHeadSupplierWindowAddAsync(this WechatApiClient client, Models.ChannelsECLeagueHeadSupplierWindowAddRequest 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, "channels", "ec", "league", "headsupplier", "window", "add")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.ChannelsECLeagueHeadSupplierWindowAddResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/league/headsupplier/window/remove 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/leagueheadsupplier/removewindow.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECLeagueHeadSupplierWindowRemoveResponse> ExecuteChannelsECLeagueHeadSupplierWindowRemoveAsync(this WechatApiClient client, Models.ChannelsECLeagueHeadSupplierWindowRemoveRequest 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, "channels", "ec", "league", "headsupplier", "window", "remove")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.ChannelsECLeagueHeadSupplierWindowRemoveResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/league/headsupplier/window/getall 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/leagueheadsupplier/getallwindow.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECLeagueHeadSupplierWindowGetAllResponse> ExecuteChannelsECLeagueHeadSupplierWindowGetAllAsync(this WechatApiClient client, Models.ChannelsECLeagueHeadSupplierWindowGetAllRequest 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, "channels", "ec", "league", "headsupplier", "window", "getall")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.ChannelsECLeagueHeadSupplierWindowGetAllResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/league/headsupplier/window/getdetail 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/leagueheadsupplier/getwindowdetail.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECLeagueHeadSupplierWindowGetDetailResponse> ExecuteChannelsECLeagueHeadSupplierWindowGetDetailAsync(this WechatApiClient client, Models.ChannelsECLeagueHeadSupplierWindowGetDetailRequest 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, "channels", "ec", "league", "headsupplier", "window", "getdetail")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.ChannelsECLeagueHeadSupplierWindowGetDetailResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/league/headsupplier/windowauth/get 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/leagueheadsupplier/getauth.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECLeagueHeadSupplierWindowAuthGetResponse> ExecuteChannelsECLeagueHeadSupplierWindowAuthGetAsync(this WechatApiClient client, Models.ChannelsECLeagueHeadSupplierWindowAuthGetRequest 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, "channels", "ec", "league", "headsupplier", "windowauth", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.ChannelsECLeagueHeadSupplierWindowAuthGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /channels/ec/league/headsupplier/windowauth/status/get 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/channels/API/leagueheadsupplier/getauthstatus.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.ChannelsECLeagueHeadSupplierWindowAuthStatusGetResponse> ExecuteChannelsECLeagueHeadSupplierWindowAuthStatusGetAsync(this WechatApiClient client, Models.ChannelsECLeagueHeadSupplierWindowAuthStatusGetRequest 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, "channels", "ec", "league", "headsupplier", "windowauth", "status", "get")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendRequestWithJsonAsync<Models.ChannelsECLeagueHeadSupplierWindowAuthStatusGetResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
#endregion
#endregion
#region ECWindow

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/windowauth/get 接口的请求。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierWindowAuthGetRequest : WechatApiRequest, IInferable<ChannelsECLeagueHeadSupplierWindowAuthGetRequest, ChannelsECLeagueHeadSupplierWindowAuthGetResponse>
{
/// <summary>
/// 获取或设置视频号唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("finder_id")]
[System.Text.Json.Serialization.JsonPropertyName("finder_id")]
public string FinderId { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,49 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/windowauth/get 接口的响应。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierWindowAuthGetResponse : WechatApiResponse
{
public static class Types
{
public class AuthInfo
{
/// <summary>
/// 获取或设置小程序 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("auth_wxa_appid")]
[System.Text.Json.Serialization.JsonPropertyName("auth_wxa_appid")]
public string MiniProgramAppId { get; set; } = default!;
/// <summary>
/// 获取或设置小程序页面路径。
/// </summary>
[Newtonsoft.Json.JsonProperty("auth_wxa_path")]
[System.Text.Json.Serialization.JsonPropertyName("auth_wxa_path")]
public string MiniProgramPagePath { get; set; } = default!;
/// <summary>
/// 获取或设置小程序名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("auth_wxa_username")]
[System.Text.Json.Serialization.JsonPropertyName("auth_wxa_username")]
public string MiniProgramName { get; set; } = default!;
/// <summary>
/// 获取或设置授权链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("auth_url")]
[System.Text.Json.Serialization.JsonPropertyName("auth_url")]
public string AuthUrl { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置授权信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("auth_info")]
[System.Text.Json.Serialization.JsonPropertyName("auth_info")]
public Types.AuthInfo AuthInfo { get; set; } = default!;
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/windowauth/status/get 接口的请求。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierWindowAuthStatusGetRequest : WechatApiRequest, IInferable<ChannelsECLeagueHeadSupplierWindowAuthStatusGetRequest, ChannelsECLeagueHeadSupplierWindowAuthStatusGetResponse>
{
/// <summary>
/// 获取或设置视频号唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("finder_id")]
[System.Text.Json.Serialization.JsonPropertyName("finder_id")]
public string FinderId { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/windowauth/status/get 接口的响应。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierWindowAuthStatusGetResponse : WechatApiResponse
{
/// <summary>
/// 获取或设置授权状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("window_auth_status")]
[System.Text.Json.Serialization.JsonPropertyName("window_auth_status")]
public int AuthStatus { get; set; }
}
}

View File

@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/window/add 接口的请求。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierWindowAddRequest : WechatApiRequest, IInferable<ChannelsECLeagueHeadSupplierWindowAddRequest, ChannelsECLeagueHeadSupplierWindowAddResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
/// <summary>
/// 获取或设置团长的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置视频号唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("finder_id")]
[System.Text.Json.Serialization.JsonPropertyName("finder_id")]
public string FinderId { get; set; } = string.Empty;
}
}

View File

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

View File

@ -0,0 +1,44 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/window/getall 接口的请求。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierWindowGetAllRequest : WechatApiRequest, IInferable<ChannelsECLeagueHeadSupplierWindowGetAllRequest, ChannelsECLeagueHeadSupplierWindowGetAllResponse>
{
/// <summary>
/// 获取或设置团长的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置视频号唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("finder_id")]
[System.Text.Json.Serialization.JsonPropertyName("finder_id")]
public string FinderId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置分页起始位置。
/// </summary>
[Newtonsoft.Json.JsonProperty("offset")]
[System.Text.Json.Serialization.JsonPropertyName("offset")]
public int Offset { get; set; }
/// <summary>
/// 获取或设置分页每页数量。
/// <para>默认值100</para>
/// </summary>
[Newtonsoft.Json.JsonProperty("page_size")]
[System.Text.Json.Serialization.JsonPropertyName("page_size")]
public int Limit { get; set; } = 100;
/// <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,65 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/window/getall 接口的响应。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierWindowGetAllResponse : WechatApiResponse
{
public static class Types
{
public class Product
{
/// <summary>
/// 获取或设置团长的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = default!;
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
public long ProductId { get; set; }
/// <summary>
/// 获取或设置团长 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("head_supplier_id")]
[System.Text.Json.Serialization.JsonPropertyName("head_supplier_id")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
public long HeadSupplierId { get; set; }
}
}
/// <summary>
/// 获取或设置商品列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("list")]
[System.Text.Json.Serialization.JsonPropertyName("list")]
public Types.Product[] ProductList { get; set; } = default!;
/// <summary>
/// 获取或设置下一页分页起始位置。
/// </summary>
[Newtonsoft.Json.JsonProperty("next_offset")]
[System.Text.Json.Serialization.JsonPropertyName("next_offset")]
public int NextOffset { get; set; }
/// <summary>
/// 获取或设置是否还有更多。
/// </summary>
[Newtonsoft.Json.JsonProperty("have_more")]
[System.Text.Json.Serialization.JsonPropertyName("have_more")]
public bool HasMore { get; set; }
/// <summary>
/// 获取或设置总数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("total_num")]
[System.Text.Json.Serialization.JsonPropertyName("total_num")]
public int? TotalCount { get; set; }
}
}

View File

@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/window/getdetail 接口的请求。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierWindowGetDetailRequest : WechatApiRequest, IInferable<ChannelsECLeagueHeadSupplierWindowGetDetailRequest, ChannelsECLeagueHeadSupplierWindowGetDetailResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
/// <summary>
/// 获取或设置团长的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置视频号唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("finder_id")]
[System.Text.Json.Serialization.JsonPropertyName("finder_id")]
public string FinderId { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,95 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/window/getdetail 接口的响应。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierWindowGetDetailResponse : WechatApiResponse
{
public static class Types
{
public class Product
{
public static class Types
{
public class ProductInfo
{
public static class Types
{
public class Detail : ChannelsECProductGetResponse.Types.Product.Types.Detail
{
}
public class Category : ChannelsECProductGetResponse.Types.Product.Types.Category
{
}
}
/// <summary>
/// 获取或设置商品标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("title")]
[System.Text.Json.Serialization.JsonPropertyName("title")]
public string Title { get; set; } = default!;
/// <summary>
/// 获取或设置商品副标题。
/// </summary>
[Newtonsoft.Json.JsonProperty("sub_title")]
[System.Text.Json.Serialization.JsonPropertyName("sub_title")]
public string? SubTitle { get; set; }
/// <summary>
/// 获取或设置主图 URL 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("head_imgs")]
[System.Text.Json.Serialization.JsonPropertyName("head_imgs")]
public string[] HeadImageUrlList { get; set; } = default!;
/// <summary>
/// 获取或设置商品详情信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("desc_info")]
[System.Text.Json.Serialization.JsonPropertyName("desc_info")]
public Types.Detail Detail { get; set; } = default!;
/// <summary>
/// 获取或设置商品类目列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("cats")]
[System.Text.Json.Serialization.JsonPropertyName("cats")]
public Types.Category[] CategoryList { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
public long ProductId { get; set; }
/// <summary>
/// 获取或设置团长的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = default!;
/// <summary>
/// 获取或设置商品信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_info")]
[System.Text.Json.Serialization.JsonPropertyName("product_info")]
public Types.ProductInfo ProductInfo { get; set; } = default!;
}
}
/// <summary>
/// 获取或设置商品信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_detail")]
[System.Text.Json.Serialization.JsonPropertyName("product_detail")]
public Types.Product Product { get; set; } = default!;
}
}

View File

@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/league/headsupplier/window/remove 接口的请求。</para>
/// </summary>
public class ChannelsECLeagueHeadSupplierWindowRemoveRequest : WechatApiRequest, IInferable<ChannelsECLeagueHeadSupplierWindowRemoveRequest, ChannelsECLeagueHeadSupplierWindowRemoveResponse>
{
/// <summary>
/// 获取或设置商品 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("product_id")]
[System.Text.Json.Serialization.JsonPropertyName("product_id")]
public long ProductId { get; set; }
/// <summary>
/// 获取或设置团长的 AppId。
/// </summary>
[Newtonsoft.Json.JsonProperty("appid")]
[System.Text.Json.Serialization.JsonPropertyName("appid")]
public string AppId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置视频号唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("finder_id")]
[System.Text.Json.Serialization.JsonPropertyName("finder_id")]
public string FinderId { get; set; } = string.Empty;
}
}

View File

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

View File

@ -1,4 +1,4 @@
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [POST] /channels/ec/product/get 接口的响应。</para>

View File

@ -0,0 +1,10 @@
{
"errcode": 0,
"errmsg": "ok",
"auth_info": {
"auth_url": "https://channels.weixin.qq.com/miniprogram/live-commerce/auth?authkey=0_1234",
"auth_wxa_username": "gh_bebad552f050",
"auth_wxa_appid": "wx2cea70df4257bba8",
"auth_wxa_path": "/pages/partner/auth?scene=thirdapp&authkey=0_1234"
}
}

View File

@ -0,0 +1,5 @@
{
"appid": "app1234",
"finder_id": "sph1234",
"product_id": 1234
}

View File

@ -0,0 +1,7 @@
{
"appid": "app1234",
"finder_id": "sph1234",
"offset": 0,
"page_size": 100,
"need_total_num": true
}

View File

@ -0,0 +1,19 @@
{
"errcode": 0,
"errmsg": "ok",
"list": [
{
"appid": "test1",
"product_id": 12345,
"head_supplier_id": 23456
},
{
"appid": "test2",
"product_id": 12346,
"head_supplier_id": 23457
}
],
"next_offset": 100,
"have_more": true,
"total_num": 369
}

View File

@ -0,0 +1,5 @@
{
"appid": "app1234",
"finder_id": "sph1234",
"product_id": 1234
}

View File

@ -0,0 +1,32 @@
{
"errcode": 0,
"errmsg": "ok",
"product_detail": {
"appid": "test",
"product_id": 12345,
"product_info": {
"title": "test_title",
"sub_title": "",
"head_imgs": [
"https://test.com/0"
],
"desc_info": {
"imgs": [
"https://test.com/0"
],
"desc": ""
},
"cats": [
{
"cat_id": "1421"
},
{
"cat_id": "1443"
},
{
"cat_id": "1452"
}
]
}
}
}

View File

@ -0,0 +1,5 @@
{
"appid": "app1234",
"finder_id": "sph1234",
"product_id": 1234
}