虾皮(Shopee)开放平台的item_get接口是根据商品 ID 获取详情的核心工具,适用于跨境电商分析、多平台比价、商品监控等场景。本文将全面讲解该接口的对接流程、认证机制、代码实现及最佳实践,帮助开发者系统掌握从入门到精通的全流程。
一、接口基础认知
核心功能item_get接口通过商品 ID 获取虾皮平台的商品详细信息,涵盖:
基本信息:商品 ID、标题、描述、主图及图片列表
价格信息:原价、售价、折扣、货币单位(支持多币种)
库存信息:总库存、规格库存、预售状态
交易信息:销量、评分、评论数
规格信息:颜色、尺寸等多规格组合及对应价格 / 库存
店铺信息:店铺 ID、店铺名称、卖家评分
接口端点虾皮接口地址需区分区域站点,格式为:
请求方式:HTTP GET
数据格式:响应为 JSON 格式
认证方式:采用partner_id+access_token+ 签名认证
二、对接前置准备
开发者账号注册访问虾皮开放平台注册账号,完成企业认证(个人账号权限有限)。
创建应用与获取密钥
在开放平台控制台创建应用,选择目标市场(如东南亚、台湾)
应用创建后,获取partner_id和partner_key(密钥需严格保密)
完成店铺授权,获取access_token(每个店铺的access_token独立)
权限申请
item_get接口属于基础商品接口,默认开放调用权限
如需获取敏感信息(如卖家联系方式),需单独申请权限
环境准备
开发语言:
测试工具:
依赖库:
三、接口调用流程
参数组装接口参数分为「公共参数」和「业务参数」:
公共参数:partner_id、access_token、timestamp(秒级时间戳)、sign(签名)
业务参数:item_id(商品 ID,必填)、shop_id(店铺 ID,必填)
示例参数结构:
plaintext
{
"partner_id": 123456,
"access_token": "your_access_token",
"timestamp": 1620000000,
"sign": "签名值",
"item_id": 123456789,
"shop_id": 9876543
}
签名生成虾皮签名生成步骤:
收集所有参数(除sign外),按参数名 ASCII 码升序排序
拼接为key=value格式的字符串(如access_token=xxx&item_id=123)
在拼接字符串前添加partner_key
对完整字符串进行 SHA256 加密,结果即为sign
发送请求将参数以 URL 查询字符串形式拼接,发送 GET 请求到对应区域的接口地址。
响应处理成功响应包含item字段(商品详情),错误响应包含error字段(错误码和描述)。
四、代码实现示例(Python)
以下是调用虾皮item_get接口的完整代码,包含签名生成、多区域支持和错误处理:
import requests
import hashlib
import time
import json
class ShopeeItemApi:
def init(self, partner_id, partner_key, access_token, region="sg"):
self.partner_id = partner_id
self.partner_key = partner_key
self.access_token = access_token
self.region = region # 区域代码:sg/my/th/id/tw等
self.base_url = f"https://{region}.api.shopee.com/api/v2/item/get"
def generate_sign(self, params):
"""生成签名"""
# 1. 按参数名ASCII升序排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 2. 拼接为key=value格式
sign_str = "".join([f"{k}={v}" for k, v in sorted_params])
# 3. 前缀添加partner_key
sign_str = self.partner_key + sign_str
# 4. SHA256加密
sign = hashlib.sha256(sign_str.encode()).hexdigest()
return sign
def item_get(self, item_id, shop_id):
"""
获取商品详情
:param item_id: 商品ID
:param shop_id: 店铺ID
:return: 商品详情数据
"""
# 1. 组装基础参数
params = {
"partner_id": self.partner_id,
"access_token": self.access_token,
"timestamp": int(time.time()), # 秒级时间戳
"item_id": item_id,
"shop_id": shop_id
}
# 2. 生成签名
params["sign"] = self.generate_sign(params)
try:
# 3. 发送GET请求
response = requests.get(
url=self.base_url,
params=params,
timeout=15
)
response.raise_for_status()
result = response.json()
# 4. 处理响应
if "error" in result and result["error"] != 0:
return {
"success": False,
"error_code": result["error"],
"error_msg": result.get("message", "未知错误")
}
return {
"success": True,
"data": result.get("item", {})
}
except Exception as e:
return {
"success": False,
"error_msg": f"请求异常: {str(e)}"
}
使用示例
if name == "main":
# 替换为实际参数
PARTNER_ID = 123456 # 开发者ID
PARTNER_KEY = "your_partner_key" # 开发者密钥
ACCESS_TOKEN = "your_access_token" # 店铺授权令牌
REGION = "sg" # 目标区域
# 初始化API客户端
api = ShopeeItemApi(PARTNER_ID, PARTNER_KEY, ACCESS_TOKEN, REGION)
# 调用接口,获取商品详情(需替换实际的item_id和shop_id)
result = api.item_get(
item_id=123456789,
shop_id=9876543
)
if result["success"]:
item = result["data"]
print(f"商品ID: {item.get('item_id')}")
print(f"商品标题: {item.get('name')}")
print(f"售价: {item.get('price')/100000} {item.get('currency')}") # 价格单位为1e-5
print(f"库存: {item.get('stock')}")
print(f"销量: {item.get('historical_sold')}")
print(f"主图地址: {item.get('images')[0] if item.get('images') else '无'}")
else:
print(f"获取失败: {result['error_msg']} (错误码: {result.get('error_code')})")
五、参数与返回字段详解
核心参数说明
item_id:商品唯一标识,可从虾皮商品详情页 URL 提取(如https://shopee.sg/product/123456789/9876543中,item_id=123456789)
shop_id:店铺 ID,与商品 ID 配套使用(上例中shop_id=9876543)
region:区域代码,决定接口调用的目标站点
价格字段特殊说明虾皮价格字段以1e-5为单位(如返回1500000表示 15.00 货币单位),需进行转换:
python
运行
price = item.get('price') / 100000 # 转换为实际价格
多规格商品处理多规格商品的详细信息在variations字段中:
json
"variations": [
{
"variation_id": 123,
"name": "红色-XL",
"price": 1500000, # 15.00货币单位
"stock": 100
}
]
六、错误处理与调试
常见错误码解析
1001:签名错误 → 检查签名生成逻辑、参数排序
1002:partner_id无效 → 确认应用是否已激活
1003:access_token无效 → 重新获取店铺授权
2001:商品不存在 → 检查item_id和shop_id是否匹配
4001:请求频率超限 → 虾皮默认 QPS 限制为 100,需降低频率
调试技巧
使用虾皮开放平台的API 测试工具验证请求
检查timestamp是否为当前时间(误差需≤5 分钟)
确认区域代码与店铺所在区域一致(如台湾店铺需用tw)
七、最佳实践与注意事项
多区域适配
针对不同区域站点(如新加坡、马来西亚)创建不同的 API 客户端实例
处理多币种转换(可结合汇率接口实时转换为本地货币)
性能优化
实现本地缓存(建议缓存时间 10-30 分钟)
批量获取商品详情时,采用并发控制(如线程池)并遵守 QPS 限制
合规使用
遵守《虾皮开放平台服务协议》,不得用于爬虫或数据倒卖
展示商品数据时需明确标注来源为虾皮
跨境应用需遵守目标市场的电商法规
稳定性保障
实现超时重试机制(最多 3 次,使用指数退避策略)
监控access_token有效期(通常为 180 天),及时刷新
对返回数据进行合法性校验(如价格、库存是否为合理值)
通过本文的指南,开发者可以系统掌握虾皮item_get接口的对接方法和跨境场景适配技巧。在实际应用中,应重点关注多区域差异和签名安全,设计合理的调用策略,平衡数据实时性与接口性能,构建稳定高效的商品信息获取功能