深度分析京东工业API接口,用Python脚本实现

简介: 京东工业是京东旗下工业供应链服务平台,提供商品查询、库存管理、订单处理等API接口,支持企业高效对接工业采购系统。本文解析其API架构、认证机制及Python调用示例,助力企业集成工业供应链能力。

京东工业(JD Industrial)是京东旗下专注于工业供应链的服务平台,其开放 API 接口主要面向企业客户,提供工业商品采购、库存查询、订单管理、供应商合作等全链路服务。以下从接口体系、认证机制、核心功能展开分析,并提供 Python 调用实现(以商品查询和库存接口为例)。
一、京东工业 API 核心特性分析

  1. 接口体系与功能域
    京东工业 API 基于京东开放平台(JD Open Platform)架构,核心功能域包括:
    商品管理:工业商品详情查询、商品列表搜索、规格参数查询等;
    库存与价格:实时库存查询、协议价查询(针对企业客户的专属价格);
    订单处理:订单创建、订单状态查询、物流跟踪等;
    供应商管理:供应商信息查询、合作状态管理等。
    接口设计遵循 RESTful 规范,支持 HTTPS,响应格式为 JSON,网关地址统一为。
  2. 认证与签名机制
    京东工业 API 采用 “appkey + appsecret + 签名” 的认证体系,核心流程:
    参数准备:公共参数(app_key、method、timestamp、format等)+ 业务参数;
    签名生成:
    按参数名 ASCII 升序排序;
    拼接为key=value&key=value格式;
    末尾拼接appsecret,通过 MD5 加密生成 32 位小写签名(sign);
    请求发送:将参数(含签名)通过 GET/POST 提交至网关。
    注:部分高权限接口(如订单创建)需额外获取access_token(通过用户授权流程)。
  3. 核心接口参数与响应示例
    以商品详情查询和库存查询为例:
    接口名称 核心参数 响应核心字段
    jd.industry.product.get product_id(商品 ID) product_name(商品名)、price(价格)、specs(规格)、brand(品牌)
    jd.industry.stock.get product_id、area_id(区域 ID) stock_num(库存数)、available(是否可售)、warehouse(仓库信息)
    二、Python 脚本实现
    以下实现京东工业 API 的通用调用框架,包含签名生成、接口调用、响应解析,并示例商品详情和库存查询功能。
    import requests
    import hashlib
    import time
    import json
    import logging
    from typing import Dict, Optional, List
    from requests.exceptions import RequestException

配置日志

logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)

class JDIndustryAPI:
def init(self, appkey: str, appsecret: str, access_token: str = ""):
"""
初始化京东工业API客户端
:param appkey: 应用appkey(京东开放平台获取)
:param appsecret: 应用appsecret
:param access_token: 用户授权令牌(部分接口需要)
"""
self.appkey = appkey
self.appsecret = appsecret
self.access_token = access_token
self.base_url = "https://api.jd.com/routerjson"
self.session = requests.Session()

def _generate_sign(self, params: Dict) -> str:
    """生成签名(京东API规则)"""
    # 1. 按参数名ASCII升序排序
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    # 2. 拼接为key=value&key=value格式
    sign_str = "&".join([f"{k}={v}" for k, v in sorted_params])
    # 3. 拼接appsecret并MD5加密(小写)
    sign_str += self.appsecret
    return hashlib.md5(sign_str.encode("utf-8")).hexdigest().lower()

def _get_timestamp(self) -> str:
    """生成时间戳(格式:yyyy-MM-dd HH:mm:ss)"""
    return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

def call_api(self, method: str, biz_params: Dict) -> Optional[Dict]:
    """
    通用API调用方法
    :param method: 接口方法名(如jd.industry.product.get)
    :param biz_params: 业务参数
    :return: 接口响应数据(业务部分)
    """
    # 1. 公共参数
    public_params = {
        "app_key": self.appkey,
        "method": method,
        "timestamp": self._get_timestamp(),
        "format": "json",
        "v": "1.0",
        "sign_method": "md5"
    }
    # 2. 加入access_token(如需要)
    if self.access_token:
        public_params["access_token"] = self.access_token
    # 3. 合并参数(业务参数需序列化为JSON字符串)
    all_params = {**public_params, "param_json": json.dumps(biz_params)}
    # 4. 生成签名
    sign = self._generate_sign(all_params)
    all_params["sign"] = sign

    try:
        # 5. 发送POST请求(京东工业API推荐POST)
        response = self.session.post(
            self.base_url,
            data=all_params,
            timeout=15
        )
        response.raise_for_status()
        result = response.json()

        # 6. 处理错误响应(京东API错误码在根节点)
        if "error_response" in result:
            error = result["error_response"]
            logging.error(f"API错误:{error['msg']}(错误码:{error['code']})")
            return None

        # 7. 提取业务响应(格式:{method}_response)
        response_key = method.replace(".", "_") + "_response"
        if response_key not in result:
            logging.error(f"响应格式错误,缺少{response_key}字段")
            return None

        return result[response_key]

    except RequestException as e:
        logging.error(f"请求异常:{str(e)},接口:{method}")
        return None
    except json.JSONDecodeError:
        logging.error(f"响应解析失败:{response.text[:200]}...")
        return None

