/rt-market-fresh

大润发优鲜 自动下单购物车所有有效商品 并发调用接口 抢购

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

大润发优鲜 - 抢购助手

自动完成全选购物车有效商品、下单步骤,并提示用户前往APP支付(订单10分钟内有效)

采用多线程并发调用创建订单的接口,大大提高抢购成功率

POST请求体中的data采用了HMAC-SHA256算法签名,paramsMD5字段真实有效,可抓包与小程序进行对照验证。

免责声明

鉴于目前全市(上海)大润发门店普遍运力不足,停接散客单,只针对社区和居委团购、集单保供,本项目于2022年4月17日开源。

本项目仅用于技术上的学习交流,严禁用作商业行为!

因他人的不正当使用所造成的违法、违规行为与项目作者无关!

如有任何问题,可联系作者删除本项目!

配置文件config.json

{
  "token": "用户令牌,可通过抓包微信|支付宝小程序(PC|移动端)/APP获取",
  "device_id": "同样也可以通过上述途径抓包获取,也可以使用36位随机字符串(大小写字母+数字)",
  "store": 0
}

store字段涉及门店的选择,前提是配送地址在多家门店的配送范围内,默认选择最近的门店,填0即可。

如需切换门店,根据小程序/APP界面上的门店顺序(根据距离远近)调整store字段即可。

几点说明

  1. 由于某些原因,没有采用logging模块,而采用了自己编写的print_log函数。
  2. 配送地址默认选择收货地址中的第一个,以小程序/APP界面显示为准。
  3. 门店根据配送地址自动选择最近的一家,如需调整请参考配置文件描述。
  4. 暂不考虑支持预售商品。
  5. 代码中包含了使用优惠券的相关代码,但因为大润发优鲜的购物车数据保存在服务端,为提高抢购成功概率和避免多线程并发提交订单引发不必要的异常(没有做详尽的测试),故没有启用。
  6. 如需使用bark、pushdeer、企业微信、钉钉等通知方式,请自行添加代码(难度不大),本项目仅包含抢购主体代码/框架。
  7. 程序对POST请求体中的data采用了HMAC-SHA256算法签名,可抓包与小程序进行比较,理论上一致。
  8. 由于目前大部分大润发停接散单,因此可配送时间一放出来就是已约满,相关代码段测试数据不足,存在一定优化空间。
  9. 大润发优鲜目前未见对账号的请求频率进行限制(如封号等),但对单IP短时间内高并发请求采取了一定措施(返回403状态码),单账号运行且不修改本程序默认线程数的情况下未见该问题。

程序/抢购主要逻辑

  1. 获取配送地址信息
  2. 根据配送地址信息获取门店信息
  3. 检查是否存在未支付订单,若存在则输出提示信息,程序结束
  4. 刷新购物车:购物车全选+获取购物车信息,若购物车中无有效商品,程序结束
  5. 获取可配送时间
  6. 多线程(默认最大线程数为7)创建订单,根据服务器Response判断是否需要刷新购物车/重新获取配送时间

版权说明

本项目采用 GPL3.0 协议,请所有进行二次开发的开发者遵守 GPL3.0 协议,并且不得将代码用于商用。