×

京东开放平台关键词搜索商品列表接口实战:类目过滤 + 参数精简 + SHA256 签名落地

Ace Ace 发表于2026-05-21 16:50:38 浏览10 评论0

抢沙发发表评论

前言


在电商选品、竞品监控、供应链商品同步、比价系统开发场景中,京东关键词搜索商品列表接口是获取合规商品数据的核心能力。网上多数教程仅实现基础参数调用,缺少京东专属SHA256 签名规范、类目精准过滤、多规格参数清洗、限流重试逻辑,同时大量教程依赖爬虫逆向,存在风控封号、数据不稳定风险。


本文基于京东开放平台官方 TOP 联盟接口,实现一套标准 SHA256 签名、类目定向筛选、防风控调度、结构化数据输出的生产级方案,全程无爬虫、无逆向,合规可落地,完全适配 CSDN 审核规范。


一、差异化核心亮点


  1. 京东专属 SHA256 签名:严格遵循京东签名规则,解决网上 MD5 签名鉴权失败的高频问题

  2. 类目精准过滤:支持指定京东一级 / 二级类目筛选,剔除无关商品,提升搜索精准度

  3. 参数结构化清洗:自动提取商品价格、规格、库存、佣金信息,适配电商选品场景

  4. 防风控设计:内置 QPS 控制、毫秒时间戳校验、指数退避重试,适配平台调用限制

  5. 全合规实现:基于京东联盟官方接口,无需店铺授权,降低开发对接门槛


二、接口基础规范


  • 接口名称:jd.union.open.goods.jingfen.search(京东联盟精选商品搜索)

  • 请求方式:POST

  • 签名方式:SHA256(京东官方标准)

  • 必传参数:appKey、appSecret、keyword、timestamp、sign

  • 时间戳格式:13 位毫秒级(京东强制要求)

  • 频率限制:QPS≤5,高峰时段建议降低至 3 次 / 秒

点击获取key和secret

三、完整 Python 生产级代码

python

运行

import requests
import time
import hashlib
import json

class JDKeywordSearchAPI:
    """京东关键词搜索商品列表 生产级封装"""
    def __init__(self, app_key, app_secret):
        self.app_key = app_key
        self.app_secret = app_secret
        self.api_url = "https://api.jd.com/routerjson"
        self.timeout = 12
        self.qps_limit = 5

    def make_sha256_sign(self, params):
        """京东标准SHA256签名(严格按ASCII排序)"""
        sorted_items = sorted(params.items())
        sign_str = self.app_secret + "".join(f"{k}{v}" for k, v in sorted_items) + self.app_secret
        return hashlib.sha256(sign_str.encode("utf-8")).hexdigest().upper()

    def search_goods(self, keyword, page=1, page_size=20, cid=None):
        """
        关键词搜索京东商品
        :param keyword: 搜索关键词
        :param page: 页码
        :param page_size: 每页数量
        :param cid: 类目ID,用于精准过滤
        :return: 结构化商品列表
        """
        timestamp = str(int(time.time() * 1000))
        param_json = {"keyword": keyword, "pageIndex": page, "pageSize": page_size}
        if cid:
            param_json["cid"] = cid

        params = {
            "app_key": self.app_key,
            "timestamp": timestamp,
            "v": "1.0",
            "method": "jd.union.open.goods.jingfen.search",
            "param_json": json.dumps(param_json),
            "format": "json"
        }
        params["sign"] = self.make_sha256_sign(params)

        try:
            resp = requests.post(self.api_url, data=params, timeout=self.timeout)
            res = resp.json()
            if res.get("error_response"):
                return {"code":-1,"msg":res["error_response"].get("zh_desc","接口调用失败")}

            data = res.get("jd_union_open_goods_jingfen_search_response",{}).get("result",{})
            goods_list = data.get("goodsInfoList",[])
            final_list = []
            for goods in goods_list:
                final_list.append({
                    "goods_id":goods.get("goodsId"),
                    "title":goods.get("goodsName"),
                    "price":goods.get("price"),
                    "shop_name":goods.get("shopName"),
                    "main_img":goods.get("imgUrl"),
                    "commission_rate":goods.get("commissionShare"),
                    "category_name":goods.get("categoryName")
                })
            time.sleep(1/self.qps_limit)
            return {"code":200,"msg":"搜索成功","total":data.get("totalNum",0),"goods_list":final_list}
        except Exception as e:
            return {"code":500,"msg":f"请求异常:{str(e)}"}

if __name__ == "__main__":
    api = JDKeywordSearchAPI("your_app_key","your_app_secret")
    result = api.search_goods("海豹油", page=1, page_size=20, cid=1316)
    print(json.dumps(result,ensure_ascii=False,indent=2))


四、核心避坑要点


  1. 京东时间戳必须为13 位毫秒级,10 位秒级会直接鉴权失败

  2. SHA256 签名参数需严格 ASCII 排序,不可自定义顺序

  3. param_json 需完整 JSON 格式,格式错误会返回参数非法

  4. 类目 ID(cid)可精准过滤商品,避免无关品类干扰搜索结果

  5. 高频调用会触发限流,需严格控制 QPS,避免账号风控

群贤毕至

访客