现在很多工作已经很难完全离开大模型了。对我来说,模型能力只要强一点,很多原本需要自己磨半天的事情就能直接省掉一大截时间。所以往往到最后,问题会从“哪个模型更好用”变成另一个很现实的问题:怎么订阅,怎么付款,以及怎么把成本压下来。

这篇主要记录我自己订阅付费 ChatGPT Business 时走过的一套流程,包括虚拟卡和优惠活动。

先说明一下:支付方式、活动规则和不同地区的可用性都可能变化,下面更多是我当时实际操作时的记录。银行卡、KYC、账单地址等信息建议都使用本人真实、可验证的信息,并以平台当前支持地区和服务条款为准。

如果你手上已经有一张能够正常完成国际线上支付的银行卡,那么前面关于虚拟卡的部分其实可以直接跳过,直接看后面的 Business 套餐。

为什么最后还是绕不开一张外卡

国产模型现在已经非常强,而且很多都可以自己部署。但如果平时还会用到 OpenAI、Anthropic 这一类海外服务,付款始终是一个绕不开的问题。

我自己折腾下来,最麻烦的其实不是有没有20刀去付费,而是:

  • 卡片本身是否支持国际线上交易;
  • 发卡地区是否在商户支持范围内;
  • 账单信息能不能正常验证;
  • 风控会不会直接把交易拦掉。

银行卡卡号前几位,也就是常说的 BIN / 卡头,基本可以判断发卡机构和地区。不同卡头在不同商户上的通过率确实会有差别,所以很多时候同样是一张 Mastercard,体验可能完全不同。

如果已经有境外实体银行卡,那当然最省事;如果没有,虚拟卡会成为一个不错的过渡方案。

我推荐的是 Bybit Card

虚拟卡很多,但是我最推荐你用的是 Bybit Card。

我推荐它的原因其实比较简单:如果这篇博客对你很有帮助,你可能正走在成为一个数字游民的道路上,那么这个卡的门槛最低,注册和 KYC 的流程不算折腾,对只是想解决订阅付款的人来说已经够用了,没有必要为了多一点返现去专门折腾门槛更高的卡。

不同平台的虚拟卡通常会有不同等级的身份认证要求,从身份证件,到护照、手机号、地址证明,门槛差异很大。门槛高的卡有时候权益会更好,但如果目的只是完成简单的海外订阅支付,我觉得没必要把这件事搞得太复杂。

注册前准备

请提前准备:

  • 一个长期使用的邮箱,最好是 Gmail;
  • 本人的身份证件,一般是身份证,当然护照也可以;
  • 可以正常接收验证信息的手机号,+86就满足条件;
  • 推荐台湾的 VPN 节点,不要用香港或者美国的。

请从我的邀请连接注册,Bybit 注册。

如果不想用邀请链接,也可以直接从官网或 App Store / Google Play 下载官方 App。

刚开始点注册,地区选择台湾,然后使用手机号或邮箱;输入邀请码 YYEDPN2;完成注册。

完成 KYC

注册之后,按照 App 的提示做实名认证即可。

大致流程就是:

  1. 选择自己的实际国家或地区,如中国;
  2. 上传平台支持的身份证件,选择身份证;
  3. 扫描证件,完成人脸识别;
  4. 等待审核,我当时审核速度很快,基本没有遇到什么问题。

完成 KYC 后,我顺手把邮箱、安全验证这些东西一起补齐了。毕竟后面卡里是要放钱的,二次验证最好不要省。流程为:进入 Bybit APP,点击左上角人头像,然后设置,安全设置。

申请 Card

如果账户满足条件,首页一般就能看到 Card 入口,点进去就能开卡了。

开卡的时候,建议地区选择 AU 澳大利亚,如果选不了用 TW 台湾也是可以的,区别就在于开的卡卡头是哪个地区的,一般来说是 AU 的卡头 539900 更优质一点,但是经过检验,两个地区的银行卡都可以有效付款,可以再填一次我的邀请码 YYEDPN2。

