0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

京东比价项目开发实录:京东API接口(2025)

邓林 ? 来源:jf_63013664 ? 作者:jf_63013664 ? 2025-08-22 09:53 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

?

在电商开发的修罗场里摸爬滚打这些年,和京东商品详情API接口的 “较量” 堪称一部跌宕起伏的奋斗史。从申请权限时的层层关卡,到数据解析时的各种 “暗礁”,今天就把这段实战经历掰开揉碎,配上亲测有效的代码,给大伙避避雷!

wKgZO2idiI-AWRVrAAtexaV4-PQ400.png

还记得第一次对接京东API,天真地以为和其他平台大同小异。结果光是申请开发者权限就碰了一鼻子灰 —— 京东对企业资质审核极为严格,营业执照、ICP 备案、应用场景说明反复修改了三轮,整整一周才收到通过通知。好不容易拿到App Key和App Secret,签名算法又成了拦路虎。京东采用的HMAC-SHA256加密方式,对参数拼接顺序、URL 编码要求近乎苛刻,稍有差错就返回10001签名错误。那段时间熬夜翻看官方文档、GitHub 示例,终于啃出了签名生成函数:

python

运行

import hashlib
import hmac
import time
import urllib.parse


def generate_signature(params, app_secret):
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    query_str = ""
    for k, v in sorted_params:
        if isinstance(v, list):
            v = ",".join(map(str, v))
        query_str += f"{k}{v}"
    sign_str = f"{app_secret}{query_str}{app_secret}"
    return hmac.new(
        app_secret.encode('utf-8'),
        sign_str.encode('utf-8'),
        hashlib.sha256
    ).hexdigest().upper()


# 使用示例
api_params = {
    "method": "jd.union.open.goods.query",
    "app_key": "your_app_key",
    "keyword": "手机",
    "timestamp": str(int(time.time()))
}
signed_params = generate_signature(api_params, "your_app_secret")
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

解决了签名问题,新的 “坑” 接踵而至。京东对 API 调用频率限制十分严格,不同接口还有差异化限流策略。为了避免触发封禁,我用 Python 的asyncio结合信号量,实现了异步请求与限流控制:

python

运行

import asyncio
import aiohttp


class ???????RateLimiter:
    def __init__(self, rate_limit):
        self.semaphore = asyncio.Semaphore(rate_limit)

    async def limit(self):
        async with self.semaphore:
            yield


async def fetch_product_detail(session, sku_id, signed_params):
    async with RateLimiter(10).limit():
        url = "https://api.jd.com/routerjson"
        params = {**signed_params, "sku_id": sku_id}
        async with session.get(url, params=params) as response:
            return await response.json()


async def main(sku_ids, signed_params):
    async with aiohttp.ClientSession() as session:
        tasks = [fetch_product_detail(session, sku, signed_params) for sku in sku_ids]
        results = await asyncio.gather(*tasks)
        return results


# 示例调用
sku_ids = ["123456789", "987654321"]
signed_params = {...}  # 已签名参数
asyncio.run(main(sku_ids, signed_params))
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

python数据实例

