×

虾皮 item_get 接口对接全攻略:从入门到精通

万邦科技Lex 万邦科技Lex 发表于2025-10-07 13:38:27 浏览195 评论0

抢沙发发表评论

         注册账号免费测试虾皮API数据接口

虾皮(Shopee)开放平台的item_get接口是根据商品 ID 获取详情的核心工具,适用于跨境电商分析、多平台比价、商品监控等场景。本文将全面讲解该接口的对接流程、认证机制、代码实现及最佳实践,帮助开发者系统掌握从入门到精通的全流程。

一、接口基础认知

  1. 核心功能item_get接口通过商品 ID 获取虾皮平台的商品详细信息,涵盖:
    • 基本信息:商品 ID、标题、描述、主图及图片列表

    • 价格信息:原价、售价、折扣、货币单位(支持多币种)

    • 库存信息:总库存、规格库存、预售状态

    • 交易信息:销量、评分、评论数

    • 规格信息:颜色、尺寸等多规格组合及对应价格 / 库存

    • 店铺信息:店铺 ID、店铺名称、卖家评分

  2. 接口端点虾皮接口地址需区分区域站点,格式为:https://{region}.api.shopee.com/api/v2/item/get常见区域代码:
    • 新加坡:sg

    • 马来西亚:my

    • 泰国:th

    • 印度尼西亚:id

    • 台湾地区:tw

  3. 请求方式:HTTP GET
  4. 数据格式:响应为 JSON 格式
  5. 认证方式:采用partner_id+access_token+ 签名认证

二、对接前置准备

  1. 开发者账号注册访问虾皮开放平台注册账号,完成企业认证(个人账号权限有限)。
  2. 创建应用与获取密钥
    • 在开放平台控制台创建应用,选择目标市场(如东南亚、台湾)

    • 应用创建后,获取partner_idpartner_key(密钥需严格保密)

    • 完成店铺授权,获取access_token(每个店铺的access_token独立)

  3. 权限申请
    • item_get接口属于基础商品接口,默认开放调用权限

    • 如需获取敏感信息(如卖家联系方式),需单独申请权限

  4. 环境准备
    • 开发语言:支持 Python/Java/PHP 等任意可发起 HTTP 请求的语言

    • 测试工具:Postman 或虾皮开放平台调试工具

    • 依赖库:Python 需安装requests库(pip install requests

三、接口调用流程

  1. 参数组装接口参数分为「公共参数」和「业务参数」:
    示例参数结构:
    plaintext
    {
      "partner_id": 123456,
      "access_token": "your_access_token",
      "timestamp": 1620000000,
      "sign": "签名值",
      "item_id": 123456789,
      "shop_id": 9876543
    }
    • 公共参数partner_idaccess_tokentimestamp(秒级时间戳)、sign(签名)

    • 业务参数item_id(商品 ID,必填)、shop_id(店铺 ID,必填)

  2. 签名生成虾皮签名生成步骤:
    1. 收集所有参数(除sign外),按参数名 ASCII 码升序排序

    2. 拼接为key=value格式的字符串(如access_token=xxx&item_id=123

    3. 在拼接字符串前添加partner_key

    4. 对完整字符串进行 SHA256 加密,结果即为sign

  3. 发送请求将参数以 URL 查询字符串形式拼接,发送 GET 请求到对应区域的接口地址。
  4. 响应处理成功响应包含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')})")

五、参数与返回字段详解

  1. 核心参数说明
    • item_id:商品唯一标识,可从虾皮商品详情页 URL 提取(如https://shopee.sg/product/123456789/9876543中,item_id=123456789

    • shop_id:店铺 ID,与商品 ID 配套使用(上例中shop_id=9876543

    • region:区域代码,决定接口调用的目标站点

  2. 价格字段特殊说明虾皮价格字段以1e-5为单位(如返回1500000表示 15.00 货币单位),需进行转换:
    python
    运行
    price = item.get('price') / 100000  # 转换为实际价格
  3. 多规格商品处理多规格商品的详细信息在variations字段中:
    json
    "variations": [
      {
        "variation_id": 123,
        "name": "红色-XL",
        "price": 1500000,  # 15.00货币单位    "stock": 100
      }]

六、错误处理与调试

  1. 常见错误码解析
    • 1001:签名错误 → 检查签名生成逻辑、参数排序

    • 1002partner_id无效 → 确认应用是否已激活

    • 1003access_token无效 → 重新获取店铺授权

    • 2001:商品不存在 → 检查item_idshop_id是否匹配

    • 4001:请求频率超限 → 虾皮默认 QPS 限制为 100,需降低频率

  2. 调试技巧
    • 使用虾皮开放平台的API 测试工具验证请求

    • 检查timestamp是否为当前时间(误差需≤5 分钟)

    • 确认区域代码与店铺所在区域一致(如台湾店铺需用tw

七、最佳实践与注意事项

  1. 多区域适配
    • 针对不同区域站点(如新加坡、马来西亚)创建不同的 API 客户端实例

    • 处理多币种转换(可结合汇率接口实时转换为本地货币)

  2. 性能优化
    • 实现本地缓存(建议缓存时间 10-30 分钟)

    • 批量获取商品详情时,采用并发控制(如线程池)并遵守 QPS 限制

  3. 合规使用
    • 遵守《虾皮开放平台服务协议》,不得用于爬虫或数据倒卖

    • 展示商品数据时需明确标注来源为虾皮

    • 跨境应用需遵守目标市场的电商法规

  4. 稳定性保障
    • 实现超时重试机制(最多 3 次,使用指数退避策略)

    • 监控access_token有效期(通常为 180 天),及时刷新

    • 对返回数据进行合法性校验(如价格、库存是否为合理值)

通过本文的指南,开发者可以系统掌握虾皮item_get接口的对接方法和跨境场景适配技巧。在实际应用中,应重点关注多区域差异和签名安全,设计合理的调用策略,平衡数据实时性与接口性能,构建稳定高效的商品信息获取功能


群贤毕至

访客