简体中文 | English
原创研究首发于 Linux Do 社区(一级用户才可查看)
ChatGPT Team(现 ChatGPT Business)标准价 $50/月(2 人)。OpenAI 给部分渠道合作伙伴发放了促销码,可以 40%~71% 折扣。
本项目提供一套完整的批量发现、验证、比价、支付工具链。跟着下面的流程一步步操作即可。
- Clash Verge(或兼容 Clash API 的代理客户端)— 用于切换不同国家的代理节点
- Python 3.9+
- ChatGPT 账号(免费版即可,不需要订阅)
git clone https://github.com/JUk1-GH/gpt-promo-scanner.git
cd gpt-promo-scanner
pip install -r requirements.txt确保 Clash Verge 正在运行,脚本默认连接 /tmp/verge/verge-mihomo.sock(Unix socket)。
如果路径不同,修改 config.toml 中的 socket 配置。
ChatGPT 的 API 需要登录凭证,通过浏览器获取:
方法一(推荐):浏览器打开以下地址,在页面显示的 JSON 中找到 accessToken 字段:
https://chatgpt.com/api/auth/session
方法二:在 chatgpt.com 按 F12 → Console,执行:
const s = await (await fetch('/api/auth/session')).json();
console.log(s.accessToken);会输出一串以 eyJ 开头的字符串,复制它。
cp config.toml.example config.toml编辑 config.toml,把刚才获取的 token 填入:
[openai]
token = "eyJhbGciOi..."
⚠️ Token 有有效期(几小时到几天),过期后所有验证都会返回invalid_code。每次跑脚本前如果发现全部是not found,先去重新获取 token。
根据目前已发现的码,大部分遵循这个命名规律:
公司名(全小写去空格) + ISO 国家码(小写)
例如:thinkingmachines + th = thinkingmachinesth
但不是绝对的,存在明显例外:
- 有的码没有国家后缀(如
firstfocus,没有 AU) - UK 码后缀不统一,有的用
uk(talentgeniusuk),有的用gb(aibuildgroupgb) - 可能还有其他未发现的命名变体
有促销码的公司通常符合以下特征:
- 中小型 MSP(托管服务提供商),为中小企业提供 IT 支持
- AI 工具公司,特别是做 Chrome 插件、SaaS 产品的
- 区域性公司,在一个或几个国家有业务
确定不包含:大型咨询公司(Accenture、Deloitte、McKinsey)、大型 MSP(SearchKings)、大型 IT 企业(Samsung SDS)。
项目内置了目前已发现的 9 个 base name,可以直接对它们做全矩阵交叉扫描(base name × 34 个国家):
python discover_codes.py --cross脚本会自动组合所有已知公司名 × 所有国家,逐个调 API 验证。这是最快发现新码的方式。
把你认为可能有码的公司名列出来,按规则生成候选码,丢给脚本扫描。
也可以用 AI 帮你生成公司名单,提示词参考:
我正在寻找 ChatGPT Business 的促销码,命名规则是
公司名全小写去空格 + 国家代码。请帮我列出一些可能获得 OpenAI 促销码的 MSP 或 AI 工具公司,特别是:
- 做 Chrome 插件的 AI 公司
- 中小型 IT 服务商
- 区域性 MSP
# 扫描指定地区(如英国 GB),使用内置的 base name 列表
python discover_codes.py GB
# 在扫描时额外添加自定义码(可以跟 --cross 一起用)
python discover_codes.py GB --add "mycompanygb"
# 全矩阵扫描:所有已知 base name × 所有国家
python discover_codes.py --cross
# 跟 --cross 时,额外添加自定义 base name 一起扫
python discover_codes.py --cross --add-base "mycompany"
# 预览候选码(不跑验证,只展示会扫哪些)
python discover_codes.py GB --preview
# 扫描完成后自动调用 auto_scan.py 收集价格
python discover_codes.py GB --auto-scan
# 列出脚本支持的国家列表
python discover_codes.py --list结果会按 ELIGIBLE(可用)、EXISTS(存在但地区不匹配)、not found(不存在)三类保存到文件。
候选码生成完毕后,用 auto_scan.py 进行全自动扫描验证。
这个脚本会自动:
- 检测 Clash 模式和代理组
- 按地区匹配节点关键字
- 切换节点 → 测延迟 → 调 checkout API → 收集结果
# 只扫描英国 GB
python auto_scan.py GB
# 跳过价格收集(只验证是否存在,更快)
python auto_scan.py GB --no-price适用于:你有明确的目标地区,或者只想确认刚发现的码是否能用。
python auto_scan.py脚本会遍历所有支持的地区,自动切换 Clash 节点,逐个验证并收集结果。这是最常用的模式。
扫描完成!结果已保存到:
- stripe_urls.txt — 所有可用的 Stripe 支付链接
- scan_results.json — 结构化 JSON 结果
共发现 X 个可用码(ELIGIBLE)
共发现 Y 个存在码(EXISTS)
# 查看支持的地区列表
python auto_scan.py --list
# 扫描后自动用浏览器打开 Stripe 支付页面
python auto_scan.py GB --openauto_scan.py 默认会在验证后自动调用 metadata API 获取折扣信息,并实时换算美元价格。
code: thinkingmachinesth
✅ ELIGIBLE
折扣: ฿999/月 off (≈ $17/人)
2 人实付: ฿561/月 (≈ $17)
官网标价是含税价,Stripe 用不含税价计算折扣。
例如德国的标价是 €26/seat(含 19% VAT),但 Stripe 内部用 €26 ÷ 1.19 = €21.85/seat 作为 base price。直接用官网标价算实付会差很多。
正确做法:看 Stripe 支付页面的 pre-tax 金额。也可以在支付时修改账单地址到免税地区,免去税费。
注:脚本收集的价格是 API 返回的折扣值,并非最终实付。最准确的方式是直接打开 Stripe 页面查看。
找到有效的促销码后,用 open_stripe.py 生成支付链接。
这个脚本完全独立,复制出去单独放也能用,只需要 curl_cffi 依赖。
python3 open_stripe.py <促销码> <国家码> <accessToken>需要三个参数:
- 促销码 — 要使用的码
- 国家码 — 对应节点的 ISO 国家码(大写)
- accessToken — 从 chatgpt.com 获取的登录凭证(
eyJ...)
# 泰国节点
python3 open_stripe.py thinkingmachinesth TH eyJhbGciOi...
# 德国节点
python3 open_stripe.py codestonede DE eyJhbGciOi...
# 美国节点
python3 open_stripe.py wildmangous US eyJhbGciOi...🔗 thinkingmachinesth [TH]
✅ 链接已生成,复制到浏览器打开:
https://checkout.stripe.com/c/pay/cs_xxx...
把链接复制到浏览器打开,确认折扣金额后即可付款。
⚠️ 每次使用前需先切换到对应国家的 Clash 节点。例如用 TH 码就先切到泰国节点。
API 返回三种结果:
| 结果 | 含义 | 怎么办 |
|---|---|---|
ELIGIBLE |
可用,当前账号可直接付 | 直接生成 Stripe 链接支付 |
EXISTS |
码存在,但当前节点地区不匹配 | 切到对应国家的节点再试 |
not found |
不存在(或 token 过期) | 先确认 token 有效,再尝试其他公司名 |
ELIGIBLE 取决于你的 ChatGPT 账号地区和当前 Clash 节点的匹配度:
- 如果你的账号是 US 地区,切到 US 节点后 US 码可能就是
ELIGIBLE - 切换到其他地区节点后,对应的本地化码可能变成
ELIGIBLE - 同一账号对不同地区码的
ELIGIBLE状态可能不同
大部分情况下,只要能拿到 EXISTS 就说明码是真实的,只是需要切对节点才能支付。
有促销码的通常是中小型公司,不是大企业。试试这些思路:
- 搜索 "ChatGPT Team promo code" + AI 工具名
- 关注各国家的中小型 MSP 名单
- TG 上的一些优惠频道偶尔会流出新码
- 让 AI 帮你生成可能有合作的公司名单
# 先用 verify.py 单测一个码
# 或者直接用 discover_codes.py 跑单个地区
python discover_codes.py GB --preview确保 Token 有效、Clash 正常工作后,再跑全量扫描。
发现一个新的 base name 后,用 --cross 做全矩阵扫描:
python discover_codes.py --cross --add-base "newcompany"如果新公司跟已知公司有类似的多国业务模式,很可能在其他国家也有码。
不要一次性扫太多请求。建议节奏:
- 先跑
--cross快速筛选(只调 eligibility API) - 把
EXISTS的码整理出来 - 分批用
auto_scan.py收集价格
Token 过期后所有请求都返回 invalid_code,会把有效码误判为不存在。可以设置 cron 定期获取新 token。
初始按 OpenAI 公开合作的 MSP 公司名枚举,SearchKings、Samsung SDS 等全部没有促销码。公共合作伙伴 ≠ 有促销码的合作伙伴。
一次生成 1286 个候选码直接开跑,全部被 Cloudflare 拉黑。任何批量操作前必须先用单个请求测试 API 可用性。
脚本早期硬编码 🤖 AI 代理组,但 Clash 在 global 模式下 ChatGPT 流量走 GLOBAL 组,导致节点切换不生效。现已支持动态检测。
talentgeniusuk 有效但 talentgeniusgb 不存在;aibuildgroupgb 有效但 aibuildgroupuk 不存在。对 UK 必须两种后缀都试。
连续 ~50 个请求后 Cloudflare 开始拦截。脚本内置了间隔控制和自动切换节点机制,但如果仍遇到,手动放慢节奏。
Metadata API 返回的 discount.value 是每席位的折扣,2 席位时实际省 = value × 2。
部分码(如 geccogb、codestonegb)曾经可用,现已过期。码一旦过期就是永久失效,不可恢复。
官网标价是含税价(含 VAT/GST),Stripe checkout 底层用不含税价计算折扣。不同国家 VAT 不同(DE 19%、FR 20%、GB 20%)。直接看 Stripe 页面的 pre-tax 金额最准,或者改账单地址到免税地区。
ChatGPT accessToken 有有效期(通常几小时到几天),过期后 eligibility API 对任何码都返回 invalid_code。在过期 token 下跑的大批量扫描,所有结果都是假的"不存在"。
教训:
- 每次跑扫描前脚本会自动验证 token(用已知有效码调 eligibility API)
- 如果验证失败会打印
❌ Token 验证失败并退出 - 此时需重新从 chatgpt.com F12 Console 获取新 token
| 文件 | 用途 |
|---|---|
auto_scan.py |
全自动扫描 + 价格收集(第二步、第三步用) |
discover_codes.py |
批量发现新促销码(第一步用) |
open_stripe.py |
一键生成 Stripe 付款链接,完全独立可复制(第四步用) |
verify.py |
手动验证单个码是否存在(快速测试用) |
config.py |
配置读取模块 |
config.toml.example |
配置模板 |
known_codes.json |
已知有效码数据库(本地使用,不提交到 git) |