Stripe 支付失败怎么办:按报错类型排查与处理

更新于 2026-10-19 · deliwaimao.cn

简答:Stripe 支付失败时,先记录页面提示和错误代码,再核对卡号、有效期、CVC、账单地址与余额;若出现 3D Secure 或 authentication_required,完成银行验证或更换支付方式。商户端则检查 PaymentIntent 的 status、last_payment_error 和 webhook 日志,不要在未确认结果前反复创建扣款。

定义:Stripe 支付失败,是一次 PaymentIntent 或其他支付对象未完成授权、验证、扣款或后续处理的状态,不一定只代表银行卡本身有问题。

先看这张表:不同报错对应不同处理方式

不要先连续点击“再次支付”。先保存页面上的英文提示、订单号、PaymentIntent ID(如果页面提供)和银行短信状态,再按下表判断处理方向。

提示或代码通常表示什么先做什么
card_declined、generic_decline发卡行拒绝,具体原因可能未返回确认卡片可进行境外线上交易,并联系发卡行询问该笔商户扣款是否被拦截
insufficient_funds可用余额或信用额度不足确认可用额度、单笔限额和交易币种,再使用余额或额度充足的支付方式
incorrect_number、incorrect_cvc、expired_card卡号、CVC 或有效期不正确或已失效按照卡片实际信息重新填写,不要猜测账单资料
authentication_required、requires_action需要完成 3D Secure 或其他身份验证返回支付页面完成银行验证;验证窗口打不开时先处理浏览器和页面加载问题
processing_error、页面加载失败支付处理或商户集成可能出现临时错误先确认是否已经产生订单或银行待处理记录,再由商家检查支付日志
银行已扣款,但页面显示失败可能是授权记录、待处理扣款或页面回调未完成不要再次付款,保留银行记录和订单信息,联系商家核对 PaymentIntent 与 Charge 状态

Stripe 文档说明,卡片拒绝原因会通过 code、decline_code 等字段返回,但发卡行可能只提供笼统的拒绝结果;因此,card_declined 本身不能证明是卡片余额不足。可参考 Stripe 卡片拒绝说明 和 Stripe API 错误对象说明。

普通付款用户:按 6 步排查 Stripe 支付失败

  1. 保存原始提示。记录英文错误、订单号、付款时间、币种和金额,不要只记“支付失败”。如果页面显示 card_declined,还要记录是否出现 insufficient_funds、incorrect_cvc 或 authentication_required。
  2. 重新核对卡片资料。检查卡号、有效期、CVC、持卡人姓名、账单地址和邮编。账单地址应填写发卡行登记的信息,不要为了“通过验证”随意修改成收货地址。Stripe 的测试文档将错误卡号、错误 CVC、过期卡片分别作为不同失败情形处理,说明这些字段会影响支付结果;正式付款时不要使用测试卡号。
  3. 确认发卡行限制。在银行 App 或联系客服确认银行卡已开通境外线上交易、该币种交易没有被限制、单笔或每日额度足够,并询问是否拦截了当前商户。对于 generic_decline 或 do_not_honor,商户通常无法替持卡人查询银行内部原因,发卡行需要直接向持卡人说明。
  4. 处理 3D Secure 验证。如果页面跳转到银行验证页,保持原支付页面和验证页都打开,完成短信、银行 App 或其他验证。若提示 requires_action,说明支付还需要客户操作;PaymentIntent 文档说明,存在 next_action 时,页面需要执行相应动作,完成后支付才可能继续。
  5. 排查支付页面本身。使用正常更新的浏览器,暂时关闭会拦截弹窗、脚本或第三方 Cookie 的扩展,切换到稳定网络后重新打开商家结账页。若只有一个商家失败而其他支付正常,优先让商家检查集成和订单状态;若多个商家都失败,优先联系发卡行。
  6. 只在结果明确后重试。卡片资料错误、余额不足或验证失败,先修正原因再重新付款;如果银行已经出现待处理记录,先不要重复付款。Stripe 对部分拒绝会返回 advice_code,其中 do_not_try_again 表示不要对同一笔交易继续尝试,try_again_later 才表示可以稍后重试。

中国用户常见的银行卡、账单地址和验证问题

中国用户遇到 Stripe 支付失败时,常见排查重点不是“页面能不能打开”,而是银行卡是否允许当前交易。建议按以下顺序核对:

Stripe 文档指出,发卡行会根据余额、消费习惯、卡片资料、地址和 CVC 等信号决定是否授权;跨国家或地区的卡片与商户交易也可能增加拒绝概率。页面显示笼统拒绝时,优先联系发卡行,而不是反复修改资料。

支付失败但银行显示扣款或待处理,怎么办?

  1. 先区分“已入账”和“待处理”。银行 App 显示待处理、预授权或冻结,不等同于商家已经完成收款;先截图记录金额、时间、商户描述和卡片末四位。
  2. 不要立即再次支付。先联系商家确认订单是否创建、PaymentIntent 是否为 succeeded、是否存在 Charge,以及页面失败是否只是回调没有完成。
  3. 向商家提供可核验信息。提供订单号、付款时间、金额、币种、卡片末四位和错误提示,不要发送完整卡号、CVC、短信验证码或 API 密钥。
  4. 确认退款对象和状态。如果商家确认已创建退款,退款对象可能显示为 pending、succeeded、failed 或 canceled。Stripe Refund API 说明,退款应关联原 Charge 或 PaymentIntent,商家需要根据退款 ID 和状态继续核对。

