Lazada 开放平台的item_get接口是获取商品详情的核心工具,适用于东南亚跨境电商分析、多平台比价、选品系统等场景。本文将全面讲解该接口的对接流程、认证机制、代码实现及最佳实践,帮助开发者系统掌握从入门到精通的全流程。
一、接口基础认知
二、对接前置准备
三、接口调用流程
四、代码实现示例(Python)
import requests
import hashlib
import time
import json
class LazadaItemApi:
def __init__(self, app_key, app_secret, access_token, region="sg"):
self.app_key = app_key
self.app_secret = app_secret
self.access_token = access_token
self.region = region # 站点区域:sg/my/co.th/co.id/com.ph/com.vn
self.base_url = f"https://api.lazada.{region}/rest/product/item/get"
self.token_expire_time = 0 # 令牌过期时间(时间戳,秒)
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. 前后添加app_secret
sign_str = self.app_secret + sign_str + self.app_secret
# 4. SHA256加密
sign = hashlib.sha256(sign_str.encode()).hexdigest().upper()
return sign
def refresh_access_token(self):
"""刷新access_token(需根据实际授权方式实现)"""
# 实际应用中需根据Lazada授权流程实现令牌刷新
# 此处为示例,实际需替换为真实刷新逻辑
token_url = f"https://api.lazada.{self.region}/rest/auth/token/refresh"
params = {
"app_key": self.app_key,
"refresh_token": "your_refresh_token",
"timestamp": int(time.time())
}
# 生成签名
params["sign"] = self.generate_sign(params)
response = requests.get(token_url, params=params)
result = response.json()
if result.get("code") != "0":
raise Exception(f"令牌刷新失败: {result.get('message')}")
self.access_token = result["access_token"]
self.token_expire_time = time.time() + int(result["expires_in"])
return self.access_token
def item_get(self, item_id, fields=None):
"""
获取商品详情
:param item_id: 商品ID
:param fields: 需要返回的字段,多个用逗号分隔,如"item_id,title,price"
:return: 商品详情数据
"""
# 检查并刷新令牌
if not self.access_token or time.time() > self.token_expire_time - 3600:
self.refresh_access_token()
# 1. 组装参数
params = {
"app_key": self.app_key,
"access_token": self.access_token,
"timestamp": int(time.time()), # 秒级时间戳
"item_id": item_id
}
# 添加可选字段
if fields:
params["fields"] = fields
# 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 result.get("code") != "0":
return {
"success": False,
"error_code": result.get("code"),
"error_msg": result.get("message")
}
return {
"success": True,
"data": result.get("data", {})
}
except Exception as e:
return {
"success": False,
"error_msg": f"请求异常: {str(e)}"
}
# 使用示例
if __name__ == "__main__":
# 替换为实际参数
APP_KEY = "your_app_key"
APP_SECRET = "your_app_secret"
ACCESS_TOKEN = "your_access_token"
REGION = "sg" # 新加坡站点
# 初始化API客户端
api = LazadaItemApi(APP_KEY, APP_SECRET, ACCESS_TOKEN, REGION)
# 调用接口,获取商品详情
result = api.item_get(
item_id="123456789",
fields="item_id,title,price,original_price,stock,main_image,sales_count,seller_name"
)
if result["success"]:
item = result["data"]
print(f"商品ID: {item.get('item_id')}")
print(f"商品标题: {item.get('title')}")
print(f"售价: {item.get('price')} {item.get('currency')}")
print(f"原价: {item.get('original_price')} {item.get('currency')}")
print(f"库存: {item.get('stock')}")
print(f"销量: {item.get('sales_count')}")
print(f"卖家名称: {item.get('seller_name')}")
print(f"主图地址: {item.get('main_image')}")
else:
print(f"获取失败: {result['error_msg']} (错误码: {result.get('error_code')})")