diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionPromoterExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionPromoterExtensions.cs index 1e34e0c4..9a509da6 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionPromoterExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteUnionPromoterExtensions.cs @@ -100,6 +100,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api /// /// 异步调用 [GET] /union/promoter/product/category 接口。 /// 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 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/access-guidelines/promoter/api/product/category.html /// /// /// @@ -120,6 +121,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api /// /// 异步调用 [GET] /union/promoter/product/list 接口。 /// 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 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/access-guidelines/promoter/api/product/category.html /// /// /// @@ -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(flurlReq, data: request, cancellationToken: cancellationToken); } + /// + /// 异步调用 [GET] /union/promoter/product/select 接口。 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/access-guidelines/promoter/api/product/category.html + /// + /// + /// + /// + /// + public static async Task 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(flurlReq, data: request, cancellationToken: cancellationToken); + } + /// /// 异步调用 [POST] /union/promoter/product/generate 接口。 /// 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 + /// REF: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/union/access-guidelines/promoter/api/product/category.html /// /// /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Order/UnionPromoterOrderInfoResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Order/UnionPromoterOrderInfoResponse.cs index 218aaf68..9334d0c7 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Order/UnionPromoterOrderInfoResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Order/UnionPromoterOrderInfoResponse.cs @@ -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; } + /// + /// 获取或设置 SKU ID。 + /// + [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; } + /// /// 获取或设置商品标题。 /// @@ -47,6 +55,13 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models [System.Text.Json.Serialization.JsonConverter(typeof(Converters.SystemTextJsonCurrencyConverter))] public int Price { get; set; } + /// + /// 获取或设置商品数量。 + /// + [Newtonsoft.Json.JsonProperty("productCnt")] + [System.Text.Json.Serialization.JsonPropertyName("productCnt")] + public int ProductCount { get; set; } + /// /// 获取或设置佣金比例(单位:万分之一)。 /// @@ -63,6 +78,15 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models [System.Text.Json.Serialization.JsonConverter(typeof(Converters.SystemTextJsonCurrencyConverter))] public int CommissionValue { get; set; } + /// + /// 获取或设置预估佣金金额(单位:分)。 + /// + [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; } + /// /// 获取或设置分佣状态。 /// @@ -70,6 +94,22 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models [System.Text.Json.Serialization.JsonPropertyName("commissionStatus")] public string CommissionStatus { get; set; } = default!; + /// + /// 获取或设置分佣状态更新时间戳。 + /// + [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; } + + /// + /// 获取或设置结算时间戳。 + /// + [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; } + /// /// 获取或设置商品类目名称,使用逗号分隔。 /// @@ -85,11 +125,11 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Models public Promotion? Promotion { get; set; } /// - /// 获取或设置自定义扩展参数。 + /// 获取或设置自定义参数。 /// [Newtonsoft.Json.JsonProperty("customizeInfo")] [System.Text.Json.Serialization.JsonPropertyName("customizeInfo")] - public string? CustomizeExtra { get; set; } + public string? CustomizeInfo { get; set; } } public class Promotion diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductListResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductListResponse.cs index 0cc292ea..dc21105e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductListResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductListResponse.cs @@ -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; } + + /// + /// 获取或设置总销量。 + /// + [Newtonsoft.Json.JsonProperty("totalSoldNum")] + [System.Text.Json.Serialization.JsonPropertyName("totalSoldNum")] + public int TotalSales { get; set; } + + /// + /// 获取或设置总订单数量。 + /// + [Newtonsoft.Json.JsonProperty("totalOrderNum")] + [System.Text.Json.Serialization.JsonPropertyName("totalOrderNum")] + public int TotalOrderCount { get; set; } } public class SKU diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductSelectRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductSelectRequest.cs new file mode 100644 index 00000000..edd89b6a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductSelectRequest.cs @@ -0,0 +1,198 @@ +using System; +using System.Collections.Generic; + +/* @codestyle-disable no-jsonable-property-in-request-get */ +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [GET] /union/promoter/product/select 接口的请求。 + /// + public class UnionPromoterProductSelectRequest : WechatApiRequest + { + public static class Types + { + public class ShippingMethods + { + /// + /// 获取或设置是否开启快递配送。 + /// + [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; } + + /// + /// 获取或设置是否开启同城配送。 + /// + [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; } + + /// + /// 获取或设置是否开启线下自提。 + /// + [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 + { + /// + /// 获取或设置省份名称。 + /// + [Newtonsoft.Json.JsonProperty("provinceName")] + [System.Text.Json.Serialization.JsonPropertyName("provinceName")] + public string ProvinceName { get; set; } = string.Empty; + + /// + /// 获取或设置城市名称。 + /// + [Newtonsoft.Json.JsonProperty("cityName")] + [System.Text.Json.Serialization.JsonPropertyName("cityName")] + public string CityName { get; set; } = string.Empty; + + /// + /// 获取或设置区县名称。 + /// + [Newtonsoft.Json.JsonProperty("countyName")] + [System.Text.Json.Serialization.JsonPropertyName("countyName")] + public string DistrictName { get; set; } = string.Empty; + } + + public class AddressType : ShippingMethods + { + } + } + + /// + /// 获取或设置地址信息。 + /// + [Newtonsoft.Json.JsonProperty("addressInfo")] + [System.Text.Json.Serialization.JsonPropertyName("addressInfo")] + public Types.AddressInformation AddressInformation { get; set; } = new Types.AddressInformation(); + + /// + /// 获取或设置地址类型信息。 + /// + [Newtonsoft.Json.JsonProperty("addressType")] + [System.Text.Json.Serialization.JsonPropertyName("addressType")] + public Types.AddressType? AddressType { get; set; } + } + } + + /// + /// 获取或设置分页起始位置。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int Offset { get; set; } + + /// + /// 获取或设置分页每页数量。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int Limit { get; set; } = 20; + + /// + /// 获取或设置商品最高价格(单位:分)。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? MaxPrice { get; set; } + + /// + /// 获取或设置商品最低价格(单位:分)。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? MinPrice { get; set; } + + /// + /// 获取或设置佣金金额下限(单位:分)。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? MinCommissionValue { get; set; } + + /// + /// 获取或设置佣金比例下限(单位:万分之一)。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? MinCommissionRatio { get; set; } + + /// + /// 获取或设置排序方式。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? SortType { get; set; } + + /// + /// 获取或设置小商店 AppId 列表。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? ShopAppIdList { get; set; } + + /// + /// 获取或设置是否有联盟优惠券。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public bool? HasCoupon { get; set; } + + /// + /// 获取或设置商品类目 ID。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public int? CategoryId { get; set; } + + /// + /// 获取或设置商品类目 ID 列表。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? CategoryIdList { get; set; } + + /// + /// 获取或设置商品类目 ID 黑名单列表。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? CategoryIdBlackList { get; set; } + + /// + /// 获取或设置商品 ID 列表。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? ProductIdList { get; set; } + + /// + /// 获取或设置配送方式信息。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public Types.ShippingMethods? ShippingMethods { get; set; } + + /// + /// 获取或设置发货地址列表。 + /// + [Newtonsoft.Json.JsonIgnore] + [System.Text.Json.Serialization.JsonIgnore] + public IList? AddressList { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductSelectResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductSelectResponse.cs new file mode 100644 index 00000000..67763517 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Models/UnionPromoter/Product/UnionPromoterProductSelectResponse.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Api.Models +{ + /// + /// 表示 [GET] /union/promoter/product/select 接口的响应。 + /// + public class UnionPromoterProductSelectResponse : WechatApiResponse + { + public static class Types + { + public class Product : UnionPromoterProductListResponse.Types.Product + { + } + } + + /// + /// 获取或设置商品列表。 + /// + [Newtonsoft.Json.JsonProperty("productList")] + [System.Text.Json.Serialization.JsonPropertyName("productList")] + + public Types.Product[] ProductList { get; set; } = default!; + + /// + /// 获取或设置商品总数量。 + /// + [Newtonsoft.Json.JsonProperty("total")] + [System.Text.Json.Serialization.JsonPropertyName("total")] + public int Total { get; set; } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductSelectRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductSelectRequest.json new file mode 100644 index 00000000..22fdca1b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductSelectRequest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductSelectResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductSelectResponse.json new file mode 100644 index 00000000..a0cc71ab --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/ModelSamples/UnionPromoter/Product/UnionPromoterProductSelectResponse.json @@ -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&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&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 +} \ No newline at end of file