feat(wxapi): 随官方更新小程序联盟推客端相关接口模型

This commit is contained in:
Fu Diwei 2021-10-18 17:04:22 +08:00
parent 2b2a4b4e59
commit 5d2dc2904f
7 changed files with 484 additions and 6 deletions

View File

@ -100,6 +100,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
/// <summary>
/// <para>异步调用 [GET] /union/promoter/product/category 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/ministore/union/access-guidelines/promoter/api/product/category.html#_1-%E8%8E%B7%E5%8F%96%E8%81%94%E7%9B%9F%E5%95%86%E5%93%81%E7%B1%BB%E7%9B%AE%E5%88%97%E8%A1%A8%E5%8F%8A%E7%B1%BB%E7%9B%AEID </para>
/// <para>REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/access-guidelines/promoter/api/product/category.html</para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
@ -120,6 +121,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
/// <summary>
/// <para>异步调用 [GET] /union/promoter/product/list 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/ministore/union/access-guidelines/promoter/api/product/category.html#_2-%E6%9F%A5%E8%AF%A2%E5%95%86%E5%93%81%E8%AF%A6%E6%83%85%E4%BF%A1%E6%81%AF </para>
/// <para>REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/access-guidelines/promoter/api/product/category.html</para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
@ -160,27 +162,89 @@ namespace SKIT.FlurlHttpClient.Wechat.Api
if (request.HasCoupon.HasValue)
flurlReq.SetQueryParam("hasCoupon", request.HasCoupon.Value ? 1 : 0);
if (request.ShopAppIdList != null && request.ShopAppIdList.Any())
if (request.ShopAppIdList != null)
flurlReq.SetQueryParam("shopAppIds", string.Join(",", request.ShopAppIdList));
if (request.CategoryId.HasValue)
flurlReq.SetQueryParam("categoryId", request.CategoryId);
if (request.CategoryIdList != null && request.CategoryIdList.Any())
if (request.CategoryIdList != null)
flurlReq.SetQueryParam("category", string.Join(",", request.CategoryIdList));
if (request.CategoryIdBlackList != null && request.CategoryIdBlackList.Any())
if (request.CategoryIdBlackList != null)
flurlReq.SetQueryParam("noCategory", string.Join(",", request.CategoryIdBlackList));
if (request.ProductIdList != null && request.ProductIdList.Any())
if (request.ProductIdList != null)
flurlReq.SetQueryParam("productId", string.Join(",", request.ProductIdList));
return await client.SendRequestWithJsonAsync<Models.UnionPromoterProductListResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [GET] /union/promoter/product/select 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/access-guidelines/promoter/api/product/category.html </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.UnionPromoterProductSelectResponse> ExecuteUnionPromoterProductSelectAsync(this WechatApiClient client, Models.UnionPromoterProductSelectRequest 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.Get, "union", "promoter", "product", "select")
.SetQueryParam("access_token", request.AccessToken)
.SetQueryParam("from", request.Offset)
.SetQueryParam("limit", request.Limit);
if (request.MaxPrice.HasValue)
flurlReq.SetQueryParam("maxPrice", request.MaxPrice.Value);
if (request.MinPrice.HasValue)
flurlReq.SetQueryParam("minPrice", request.MinPrice.Value);
if (request.MinCommissionValue.HasValue)
flurlReq.SetQueryParam("minCommissionValue", request.MinCommissionValue.Value);
if (request.MinCommissionRatio.HasValue)
flurlReq.SetQueryParam("minCommissionRatio", request.MinCommissionRatio.Value);
if (request.SortType.HasValue)
flurlReq.SetQueryParam("sortType", request.SortType.Value);
if (request.HasCoupon.HasValue)
flurlReq.SetQueryParam("hasCoupon", request.HasCoupon.Value ? 1 : 0);
if (request.ShopAppIdList != null)
flurlReq.SetQueryParam("shopAppIds", string.Join(",", request.ShopAppIdList));
if (request.CategoryId.HasValue)
flurlReq.SetQueryParam("categoryId", request.CategoryId);
if (request.CategoryIdList != null)
flurlReq.SetQueryParam("category", string.Join(",", request.CategoryIdList));
if (request.CategoryIdBlackList != null)
flurlReq.SetQueryParam("noCategory", string.Join(",", request.CategoryIdBlackList));
if (request.ProductIdList != null)
flurlReq.SetQueryParam("productId", string.Join(",", request.ProductIdList));
if (request.ShippingMethods != null)
flurlReq.SetQueryParam("shippingMethods", client.JsonSerializer.Serialize(request.ShippingMethods));
if (request.AddressList != null)
flurlReq.SetQueryParam("addressList", client.JsonSerializer.Serialize(request.AddressList));
return await client.SendRequestWithJsonAsync<Models.UnionPromoterProductSelectResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /union/promoter/product/generate 接口。</para>
/// <para>REF: https://developers.weixin.qq.com/doc/ministore/union/access-guidelines/promoter/api/product/category.html#_3-%E8%8E%B7%E5%8F%96%E5%95%86%E5%93%81%E6%8E%A8%E5%B9%BF%E7%B4%A0%E6%9D%90 </para>
/// <para>REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/access-guidelines/promoter/api/product/category.html</para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>

