# 商品搜索接口(新版) > 用于通过商品名称或编码查询商品关键信息,是创建订单的前置步骤。 ## 认证流程 ### 第一步:登录获取 JWT ``` POST https://accounts.77ircloud.com/api/v2/accounts/login Content-Type: application/json ``` **请求体:** ```json { "userName": "112983083", "password": "77ircloud", "loginServerType": 4 } ``` **返回的 jwtToken 即为 authorization 值:** ```json { "code": 200, "data": { "jwtToken": "eyJhbGci...", "expires_in": 604800000 } } ``` ### 第二步:带 JWT 请求商品接口 请求头: - `authorization`: `{jwtToken}` — **注意:没有 Bearer 前缀** - `x-exclude-login-mutex`: `77ircloud` — 固定值 ## 商品搜索 ``` GET https://suite.77ircloud.com/product-aggregation/v1/products?pageSize=30¤tPage=1&queryTag=true&queryInventories=true&loadSortingTag=true&loadSortingTagName=true&q={关键词} ``` **参数说明:** | 参数 | 必填 | 说明 | |------|------|------| | `q` | ✅ | 搜索关键词(商品名称或商品编码) | | `pageSize` | ✅ | 每页数量 | | `currentPage` | ✅ | 页码(从1开始) | | `queryTag` | 可选 | 是否查询标签 | | `queryInventories` | 可选 | 是否查询库存 | | `loadSortingTag` | 可选 | 是否查询分拣标签 | | `loadSortingTagName` | 可选 | 是否查询分拣标签名称 | **返回示例:** ```json { "code": 200, "data": { "totalCount": 4, "currentPage": 1, "pageSize": 30, "items": [ { "name": "嘉吉尚选霸王鸡肉条1kg", "skuId": 2116793372668192, "multiUnitId": 2116793372668193, "unitName": "包", "basePrice": 18.9, "availableAmount": 1035.0, "specJson": "{\"规格\":\"包=约33片/包、件=1kg*10包\"}", "code": "165-009-00068", "levelPrices": [ {"index": 1, "price": 18.9}, {"index": 2, "price": 18.0}, {"index": 3, "price": 19.5}, {"index": 4, "price": 18.5} ] } ] } } ``` ## 关键字段说明 | 字段 | 说明 | 用途 | |------|------|------| | `skuId` | 商品SKU ID | 下单时用 `productSku` | | `multiUnitId` | 单位ID | 下单时用 `unitId` | | `unitName` | 单位名称(如"包") | 展示用 | | `basePrice` | 参考单价 | 填写 `salePrice` 和 `originalPrice` | | `availableAmount` | 当前可用库存 | 判断是否充足 | ## 完整调用示例 ```python import urllib.request, json, urllib.parse # Step 1: 登录获取 JWT login_data = json.dumps({ "userName": "112983083", "password": "77ircloud", "loginServerType": 4 }).encode() login_req = urllib.request.Request( "https://accounts.77ircloud.com/api/v2/accounts/login", data=login_data, headers={"Content-Type": "application/json"}, method="POST" ) with urllib.request.urlopen(login_req, timeout=10) as resp: jwt = json.loads(resp.read())['data']['jwtToken'] # Step 2: 搜索商品 keyword = "嘉吉尚选霸王鸡肉条" q = urllib.parse.quote(keyword) url = f"https://suite.77ircloud.com/product-aggregation/v1/products?pageSize=30¤tPage=1&queryTag=true&queryInventories=true&loadSortingTag=true&loadSortingTagName=true&q={q}" search_req = urllib.request.Request(url, headers={ "authorization": jwt, "x-exclude-login-mutex": "77ircloud" }) with urllib.request.urlopen(search_req, timeout=15) as resp: data = json.loads(resp.read()) items = data.get('data', {}).get('items', []) for item in items: print(f"商品: {item['name']}") print(f" skuId: {item['skuId']}") print(f" multiUnitId: {item['multiUnitId']}") print(f" 单位: {item['unitName']}") print(f" 库存: {item['availableAmount']}") ``` ## 注意事项 1. **每次查询都需要重新登录获取 JWT**(有效期约7天) 2. **authorization 没有 Bearer 前缀**,直接写 JWT 字符串 3. **搜索关键词用 URL 编码**,中文需要 encode 4. **搜索结果可能为空**,可尝试不同的关键词组合(如品牌名、商品简称等)