def get_product_detail(self, product_id: str) -> Optional[Dict]:
    """
    获取工业商品详情
    :param product_id: 商品ID(工业商品唯一标识)
    :return: 商品详情字典
    """
    method = "jd.industry.product.get"
    params = {"product_id": product_id}
    result = self.call_api(method, params)
    if not result:
        return None

    # 解析商品详情
    return {
        "product_id": product_id,
        "name": result.get("product_name"),
        "brand": result.get("brand_name"),
        "specs": result.get("spec_info"),  # 规格参数(如"型号:M10;材质:不锈钢")
        "price": float(result.get("price", 0)),  # 单价(元)
        "market_price": float(result.get("market_price", 0)),  # 市场价
        "description": result.get("product_desc"),  # 商品描述
        "images": result.get("image_urls", "").split(","),  # 图片URL列表
        "category": result.get("category_name")  # 所属分类
    }

def get_product_stock(self, product_id: str, area_id: str = "1_72_28199") -> Optional[Dict]:
    """
    查询商品库存(默认区域:北京朝阳区)
    :param product_id: 商品ID
    :param area_id: 区域ID(格式:省_市_区,如"1_72_28199"代表北京朝阳区)
    :return: 库存信息字典
    """
    method = "jd.industry.stock.get"
    params = {
        "product_id": product_id,
        "area_id": area_id
    }
    result = self.call_api(method, params)
    if not result:
        return None

    # 解析库存信息
    return {
        "product_id": product_id,
        "area_id": area_id,
        "stock_num": int(result.get("stock_num", 0)),  # 库存数量
        "available": result.get("is_available", False),  # 是否可售
        "warehouse": result.get("warehouse_name"),  # 发货仓库
        "arrival_time": result.get("arrival_time")  # 预计到货时间(无货时)
    }

示例调用
if name == "main":

# 替换为实际参数(从京东开放平台获取)
APPKEY = "your_appkey"
APPSECRET = "your_appsecret"
ACCESS_TOKEN = "your_access_token"  # 可选,部分接口需要
PRODUCT_ID = "100012345678"  # 工业商品ID(从京东工业平台商品详情页获取)
AREA_ID = "1_72_28199"  # 北京朝阳区(可根据需求修改)

# 初始化客户端
jd_industry = JDIndustryAPI(
    appkey=APPKEY,
    appsecret=APPSECRET,
    access_token=ACCESS_TOKEN
)

# 1. 获取商品详情
product_detail = jd_industry.get_product_detail(PRODUCT_ID)
if product_detail:
    print(f"商品名称:{product_detail['name']}")
    print(f"品牌:{product_detail['brand']} | 分类:{product_detail['category']}")
    print(f"规格:{product_detail['specs']}")
    print(f"价格:{product_detail['price']}元(市场价:{product_detail['market_price']}元)")
    print(f"主图:{product_detail['images'][0] if product_detail['images'] else '无'}")

# 2. 查询库存
stock_info = jd_industry.get_product_stock(PRODUCT_ID, AREA_ID)
if stock_info:
    print(f"\n库存信息(区域:{AREA_ID}):")
    print(f"库存数量:{stock_info['stock_num']}件 | 可售状态:{'是' if stock_info['available'] else '否'}")
    print(f"发货仓库:{stock_info['warehouse']}")
    if stock_info["arrival_time"]:
        print(f"预计到货:{stock_info['arrival_time']}")

