
我花了三天,搞懂了 ChatGPT 支付页面背后藏着的秘密
先说结论:OpenAI 的结账页面只给你留了信用卡,但它底层用的 Stripe,天生支持全球几十种本地支付方式。iDEAL、UPI、PIX、Kakao Pay,一个都不少 那些选项不是不存在,是被主动藏起来了
这件事让我想了很久
全球 80 亿人,持有信用卡的不到 20 亿-剩下那 60 亿,不是不愿意付钱,是连付钱的资格都被一个前端过滤器挡在了门外。印度 UPI 的渗透率超过 70%,巴西人用 PIX,荷兰人用 iDEAL,韩国人用 Kakao Pay。这些都是真实存在、运转良好的支付基础设施,却在 OpenAI 的结账页面上完全隐形

"提链"这个词,我最初以为是什么灰产暗语。真正拆开看,才发现它的本质非常朴素:用你自己的账号登录凭证,绕过前端的 UI 过滤,直接告诉 Stripe 后端"我要用荷兰 iDEAL 支付",然后 Stripe 就会生成一个对应的跳转链接
拿到token 会返回一个JWT格式 accessToken 这是后续所有操作的钥匙
https://chatgpt.com/api/auth/session
创建会话
POST https://chatgpt.com/backend-api/payments/checkout
Authorization: Bearer {你的Token}
//在请求体里指定 billing_details:
{
"billing_details": {
"country": "NL", // 荷兰
"currency": "EUR" // 欧元
}
}
//Stripe 就会在返回的 payment_method_types 里包含 ideal
提取支付链接
{
"status": "requires_action",
"next_action": {
"type": "redirect_to_url",
"redirect_to_url": {
"url": "https://hooks.stripe.com/redirect/authenticate/src_xxx?client_secret=..."
}
}
}
整个过程一共要走 12 步。不是随便抓个包改几个参数就能搞定的,而是要完整模拟浏览器行为,严格维护 Stripe 的状态机 Session 刷新、税务计算、客户信息同步、支付方式创建、确认、提取重定向链接……每一步都有参数依赖,跳步或传错数据,就会被 Stripe 的风控直接拦截
有几个细节让我印象深刻
第一,IP 必须全程一致
从创建会话到最终确认,必须同一个 IP,Stripe 把 IP 切换视为中间人攻击信号,直接拒绝
第二,金额不能写死
确认支付时传的金额,必须是系统动态计算出来的含税价格,因为不同国家税率不同,写死一个数字必然失败
第三,这和之前那个"0 元购"漏洞完全是两回事
那个工具注入了优惠参数,把价格操纵成 0,是真正的漏洞利用。提链不改任何价格,荷兰用户付的就是 Stripe 价格表里的 20 欧,一分不少 它只是把 Stripe 本来就有的能力,从 OpenAI 的前端过滤器里解放出来
我不是在为任何工具背书 我只是觉得,当你真正理解了协议层的逻辑,你会发现"被隐藏"和"不存在"是两件完全不同的事。前端的 UI 是一层叙事,协议才是事实
技术本身是中性的——它只是如实呈现了:一个商业决策,把大多数地球人挡在了门外
最后一句实在话:这类接口和风控策略随时会变,收藏脚本不如理解原理。懂了协议逻辑,你才能在它变了之后重新找到路