如果商家无法确认交易结果,先以商家订单状态和支付记录为准,再向发卡行询问授权记录。不要把一笔失败页面上的提示直接当作“已经扣款成功”。

商户或开发者:从 PaymentIntent 和日志定位原因

如果你负责接入 Stripe,先不要只看前端弹窗。服务端应保存 PaymentIntent ID、请求时间、订单号、API 请求结果和 webhook 事件,并按以下顺序查看:

  1. 查看 PaymentIntent 状态。常见状态包括 succeeded、requires_action、requires_payment_method 和 canceled。Stripe 文档说明,支付失败后 PaymentIntent 通常会进入 requires_payment_method;需要客户操作时会出现 requires_action。
  2. 查看 last_payment_error。重点读取 type、code、decline_code、message、payment_method 和关联的 Charge。注意:Stripe 文档说明,PaymentIntent 后续被更新时,last_payment_error 可能被清除,因此应在失败事件发生时立即记录。
  3. 查看 Charge 的失败详情。如果返回 card_error,优先判断是发卡行拒绝、字段校验失败还是需要身份验证;如果是 api_error、invalid_request_error 或 HTTP 5xx,则检查参数、密钥、接口响应和服务端异常。
  4. 检查 webhook 是否到达。监听并记录 payment_intent.payment_failed、payment_intent.succeeded、charge.failed 等相关事件,避免只根据浏览器返回结果给订单发货或开通订阅。
  5. 避免重复创建付款对象。网络连接中断时,使用同一业务订单的幂等键重试创建或更新请求。Stripe 的错误处理文档说明,幂等键可用于在连接错误后安全重试,避免重复创建对象;每次新的业务付款应使用新的唯一键。
curl https://api.stripe.com/v1/payment_intents/pi_xxx \
  -u sk_live_xxx:

上面的命令仅用于服务端查询 PaymentIntent,密钥不能放进浏览器、前端代码、聊天窗口或工单截图。实际排查时,把 pi_xxx 替换成后台日志中的 PaymentIntent ID,并根据返回的 status、last_payment_error 和 latest_charge 继续定位。

如果是订阅首笔付款失败,还要同时查看 Invoice 和 Subscription 状态;如果是保存卡片或续费场景,则分别检查 SetupIntent、Invoice 的付款结果以及是否需要客户重新验证。不要把一次性付款成功等同于后续自动扣款一定成功。

补充核对(更新于 2026-10-19)

本文只保留已在 Stripe 官方文档中核对到的字段和状态。普通用户的处理顺序是“保存提示—核对卡片—联系发卡行—完成验证—确认订单状态后再重试”;商户端的处理顺序是“PaymentIntent—last_payment_error—Charge—webhook—幂等重试”。Stripe 的错误代码、接口字段和后台页面可能继续调整,开发时应以当前 API 文档和实际返回对象为准。

常见问题

Stripe 显示 card_declined,应该先换卡还是联系银行?

先核对卡号、有效期、CVC、账单地址和可用额度;资料无误后仍显示 card_declined,优先联系发卡行确认境外线上交易、商户或币种是否被限制。Stripe 文档说明,generic_decline 可能没有更具体的银行原因。

Stripe 支付失败但银行卡出现一笔待处理扣款,能不能马上再付?

不建议马上再次付款。先记录金额、时间和商户描述,联系商家确认 PaymentIntent、Charge 和订单状态;待处理记录不一定等同于已经完成收款,重复付款可能造成两笔授权或订单核对困难。

authentication_required 和 requires_action 有什么区别?

authentication_required 通常表示这次付款需要持卡人完成验证;requires_action 是 PaymentIntent 的状态,表示还存在需要客户完成的动作。先返回支付页面完成 3D Secure 或银行验证,再由商户确认支付是否进入 succeeded。

Stripe 订阅续费失败,重新点付款就能解决吗?

不一定。订阅续费可能需要更新卡片、完成身份验证、处理余额或发卡行限制。商户应查看 Invoice、PaymentIntent 和订阅状态;客户应通过商家提供的账单页面更新付款方式,不要连续重复提交。

商户端如何知道 Stripe 支付到底为什么失败?

查看 PaymentIntent 的 status 和 last_payment_error,再关联 latest_charge,重点读取 type、code、decline_code 和 message,同时检查 payment_intent.payment_failed 等 webhook。不要只根据前端显示的“支付失败”四个字判断原因。

Stripe 支付失败时,应该把完整卡号和验证码发给客服吗?

不应该。联系客服时提供订单号、付款时间、金额、币种、错误提示和卡片末四位即可;不要提供完整卡号、CVC、短信验证码、登录密码或 API 密钥。

相关阅读

参考资料

  1. Card declines:Stripe 卡片拒绝说明,Stripe 官方文档
  2. Errors:Stripe API 错误对象参考,Stripe 官方文档
  3. Payment Intents:Stripe PaymentIntent API 参考,Stripe 官方文档
  4. Retrieve a PaymentIntent:Stripe 获取 PaymentIntent API 参考,Stripe 官方文档
  5. Refunds:Stripe Refund API 参考,Stripe 官方文档
  6. Handling errors:Stripe API 错误处理与幂等请求,Stripe 官方文档
  7. Test card numbers:Stripe 测试卡号与失败场景,Stripe 官方文档