View File

@ -24,6 +24,14 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
public long ProductId { get; set; }
/// <summary>
/// 获取或设置 SKU ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("skuId")]
[System.Text.Json.Serialization.JsonPropertyName("skuId")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
public long SKUId { get; set; }
/// <summary>
/// 获取或设置商品标题。
/// </summary>
@ -47,6 +55,13 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.SystemTextJsonCurrencyConverter))]
public int Price { get; set; }
/// <summary>
/// 获取或设置商品数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("productCnt")]
[System.Text.Json.Serialization.JsonPropertyName("productCnt")]
public int ProductCount { get; set; }
/// <summary>
/// 获取或设置佣金比例(单位:万分之一)。
/// </summary>
@ -63,6 +78,15 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.SystemTextJsonCurrencyConverter))]
public int CommissionValue { get; set; }
/// <summary>
/// 获取或设置预估佣金金额(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonProperty("estimatedCommission")]
[Newtonsoft.Json.JsonConverter(typeof(Converters.NewtonsoftJsonCurrencyConverter))]
[System.Text.Json.Serialization.JsonPropertyName("estimatedCommission")]
[System.Text.Json.Serialization.JsonConverter(typeof(Converters.SystemTextJsonCurrencyConverter))]
public int EstimatedCommissionValue { get; set; }
/// <summary>
/// 获取或设置分佣状态。
/// </summary>
@ -70,6 +94,22 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
[System.Text.Json.Serialization.JsonPropertyName("commissionStatus")]
public string CommissionStatus { get; set; } = default!;
/// <summary>
/// 获取或设置分佣状态更新时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("commissionStatusUpdateTime")]
[System.Text.Json.Serialization.JsonPropertyName("commissionStatusUpdateTime")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
public long? CommissionStatusUpdateTimestamp { get; set; }
/// <summary>
/// 获取或设置结算时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("profitShardingSucTime")]
[System.Text.Json.Serialization.JsonPropertyName("profitShardingSucTime")]
[System.Text.Json.Serialization.JsonNumberHandling(System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString)]
public long? ProfitShardingSuccessTimestamp { get; set; }
/// <summary>
/// 获取或设置商品类目名称,使用逗号分隔。
/// </summary>
@ -85,11 +125,11 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
public Promotion? Promotion { get; set; }
/// <summary>
/// 获取或设置自定义扩展参数。
/// 获取或设置自定义参数。
/// </summary>
[Newtonsoft.Json.JsonProperty("customizeInfo")]
[System.Text.Json.Serialization.JsonPropertyName("customizeInfo")]
public string? CustomizeExtra { get; set; }
public string? CustomizeInfo { get; set; }
}
public class Promotion

View File

@ -162,6 +162,20 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models
[Newtonsoft.Json.JsonProperty("totalStockNum")]
[System.Text.Json.Serialization.JsonPropertyName("totalStockNum")]
public int TotalStock { get; set; }
/// <summary>
/// 获取或设置总销量。
/// </summary>
[Newtonsoft.Json.JsonProperty("totalSoldNum")]
[System.Text.Json.Serialization.JsonPropertyName("totalSoldNum")]
public int TotalSales { get; set; }
/// <summary>
/// 获取或设置总订单数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("totalOrderNum")]
[System.Text.Json.Serialization.JsonPropertyName("totalOrderNum")]
public int TotalOrderCount { get; set; }
}
public class SKU

