Home
Softono
gpt-promo-scanner

gpt-promo-scanner

Open source MIT Python
607
Stars
120
Forks
6
Issues
2
Watchers
1 month
Last Commit

About gpt-promo-scanner

gpt-promo-scanner is an automated Python tool designed to discover, validate, and compare discount codes for OpenAI ChatGPT Team or Business subscriptions. It scans for partner promo codes across 17 countries and 34 specific regions, potentially unlocking discounts of up to 71% off the standard $50 monthly fee. The software operates by combining known company base names with country codes to generate candidate codes, then systematically verifying them. It integrates with proxy clients like Clash Verge to route traffic through different geographic locations, simulating checkout sessions from various countries to test eligibility. Key features include batch discovery, real-time price collection in USD, and the generation of direct Stripe payment links for valid codes. The workflow involves generating candidates, flooding the verification process with multi-region checks, and parsing results to separate usable codes from invalid ones. It is intended for users who wish to automate the search for high-value enterp

Platforms

Web Self-hosted Cloud

Languages

Python

Links

ChatGPT Team (Business) 促销码自动扫描工具

简体中文 | English

LINUX DO

原创研究首发于 Linux Do 社区(一级用户才可查看)

ChatGPT Team(现 ChatGPT Business)标准价 $50/月(2 人)。OpenAI 给部分渠道合作伙伴发放了促销码,可以 40%~71% 折扣。

本项目提供一套完整的批量发现、验证、比价、支付工具链。跟着下面的流程一步步操作即可。


目录


前置准备

需要的环境

  • Clash Verge(或兼容 Clash API 的代理客户端)— 用于切换不同国家的代理节点
  • Python 3.9+
  • ChatGPT 账号(免费版即可,不需要订阅)

1. 安装项目

git clone https://github.com/JUk1-GH/gpt-promo-scanner.git
cd gpt-promo-scanner
pip install -r requirements.txt

2. 配置 Clash

确保 Clash Verge 正在运行,脚本默认连接 /tmp/verge/verge-mihomo.sock(Unix socket)。

如果路径不同,修改 config.toml 中的 socket 配置。

3. 获取 accessToken

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 开头的字符串,复制它。

4. 配置 Token

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 码后缀不统一,有的用 uktalentgeniusuk),有的用 gbaibuildgroupgb
  • 可能还有其他未发现的命名变体

从哪找公司名单

有促销码的公司通常符合以下特征:

  • 中小型 MSP(托管服务提供商),为中小企业提供 IT 支持
  • AI 工具公司,特别是做 Chrome 插件、SaaS 产品的
  • 区域性公司,在一个或几个国家有业务

确定不包含:大型咨询公司(Accenture、Deloitte、McKinsey)、大型 MSP(SearchKings)、大型 IT 企业(Samsung SDS)。

方法一:用已知 base name 全矩阵扫描

项目内置了目前已发现的 9 个 base name,可以直接对它们做全矩阵交叉扫描(base name × 34 个国家):

python discover_codes.py --cross

脚本会自动组合所有已知公司名 × 所有国家,逐个调 API 验证。这是最快发现新码的方式。

方法二:自己准备公司名单

把你认为可能有码的公司名列出来,按规则生成候选码,丢给脚本扫描。

也可以用 AI 帮你生成公司名单,提示词参考:

我正在寻找 ChatGPT Business 的促销码,命名规则是 公司名全小写去空格 + 国家代码。请帮我列出一些可能获得 OpenAI 促销码的 MSP 或 AI 工具公司,特别是:

  1. 做 Chrome 插件的 AI 公司
  2. 中小型 IT 服务商
  3. 区域性 MSP

discover_codes.py 用法详解

# 扫描指定地区(如英国 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 进行全自动扫描验证。

这个脚本会自动:

  1. 检测 Clash 模式和代理组
  2. 按地区匹配节点关键字
  3. 切换节点 → 测延迟 → 调 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 --open

第三步:收集价格

auto_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>

需要三个参数:

  1. 促销码 — 要使用的码
  2. 国家码 — 对应节点的 ISO 国家码(大写)
  3. 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?

ELIGIBLE 取决于你的 ChatGPT 账号地区和当前 Clash 节点的匹配度:

  • 如果你的账号是 US 地区,切到 US 节点后 US 码可能就是 ELIGIBLE
  • 切换到其他地区节点后,对应的本地化码可能变成 ELIGIBLE
  • 同一账号对不同地区码的 ELIGIBLE 状态可能不同

大部分情况下,只要能拿到 EXISTS 就说明码是真实的,只是需要切对节点才能支付。


实战技巧

1. 找到更多公司名

有促销码的通常是中小型公司,不是大企业。试试这些思路:

  • 搜索 "ChatGPT Team promo code" + AI 工具名
  • 关注各国家的中小型 MSP 名单
  • TG 上的一些优惠频道偶尔会流出新码
  • 让 AI 帮你生成可能有合作的公司名单

2. 先验证一个再批量

# 先用 verify.py 单测一个码
# 或者直接用 discover_codes.py 跑单个地区
python discover_codes.py GB --preview

确保 Token 有效、Clash 正常工作后,再跑全量扫描。

3. 交叉扫描发现更多

发现一个新的 base name 后,用 --cross 做全矩阵扫描:

python discover_codes.py --cross --add-base "newcompany"

如果新公司跟已知公司有类似的多国业务模式,很可能在其他国家也有码。

4. 分步扫描避免被封

不要一次性扫太多请求。建议节奏:

  1. 先跑 --cross 快速筛选(只调 eligibility API)
  2. EXISTS 的码整理出来
  3. 分批用 auto_scan.py 收集价格

5. 及时更新 Token

Token 过期后所有请求都返回 invalid_code,会把有效码误判为不存在。可以设置 cron 定期获取新 token。


踩坑记录

1. CRN 报道的合作伙伴全部无效

初始按 OpenAI 公开合作的 MSP 公司名枚举,SearchKings、Samsung SDS 等全部没有促销码。公共合作伙伴 ≠ 有促销码的合作伙伴。

2. 跑大量请求前必须先测一个

一次生成 1286 个候选码直接开跑,全部被 Cloudflare 拉黑。任何批量操作前必须先用单个请求测试 API 可用性。

3. Clash 全局模式 vs 规则模式

脚本早期硬编码 🤖 AI 代理组,但 Clash 在 global 模式下 ChatGPT 流量走 GLOBAL 组,导致节点切换不生效。现已支持动态检测。

4. UK 国家后缀不统一

talentgeniusuk 有效但 talentgeniusgb 不存在;aibuildgroupgb 有效但 aibuildgroupuk 不存在。对 UK 必须两种后缀都试。

5. Cloudflare 限速

连续 ~50 个请求后 Cloudflare 开始拦截。脚本内置了间隔控制和自动切换节点机制,但如果仍遇到,手动放慢节奏。

6. 折扣是 per-seat 值

Metadata API 返回的 discount.value 是每席位的折扣,2 席位时实际省 = value × 2。

7. 促销码有有效期

部分码(如 geccogbcodestonegb)曾经可用,现已过期。码一旦过期就是永久失效,不可恢复。

8. pricing-data.js 含税 ≠ Stripe 不含税价

官网标价是含税价(含 VAT/GST),Stripe checkout 底层用不含税价计算折扣。不同国家 VAT 不同(DE 19%、FR 20%、GB 20%)。直接看 Stripe 页面的 pre-tax 金额最准,或者改账单地址到免税地区。

9. Token 过期导致全部 false negative(最大坑)

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)

Star 趋势

Star History Chart


许可

MIT