如何通过Shopee API根据商品ID获取商品详情

7 阅读1分钟

在电商平台开发中,调用API获取商品详情是常见需求。Shopee(虾皮)作为主流平台,提供了开放的API接口,允许开发者根据商品ID(如itemiditem_id)查询详细信息。本文将一步步指导你实现这一过程,包括准备工作、API调用、代码示例和错误处理。内容基于Shopee Open Platform的通用规范,确保真实可靠。

步骤1: 准备工作

在调用API前,你需要完成以下基础设置:

  • 注册开发者账号:访问Shopee Open Platform官网,注册账号并通过审核。

  • 获取API凭证:登录开发者中心,创建应用并获取关键参数:

    • partner_id:你的应用ID。
    • shop_id:店铺ID(如果关联店铺)。
    • secret_key:用于生成签名的密钥。
  • 环境准备:确保你有编程环境(如Python),并安装必要的库(如requests)。

这些凭证是安全调用API的基础,缺失会导致请求失败。签名生成涉及哈希算法(如HMAC-SHA256),公式可表示为sign = \text{hash}(\text{secret_key} + \text{query_string}),但实际实现需在代码中完成。

步骤2: API接口说明

Shopee的获取商品详情API使用HTTP GET方法,端点URL通常为:

https://api.shopee.com/v2/item/get

关键参数包括:

  • item_id:商品ID,必须是有效的Shopee商品ID,如123456789123456789
  • 其他必填参数:partner_id, shop_id, timestamp(当前时间戳),和sign(签名)。

API响应为JSON格式,包含商品详情字段,如标题、价格、库存和描述。响应结构示例:

{
  "item": {
    "item_id": 123456789,
    "item_name": "示例商品",
    "price": 100.00,
    "stock": 50,
    "description": "商品详细描述..."
  }
}

如果参数无效或凭证错误,API可能返回错误码(如400 Bad Request)。

步骤3: 请求构建

构建请求时,需生成签名以确保安全。签名算法步骤:

  1. 将所有参数(除sign外)按字母顺序排序。
  2. 拼接参数字符串(如item_id=123456789&partner_id=YOUR_PARTNER_ID...)。
  3. 使用secret_key对拼接字符串应用HMAC-SHA256哈希,生成签名sign

数学上,哈希过程可抽象为: \text{sign} = \text{HMAC-SHA256}(\text{secret_key}, \text{sorted_query_string}) 在代码中实现时,避免手动计算,使用库函数更可靠。

步骤4: 代码示例(Python)

以下Python示例演示了完整调用过程。假设你已安装requestshmac库。

import requests
import time
import hmac
import hashlib
import urllib.parse

def get_product_details(item_id, partner_id, shop_id, secret_key):
    # 基础URL
    api_url = "https://api.shopee.com/v2/item/get"
    
    # 生成时间戳(单位:秒)
    timestamp = str(int(time.time()))
    
    # 构建参数字典
    params = {
        "item_id": item_id,
        "partner_id": partner_id,
        "shop_id": shop_id,
        "timestamp": timestamp
    }
    
    # 排序并拼接参数字符串
    sorted_params = sorted(params.items())
    query_string = "&".join([f"{key}={value}" for key, value in sorted_params])
    
    # 生成签名:HMAC-SHA256
    sign = hmac.new(
        secret_key.encode('utf-8'),
        query_string.encode('utf-8'),
        hashlib.sha256
    ).hexdigest()
    
    # 添加签名到参数
    params["sign"] = sign
    
    # 发送GET请求
    response = requests.get(api_url, params=params)
    
    # 检查响应状态
    if response.status_code == 200:
        return response.json()  # 返回解析后的JSON数据
    else:
        # 错误处理:打印错误信息
        error_msg = f"API请求失败,状态码:{response.status_code}, 响应:{response.text}"
        raise Exception(error_msg)

# 示例调用
if __name__ == "__main__":
    # 替换为你的凭证
    item_id = "123456789"  # 商品ID
    partner_id = "YOUR_PARTNER_ID"
    shop_id = "YOUR_SHOP_ID"
    secret_key = "YOUR_SECRET_KEY"
    
    try:
        product_details = get_product_details(item_id, partner_id, shop_id, secret_key)
        print("商品详情:", product_details)
    except Exception as e:
        print("错误:", str(e))

这段代码:

  • 定义函数get_product_details,接受商品ID和凭证。
  • 生成时间戳和签名。
  • 发送请求并处理响应。
  • 使用异常处理捕获错误。

步骤5: 响应解析与错误处理

成功响应后,解析JSON数据以提取商品信息。常见字段包括:

  • item_id:商品ID。
  • item_name:标题。
  • price:价格(单位:货币)。
  • stock:库存数量。

错误处理建议:

  • 常见错误码

    • 400:参数无效(如商品ID格式错误)。
    • 401:认证失败(签名或凭证错误)。
    • 404:商品不存在。
  • 调试技巧

    • 验证参数:确保itemiditem_id是数字字符串。
    • 检查签名:使用Shopee文档中的测试工具比对。
    • 重试机制:添加延时重试(如5秒后重试)。

注意事项

  • 频率限制:Shopee API有调用频率限制(如每分钟100次),避免频繁请求。
  • 数据安全:保密secret_key,不要在客户端代码中硬编码。
  • 版本兼容:API可能更新,定期查看Shopee官方文档。
  • 测试环境:先在沙盒环境测试,再用于生产。

总结

通过本文,你学会了如何基于Shopee API根据商品ID获取商品详情。核心步骤包括注册开发者、构建请求、生成签名和处理响应。示例代码可直接集成到你的项目中。API调用是高效获取数据的方式,但务必遵循平台规范以确保稳定性。如有任何疑问,欢迎大家留言探讨。