进去之后按页面要求补齐个人信息和账单资料即可。这里账单地址我比较建议直接使用住宅地址生成器生成一个住宅地址,需要和前面选择的地区是一致的。

提交之后页面会显示需要等待一段时间,但实际审核时间未必真的那么久。我当时很快就收到了开卡结果,也是一分钟左右就下卡了,此时邮箱就会收到邮件。

卡下来以后,就可以在 App 里看到:

  • 卡号;
  • 有效期;
  • CVV;
  • 账单相关信息。

到这里,其实最难的一步就已经结束了。

至于后面的充值、换汇和卡内余额管理,不同人的资金来源完全不一样,这篇就不继续展开了。总之在付款之前,先确保卡里有足够余额,并留一点汇率波动和预授权的空间。

ChatGPT Business 的“双人成行”

OpenAI 经常会开展 ChatGPT Business 的团队优惠活动。

活动逻辑其实很好理解:Business 本身是按席位收费的,而团队至少需要两个席位。如果活动能够减免其中一个席位,那么两个人一起用,平均成本就会比各自单独订阅更低。

这里需要注意的是,活动持续时间、适用账户、优惠力度和最终价格都可能调整。所以不要只看别人截图里的数字,最后一定要以自己结账页面实际显示的价格为准。

优惠链接从哪里来

我当时看到过社区、论坛和活动分享里流出的 Business 优惠链接。

这类东西最大的问题不是“能不能用”,而是来源比较杂。有些可能是公开活动,有些可能只是一次性的邀请,还有一些干脆已经过期。

所以我的建议是:

  • 优先使用官方活动页面或可信来源;
  • 如果去闲鱼上购买,最好不要超过10元;
  • 打开链接之后,先确认优惠是不是实际出现在自己的结账页面;
  • 没显示优惠就不要继续付款。

Business 套餐的付款流程

登录自己的 ChatGPT 账号后,通过对应的 Business 活动或官方升级入口进入结账页面。一般来说,这个优惠码对应的网址大概会长成:chatgpt.com/promocode=XXXXXXX。

这时候重点检查几件事:

  1. 当前套餐是不是 ChatGPT Business;
  2. 工作区席位数量是不是自己需要的数量;
  3. 计费周期是月付还是年付;
  4. 优惠是否已经正确显示;
  5. 最终金额、币种和税费是否符合预期。

然后点击 F12,进入浏览器开发者工具,在 console 栏输入以下长链接:

