在开始编写代码之前,必须完成京东联盟账号的注册以及API调用凭证的获取。这是数据获取的合法入口,无法跳过。
如果尚未注册京东联盟(京粉)账号,需要先访问 https://union.jd.com/ 进行注册。注册完成后,登录账号,进入后台管理页面。
获取AppKey和SecretKey的具体步骤如下:
本指南使用Python作为开发语言,因为它拥有强大的数据处理库。确保你的电脑上安装了Python 3.6或更高版本。可以通过在终端输入 python --version 来检查。
我们需要安装 requests 库来发送HTTP请求,以及 hashlib(Python内置,用于签名计算)。请在终端执行以下命令安装依赖:
京东联盟API采用RPC风格调用,所有请求必须经过MD5签名验签。签名逻辑是整个对接过程中最关键的部分,任何参数错误都会导致签名校验失败。
京东API的签名规则是将所有请求参数(除sign本身外)按字典序排序,然后拼接成“key+value”的字符串,并在首尾分别加上AppSecret,最后进行MD5计算并转大写。以下是签名函数的完整实现:
```python import hashlib def generate_sign(app_secret, params): 1. 过滤掉sign参数和空值参数 filtered_params = {k: v for k, v in params.items() if v is not None and v != ""} 2. 按Key的字典序排序 sorted_params = sorted(filtered_params.items()) 3. 拼接字符串 concat_str = "" for k, v in sorted_params: concat_str += str(k) + str(v) 4. 首尾加上AppSecret final_str = app_secret + concat_str + app_secret 5. MD5加密并转大写 md5 = hashlib.md5() md5.update(final_str.encode('utf-8')) return md5.hexdigest().upper() ```
我们使用的API方法是 jd.union.open.order.query,用于查询推广订单。该接口需要构造一个JSON格式的业务参数 orderReq。为了确保代码能直接运行,我们需要定义查询的时间范围和分页参数。
关键参数说明:
jd.union.open.order.query。startDate: 查询开始时间,格式 yyyy-MM-dd HH:mm:ss。endDate: 查询结束时间。pageNo: 页码,从1开始。pageSize: 每页数量,最大100。请求地址统一为 https://api.jd.com/routerjson。我们需要将业务参数放入公共参数字典中,计算签名,然后通过POST方式发送请求。响应数据为JSON格式,我们需要提取其中的订单信息。
注意:京东API对时间戳格式要求严格,必须精确到秒。
```python import requests import time import json def get_jd_orders(app_key, app_secret, start_date, end_date, page_no=1, page_size=100): API地址 url = "https://api.jd.com/routerjson" 业务参数JSON order_req = { "startDate": start_date, "endDate": end_date, "pageNo": page_no, "pageSize": page_size, "type": 1 1: 按更新时间查询 } 公共参数 params = { "method": "jd.union.open.order.query", "app_key": app_key, "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), "v": "2.0", "format": "json", "sign_method": "md5", "orderReq": json.dumps(order_req) 将字典转为JSON字符串 } 生成签名 sign = generate_sign(app_secret, params) params["sign"] = sign try: 发送POST请求 response = requests.post(url, data=params) res_json = response.json() 检查是否有错误 if "errorResponse" in res_json: print(f"API请求失败: {res_json['errorResponse']['zhDesc']}") return [] 提取数据 data = res_json.get("jd_union_open_order_query_response", {}) return data.get("data", []) except Exception as e: print(f"请求发生异常: {e}") return [] ```将上述所有逻辑整合,形成一份完整的可执行脚本。请将脚本中的 YOUR_APP_KEY 和 YOUR_APP_SECRET 替换为你在准备工作中获取的真实凭证。
将上述代码保存为 jd_orders.py。在终端中运行命令:
如果配置正确,终端将输出获取到的订单数量以及前3条订单的详细信息,包括订单号、商品名称和预估佣金。如果返回错误信息,请检查AppKey/Secret是否正确,或者系统时间是否与标准时间同步(时间戳偏差过大会导致请求失败)。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图