☰
京东抢购助手 jd-assistant 源码深度剖析:下单接口参数、错误码与支付密码加密全解
2026/10/10 10:25:20 网站建设 项目流程

京东抢购助手 jd-assistant 源码深度剖析:下单接口参数、错误码与支付密码加密全解

【免费下载链接】jd-assistant京东抢购助手:包含登录,查询商品库存/价格,添加/清空购物车,抢购商品(下单),查询订单等功能项目地址: https://gitcode.com/gh_mirrors/jd/jd-assistant

京东抢购助手jd-assistant是一个用 Python 编写的京东下单自动化开源项目,支持登录、查库存/价格、购物车操作与自动抢购下单。本文深入剖析它的源码,帮你吃透京东下单接口的核心请求参数、常见错误码(resultCode)含义以及支付密码的加密方式,让阅读 jd_assistant.py 不再云里雾里。

一、项目概览:这个助手到底能做什么

打开 README.md 就能看到这个助手的四大能力:登录、商品查询、购物车操作、订单操作。所有功能都收敛在Assistant这一个类里,配合几个轻量模块协作完成:

模块职责源码位置
主入口示例演示如何调用助手main.py
核心逻辑登录 / 查库存 / 下单 / 抢购jd_assistant.py
加密与工具函数密码加密、参数解析util.py
配置读取读取config.iniconfig.py
依赖清单第三方库版本requirements.txt

依赖非常干净,只有三个第三方库:requests、beautifulsoup4、pycryptodome(RSA 加密用)。

二、下单前的关键:四个必配风控参数

很多新手卡在这里。初始化Assistant时会强制检查eid、fp、track_id、risk_control四个参数,缺一即抛出异常:

if not self.eid or not self.fp or not self.track_id or not self.risk_control: raise AsstException('请在 config.ini 中配置 eid, fp, track_id, risk_control 参数')

这四个参数来自订单结算页面的隐藏表单,官方提供的取法是:在结算页打开浏览器开发者工具,在 Console 中运行 js/get_parameters.js 即可一次性打印出全部四个值,填入 config.ini 即可:

var eid = $('#eid').val(); var fp = $('#fp').val(); var trackId = getTakId(); var riskControl = $('#riskControl').val();

💡 这四个参数是京东风控的“通行证”,下单请求里会原样带上。乱填会导致订单无法提交,强烈建议部署前先用有货商品实测一遍。

三、核心:京东下单接口submitOrder.action参数全解

普通商品的下单逻辑在 jd_assistant.py 的submit_order()方法中。它向https://trade.jd.com/shopping/order/submitOrder.action发起 POST,请求体由两部分拼成——固定风控参数+条件性支付密码:

参数名取值作用
riskControlself.risk_control风控校验值
submitOrderParam.trackIdself.track_id链路追踪 ID
submitOrderParam.eidself.eid设备环境标识
submitOrderParam.fpself.fp指纹标识
submitOrderParam.needCheck1需校验标志
submitOrderParam.isBestCoupon1自动选择最优优惠券
submitOrderParam.jxj1校验开关
submitOrderParam.payPassword加密后的支付密码仅在配置了支付密码时才添加

关键点在“条件性支付密码”:

payment_pwd = global_config.get('account', 'payment_pwd') if payment_pwd: data['submitOrderParam.payPassword'] = encrypt_payment_pwd(payment_pwd)

为什么要带支付密码?当账户里有可用京券或上次订单用了京豆时,京东可能自动勾选优惠并强制校验支付密码,此时必须提交,否则会报错(见下文60123)。

四、下单错误码速查表(resultCode)

下单接口返回 JSON,最核心的两个字段是success与resultCode。源码里已经贴心地为高频错误码写了“人话注释”,整理成速查表如下:

普通商品下单错误码

resultCode原始 message通俗含义
0无✅ 下单成功,返回orderId
60123请输入支付密码!需在 config.ini 配置支付密码
60017您多次提交过快,请稍后再试触发频率风控,稍等再试
60077获取用户订单信息失败购物车为空 / 未勾选商品
600157xxxx 商品无货下单商品无货
600158xxxx 商品无货下单商品无货(另一分支)

源码中对应的处理逻辑:

if result_code == 60077: message = message + '(可能是购物车为空 或 未勾选购物车中商品)' elif result_code == 60123: message = message + '(需要在config.ini文件中配置支付密码)'

抢购(秒杀)下单错误码

抢购走的是另一套接口marathon.jd.com/seckillnew/...,错误码略有不同:

resultCode原始 message通俗含义
0无✅ 抢购成功,返回订单号与支付链接
60074很遗憾没有抢到,再接再厉哦竞争激烈未抢到
60017抱歉,您提交过快提交频率过快
90013系统正在开小差,请重试服务端异常,重试即可

