{"id":13466882,"url":"https://github.com/Runc2333/dingdong-helper-node","last_synced_at":"2025-03-26T00:31:36.908Z","repository":{"id":100997620,"uuid":"482424911","full_name":"Runc2333/dingdong-helper-node","owner":"Runc2333","description":"叮咚买菜助手，使用iOS客户端原生API，支持高峰期下单、支持捡漏、支持多账号、支持webhook通知（需自行实现对端）","archived":true,"fork":false,"pushed_at":"2022-05-03T16:10:15.000Z","size":435,"stargazers_count":197,"open_issues_count":4,"forks_count":49,"subscribers_count":10,"default_branch":"main","last_synced_at":"2024-10-29T20:33:47.967Z","etag":null,"topics":["dingdong","dingdong-helper","javascript","nodejs"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Runc2333.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-17T04:21:01.000Z","updated_at":"2024-06-04T00:37:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"a19b7dc3-aec0-4a1d-93dd-8bd65f51637a","html_url":"https://github.com/Runc2333/dingdong-helper-node","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Runc2333%2Fdingdong-helper-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Runc2333%2Fdingdong-helper-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Runc2333%2Fdingdong-helper-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Runc2333%2Fdingdong-helper-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Runc2333","download_url":"https://codeload.github.com/Runc2333/dingdong-helper-node/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245566098,"owners_count":20636390,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dingdong","dingdong-helper","javascript","nodejs"],"created_at":"2024-07-31T15:00:51.011Z","updated_at":"2025-03-26T00:31:36.267Z","avatar_url":"https://github.com/Runc2333.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# 叮咚买菜抢菜助手（Node.js）\n![available](https://img.shields.io/badge/%E9%A1%B9%E7%9B%AE%E5%BD%93%E5%89%8D%E7%8A%B6%E6%80%81-deprecated-red.svg \"项目当前存在安全风险\") ![api_version](https://img.shields.io/badge/API%20version-9.50.1-blue.svg \"9.50.1\") ![code_size](https://shields.io/github/languages/code-size/Runc2333/dingdong-helper-node) ![last_updayed](https://shields.io/github/last-commit/Runc2333/dingdong-helper-node)\n\n\u003e Deprecated: 因部分用户无法理解本项目的出发点，自此commit后本仓库将转化为只读，且签名算法不可用。\n\u003e\n\u003e 感谢所有先前使用过、听说过、参与过的用户的支持，有缘江湖再见。\n\n使用iOS客户端原生API，支持高峰期下单、支持捡漏、支持多账号、支持webhook通知（需自行实现对端）\n\nTelegram 交流群组：[点击加入](https://t.me/weneedfood)\n\n## 写在前面\n\n本项目旨在帮助更多的人能吃上饭，吃上饱饭。虽许可证允许，但我们*不支持*您通过本项目牟利。\n\n若您在满足自身需求后仍有余力，请更多的帮助身边的人，尤其是独居老人。\n\n**写给叮咚买菜官方**：本项目已尽最大努力防止贵司利益受损，包括但不限于签名算法、接口参数等。如若贵司认为本项目侵犯了贵司的权益，请邮件联系 `i@runc321.com`，我们将会停用本项目。\n\n少让程序员加班，从你我做起。\n\n## 2022-05-01 重大更新\n\n\u003e 后续更新日志不会写到这里，如确需了解，请查阅 commits\n\u003e\n\u003e 建议每次更新后都执行一次依赖安装，并执行一次任意 script 检查控制台是否提示更新配置文件\n\n**使用iOS原生客户端API，下单与iOS真机无差异，已测试可成功下单。**\n\n**请注意：** 更新后配置文件结构有更改，需要重新配置。\n\n　　　　 更新前的 Session 文件不继续适用于本项目，请重新获取。\n\n特别感谢 [@IMLR](https://github.com/IMLR) 完成的`sesi`和`nars`签名算法分析。\n\n## 配置项目\n\n### 安装依赖\n\n\u003e  若您没有 `node.js` 运行环境，请先安装 `node.js` \n\u003e\n\u003e  随后执行 `npm i yarn -g` (此命令可能需要管理员特权) 来全局安装`yarn`\n\n**在项目根目录启动终端，并执行如下命令以安装依赖：**\n\n\n```\nyarn\n```\n\n\n### 更改设置\n\n1、将项目`config/config.example.js`复制一份为`config/config.js`\n\n2、修改其中提供的选项\n\n```js\nwebhook_url: '', // 下单成功通知url，暂无配套实现，可自行继承，详情请阅读后文 Webhook 部分\nthread_count: 2, // 下单时创建的线程数，建议不要超过3\nthread_interval: 100, // 线程创建间隔，建议不要低于100，单位ms\nsubmit_interval_min: 20 * 1000, // 随机最小请求间隔时间，单位ms\nsubmit_interval_max: 50 * 1000, // 随机最大请求间隔时间，单位ms\nminimal_order_money: 0, // 小于该金额的订单不会被提交\napi_channel: 'ios-native', // 可选 'ios-native', 'android-native' 或 'applet', 目前仅支持 'ios-native'\nprofiles: [\n    {\n        seq: 0, // 指示程序读取charles_sessions目录下的第几个文件\n        im_secret: '',// 通过抓包获取，用于签名请求，获取请参见下文\n        alias: '', // 配置文件别名，用于在下单成功时提示是哪个账号\n    }\n],\n```\n### 获取 Session\n\n\u003e 如果无法找到所列出的请求，请参见后文 iOS 设备 Charles 抓包帮助\n\n1、在**iOS设备**上启动叮咚买菜APP\n\n2、完成登录\n\n3、启动Charles并完成抓包配置（需要配置SSL抓包）\n\n4、点击“购物车”并刷新\n\n5、在请求中找到`https://maicai.api.ddxq.mobi/cart/index`\n\n6、右击该请求，选择`Export Session`，保存到项目`charles_sessions`文件夹下，文件类型请选择`JSON Session File (.chlsj)`\n\n### 获取 im_secret\n\n接续 获取 Session 第三步\n\n4、点击“我的”并刷新\n\n5、在请求中找到`https://sunquan.api.ddxq.mobi/api/v1/user/detail`\n\n6、左击该请求，选择`Contents`选项卡，在下半部分选项卡中选择`JSON Text`视图\n\n7、找到`user_info`下的`im_secret`字段，复制其值到配置文件中\n\n## 可用执行选项\n\n### 速抢模式\n\n\u003e 建议抢菜高峰(06:00, 08:30)前一分钟启动，运行不要超过三分钟，否则账号会被风控\n\u003e\n\u003e 本项目不支持，也不会支持定时运行，所有执行选项都应在有人值守的情况下使用\n\n```\nyarn checkout:speed\n```\n\n### 捡漏模式\n\n\u003e 建议运行不要超过一小时，否则极易被封号\n\u003e\n\u003e 配置文件内可调请求间隔，默认20s ~ 50s随机\n\u003e\n\u003e 捡漏模式中的下单步骤不受请求间隔限制，默认逻辑为同时满足购物车有货和配送时间可用时疯狂下单，因此请勿在无人值守的情况下运行\n\n```\nyarn checkout:normal\n```\n\n## iOS 设备 Charles 抓包帮助\n\n因应用可主动选择不使用系统http代理，因此您需要一个第三方应用程序来实现抓包。\n\n由 [@iiwen](https://github.com/iiwen) 撰写的 [完整图文抓包教程参见](https://www.jianshu.com/p/0191790ba30e)\n\n## Webhook\n\n\u003e 您需要根据所使用的客户端，自行修改源代码进行适配\n\n默认情况下，在您配置好 `webhook_url` 后，下单成功时会向该地址发送一个 `POST` 请求， `body` 为 `JSON` 格式，包含如下字段：\n\n```js\n{\n\tprofile: '测试', // 配置文件中填写的别名\n\tprice: 0.01, // 本次下单金额\n\tarrival_time: '14:30-22:00', // 本次下单的预约时间\n\traw: {\n\t\tcart: ..., // 原始的购物车数据\n\t\torder: ..., // 原始的订单数据\n\t\treserve_time: ..., // 原始的预约时间数据\n\t}\n}\n```\n\n您可以通过修改 `/service/webhook.js` 来改变请求发送的方式、 `body` 的格式和内容，但入参（`{ profile, order, reserve_time, cart }`）不能修改。\n\n## 下单成功提示音\n\n下单成功时会播放`/assets/success.mp3`，默认为小猪佩奇，可自行替换。\n\n如需关闭，请前往 `/scripts/checkout_cart.js` 自行注释相关代码。\n\n## 免责声明\n\n本程序使用 GNU General Public License v3.0 开源、不提供任何担保。使用本程序即表明，您知情并同意：\n\n- 使用本程序造成的一切后果由您本人承担，作者不会对您的任何损失负责，包括但不限于服务中断、Kernel Panic、机器无法开机或正常使用、数据丢失或硬件损坏、原子弹爆炸、第三次世界大战、SCP 基金会无法阻止 SCP-3125 引发的全球 MK 级现实重构等\n- 如若您修改了本程序并发布，您需要使用相同协议开源\n- 本程序中的所有签名算法不受项目许可证约束，不允许二次修改和分发。若确有需求，请在 Telegram 交流群内联系我。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRunc2333%2Fdingdong-helper-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRunc2333%2Fdingdong-helper-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRunc2333%2Fdingdong-helper-node/lists"}