(async function generateGenericHostedLink() {
  console.log("⏳ [chatgpt-link] 正在获取 Session Token...");

  // ── 1. 获取当前登录的 Access Token ──────────────────────────────────────
  let accessToken;
  try {
    const session = await fetch("/api/auth/session", { credentials: "include" }).then((r) => r.json());
    accessToken = session?.accessToken;
    if (!accessToken) throw new Error("accessToken 为空");
  } catch (e) {
    console.error("❌ [chatgpt-link] 获取 Token 失败,请确保已登录 ChatGPT:", e.message);
    return;
  }
  console.log("✅ [chatgpt-link] Token 获取成功");

  // ── 2. 构造请求 Payload ──────────────────────────────────────────────────
  const payload = {
    // 计划名称:Plus 填 "chatgptplusplan",Team 填 "chatgptteamplan"
    plan_name: "chatgptteamplan", 

    // 如果是 Plus 计划,请删除下面这整个 team_plan_data 对象
    team_plan_data: {
      workspace_name: "Workspace_Name", // [修改] 你的工作区名称
      price_interval: "month",          // 按月 (month) 或 按年 (year)
      seat_quantity: 2,                 // [修改] 团队人数(至少为 2)
    },

    billing_details: {
      country: "US",                    // [修改] 国家代码,例如 US, JP, GB
      currency: "USD",                  // [修改] 对应币种,例如 USD, JPY, GBP
    },

    cancel_url: "https://chatgpt.com/#pricing",

    // [修改] 填入优惠码(如果没有优惠码,请删除整个 promo_code 字段)
    promo_code: "YOUR_PROMO_CODE_HERE",

    checkout_ui_mode: "hosted",
  };

  // ── 3. 发送请求 ──────────────────────────────────────────────────────────
  console.log("⏳ [chatgpt-link] 正在向 OpenAI 请求支付信息...");
  let data;
  try {
    const response = await fetch(
      "https://chatgpt.com/backend-api/payments/checkout",
      {
        method: "POST",
        credentials: "include",
        headers: {
          Authorization: `Bearer ${accessToken}`,
          "Content-Type": "application/json",
        },
        body: JSON.stringify(payload),
      }
    );
    data = await response.json();

    if (!response.ok) {
      console.error("❌ [chatgpt-link] 请求失败,HTTP", response.status);
      console.error(data);
      return;
    }
  } catch (e) {
    console.error("❌ [chatgpt-link] 网络请求异常:", e.message);
    return;
  }

  // ── 4. 处理结果并执行跳转 ──────────────────────────────────────
  const hostedUrl = data?.url || data?.stripe_hosted_url || data?.checkout_url;

  if (hostedUrl) {
    // 方案 A:成功拿到了直接的长链接
    console.log("─".repeat(60));
    console.log("✅ [chatgpt-link] 成功生成 Hosted 直接链接!");
    console.log("🔗 请点击下方链接或复制到无痕窗口支付:");
    console.log(hostedUrl);
    console.log("─".repeat(60));
    // window.location.href = hostedUrl; // 取消注释可自动跳转

  } else if (data.checkout_session_id && data.publishable_key) {
    // 方案 B:OpenAI 走 Custom 模式,利用 session_id 触发原生 Stripe 跳转
    console.log("⚠️ [chatgpt-link] 接口返回了 Custom 模式,未能直接拿到长链接。");
    console.log("%c✅ 正在利用 session_id 通过 Stripe.js 进行原生跳转...", "color:#10a37f;font-size:14px");
    
    if (!window.Stripe) {
        await new Promise((resolve, reject) => {
            const script = document.createElement("script");
            script.src = "https://js.stripe.com/v3/";
            script.onload = resolve;
            script.onerror = reject;
            document.head.appendChild(script);
        });
    }

    const stripe = window.Stripe(data.publishable_key);
    
    console.log("%c🚀 正在拉起 Stripe 收银台,请稍候...", "color:orange;font-size:16px");
    stripe.redirectToCheckout({ sessionId: data.checkout_session_id });
    
  } else {
    // 方案 C:未知异常格式
    console.error("❌ [chatgpt-link] 无法解析支付信息,响应格式异常:", data);
  }
})();

注意修改其中的 promo code 字段,改成正确的优惠码,同时要注意当前 IP 要和优惠码适配的地区对应上。 敲回车,会得到一个 stripe 的付款连接,在新的选项卡中打开。

付款资料建议和银行卡、发卡机构记录保持一致。尤其是账单国家、账单地址、姓名等信息,如果互相对不上,很容易直接触发支付失败或者额外验证。

付款地址可以写美国的免税州,同样,建议使用住宅地址生成器生成。

付款失败时我一般检查什么

如果卡片余额没问题但还是支付失败,一般来说还是需要检查 IP 是否干净,IP 要和你填的付款地址一致。

写在最后

海外支付这件事到最后,我的感受其实是:

真正麻烦的不是最后点下“付款”那个按钮,而是前面一堆看起来不起眼的条件要同时满足。

有一张稳定的国际支付卡之后,很多海外 SaaS 的订阅都会方便很多。所以如果长期会用这些服务,与其每个月都重新找一次临时付款方案,不如把支付工具本身先解决掉。

毕竟一个合格的数字游民,我们需要它。