三、关键技术解析

  1. 签名生成核心逻辑
    京东工业 API 的签名生成是关键步骤,需严格遵循:
    参数按 ASCII 升序排序(避免因顺序导致签名错误);
    业务参数需序列化为 JSON 字符串(param_json字段);
    签名结果为 32 位小写 MD5 值(与阿里系 API 的大写签名不同)。
  2. 接口权限与限制
    权限申请:需在京东开放平台注册企业开发者账号,创建应用并申请 “工业供应链” 相关权限;
    调用限制:默认 QPS 为 5(每秒 5 次),企业客户可申请提升至 10-20;
    区域 ID:库存查询依赖areaid(省市_区三级编码),可通过京东地址编码接口获取。
  3. 典型错误处理
    错误码 说明 解决方案
    1000 签名错误 检查参数排序、appsecret及加密逻辑
    2001 权限不足 在开放平台申请对应接口权限
    3002 商品 ID 不存在 确认product_id是否为京东工业平台有效 ID
    4003 QPS 超限 降低调用频率,或申请提高 QPS 限制
    四、应用场景与扩展
  4. 典型场景
    工业采购系统对接:企业 ERP 通过 API 实时获取商品价格、库存,自动生成采购订单;
    供应商管理:查询合作供应商的商品目录、库存分布,优化供应链效率;
    价格监控:定期调用接口跟踪工业物料价格波动,辅助成本控制。
  5. 扩展建议
    增加批量查询功能;
    实现订单创建与跟踪;
    添加代理池和重试机制,应对网络波动和 QPS 限制;
    结合数据库缓存商品基础信息,减少重复调用。
    总结
    京东工业 API 为企业提供了标准化的工业供应链对接能力,核心在于严格的签名认证和权限控制。Python 实现需重点处理签名生成和错误响应,结合业务场景合理设计调用逻辑。使用时需遵守京东开放平台规范,确保企业资质合规,避免滥用接口导致权限封禁。
相关文章
|
12天前
|
人工智能 API 开发工具
京东:对接白条API提供分期付款,降低消费门槛
本文详解京东白条API集成,涵盖技术原理、分步对接流程及Python代码实现,帮助开发者快速接入分期付款功能。通过API调用实现信用评估与分期计算,降低消费门槛,提升电商转化率。内容基于官方文档,确保准确可靠。
125 8
|
17天前
|
缓存 供应链 监控
1688item_search_factory - 按关键字搜索工厂数据接口深度分析及 Python 实现
item_search_factory接口专为B2B电商供应链优化设计,支持通过关键词精准检索工厂信息,涵盖资质、产能、地理位置等核心数据,助力企业高效开发货源、分析产业集群与评估供应商。
|
15天前
|
缓存 监控 算法
item_get - Lazada 商品详情详情接口深度分析及 Python 实现
Lazada商品详情接口item_get可获取商品全维度数据,包括价格、库存、SKU、促销及卖家信息,支持东南亚六国站点,适用于竞品监控、定价策略与市场分析,助力跨境卖家精准决策。
|
15天前
|
存储 监控 API
京东电子面单API对接指南:实现订单自动打单,发货效率提升300%
电子面单通过API自动化实现降本增效,显著提升订单处理效率。对接需准备app_key、access_token等参数,结合京东API实现快速打单。系统设计支持自动打印与异常告警,实测日均处理量提升316%,错单率大幅下降,人力成本节省超65%。
188 0
|
19天前
|
JSON 监控 数据格式
1688 item_search_app 关键字搜索商品接口深度分析及 Python 实现
1688开放平台item_search_app接口专为移动端优化,支持关键词搜索、多维度筛选与排序,可获取商品详情及供应商信息,适用于货源采集、价格监控与竞品分析,助力采购决策。
|
10天前
|
缓存 监控 算法
唯品会item_search - 按关键字搜索 VIP 商品接口深度分析及 Python 实现
唯品会item_search接口支持通过关键词、分类、价格等条件检索商品,广泛应用于电商数据分析、竞品监控与市场调研。结合Python可实现搜索、分析、可视化及数据导出,助力精准决策。
|
10天前
|
缓存 监控 算法
苏宁item_search - 按关键字搜索商品接口深度分析及 Python 实现
苏宁item_search接口支持通过关键词、分类、价格等条件检索商品,广泛应用于电商分析、竞品监控等场景。具备多维度筛选、分页获取、数据丰富等特性,结合Python可实现搜索、分析与可视化,助力市场研究与决策。
|
10天前
|
缓存 监控 算法
苏宁item_get - 获得商品详情接口深度# 深度分析及 Python 实现
苏宁易购item_get接口可实时获取商品价格、库存、促销等详情,支持电商数据分析与竞品监控。需认证接入,遵守调用限制,适用于价格监控、销售分析等场景,助力精准营销决策。(238字)
|
10天前
|
监控 算法 数据安全/隐私保护
唯品会 item_get - 获得 VIP 商品详情接口深度分析及 Python 实现
唯品会item_get接口通过商品ID获取商品详情,支持价格、库存、促销等数据抓取,适用于电商分析、竞品监控与价格追踪,结合Python实现可高效完成数据获取、分析与可视化,助力精准营销决策。
|
18天前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南

热门文章

最新文章

推荐镜像

更多