当前位置: 首页 > news >正文

京东商品详情API接口开发指南(含Java/Python实现)

接口概述

京东开放平台提供了商品详情查询接口,开发者可以通过SKUID获取商品的详细信息,包括标题、价格、图片、促销信息等。该接口需要申请API权限和认证密钥。

点击获取key和secret

接口特点

  • 支持批量查询(最多20个SKU)
  • 返回JSON格式数据
  • 需要签名验证
  • 支持HTTPS协议

Java实现示例


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class JdProductApi {
    private static final String API_URL = "https://api.jd.com/routerjson";
    private static final String VERSION = "1.0";
    
    public static String queryProductDetail(long skuId, String appKey, String appSecret) {
        try {
            // 构造请求参数
            Map<String, Object> params = new TreeMap<>();
            params.put("method", "jd.union.open.goods.detail.query");
            params.put("app_key", appKey);
            params.put("timestamp", System.currentTimeMillis());
            params.put("v", VERSION);
            params.put("format", "json");
            
            // 商品请求参数
            JSONObject goodsReq = new JSONObject();
            goodsReq.put("skuIds", new long[]{skuId});
            params.put("goodsReq", goodsReq);
            
            // 生成签名
            String sign = generateSign(params, appSecret);
            params.put("sign", sign);
            
            // 发送请求
            URL url = new URL(API_URL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.getOutputStream().write(JSON.toJSONString(params).getBytes());
            
            // 处理响应
            BufferedReader reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream()));
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            return response.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    private static String generateSign(Map<String, Object> params, String appSecret) {
        StringBuilder sb = new StringBuilder(appSecret);
        for (Map.Entry<String, Object> entry : params.entrySet()) {
            sb.append(entry.getKey()).append(entry.getValue());
        }
        sb.append(appSecret);
        return DigestUtils.md5Hex(sb.toString()).toUpperCase();
    }
}

Python实现示例

import hashlib
import time
import json
import requests

class JdProductApi:
    API_URL = "https://api.jd.com/routerjson"
    VERSION = "1.0"
    
    @staticmethod
    def query_product_detail(sku_id, app_key, app_secret):
        params = {
            "method": "jd.union.open.goods.detail.query",
            "app_key": app_key,
            "timestamp": int(time.time() * 1000),
            "v": JdProductApi.VERSION,
            "format": "json",
            "goodsReq": {"skuIds": [sku_id]}
        }
        
        # 生成签名
        sign = JdProductApi.generate_sign(params, app_secret)
        params["sign"] = sign
        
        # 发送请求
        response = requests.post(
            JdProductApi.API_URL,
            json=params,
            headers={"Content-Type": "application/json"}
        )
        return response.json()
    
    @staticmethod
    def generate_sign(params, app_secret):
        param_str = app_secret
        for key in sorted(params.keys()):
            param_str += f"{key}{params[key]}"
        param_str += app_secret
        return hashlib.md5(param_str.encode()).hexdigest().upper()

接口返回示例

 

jsonCopy Code

{ "code": 0, "message": "success", "data": { "skuId": 1234567, "skuName": "示例商品名称", "price": 299.00, "imageList": ["http://img1.jpg", "http://img2.jpg"], "brandName": "示例品牌", "category": "电子产品", "shopId": 10001, "shopName": "官方旗舰店", "promotionList": [ { "promotionId": 1, "promotionName": "满299减30", "startTime": "2025-05-01 00:00:00", "endTime": "2025-05-31 23:59:59" } ] } }

开发注意事项

  1. 需要先在京东开放平台申请API权限
  2. 每个应用有调用频率限制(通常100次/秒)
  3. 签名算法必须严格按照文档实现
  4. 建议使用HTTPS协议保证传输安全
  5. 处理异常情况(网络超时、参数错误等)

以上代码提供了Java和Python两种语言的实现,开发者可以根据自己的技术栈选择合适的版本。实际使用时需要替换appKey和appSecret为实际值,并添加适当的错误处理逻辑。

相关文章:

  • spark数据的提取和保存
  • MCP实战:在扣子空间用扣子工作流MCP,一句话生成儿童故事rap视频
  • Java虚拟机 - JVM与Java体系结构
  • 代码审计-php框架开发,实战tp项目,打击微交易,源码获取,扩大战果
  • C++学习:六个月从基础到就业——C++11/14:其他语言特性
  • c++总结-03-move
  • Debezium快照事件监听器系统设计
  • Flask-SQLAlchemy_数据库配置
  • 标准库、HAl库和LL库(PC13初始化)
  • 【Vue】路由1——路由的引入 以及 路由的传参
  • vue3大事件项目
  • JetBrains IDEA,Android Studio,WebStorm 等IDE 字体出现异常时解决方法
  • linux hungtask detect机制分析
  • 人工智能、机器学习、深度学习定义与联系
  • 如何使用 Apple 提供的 benchmark 工具
  • python读取图像,关于np、cv2、PIL不同图像类型的理解与转换
  • 玄机-第一章 应急响应-webshell查杀
  • Blender建小房子流程
  • 老旧设备升级利器:Modbus TCP转 Profinet让能效监控更智能
  • 6.2.3+6.2.4十字链表、邻接多重表
  • IPO周报|本周2只新股申购,比亚迪、上汽“小伙伴”来了
  • 国际博物馆日|航海博物馆:穿梭于海洋神话与造船工艺间
  • 中国驻美大使:远离故土的子弹库帛书正随民族复兴踏上归途
  • 女生“生理期请病假要脱裤子证明”?高校回应:视频经处理后有失真等问题
  • 《五行令》《攻守占》,2个月后国博见
  • 从近200件文物文献里,回望光华大学建校百年