"stock": {
            "skuId": "100031963708",
            "realSkuId": "100031963708",
            "ArrivalDate": "",
            "Drd": "",
            "sidDely": 182,
            "promiseResult": "20:00前付款,预计明天(07月02日)送达",
            "isJDexpress": false,
            "StockState": 33,
            "rn": -1,
            "code": 1,
            "weightValue": "0.055kg",
            "fxgCode": "0",
            "afsCode": 1,
            "ir": [
                {
                    "iconSrc": "京准达",
                    "iconTip": "选择京准达服务,可指定精确时间点收货;若京东责任超时,即时赔付",
                    "helpLink": "//help.jd.com/user/issue/103-983.html",
                    "iconCode": "sendpay_zhun",
                    "resultCode": 1,
                    "showName": "京准达",
                    "picUrl": "http://m.360buyimg.com/mobilecms/jfs/t3172/266/1698067915/1634/64a0c40e/57d25fcfNd9c62bb7.png",
                    "iconType": 0,
                    "iconServiceType": 1
                },
                {
                    "iconSrc": "211限时达",
                    "iconTip": "上午下单,下午送达",
                    "helpLink": "https://help.jd.com/user/issue/91-953.html",
                    "iconCode": "sendpay_211",
                    "resultCode": 1,
                    "showName": "211限时达",
                    "picUrl": "//static.360buyimg.com/item/assets/picon/zhongbiao.png",
                    "iconType": 0,
                    "iconServiceType": 1
                },
                {
                    "iconSrc": "明日达",
                    "iconTip": "指定时间前下单,最快明日达",
                    "helpLink": "//help.jd.com/user/issue/103-983.html",
                    "iconCode": "sendpay_nextday",
                    "resultCode": 1,
                    "showName": "明日达",
                    "picUrl": "//static.360buyimg.com/item/assets/picon/zhongbiao.png",
                    "iconType": 0,
                    "iconServiceType": 1
                },
                {
                    "iconSrc": "预约送货",
                    "iconTip": "京东物流为该商品提供预约送货服务",
                    "helpLink": "//help.jd.com/user/issue/103-983.html",
                    "iconCode": "service_yysh",
                    "resultCode": 1,
                    "showName": "预约送货",
                    "picUrl": "https://m.360buyimg.com/babel/jfs/t1/116316/15/7402/1031/5ec22ca4E713f857c/dd49784b20933cf5.png",
                    "iconType": 0,
                    "iconServiceType": 6
                },
                {
                    "iconSrc": "部分收货",
                    "iconTip": "如果收件人收货时发现部分货物存在缺少配件、物流损等情形,京东物流提供订单半收服务",
                    "helpLink": "https://help.jd.com/user/issue/103-983.html",
                    "iconCode": "service_bfsh",
                    "resultCode": 1,
                    "showName": "部分收货",
                    "picUrl": "https://m.360buyimg.com/babel/jfs/t1/108073/34/18517/1071/5ec22ce0E11a3b1c5/f8ffea5f4cafa0f9.png",
                    "iconType": 0,
                    "iconServiceType": 6
                },
                {
                    "iconSrc": "送货上门",
                    "iconTip": "京东快递为您提供送货上门服务",
                    "helpLink": "https://help.jd.com/user/issue/254-4130.html",
                    "iconCode": "service_sssm",
                    "resultCode": 1,
                    "showName": "送货上门",
                    "picUrl": "https://m.360buyimg.com/babel/jfs/t1/115738/37/12143/1066/5f0c7d11E4faee520/de3879572e2b2014.png",
                    "iconType": 0,
                    "iconServiceType": 6
                },
                {
                    "iconSrc": "59元免基础运费",
                    "iconTip": "所选地址自营订单满59元免基础运费(20kg内),超出重量加收1元/kg续重运费。",
                    "helpLink": "//help.jd.com/user/issue/103-983.html",
                    "iconCode": "free_delivery_zhong",
                    "resultCode": 1,
                    "showName": "59元免基础运费",
                    "picUrl": "//static.360buyimg.com/item/assets/picon/mianyunfei.png",
                    "iconType": 0,
                    "iconServiceType": 4
                },
                {
                    "iconSrc": "京东物流",
                    "iconTip": "京东物流为您提供仓配一体供应链服务",
                    "helpLink": "https://help.jd.com/user/issue/list-81.html",
                    "iconCode": "service_jdwl",
                    "resultCode": 1,
                    "showName": "京东物流",
                    "picUrl": "https://m.360buyimg.com/babel/jfs/t1/130756/9/11972/4289/5f8674d3Eabfebbef/bb964241bd789a72.png",
                    "iconType": 0,
                    "iconServiceType": 4
                },
                {
                    "iconSrc": "7天价保",
                    "iconTip": "在下单或签收7天内,商品出现降价可享受价保服务,部分特殊场景不支持价保,可点击”>"了解详细规则",
                    "helpLink": "https://help.jd.com/user/issue/291-548.html",
                    "iconCode": "service_guominwuyou",
                    "resultCode": 1,
                    "showName": "7天价保",
                    "picUrl": "https://m.360buyimg.com/babel/jfs/t1/85923/26/10113/3475/5e144da1Ef978a914/d3d44f85b4221cf6.png",
                    "iconType": 0,
                    "iconServiceType": 3
                },
                {
                    "iconSrc": "自提",
                    "iconTip": "我们提供多种自提服务,包括京东自提点、自助提货柜、京东校园派、京东星配站、京东便民站等服务",
                    "helpLink": "//help.jd.com/user/issue/103-983.html",
                    "iconCode": "special_ziti",
                    "resultCode": 1,
                    "showName": "自提",
                    "picUrl": "//static.360buyimg.com/item/assets/picon/shoutixiang.png",
                    "iconType": 0,
                    "iconServiceType": 5
                }
            ],
            "promiseYX": {
                "iconSrc": "7天无理由退货",
                "iconTip": "支持7天无理由退货",
                "helpLink": "http://help.jd.com/user/issue/126-3780.html",
                "iconCode": "service_qitiantuihuo",
                "resultCode": 1,
                "showName": "7天无理由退货",
                "picUrl": "",
                "iconType": 0,
                "iconServiceType": 3
            },
            "self_D": {
                "venderId": 1000085871,
                "colType": 0,
                "shopId": 1000085871,
                "shopName": "zippo京东自营旗舰店",
                "vender": "zippo京东自营旗舰店",
                "hotLine": "",
                "shopWebsite": "http://zippo.jd.com",
                "po": true,
                "url": "//zippo.jd.com"
            },
            "serviceInfo": "由京东发货,zippo京东自营旗舰店提供售后服务",
            "sid": 182,
            "preStore": -1,
            "unifiedServiceTag": {
                "enable": true,
                "freightIconCodes": [
                    "free_delivery",
                    "free_delivery_zhong",
                    "free_delivery_fresh",
                    "free_delivery_fresh_zhong",
                    "Free_nbaoyou",
                    "Free_nsxbaoyou",
                    "free_baoyou",
                    "free_sxbaoyou"
                ],
                "iconServiceTypes": [
                    "1",
                    "5",
                    "6"
                ],
                "tsfw": [
                    {
                        "code": "s26",
                        "desc": "在下单或签收7天内,商品出现降价可享受价保服务(商品在消费者下单后因参与百亿补贴、政府补贴等活动导致降价不支持价保),可点击“>”了解详细规则",
                        "helpUrl": "https://ihelp.jd.com/l/help/scene/getSceneDetail?id=337318",
                        "logoUrl": "//m.360buyimg.com/babel/jfs/t1/166785/27/4308/10074/60113548Ea9bb7dbb/be0bac01dccf5f52.png",
                        "name": "7天价保",
                        "shortDesc": "7天内买贵退差价",
                        "iHelpLink": "https://ihelp.jd.com/l/help/scene/getSceneDetail?id=325798",
                        "ihelpLink": "https://ihelp.jd.com/l/help/scene/getSceneDetail?id=325798",
                        "mimgUrl": "//m.360buyimg.com/babel/jfs/t1/222474/40/8926/4033/61de8162E9b3a5a0c/b11a4cc5342015b0.png",
                        "mimgUrl2": "//m.360buyimg.com/lme/jfs/t1/222228/21/20461/3101/63048db5Ef37ece2e/83f0be5658b2f25b.png"
                    },
                    {
                        "code": "s141",
                        "desc": "由京东指定供应商提供售后服务",
                        "name": "供应商售后",
                        "shortDesc": "京东指定供应商售后"

python

运行

def parse_product_data(raw_data):
    try:
        return {
            "product_name": raw_data.get("wareInfo", {}).get("wareName", ""),
            "current_price": float(raw_data.get("wareInfo", {}).get("jdPrice", 0)),
            "original_price": float(raw_data.get("wareInfo", {}).get("marketPrice", 0)),
            "stock": int(raw_data.get("wareInfo", {}).get("stockNum", 0)),
            "brand": raw_data.get("wareInfo", {}).get("brandName", "")
        }
    except KeyError as e:
        print(f"字段缺失: {e}")
        return {}


# 示例调用
raw_response = {...}  # API返回数据
parsed_data = parse_product_data(raw_response)
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

最惊险的一次,帮客户开发商品比价系统时,突然遇到京东接口升级,原本正常的 “商品副标题” 字段被替换成了 “shortTitle”。由于没有做字段兼容性处理,导致前端页面大量数据缺失。吃一堑长一智,后来每次调用 API 都会写版本兼容函数,动态适配字段变化:

python

运行

def adapt_data_fields(data):
    if "wareName" in data.get("wareInfo", {}):
        data["wareInfo"]["product_title"] = data["wareInfo"].pop("wareName")
    if "jdPrice" in data.get("wareInfo", {}):
        data["wareInfo"]["current_price"] = data["wareInfo"].pop("jdPrice")
    return data


# 示例调用
adapted_data = adapt_data_fields(raw_response)
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

这些年踩过的坑、写过的代码,都成了宝贵的经验。如果有遇到其他问题都可以一起交流!

?审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    9101

    浏览量

    154367
  • API
    API
    +关注

    关注

    2

    文章

    1739

    浏览量

    64628
  • 京东
    +关注

    关注

    2

    文章

    1037

    浏览量

    49411
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    6折买元器件还送京东卡?99%的电子工程师:这波很赚!

    `都说做电子工程师特别不容易。平常早起贪黑画电路图、画板子、焊元器件已经够“折磨”了,买元器件更是“心累”...一、假IC、翻新IC太多,怕踩坑!二、要找各渠道比价格,太麻烦!三、某些平台不卖样品
    发表于 06-24 12:04

    京东外部文档--设备与京东云SSL接口V1.0

    京东外部文档--设备与京东云SSL接口,设备端与服务器端沟通的详细说明
    发表于 10-30 13:57 ?15次下载

    京东电商 API 接口,订单管理高效解决方案!

    ? 在当今电商高速发展的时代,京东作为领先的电商平台,其 API 接口为商家和开发者提供了强大的工具,帮助实现订单管理的高效化。本文将逐步解析京东
    的头像 发表于 07-04 16:12 ?263次阅读
    <b class='flag-5'>京东</b>电商 <b class='flag-5'>API</b> <b class='flag-5'>接口</b>,订单管理高效解决方案!

    淘宝 vs 京东电商 API 接口,谁才是数据王者?

    ? 在当今数字化电商时代,API(应用程序编程接口)是企业获取和分析数据的关键工具。淘宝和京东作为中国两大电商巨头,其API接口的优劣直接影
    的头像 发表于 07-08 15:51 ?297次阅读
    淘宝 vs <b class='flag-5'>京东</b>电商 <b class='flag-5'>API</b> <b class='flag-5'>接口</b>,谁才是数据王者?

    京东方华灿光电亮相2025京东方投资者日

    近日,“2025京东方投资者日”活动在上海浦东香格里拉酒店隆重举行。京东方华灿董事长张兆洪先生,副总裁兼董事会秘书张超先生等高层管理者出席,向投资者及媒体详细介绍了京东方华灿最新战略布
    的头像 发表于 07-16 14:11 ?593次阅读

    京东API集成订单系统,处理速度提升50%!

    ? 在当今电商时代,高效的订单处理是企业成功的关键。京东作为中国领先的电商平台,其开放API为商家提供了强大的工具,能显著优化订单系统性能。本文将逐步介绍如何通过集成京东API,实现订
    的头像 发表于 07-28 14:54 ?189次阅读
    <b class='flag-5'>京东</b><b class='flag-5'>API</b>集成订单系统,处理速度提升50%!

    京东API物流跟踪集成,发货效率翻倍无忧!

    ? 在当今电商时代,高效的物流管理是企业成功的关键。京东作为行业巨头,其开放的API接口为企业提供了强大的物流跟踪功能。通过集成京东API
    的头像 发表于 07-29 14:44 ?227次阅读
    <b class='flag-5'>京东</b><b class='flag-5'>API</b>物流跟踪集成,发货效率翻倍无忧!

    微信小程序API+京东支付,无缝结账体验满分!

    API接口,为开发者提供了无限可能。而京东支付,作为京东金融旗下的高效支付解决方案,以其安全性和稳定性著称。将两者结合,通过微信小程序
    的头像 发表于 08-05 15:44 ?261次阅读
    微信小程序<b class='flag-5'>API</b>+<b class='flag-5'>京东</b>支付,无缝结账体验满分!

    利用电商 API 接口,轻松完成多平台价格监控

    的核心价值 电商平台(如淘宝、京东、拼多多)提供的API接口本质是数据通道,开发者通过标准协议可获取: 实时价格数据 商品库存状态 促销活动信息 用户评价数据 以价格监控为例,
    的头像 发表于 08-11 14:35 ?535次阅读
    利用电商 <b class='flag-5'>API</b> <b class='flag-5'>接口</b>,轻松完成多平台价格监控

    京东 API 接口:打造高效京东店铺订单处理系统

    管理效率。本文将探讨如何利用京东 API 打造一个高效、可靠的订单处理系统。 京东 API 接口简介
    的头像 发表于 08-14 14:49 ?155次阅读
    <b class='flag-5'>京东</b> <b class='flag-5'>API</b> <b class='flag-5'>接口</b>:打造高效<b class='flag-5'>京东</b>店铺订单处理系统

    巧用京东 API,精准把握京东平台用户消费偏好

    ? 在当今电商竞争激烈的环境下,精准把握用户消费偏好是企业提升转化率、优化营销策略的关键。京东作为国内领先的电商平台,提供了丰富的开放 API(应用程序接口),允许开发者访问用户行为数
    的头像 发表于 08-14 15:00 ?176次阅读
    巧用<b class='flag-5'>京东</b> <b class='flag-5'>API</b>,精准把握<b class='flag-5'>京东</b>平台用户消费偏好

    揭秘京东 API,让京东店铺商品推荐更懂用户

    探讨如何利用它让推荐系统更“懂”用户的需求,从而提升转化率和用户满意度。 什么是京东 API京东 API(Application Programming Interface)是一套
    的头像 发表于 08-14 15:04 ?190次阅读
    揭秘<b class='flag-5'>京东</b> <b class='flag-5'>API</b>,让<b class='flag-5'>京东</b>店铺商品推荐更懂用户

    京东 API 助力,京东平台促销活动效果实时评估

    痛点,通过实时数据获取和分析,帮助商家高效评估活动效果。本文将逐步解析如何利用京东API实现促销活动的实时监控与评估,确保决策精准、响应迅速。 第一步:理解京东API的核心功能
    的头像 发表于 08-14 15:07 ?171次阅读
    <b class='flag-5'>京东</b> <b class='flag-5'>API</b> 助力,<b class='flag-5'>京东</b>平台促销活动效果实时评估

    京东 API 赋能,京东店铺广告投放数据深度洞察

    ? 在当今电商竞争激烈的环境下,京东店铺如何高效管理广告投放并实现精准营销?京东 API(应用程序接口)作为核心技术工具,为店铺提供了强大的数据接入和分析能力。本文将深入探讨
    的头像 发表于 08-15 14:48 ?176次阅读
    <b class='flag-5'>京东</b> <b class='flag-5'>API</b> 赋能,<b class='flag-5'>京东</b>店铺广告投放数据深度洞察

    借助京东 API京东店铺商品质量反馈快速收集

    自动化、高效地获取和处理反馈数据,实现快速响应。本文将逐步介绍如何利用京东 API 实现这一过程,确保数据真实可靠。 1. 京东 API 简介与优势
    的头像 发表于 08-15 14:55 ?177次阅读
    借助<b class='flag-5'>京东</b> <b class='flag-5'>API</b>,<b class='flag-5'>京东</b>店铺商品质量反馈快速收集