虾皮(Shopee)开放平台的item_get接口是根据商品 ID 获取详情的核心工具,适用于跨境电商分析、多平台比价、商品监控等场景。本文将全面讲解该接口的对接流程、认证机制、代码实现及最佳实践,帮助开发者系统掌握从入门到精通的全流程。
一、接口基础认知
二、对接前置准备
三、接口调用流程
四、代码实现示例(Python)
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')})")