一、摘要
微店店铺所有商品 API 是微店开放平台提供的核心数据接口,你可以通过该接口以编程方式获取指定微店店铺下的全部商品信息(如商品 ID、名称、售价、库存、主图、上下架状态等)。该接口主要用于店铺商品数据同步、批量商品管理、第三方数据分析等场景,是对接微店商品数据的基础入口。
二、接口概述
1. 前置条件
使用该接口前,你需要完成以下准备工作:
- 创建应用并通过审核,获取
appkey(应用密钥)、appsecret(应用秘钥); - 获取店铺的
access_token(访问令牌,用于接口鉴权,有有效期,通常 2 小时)。
2. 核心接口信息
| 项目 | 说明 |
|---|---|
| 接口名称 | 店铺商品列表查询 |
| 请求方式 | GET(部分场景支持 POST) |
| 接口基准地址 | 正式环境:c0b.cc/R4rbK2 (前往体验接口测试,Taobaoapi2014添加V获取) |
| 鉴权方式 | URL 参数携带access_token或请求头携带 |
| 接口频率限制 | 通常单应用 / 单 IP 60 次 / 分钟(以官方最新限制为准) |
3. 核心请求参数
| 参数名 | 类型 | 是否必选 | 说明 |
|---|---|---|---|
| access_token | string | 是 | 店铺访问令牌(鉴权核心) |
| page_num | int | 是 | 页码,从 1 开始 |
| page_size | int | 是 | 每页条数,最大值通常为 50(以官方为准) |
| status | int | 否 | 商品状态:0 - 全部,1 - 上架,2 - 下架,3 - 违规 |
4. 核心返回参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| errcode | int | 错误码:0 - 成功,非 0 - 失败 |
| errmsg | string | 错误信息(失败时提示原因) |
| total_num | int | 商品总数量 |
| goods_list | array | 商品列表数组,包含单个商品的详细信息 |
| ├─ goods_id | string | 商品唯一 ID |
| ├─ goods_name | string | 商品名称 |
| ├─ price | float | 商品售价(单位:元) |
| ├─ stock_num | int | 商品库存数量 |
| ├─ main_pic | string | 商品主图 URL |
| ├─ status | int | 商品状态(1 - 上架,2 - 下架) |
三、Python 请求示例
1. 环境准备
首先确保安装requests库(Python HTTP 请求核心库),若未安装,执行以下命令:
bash
pip install requests2. 完整请求代码
以下示例包含 token 获取(简化版)、商品列表分页查询、异常处理,你可直接复制使用(需替换为自身配置):
python
import requests import json # ===================== 配置项(替换为你自己的!)===================== APP_KEY = "你的微店应用appkey" APP_SECRET = "你的微店应用appsecret" SHOP_ACCESS_TOKEN = "你的店铺access_token" # 优先用已获取的token SHOP_ID = "你的微店店铺ID" # =================================================================== def get_weidian_token(): """ (可选)获取店铺access_token(简化版,生产需按官方OAuth2流程) """ token_url = "https://api.weidian.com/oauth2/token" params = { "appkey": APP_KEY, "appsecret": APP_SECRET, "grant_type": "client_credentials", "shop_id": SHOP_ID } try: response = requests.get(token_url, params=params, timeout=10) response.raise_for_status() # 抛出HTTP错误 result = response.json() if result.get("errcode") == 0: return result.get("access_token") else: print(f"获取token失败:{result.get('errmsg')}") return None except Exception as e: print(f"获取token异常:{str(e)}") return None def get_shop_goods(page_num=1, page_size=50, status=0): """ 获取单页商品信息 :param page_num: 页码 :param page_size: 每页条数 :param status: 商品状态(0-全部,1-上架,2-下架) :return: 商品数据/None """ api_url = "https://api.weidian.com/api/v2/shop/goods/list" params = { "access_token": SHOP_ACCESS_TOKEN, "page_num": page_num, "page_size": page_size, "status": status } try: # 发送GET请求 response = requests.get( api_url, params=params, timeout=15, headers={"Content-Type": "application/json"} ) response.raise_for_status() result = response.json() # 接口调用成功 if result.get("errcode") == 0: return { "total_num": result.get("total_num", 0), "goods_list": result.get("goods_list", []) } else: print(f"接口调用失败:错误码{result.get('errcode')},{result.get('errmsg')}") return None except requests.exceptions.HTTPError as e: print(f"HTTP错误:{e},响应内容:{response.text}") return None except requests.exceptions.Timeout: print("请求超时,请检查网络") return None except json.JSONDecodeError: print("响应不是合法JSON格式") return None except Exception as e: print(f"未知异常:{str(e)}") return None def get_all_goods(status=0): """ 自动分页获取所有商品 """ all_goods = [] page_num = 1 while True: goods_data = get_shop_goods(page_num=page_num, status=status) if not goods_data: break goods_list = goods_data.get("goods_list", []) if not goods_list: break all_goods.extend(goods_list) # 检查是否获取完所有商品 if len(all_goods) >= goods_data.get("total_num", 0): break page_num += 1 print(f"已获取{len(all_goods)}/{goods_data.get('total_num')}个商品") print(f"\n获取完成!共获取{len(all_goods)}个商品") return all_goods # 主程序执行 if __name__ == "__main__": # 可选:若token过期,重新获取 # new_token = get_weidian_token() # if new_token: # SHOP_ACCESS_TOKEN = new_token # 获取所有上架商品(status=1) all_goods = get_all_goods(status=1) # 示例:打印前3个商品的核心信息 if all_goods: for idx, goods in enumerate(all_goods[:3]): print(f"\n=== 第{idx+1}个商品 ===") print(f"商品ID:{goods.get('goods_id')}") print(f"商品名称:{goods.get('goods_name')}") print(f"售价:{goods.get('price')}元") print(f"库存:{goods.get('stock_num')}件") print(f"状态:{'上架' if goods.get('status') == 1 else '下架'}")3. 代码关键说明
- 配置替换:必须将
APP_KEY、APP_SECRET等配置项替换为你从微店开放平台获取的真实信息; - Token 处理:示例中
get_weidian_token是简化版,生产环境需按官方 OAuth2.0 授权流程实现 token 自动刷新; - 自动分页:
get_all_goods函数会自动遍历所有页码,无需手动处理; - 异常处理:覆盖了 HTTP 错误、超时、JSON 解析失败等常见场景,保证程序稳定性。
四、结语
微店店铺所有商品 API 是对接微店商品数据的核心入口,使用时需注意以下几点:
- 接口文档会迭代更新,务必以微店开放平台官方文档为准;
access_token有有效期,生产环境需实现自动刷新逻辑,避免接口调用失败;- 严格遵守接口频率限制,高频请求会导致接口被封禁;
- 解析返回数据时,需处理字段缺失的情况(如部分商品无主图);
- 接口调用失败时,优先查看
errcode和errmsg,常见问题包括 token 过期、参数错误、权限不足等。
总结
- 使用微店商品 API 前,需完成开发者账号注册、应用创建、token 获取等前置步骤;
- 提供的 Python 示例包含分页查询、异常处理、结果解析等核心逻辑,需替换为自身的开发者配置才能运行;
- 生产环境使用时,重点关注 token 自动刷新、接口频率限制、字段兼容性,确保接口调用稳定。