View File

@ -0,0 +1,198 @@
using System;
using System.Collections.Generic;
/* @codestyle-disable no-jsonable-property-in-request-get */
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [GET] /union/promoter/product/select 接口的请求。</para>
/// </summary>
public class UnionPromoterProductSelectRequest : WechatApiRequest
{
public static class Types
{
public class ShippingMethods
{
/// <summary>
/// 获取或设置是否开启快递配送。
/// </summary>
[Newtonsoft.Json.JsonProperty("express")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonPropertyName("express")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
public bool IsOpenExpress { get; set; }
/// <summary>
/// 获取或设置是否开启同城配送。
/// </summary>
[Newtonsoft.Json.JsonProperty("same_city")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonPropertyName("same_city")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
public bool IsOpenSameCity { get; set; }
/// <summary>
/// 获取或设置是否开启线下自提。
/// </summary>
[Newtonsoft.Json.JsonProperty("pickup")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))]
[System.Text.Json.Serialization.JsonPropertyName("pickup")]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))]
public bool IsOpenPickup { get; set; }
}
public class Address
{
public static class Types
{
public class AddressInformation
{
/// <summary>
/// 获取或设置省份名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("provinceName")]
[System.Text.Json.Serialization.JsonPropertyName("provinceName")]
public string ProvinceName { get; set; } = string.Empty;
/// <summary>
/// 获取或设置城市名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("cityName")]
[System.Text.Json.Serialization.JsonPropertyName("cityName")]
public string CityName { get; set; } = string.Empty;
/// <summary>
/// 获取或设置区县名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("countyName")]
[System.Text.Json.Serialization.JsonPropertyName("countyName")]
public string DistrictName { get; set; } = string.Empty;
}
public class AddressType : ShippingMethods
{
}
}
/// <summary>
/// 获取或设置地址信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("addressInfo")]
[System.Text.Json.Serialization.JsonPropertyName("addressInfo")]
public Types.AddressInformation AddressInformation { get; set; } = new Types.AddressInformation();
/// <summary>
/// 获取或设置地址类型信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("addressType")]
[System.Text.Json.Serialization.JsonPropertyName("addressType")]
public Types.AddressType? AddressType { get; set; }
}
}
/// <summary>
/// 获取或设置分页起始位置。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int Offset { get; set; }
/// <summary>
/// 获取或设置分页每页数量。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int Limit { get; set; } = 20;
/// <summary>
/// 获取或设置商品最高价格(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int? MaxPrice { get; set; }
/// <summary>
/// 获取或设置商品最低价格(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int? MinPrice { get; set; }
/// <summary>
/// 获取或设置佣金金额下限(单位:分)。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int? MinCommissionValue { get; set; }
/// <summary>
/// 获取或设置佣金比例下限(单位:万分之一)。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int? MinCommissionRatio { get; set; }
/// <summary>
/// 获取或设置排序方式。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int? SortType { get; set; }
/// <summary>
/// 获取或设置小商店 AppId 列表。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public IList<string>? ShopAppIdList { get; set; }
/// <summary>
/// 获取或设置是否有联盟优惠券。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public bool? HasCoupon { get; set; }
/// <summary>
/// 获取或设置商品类目 ID。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public int? CategoryId { get; set; }
/// <summary>
/// 获取或设置商品类目 ID 列表。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public IList<int>? CategoryIdList { get; set; }
/// <summary>
/// 获取或设置商品类目 ID 黑名单列表。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public IList<int>? CategoryIdBlackList { get; set; }
/// <summary>
/// 获取或设置商品 ID 列表。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public IList<long>? ProductIdList { get; set; }
/// <summary>
/// 获取或设置配送方式信息。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public Types.ShippingMethods? ShippingMethods { get; set; }
/// <summary>
/// 获取或设置发货地址列表。
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public IList<Types.Address>? AddressList { get; set; }
}
}

