×

得物商品详情API接口的技术调用要点之参数规范

知名用户18007905473 知名用户18007905473 发表于2026-01-27 14:12:49 浏览63 评论0

抢沙发发表评论

你现在聚焦于得物商品详情 API 接口调用中参数规范这一核心要点,这是避免请求失败、保证数据精准的关键环节 —— 参数的格式、取值、传递方式哪怕有微小偏差,都可能导致接口返回错误或数据不全。以下从核心参数分类、格式约束、取值规则、避坑要点四个维度,拆解参数规范的全部关键内容:

一、 核心参数分类与必填性规范

得物商品详情 API 的参数可分为基础定位参数、鉴权参数、场景适配参数三类,每类参数的必填性和作用有明确规范:
参数类别核心参数必填性核心规范
基础定位参数itemId必传商品全局唯一标识,得物平台商品 ID 为纯数字串(如12345678),需从商品链接 / 平台数据源精准提取,不可传空、非数字或错误 ID

skuId可选商品规格唯一标识(对应尺码 / 配色 / 容量等),不传则返回商品基础信息,传则精准返回该规格的价格 / 库存;格式为数字串,需与itemId匹配
鉴权参数appKey必传开放平台申请的应用唯一标识,纯字符串(如dw_app_123456),需与签名中的appKey完全一致

timestamp必传时间戳,主流为毫秒级(部分接口为秒级,以文档为准),格式为数字串(如1735689600000),需与服务器时间偏差≤5 分钟

nonce必传随机数,用于防重放,格式为 6~16 位数字 / 字母组合(如897897a8b9c7d8),每次请求需生成新值,不可重复使用

sign必传签名串,按平台指定算法(HMAC-SHA256/MD5)生成,字符集为小写十六进制,长度固定(如 SHA256 签名为 64 位)
场景适配参数platform可选终端类型,取值仅支持app/h5/miniProgram(小写),不传默认app;不同取值返回的图片链接、字段结构略有差异

region可选地区编码,取值为 6 位数字(如310100= 上海、110100= 北京),需符合得物平台的地区编码规范,影响库存、发货时效等本地化数据

version可选接口版本号,取值为字符串(如v1/v2),需传平台已开放的版本,不传默认最新稳定版

二、 参数格式与编码规范

所有参数的传递需严格遵守格式约束,否则会触发参数解析错误:
  1. 字符编码
    • 所有参数(包括中文、特殊符号)必须采用UTF-8编码,禁止使用GBK/GB2312,否则会导致商品名称、规格等中文参数乱码;

    • 示例(Python 中处理中文参数):

      python
      运行
      # 正确:先转UTF-8编码,再拼接到请求串item_name = "李宁韦德之道10 白黑"encoded_name = item_name.encode("utf-8").decode("utf-8")  # 确保编码为UTF-8
  2. 参数传递方式
    • GET请求:参数需拼接到 URL 后,且进行URL 编码(如空格转%20、中文转%E4%BD%A0);

      python
      运行
      import urllib.parse
      params = {"itemId": "123456", "platform": "app"}encoded_params = urllib.parse.urlencode(params)  # 自动URL编码url = f"https://api.dewu.com/item/detail?{encoded_params}"
    • POST请求:参数需放在请求体中,格式按接口要求(application/jsonapplication/x-www-form-urlencoded),禁止混合传递(部分参数在 URL、部分在请求体)。

  3. 数值类型规范
    • 数字型参数(如itemIdtimestampregion):需传递字符串格式的数字,而非整型 / 浮点型(避免语言序列化差异,如 Python 的123和 JavaScript 的123.0导致签名错误);

    • 示例:timestamp需传"1735689600000",而非17356896000001.7356896e12

  4. 空值处理规范
    • 非必传参数若无值,建议直接省略,而非传递null、空字符串""0

    • 错误示例:{"skuId": ""} → 正确示例:不传入skuId参数;

    • 特殊场景:若接口明确要求非空,需传默认值(如region无指定则传000000,以文档为准)。

三、 参数取值与逻辑约束

部分参数不仅有格式要求,还需符合业务逻辑约束:
  1. itemIdskuId的匹配性
    • skuId必须属于对应itemId的商品规格,不可跨商品传递(如商品 A 的skuId不能搭配商品 B 的itemId);

    • 验证方式:可先调用无skuId的接口获取该商品的所有skuId列表,再选择有效skuId传递。

  2. timestamp的时效性
    • 时间戳需为当前时间 ±5 分钟,超出范围会被判定为 “请求过期”,签名直接失效;

    • 建议:请求前实时生成时间戳,避免提前生成后长时间未发送。

  3. nonce的唯一性
    • 同一appKey下,nonce值需保证每次请求唯一(建议用 “时间戳 + 随机数” 生成),重复的nonce会触发防重放机制,请求被拒绝;

    • 示例:nonce = f"{int(time.time()*1000)}{random.randint(1000,9999)}"

四、 常见参数错误与避坑要点

常见错误表现避坑方案
时间戳单位错误签名验证失败(401 错误)确认接口要求是 “毫秒级” 还是 “秒级”,Python 中time.time()返回秒级,需 ×1000 转为毫秒级
URL 未编码中文参数乱码、请求参数解析失败所有拼接在 URL 中的参数必须通过urllib.parse.urlencode()编码
skuId 与 itemId 不匹配返回 “规格不存在”(code≠0)先调用基础接口获取商品的 sku 列表,再选择有效 skuId
签名串参数顺序错误签名验证失败严格按平台文档的参数顺序拼接签名串(如文档要求appKey→timestamp→itemId,则不可调换)
重复使用 nonce403 Forbidden每次请求生成新的 nonce,且记录已使用的 nonce(短期缓存),避免重复

总结

得物商品详情 API 参数规范的核心要点可归纳为:
  1. 必填参数不遗漏itemIdappKeytimestampnoncesign是核心必传项,缺一不可;

  2. 格式编码要统一:所有参数 UTF-8 编码,数字型参数传字符串,GET 请求参数需 URL 编码;

  3. 取值逻辑要匹配skuIditemId对应、时间戳在有效期内、nonce 保证唯一;

  4. 空值处理有讲究:非必传参数无值时直接省略,不传递空字符串 / NULL。


群贤毕至

访客