当当平台商品详情接口设计与调用指南

103 阅读2分钟

当当平台商品详情接口设计与调用指南 接口名称

GET /api/product/detail 图书商品核心信息查询接口

请求参数说明 参数名称 类型 是否必填 说明 isbn string 是 国际标准书号(支持13位/10位) product_id string 否 平台内部商品编号(与ISBN二选一) need_stock bool 否 是否返回库存数据(默认false) detail_level int 否 详情级别(1基础/2扩展/3完整) 认证鉴权机制 python Copy Code import requests import hmac from urllib.parse import urlencode

def generate_sign(secret, params): """HMAC-SHA256签名生成器""" query = urlencode(sorted(params.items())) return hmac.new(secret.encode(), query.encode(), 'sha256').hexdigest()

开发者凭证

CLIENT_ID = "YOUR_CLIENT_ID" CLIENT_SECRET = "YOUR_SECRET_KEY"

37c68a36968a4f93af0a0cf744c31f99.png 点击获取key和secret

构造请求示例

params = { "isbn": "9787108009821", "need_stock": "true", "timestamp": str(int(time.time())), "nonce": "a3d8f7" # 6位随机字符串 }

生成签名

signature = generate_sign(CLIENT_SECRET, params)

添加认证头

headers = { "X-Client-Id": CLIENT_ID, "X-Auth-Sign": signature }

响应数据结构(JSON) json Copy Code { "code": 200, "data": { "base_info": { "product_id": "21068943", "isbn": "9787108009821", "title": "中国历代政治得失", "author": "钱穆", "press": "生活·读书·新知三联书店", "edition": "第2版", "page_count": 188, "paper_type": "胶版纸" }, "price_info": { "retail_price": 38.00, "dangdang_price": 26.60, "vip_price": 24.80, "stock_status": 3 // 1-充足 2-紧张 3-预售 }, "content_info": { "catalog": "第一章 汉代...", "abstract": "本书为作者的专题演讲合集...", "preview_pages": [ "img.example.com/preview/pag…", "img.example.com/preview/pag…" ] }, "media_info": { "cover_image": "img.example.com/cover.jpg", "audio_preview": "audio.example.com/chapter1.mp…", "video_intro": "video.example.com/trailer.mp4" } } }

典型错误场景 400 错误类 json Copy Code { "code": 40012, "message": "ISBN格式校验失败", "solution": "请检查ISBN编号是否符合规范" }

403 错误类 json Copy Code { "code": 40309, "message": "签名验证未通过", "documentation": "open.dangdang.com/docs/signat…" }

404 错误类 json Copy Code { "code": 40401, "message": "指定商品不存在", "retry": false }

代码调用示例(Python) python Copy Code def get_book_detail(isbn): API_ENDPOINT = "api.open.dangdang.com/product/det…"

params = {
    "isbn": isbn,
    "timestamp": str(int(time.time())),
    "nonce": secrets.token_hex(3)
}

# 签名生成
params["sign"] = generate_sign(CLIENT_SECRET, params)

try:
    response = requests.get(
        API_ENDPOINT,
        params=params,
        headers={"X-Client-Id": CLIENT_ID},
        timeout=5
    )
    response.raise_for_status()
    
    # 处理多版本数据
    if response.json().get('data', {}).get('ebook'):
        return process_ebook_data(response.json())
    else:
        return process_paperbook_data(response.json())
        
except requests.exceptions.HTTPError as err:
    handle_api_error(err.response.json())
except requests.exceptions.Timeout:
    logging.error("API请求超时")

开发注意事项

数据缓存策略‌ 建议本地缓存商品基础信息(缓存时间<=6小时),避免高频请求

特殊商品处理‌

电子书资源需检查has_ebook字段 套装图书注意series_info嵌套结构

流量控制‌

免费版:10次/秒 企业版:50次/秒(需签约商务协议)

数据展示限制‌ 试读章节不得展示超过全书20%的内容

注:本示例代码基于当当开放平台2023年接口规范模拟实现,实际接入请以官方最新文档为准,严禁用于非法数据采集行为