View File

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Api.Models
{
/// <summary>
/// <para>表示 [GET] /union/promoter/product/select 接口的响应。</para>
/// </summary>
public class UnionPromoterProductSelectResponse : WechatApiResponse
{
public static class Types
{
public class Product : UnionPromoterProductListResponse.Types.Product
{
}
}
/// <summary>
/// 获取或设置商品列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("productList")]
[System.Text.Json.Serialization.JsonPropertyName("productList")]
public Types.Product[] ProductList { get; set; } = default!;
/// <summary>
/// 获取或设置商品总数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("total")]
[System.Text.Json.Serialization.JsonPropertyName("total")]
public int Total { get; set; }
}
}

View File

@ -0,0 +1,128 @@
{
"errcode": 0,
"errmsg": "",
"productList": [
{
"productId": "7554942",
"product": {
"productId": "7554942",
"status": 5,
"info": {
"title": "新增商品并保存case_UpProduct",
"subTitle": "这是商品子标题",
"headImg": [
"https://wxamusic.wx.qq.com/wxasr/getminipic/zncFu89-HApz37MU8ZbwXB-7W09r7a2spQoE8wPrMFG4kgySC04JEIgbjTy8izde?media-id=zncFu89-HApz37MU8ZbwXB-7W09r7a2spQoE8wPrMFG4kgySC04JEIgbjTy8izde&amp;appid=wx678687fa5226e237"
],
"category": [
{
"catId": "1247",
"name": "家具"
},
{
"catId": "1267",
"name": "儿童家具"
},
{
"catId": "1270",
"name": "儿童床"
}
],
"brand": "",
"brandId": "2100000000",
"model": "",
"detail": {
"detailImg": [
"https://wxamusic.wx.qq.com/wxasr/getminipic/zncFu89-HApz37MU8ZbwXB-7W09r7a2spQoE8wPrMFG4kgySC04JEIgbjTy8izde?media-id=zncFu89-HApz37MU8ZbwXB-7W09r7a2spQoE8wPrMFG4kgySC04JEIgbjTy8izde&amp;appid=wx678687fa5226e237"
]
},
"param": [],
"minPrice": 2000,
"totalStockNum": 0
},
"skus": []
},
"leagueExInfo": {
"hasCommission": 1,
"commissionRatio": 8000,
"commissionValue": 1600
},
"shopInfo": {
"name": "猪腩肉小商店",
"headImgUrl": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM77ia7ibuPAQBJgME8gFF9APicaSpd7evrLCVb5hn2zsUBOw"
}
},
{
"productId": "6565746",
"product": {
"productId": "6565746",
"status": 5,
"info": {
"title": "测试假发",
"subTitle": "测试假发",
"headImg": [
"https://snsdy.tc.qq.com/161/20304/snscosdownload/SZ/reserved/5fd316dc0000ef4b0000000043785609000000a000004f50"
],
"category": [
{
"catId": "1001",
"name": ""
},
{
"catId": "1030",
"name": ""
},
{
"catId": "1031",
"name": ""
}
],
"brandId": "2100000000",
"detail": {
"detailImg": []
},
"param": [],
"minPrice": 100,
"totalStockNum": 39995
},
"skus": [
{
"skuId": "11913889",
"status": 5,
"productSkuInfo": {
"thumbImg": "",
"skuCode": "",
"salePrice": 100,
"marketPrice": 100,
"stockInfo": {
"stockNum": 20000
}
}
},
{
"skuId": "11915862",
"status": 5,
"productSkuInfo": {
"thumbImg": "",
"skuCode": "",
"salePrice": 100,
"marketPrice": 100,
"stockInfo": {
"stockNum": 20000
}
}
}
]
},
"leagueExInfo": {
"hasCommission": 1,
"commissionRatio": 3300,
"commissionValue": 33
},
"shopInfo": {
"name": "沅沅小可爱",
"headImgUrl": "http://wx.qlogo.cn/mmhead/574VdhMFwaETvsGUwOpJsHAWaM3UDznibq3MMMiaOPSt7Ir1ecTLOfJQ/0"
}
}
],
"total": 100
}