调至内容部分
创建账户
或
登录
Stripe 文档徽标
/
询问人工智能
创建账户
登录
开始
付款
销售收入
平台和交易市场
资金管理
开发人员资源
概览查看所有产品
开始构建
开始开发
关于 API
    API 一览
    Payment Intents API
      付款状态更新
      Asynchronous Capture
    Setup Intents API
    PaymentIntents 和 SetupIntents 如何运作
    Payment Methods API
    产品和价格
    发布阶段
用 LLM 构建
在无代码的情况下使用 Stripe
设置 Stripe
创建账户
Stripe 管理平台
迁移到 Stripe
首页开始About the APIsPayment Intents API

付款状态更新

监测并验证付款状态,以便响应成功和失败的付款。

PaymentIntents 根据客户或支付方式所采取的动作进行更新。您的集成可通过检查 PaymentIntent 来确定付款过程的状态,从而您可以对需要进一步干预的状态做出业务上的行动或响应。

您还可以用 Stripe 管理平台来配置您的账户,让它给您发送有关付款状态的邮件,例如付款成功。在用户设置中更改您的邮件通知。

在客户端查看 PaymentIntent 状态

用 confirmCardPayment 函数在客户端完成付款时,您可以通过检查返回的 PaymentIntent 来确定其当前状态:

(async () => { const {paymentIntent, error} = await stripe.confirmCardPayment(clientSecret); if (error) { // Handle error here } else if (paymentIntent && paymentIntent.status === 'succeeded') { // Handle successful payment here } })();

以下是使用 confirmCardPayment 函数时可能出现的结果:

事件发生了什么期望的集成
通过 PaymentIntent 来解决客户在您的结账页面完成了付款通知客户他们付款成功了
通过错误提示来解决客户在您的结账页面付款失败显示错误消息并提示客户再次尝试

confirmCardPayment 返回的 promise 会在付款流程完成或因某种错误失败时进行解析。成功完成并返回 PaymentIntent 时,状态始终会是 succeeded(如果是稍后捕获,则是 requires_capture)。当付款需要额外步骤时,例如身份验证,则在此步骤完成或超时之前不会解析此 promise。

在不使用 confirmCardPayment 的情况下在客户端检查 PaymentIntent 状态

若要在不使用 confirmCardPayment 函数的情况下检查 PaymentIntent 的状态,则应该通过使用 retrievePaymentIntent 函数并传入客户端私钥来单独检索它。

(async () => { const {paymentIntent} = await stripe.retrievePaymentIntent(clientSecret); if (paymentIntent && paymentIntent.status === 'succeeded') { // Handle successful payment here } else { // Handle unsuccessful, processing, or canceled payments and API errors here } })();

以下是确认之后 PaymentIntent 的一些可能状态:

发生了什么期望的 PaymentIntent 状态
客户在您的结账页面完成了付款succeeded
客户未完成结账requires_action
客户在您的结账页面付款失败requires_payment_method

阅读关于 PaymentIntent 状态的更多信息。

用 Webhooks 监测 PaymentIntent

Stripe 可向您的服务器发送 Webhook 事件,在 PaymentIntent 的状态发生变化时通知您,您可以将它用于确定何时履行订单和服务等目的。

不要尝试在客户端处理订单履行操作,因为客户在付款完成后就可能离开页面,但这时还未来得及发起订单履行过程。相反,应该利用 Webhooks 来监测 payment_intent.succeeded 事件,并异步处理订单履行,不要尝试在客户端发起履行过程。

注意

从技术上来讲,完全可以用轮询方式而非 Webhook 来监测异步操作造成的变化,即通过反复检索 PaymentIntent 来查看其状态 — 但这样做的可靠性低很多,并且可能导致限速问题。Stripe 还对 API 请求有强制性的速率限制,因此如果您打算使用轮询方法,一定要格外小心。

要处理 Webhook 事件,先在您的服务器上创建一个路径,然后在管理平台内配置一个对应的 Webhook 端点。支付成功时,Stripe 发送 payment_intent.succeeded 事件,失败时发送 payment_intent.payment_failed 事件。

Webhook 有效载荷中包含 PaymentIntent 对象。下例显示了如何处理这两种事件:

Ruby
Python
PHP
Java
Node
Go
.NET
No results
require 'sinatra' require 'stripe' post '/webhook' do payload = request.body.read sig_header = request.env['HTTP_STRIPE_SIGNATURE'] event = nil begin event = Stripe::Webhook.construct_event( payload, sig_header, endpoint_secret ) rescue JSON::ParserError => e # Invalid payload status 400 return rescue Stripe::SignatureVerificationError => e # Invalid signature status 400 return end case event['type'] when 'payment_intent.succeeded' intent = event['data']['object'] puts "Succeeded:", intent['id'] # Fulfill the customer's purchase when 'payment_intent.payment_failed' intent = event['data']['object'] error_message = intent['last_payment_error'] && intent['last_payment_error']['message'] puts "Failed:", intent['id'], error_message # Notify the customer that payment failed end status 200 end

付款失败时,可通过查看 PaymentIntent 的 last_payment_error 属性找到更多详细信息。可通知客户他们未完成付款,并鼓励他们换一种支付方式重试。重新用同一 PaymentIntent 继续跟踪客户的下单状态。

处理特定的 Webhook 事件

下面的列表描述了 Webhook 事件的处理方式:

事件描述后续步骤
processing客户的付款已成功提交至 Stripe。仅适用于可延迟确认成功的支付方式。等待发起的付款成功或失败
succeeded客户付款成功交付购买的商品或服务
amount_capturable_updated客户的付款已得到授权,可开始捕获捕获可用于付款的资金
payment_failed客户的付款被卡组织拒绝或已过期通过邮件或推送通知的方式联系客户,提示他们提供另一支付方式

要在本地测试 Webhooks,可以使用 Stripe CLI。安装后,可将事件转发到您的服务器:

Command Line
stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit)

了解有关设置 webhooks 的更多信息。

识别 PaymentIntent 上的收款

当您尝试对客户收款时,PaymentIntent 会创建一个 Charge。要获取最近收款的 ID,请查看 PaymentIntent 的 latest_charge 属性:

Ruby
Python
PHP
Java
Node
Go
.NET
No results
# Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
intent = Stripe::PaymentIntent.retrieve('{{PAYMENT_INTENT_ID}}') latest_charge = intent.latest_charge

要查看与 PaymentIntent 相关的所有收款,包括任何未成功的收款,请列出所有收款,并指定 payment_intent​ 参数。

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node
Go
.NET
No results
curl -G https://api.stripe.com/v1/charges \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d payment_intent=
{{PAYMENT_INTENT_ID}}

处理后续操作

某些支付方式需要完成额外的步骤才能完成付款流程,例如身份验证。Stripe.js 会在确认 PaymentIntent 时自动处理它们,但如果您有高级集成,也可以手动处理。

PaymentIntent 的 next_action 属性表示您的集成完成付款所必须处理的后续步骤。可能需要采取的后续步骤的类型因支付方式而异。有关可能的后续操作的完整列表,请查看 API 文档。

您可以参考支付方式文档,详细了解如何处理它们需要采取的后续操作。

此页面的内容有帮助吗?
是否
  • 需要帮助?联系支持。
  • 加入我们的早期使用计划。
  • 查看我们的更改日志。
  • 有问题?联系销售。
  • LLM? Read llms.txt.
  • Powered by Markdoc