📌 判断下单是否成功的通用规则:先看success布尔值,再看resultCode是否为0,最后取orderId。

五、支付密码加密:u3 前缀编码 + RSA 登录加密

这里有个容易误解的点,值得单独讲清楚——支付密码和登录密码用的是两套完全不同的加密方案。

1. 支付密码:u3 前缀编码(非 RSA)

支付密码的“加密”其实是一层轻量混淆,位于 util.py:

def encrypt_payment_pwd(payment_pwd): return ''.join(['u3' + x for x in payment_pwd])

逻辑很直白:把每一位数字前面拼上u3。例如支付密码123456会变成u31u32u33u34u35u36,再随下单请求体提交。这样做的目的是让密码在明文请求体里不可直接识别。

2. 登录密码:标准 RSA + Base64

真正用到 RSA 的是账号密码登录。util.py里内置了一枚京东 RSA 公钥(RSA_PUBLIC_KEY),配合pycryptodome完成加密:

def encrypt_pwd(password, public_key=RSA_PUBLIC_KEY): rsa_key = RSA.importKey(public_key) encryptor = Cipher_pkcs1_v1_5.new(rsa_key) cipher = b64encode(encryptor.encrypt(password.encode('utf-8'))) return cipher.decode('utf-8')

流程是:导入公钥 → PKCS1 v1.5 填充加密 → Base64 编码。不过项目作者在更新记录里说明,京东早已用滑动验证码替换了字符验证码,账号密码登录已失效,官方推荐扫码登录login_by_QRcode(),因此这段 RSA 逻辑现在更多是历史遗留与学习价值。

六、地区 ID 与库存查询

下单需要“地区 ID”来定位库存。它是一个四级 ID(省_市_区县_乡镇),例如1_72_4211,用_或-分隔均可,util.py 的parse_area_id()会统一补齐到 4 位。

获取方式有三种,详见 area_id/README.md:直接查area_id/目录下的地址文件、在商品页控制台执行 JS、或运行get_area_id.py逐级选择。

库存查询走https://c0.3.cn/stock(单商品)或https://c0.3.cn/stocks(多商品),核心是返回字段StockState:

StockState含义
33现货 ✅
40可配货 ✅
0/34无货 ❌
36采购中 ⏳

只有当skuState == 1(已上架)且StockState ∈ (33, 40)时,程序才判定“有货可下”。

七、两种下单路径:普通商品 vs 抢购商品

jd-assistant 最大的设计亮点,是把京东商品分成了两条完全不同的下单链路,这也是“抢购”的核心。

路径 A:普通商品 → 购物车 → 结算

普通商品(如小米 8、华为畅享 9 Plus)可以正常加入购物车,流程是“加购 → 勾选 →submit_order()结算提交”,对应 main.py 里的buy_item_in_stock()轮询下单:

路径 B:抢购商品 → 独立秒杀接口

抢购商品(如华为 Mate 20 RS)走marathon.jd.com的秒杀接口,不能加入购物车,需要先request_seckill_url()拿链接、再submit_seckill_order()提交。注意部分商品是预约抢购(如图中 21470 人预约),需先点击预约,且购物车里这类商品无法勾选,脚本也清不掉,务必手动清空购物车:

⚡ 抢购模式还支持定时抢购(submit_order_by_time()/exec_seckill_by_time()),靠 timer.py 精确等到毫秒级时间点再触发,配合retry与interval反复重试,成功概率更高。下单成功还能通过 messenger.py 用 Server酱 推送通知。

八、新手上手清单

  1. 装依赖:pip install -r requirements.txt(见 requirements.txt)。
  2. 扫码登录:asst.login_by_QRcode(),首次会保存 cookies 供下次复用。
  3. 填风控参数:按 js/get_parameters.js 取好eid/fp/track_id/risk_control填入 config.ini。
  4. 有优惠再配支付密码:账户有京券/京豆时才需在config.ini的payment_pwd填 6 位数字。
  5. 先试水:用有货商品跑一遍完整下单,确认发票设为「电子普通发票-个人」、支付方式为「在线支付」。
  6. 正式抢购:调用buy_item_in_stock()(普通商品)或exec_seckill_by_time()(抢购商品)。


一句话总结:jd-assistant 的价值,在于把京东“下单”这条链路拆成了可复用的方法——风控参数 + 下单参数 + 错误码处理 + 密码加密 + 双路径下单。读懂了上面这套接口参数与错误码映射,你不仅能跑通这个工具,还能举一反三,理解任何“京东下单自动化”背后的通用逻辑。

【免费下载链接】jd-assistant京东抢购助手:包含登录,查询商品库存/价格,添加/清空购物车,抢购商品(下单),查询订单等功能项目地址: https://gitcode.com/gh_mirrors/jd/jd-assistant

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询