支付失败不是一件事,而是三类事:卡片数据错、验证没走完、收单方判定风险高。三类的处理动作互相冲突——数据错要改信息重试,验证没走完要重新走完 3DS,被风控拦截则重试越多越糟。先按报错文字定位类别,再决定动作。Stripe 对同一笔扣款的自动重试建议上限是 8 次,并说明发卡行可能把额外重试视为潜在欺诈。
扣款为什么会“时好时坏”
发卡行的自动化系统在收到扣款请求时,会按消费习惯、账户余额,以及卡片数据(有效期、地址信息、CVC)等信号决定是否授权 [2]。同一个订阅上个月成功、这个月失败,通常是这些信号变了,而不是卡坏了。
对订阅类扣款来说,几个信号格外敏感:
- 账单地址与发卡行系统里登记的那一条是否一致;
- 短时间内同一笔扣款的次数;
- 发卡地与网络环境的属地是否冲突——Stripe 说明,用一国发行的卡在另一国的 IP 下操作,可能被判为潜在的未授权用卡,但也承认跨境旅行等情形属于例外 [2];
- 发卡行的默认拦截规则:部分发卡行默认不允许线上交易、跨境交易或某些品类的消费 [2]。
把这几项分开看,才能判断下一步该改什么。改错方向会让失败次数增加,而失败次数本身就是风险信号。
能看到代码时:对照这张表
Stripe 把发卡行返回的原因整理成一组固定的拒付代码。多数时候持卡人看不到它,但在虚拟卡 App、银行 App 或支付调试视图里是能读到的。下表摘出与订阅扣款关系最直接的代码,含义与下一步均按 Stripe 官方说明转述 [1] [2]。
| 代码 | 官方给出的含义 | 官方给出的下一步 |
|---|---|---|
incorrect_number / invalid_number | 卡号不正确 | 用正确的卡号重试 |
incorrect_cvc / invalid_cvc | CVC 不正确 | 用正确的 CVC 重试 |
incorrect_zip | 账单邮编不正确 | 用正确的账单邮编重试 |
incorrect_address | 账单地址不正确 | 用正确的地址重试 |
invalid_expiry_month / invalid_expiry_year | 有效期无效 | 用正确的有效期重试 |
expired_card | 卡已过期 | 换一张卡 |
insufficient_funds | 余额不足以完成这笔支付 | 改用其他支付方式 |
withdrawal_count_limit_exceeded | 超出卡内余额或信用额度 | 改用其他支付方式 |
card_velocity_exceeded | 超出卡内余额、信用额度或交易金额限制 | 联系发卡行 |
currency_not_supported | 卡不支持该币种 | 向发卡行确认该币种是否可用 |
card_not_supported | 卡不支持这类消费 | 向发卡行确认该卡能否用于此类消费 |
authentication_required | 交易需要 3D Secure 等验证 | 重新发起并在验证环节完成验证;无持卡人在场的续费无法完成交互式验证 |
authentication_not_handled | 未完成所需验证就继续了交易 | 完整走完 3DS 或 SCA 流程 |
processing_error | 处理卡片时出错 | 重试;仍失败则联系发卡行 |
do_not_honor | 原因未知 | 联系发卡行 |
generic_decline | 原因未知,或被 Stripe Radar / Adaptive Acceptance 拦截 | 联系发卡行 |
transaction_not_allowed | 原因未知 | 联系发卡行 |
pickup_card / restricted_card | 该卡不能用于这笔支付(可能已被报失或被盗) | 联系发卡行 |
fraudulent | Stripe 怀疑该笔支付属于欺诈 | Stripe 要求商户不向持卡人披露更细的原因,对外一律呈现为 generic_decline |
lost_card / stolen_card | 卡片已被报失或报盗 | 不向持卡人披露具体原因 |
读这张表要注意两点。第一,代码说明的是“谁拒绝的”,不总是“为什么拒绝”:do_not_honor、generic_decline、transaction_not_allowed 三类的官方描述都是“原因未知”。第二,Stripe 明确说明发卡行把大多数拒付归类为 generic,并且出于隐私与安全,发卡行只与持卡人本人讨论拒付细节 [2]。所以“代码查不到原因”是正常结果,不是信息缺失。
只看到 “card was declined” 时
这是最常见的情况:页面只给一句通用提示。它不是页面偷懒,而是上面那条规则的直接结果——发卡行没有把细节交出来,商户也就无从展示。
此时的正确下一步只有一条:联系发卡行,问这笔扣款为什么被拒。继续换卡、换地址、反复提交,都是在不知道原因的情况下改变变量,结果无法解释,还会累积失败次数。
OpenAI 帮助中心把续费失败归到三个方向去查:发卡行是否拦截了这笔扣款、账单信息是否与发卡行记录一致、以及该地区是否存在支付限制 [3]。这个顺序与本节的判断一致:先问发卡行,再核对信息,最后才考虑地区因素。
三类成因,处理动作互相冲突
把上表的代码归成三类,每类对应一套动作。混用会互相抵消。
| 类别 | 典型代码 | 该做什么 | 重试有用吗 |
|---|---|---|---|
| 卡片数据错误 | incorrect_*、invalid_*、expired_card | 逐项核对卡面信息与账单地址后重新提交 | 有用,前提是改对了 |
| 验证流程未完成 | authentication_required、authentication_not_handled | 重新发起并完整走完 3DS 或 SCA | 只有走完验证才有用 |
| 收单方或发卡方风控 | generic_decline、do_not_honor、fraudulent、card_not_supported | 联系发卡行确认限制,或改用另一张卡 | 反复重试会让判断更差 |
第三类里有一个容易忽略的分支:generic_decline 的官方描述包含“被 Stripe Radar 或 Adaptive Acceptance 拦截” [1]。这种情况下扣款请求可能根本没到发卡行,所以银行客服查不到记录——这不是客服在敷衍,而是请求确实没到那一层。判断依据是:如果银行端完全没有这笔授权记录,问题更可能在收单侧而不是发卡侧。
重试还是不重试:看 advice code
除了拒付代码,Stripe 还会返回一个 advice code,直接告诉你这笔能不能重试 [2]:
do_not_try_again——不要用这张卡再试同一笔交易;try_again_later——可以稍后重试;confirm_card_data——提供的信息有误,需要先核对卡面信息。
没有代码可看时,按这个原则处理:同一张卡对同一笔扣款,连续提交不要超过一两次。Stripe 说明卡组织限制同一笔扣款的重试次数,其建议上限是 8 次,并提醒发卡行可能把额外重试视为潜在欺诈,反而让正常扣款更容易被拒 [2]。
订阅场景还有一层:自动续费属于无持卡人在场的扣款,触发 authentication_required 时无法弹出验证页让人完成 3DS。Stripe 对此的建议是先在有持卡人在场时完成验证并保存,再用于后续扣款 [1]。这也是为什么“第一次手动订阅能过、之后自动续费失败”会反复出现。
逐项排查清单
按顺序做,每做完一项再提交一次,不要一次改多个变量。
- 卡面信息逐位核对:卡号、有效期、CVC。虚拟卡请从 App 里复制,不要凭记忆输入。
- 账单地址与邮编:要的是发卡行系统里登记的那一条,不是“看起来合理”的那一条。随便填一个当地地址不会通过校验。
- 余额与额度:确认够这一笔,并留意是否已有预授权冻结占用了额度。
- 卡的功能开关:部分卡默认关闭线上交易、跨境交易或订阅类扣款,需要在 App 里单独打开。
- 提交频率:短时间内对同一笔的重复提交本身就是一个风险信号。
- 网络与设备环境:Stripe 把发卡地与 IP 属地冲突列为可能的拒付原因 [2]。频繁切换环境会让这个信号变差。
六项都做完仍然失败,就不要再试了,直接联系发卡行。此时你能提供的最有用的信息是:失败的时间、金额、商户名称,以及你看到的任何代码。
什么情况必须联系发卡行
出现下列任一情况,下一步都在发卡行而不是在商户页面:
- 代码是
do_not_honor、generic_decline、transaction_not_allowed、security_violation、service_not_allowed中的任意一个——官方对这几类给出的下一步都是“持卡人联系发卡行” [1]; - 代码是
card_not_supported或currency_not_supported,需要确认这张卡是否被允许用于这类消费或这个币种; - 代码是
card_velocity_exceeded、pickup_card或restricted_card; - 同一张卡在其他商户能正常消费,只有这一个商户失败;
- 你已经在同一张卡上失败三次以上。
联系发卡行时可以直接问三个问题:这笔扣款是否到达了你们的授权系统;如果到了,拒付原因代码是什么;这张卡是否对线上、跨境或订阅类交易有额外限制。
不该做的事
- 不要在同一张卡上连续重试。见上一节的重试上限与欺诈判断说明。
- 不要因为支付失败就重新注册账号。支付失败与账号因违规被停用是两回事,混在一起处理会带来额外风险,见本站《ChatGPT、Claude 封号怎么办?按官方规则预防与申诉》。
- 不要用他人的卡或代付服务“过一下”。共享账号与支付凭证在两家平台的使用条款里都属于可停用情形。
- 不要相信“内部渠道解锁”或“包过”的服务。拒付由发卡行与收单方决定,第三方无法代为更改;本站不提供规避风控的方法。
支付失败本身不改变账号状态,也不影响后续正常订阅。真正会让情况变糟的是在不了解原因的前提下反复尝试。
常见问题
ChatGPT Plus 支付失败会导致封号吗?
两者是不同的处理路径。OpenAI 条款把“付款无法完成”与因违规停用账号分开:前者可能导致账号降级或暂停访问,直到收到付款。本文只处理支付环节;账号被停用请按官方申诉渠道处理。
换账单地址真的有用吗?
地址校验是发卡行与收单方都在用的信号,Stripe 说明校验失败时应让持卡人核对信息后再发起。前提是填写的地址与发卡行登记的记录一致;随便填一个当地地址不会通过校验,还可能让风控评分变差。
虚拟卡被拒,换成实体卡会更好吗?
Stripe 提到部分卡种对可购买品类有限制(例如 FSA / HSA 卡只限特定商户),说明卡种确实是发卡行返回的信号之一。但本站不把卡种当成通过保证,也不认为换卡种能替代排查。
银行说查不到这笔交易,但页面提示失败?
说明请求可能没有到达发卡行。<code>generic_decline</code> 的官方描述包含“被 Stripe Radar 或 Adaptive Acceptance 拦截”这一情形,这种情况下扣款在收单侧就被拦下了,银行端不会有记录。
同一笔应该重复提交几次?
看 advice code:<code>do_not_try_again</code> 就不要再用这张卡试;<code>try_again_later</code> 可以稍后重试;<code>confirm_card_data</code> 要先核对信息。看不到代码时,先联系发卡行,不要连续提交。