收款
安全地在线上收款。
制作支付表单或使用预构建的结账页面来开始接收线上付款。
不是开发人员?
使用 Stripe Elements 和 Payment Intents API 创建自定义支付表单。查看此集成与 Stripe 其他集成类型的对比情况。
Payment Intents API 可对结账流程进行精细控制,让您能够对支付流程的每个环节进行自定义。这种方法需要编写更多集成代码,但能提供最大的灵活性。了解更多关于何时应使用 Checkout Sessions,而非 PaymentIntent 的信息。
客户端侧面和服务器端代码构建接受各种支付方式的结账表单。
想了解如何使用 Stripe Tax、折扣、配送或货币兑换?
Stripe 提供 Payment Element 集成功能,可自动为您处理税费、折扣、配送及货币转换事宜。如需了解更多信息,请参阅构建结账页面。
创建 PaymentIntent服务器端
注意
如果您想在不先创建 PaymentIntent 的情况下呈现 Payment Element,请参阅收集支付详情后再创建 Intent。
PaymentIntent 对象用来表示您从客户收款的意图,跟踪扣款尝试及整个过程中的状态变化情况。
创建 PaymentIntent
在您的服务器上创建 PaymentIntent,设置好 amount 和 currency。在最新版的 API 中,可以选择性指定 automatic_ 参数,因为 Stripe 会默认开启其功能。您可以从管理平台管理支付方式。Stripe 根据交易金额、货币和支付流程等因素处理符合条件的支付方式的退货。
Stripe 使用您的支付方式设置显示您启用的支付方式。要查看您如何向客户显示支付方式,请在管理平台中输入交易 ID 或设置订单金额和货币。要覆盖支付方式,用 payment_method_types 属性手动列出您想要启用的支付方式。
注意
始终在服务器端决定扣款金额,这是一个可信的环境,客户端不行。这样可防止客户自己选择价格。
检索客户端私钥
PaymentIntent 中包含的是一个客户端私钥,用于在客户端安全地完成支付流程。有不同的方法可以将客户端私钥传递到客户端。
收集付款详情客户端
用 Payment Element 在客户端收集支付信息。Payment Element 是一个预构建的 UI 组件,它简化了多种支付方式的收集支付详情的流程。
Payment Element 中包含一个 iframe,它通过一个 HTTPS 连接安全地将支付信息发送到 Stripe。避免将 Payment Element 放在另一个 iframe 中,因为有些支付方式需要重定向到另一个页面进行付款确认。
如果您确实选择使用 iframe 并想要接受 Apple Pay 或 Google Pay,则 iframe 必须要将 allow#attr-allowpaymentrequest) 属性设置为等于 "payment *"。
结账页面上的地址也必须以 https:// 开头,不能是 http://,否则您的集成不能工作。您可以在不使用 HTTPS 的情况下测试您的集成,准备好进行真实收款时将它启用。
Payment Element 呈现一个动态表单,您的客户可在这里选择一个支付方式。对于每个支付方式,表单会自动请求客户填写必要的支付详情。
自定义外观
您可以自定义 Payment Element,使其匹配您网站的设计风格,方法是在创建 Elements 提供程序时向 options 传递外观对象。
收集地址
默认情况下,Payment Element 只收集必要的账单地址详情。某些行为,如计算税费 或输入配送详情,则需要客户的完整地址。您可以:
- 使用Address Element,利用自动填充和本地化功能收集客户的完整地址。这有助于确保税款计算达到最高准确性。
- 使用您自己的自定义表单收集地址详情。
申请 Apple Pay 商家令牌
如果您已将集成配置为接受 Apple Pay 支付,我们建议配置 Apple Pay 界面以返回商户令牌,从而支持商户发起的交易 (MIT)。在 Payment Element 中请求相关商户令牌类型。
可选保存并检索客户支付方式
您可以配置 Payment Element 来保存客户的支付方式以备将来使用。本部分向您展示如何集成保存的支付方式功能,从而让 Payment Element:
- 提示买家同意保存支付方式
- 买家同意时,存储支付方式
- 向买家显示已存储的支付方式,以方便日后购物使用
- 买家更换时自动更新丢失或过期的银行卡

保存支付方式

复用以前保存的支付方式。
允许在 Payment Element 中保存支付方式
在您的服务器上创建 PaymentIntent 时,还要通过提供 Customer ID 并为您的会话启用 payment_element 组件来创建一个 CustomerSession。配置要启用的已保存支付方式的 features。例如,启用 payment_method_save 会显示一个复选框,可供客户保存其支付信息以备将来使用。
您可以在 PaymentIntent 或 Checkout Session 中指定 setup_,以覆盖保存支付方式的默认行为。这可以确保您自动保存支付方式以备将来使用,即使客户未明确选择保存它。
注意
允许买家通过启用 payment_method_remove 来移除其已保存的支付方式会影响依赖该支付方式的订阅。移除支付方式会将 PaymentMethod 与该 Customer 分离。
您的 Element 实例使用 CustomerSession 的客户端私钥来访问该客户保存的支付方式。创建 CustomerSession 时正确处理错误。如果发生错误,您不需要向 Element 实例提供 CustomerSession 客户端私钥,因为它是可选的。
使用PaymentIntent 和 CustomerSession 的客户端私钥创建 Element 实例。然后,用这个 Element 实例创建一个 Payment Element。
// Create the CustomerSession and obtain its clientSecret const res = await fetch("/create-intent-and-customer-session", { method: "POST" }); const { customer_session_client_secret: customerSessionClientSecret } = await res.json(); const elementsOptions = { clientSecret: '{{CLIENT_SECRET}}', customerSessionClientSecret, // Fully customizable with appearance API. appearance: {/*...*/}, }; // Set up Stripe.js and Elements to use in checkout form, passing the client secret // and CustomerSession's client secret obtained in a previous step const elements = stripe.elements(elementsOptions); // Create and mount the Payment Element const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element');
确认 PaymentIntent 时,Stripe.js 会自动控制 PaymentIntent 上的 setup_future_usage 设置和 PaymentMethod 上的 allow_redisplay,具体取决于客户是否勾选保存其付款详情的框。
强制重新收集卡安全码 (CVC)
可以选择在 when creating the PaymentIntent 指定 require_,以在客户用银行卡支付时强制重新收集 CVC。
检测选择的已保存支付方式
要在选择了保存的支付方式时控制动态内容,请侦听 Payment Element change 事件(该事件会填充上所选的支付方式)。
paymentElement.on('change', function(event) { if (event.value.payment_method) { // Control dynamic content if a saved payment method is selected } })
可选结账页面中的链接客户端
通过在 Payment Element 中使用 Link,让您的客户更快结账。您可以自动填充任何已使用 Link 的已登入客户的信息,无论他们之前是否在其他商家那里的 Link 中保存过支付信息。默认的 Payment Element 会默认在银行卡表单中包含 Link。要在 Payment Element 中管理 Link,请前往您的支付方式设置。

收集客户电子邮件地址以进行 Link 验证或注册
集成选项
有两种方法可以将 Link 与 Payment Element 进行集成。其中,Stripe 建议将客户电子邮件地址传递给 Payment Element(如果可用)。选择这些选项时,请一定要考虑您的结账流程的工作机制:
| 集成选项 | 结账流程 | 描述 |
|---|---|---|
| 向 Payment Element 传递客户电子邮件地址 Recommended |
| 程序化地将客户的电子邮件地址传递给 Payment Element。在该场景中,客户直接在支付表单中通过身份验证进入 Link,而非在单独的用户界面组件中。 |
| 在 Payment Element 中收集客户电子邮件地址 |
| 如果客户尚未注册 Link,但他们在 Payment Element 中选择了受支持的支付方式,则系统会提示他们使用 Link 保存详细信息。对于那些已经注册的用户,Link 会自动填充他们的支付信息。 |
使用defaultValues 将客户电子邮件地址传递给 Payment Element。
const paymentElement = elements.create('payment', { defaultValues: { billingDetails: { email: 'foo@bar.com', } }, // Other options });
如需了解更多信息,请阅读如何构建包含 Link 的自定义结账页面。
可选从服务器获取更新客户端
呈现了 Payment Element 之后,您可能想更新 PaymentIntent 的属性,例如 amount(例如,折扣码或运费)。您可以在您的服务器上 update the PaymentIntent,然后调用 elements.fetchUpdates 来查看 Payment Element 中反映的金额。该例显示了如何创建更新 PaymentIntent 上的金额的服务器端点:
该例演示了如何更新 UI 来在客户端体现这些变化。
(async () => { const response = await fetch('/update'); if (response.status === 'requires_payment_method') { const {error} = await elements.fetchUpdates(); } })();
向 Stripe 提交付款客户端
使用 stripe.confirmPayment,用来自 Payment Element 的详情完成付款。为该函数提供一个 return_url,告诉 Stripe 在用户完成付款后将他们重定向到哪里。您的用户可能会先被重定向到一个中间站点,如银行授权页面,然后才被重定向到 return_。付款成功时,银行卡付款将立即重定向到 return_。
如果您不想在完成付款后对银行卡付款重定向,可以将重定向设置到 if_。这样就会只重定向使用基于重定向的支付方式结账的客户。
确保 return_ 对应于您网站上显示付款状态的一个页面。Stripe 将客户重定向到 return_ 时,我们会提供以下 URL 查询参数。
| 参数 | 描述 |
|---|---|
payment_ | PaymentIntent 的唯一标识符。 |
payment_ | PaymentIntent 对象的 client secret。 |
注意
如果您有可以用来跟踪客户浏览器会话的工具,则您可能需要将 stripe. 域名添加到推荐人列表。重定向会导致一些工具创建新的会话,从而阻止您跟踪完整的会话。
用以下某个查询参数检索 PaymentIntent。检查 PaymentIntent 的状态,以决定向客户显示的内容。您还可以在提供 return_ 时附加自己的查询参数,它们会在重定向过程中持续存在。
处理付款后事件服务器端
付款完成时,Stripe 会发送一个 payment_intent.succeeded 事件。使用 管理平台 Webhook 工具、或按照 Webhook 指南来接收这些事件并运行操作,例如,向客户发送订单确认邮件、在数据库中记录订单,或启动配送流程。
侦听这些事件,而不是等待客户端回调。在客户端,客户可能会在执行回调之前关闭浏览器窗口或退出应用程序,并且恶意客户端可能会操纵响应。设置您的集成来侦听异步事件,这样才能用单一集成用用接受不同类型的支付方式。
除了处理 payment_ 事件外,建议在使用 Payment Element 收款时也处理其他的这些事件:
| 事件 | 描述 | 操作 |
|---|---|---|
| payment_intent.succeeded | 客户成功完成付款时发送。 | 向客户发送订单确认通知,并履行他们的订单。 |
| payment_intent.processing | 当客户成功发起付款但并未完成时发送。当客户发起银行借记时,通常会发送此事件。之后将会出现 payment_ 或 payment_ 事件。 | 向客户发送订单确认,告知他们的付款正等待处理。对于数字商品,您可能想先履行订单,然后再等付款完成。 |
| payment_intent.payment_failed | 在客户尝试付款但付款失败时发送。 | 如果一笔付款从 processing 变为 payment_,则让客户再尝试一次。 |
可选添加更多支付方式
Payment Element 默认支持很多种支付方式。需进行额外步骤才能启用并显示某些支付方式。
Affirm
开始使用 Affirm 时,必须在管理平台中启用它。用 Affirm 支付方式创建 PaymentIntent 时,您需要包含收货地址。该例建议在客户选择了他们的支付方式后在客户端传递配送信息。进一步了解如何通过 Stripe 使用 Affirm。
测试 Affirm
了解如何通过下表测试不同场景:
| 场景 | 如何测试 |
|---|---|
| 您的客户通过 Affirm 成功付款。 | 填写表单(务必包含收货地址)并授权付款。 |
| 您的客户未在 Affirm 重定向页面进行验证。 | 填写表单,然后在重定向页面上点击测试付款失败。 |
Afterpay (Clearpay)
用 Afterpay 支付方式创建 PaymentIntent 时,您需要包含收货地址。进一步了解如何通过 Stripe 使用 Afterpay。
您可以从管理平台管理支付方式。Stripe 根据交易金额、货币和支付流程等因素处理符合条件的支付方式的退货。下面的例子使用了 automatic_payment_methods 属性,但您可以用 payment method types 列出 afterpay_。在最新版的 API 中,可以选择性指定 automatic_ 参数,因为 Stripe 会默认开启其功能。无论您选择哪个选项,一定要在管理平台中启用 Afterpay Clearpay。
测试 Afterpay (Clearpay)
了解如何通过下表测试不同场景:
| 场景 | 如何测试 |
|---|---|
| 您的客户通过 Afterpay 成功付款。 | 填写表单(务必包含收货地址)并授权付款。 |
| 您的客户未在 Afterpay 重定向页面进行验证。 | 填写表单,然后在重定向页面上点击测试付款失败。 |
Apple Pay 和 Google Pay
当您启用银行卡支付时,我们会为符合钱包显示条件的客户显示 Apple Pay 和 Google Pay。要接受来自这些钱包的付款,您还必须:
- 在您的支付方式设置中启用它们。Apple Pay 默认启用。
- 在 HTTPS 的开发和生产环境中为您的应用服务。
- 注册您的域名。
- 如果您更新了 PaymentIntent 的金额,请从服务器获取更新,以保持钱包支付模态同步。
区域测试印度
Stripe Elements 不支持印度 Stripe 账户和客户的 Google Pay 或 Apple Pay。因此,如果测试者的 IP 地址在印度,您就不能测试您的 Google Pay 或 Apple Pay 集成,即使 Stripe 账户是在印度境外开立的也一样。
进一步了解如何通过 Stripe 使用 Apple Pay 和 [Google Pay](/google-pay](/google-pay)。
ACH 直接借记
通过ACH 直接借记支付方式使用 Payment Element 时,按照以下步骤操作:
创建 Customer 对象。
在创建
PaymentIntent时指定客户 ID。选择一个验证方式。
通过 Payment Element 使用 ACH 直接借记支付方式时,您只能选择 automatic 或 instant。
进一步了解如何通过 Stripe 使用 ACH 直接借记。
测试 ACH 直接借记
| 场景 | 如何测试 |
|---|---|
| 您的客户通过即时验证方式成功用美国银行账户完成付款。 | 选择美国银行账户并填写表单。点击测试机构。按照模态上的说明关联您的银行账户。点击您的付款按钮。 |
| 您的客户通过微存款方式成功用美国银行账户完成付款。 | 选择美国银行账户并填写表单。点击改为手动输入银行详情。按照模态上的这些说明关联您的银行账户。您可以使用这些测试账号。点击您的支付按钮。 |
| 您的客户在完成银行账户关联过程时会失败。 | 选择 美国银行账户 并点击测试机构或 改为手动输入银行详情 。关闭模态,不要完成它。 |
BLIK
结合使用 Payment Element 与 BLIK 时,用户可以关闭提示他们在其银行应用程序中授权付款的模态。这将触发向您的 return_ 重定向的操作,不会将客户返回到结账页面。进一步了解如何通过 Stripe 使用 BLIK。
处理用户关闭模态的情况时,在您的 return_ 的服务器端处理程序上,观察 Payment Intent 的 status,看它是 succeeded 还是仍然为 requires_(说明用户在未授权的情况下关闭了模态),然后根据实际情况酌情处理。
二维码支付方式
通过特定支付方式(微信支付、PayNow、Pix、PromptPay、Cash App Pay)的二维码使用 Payment Element 时,用户可关闭二维码模态。这将触发向您的 return_ 重定向的操作,不会将客户返回到结账页面。
处理用户关闭二维码模态的情况时,在您的 return_ 的服务器端处理程序上,观察 Payment Intent 的 status,看它是 succeeded 还是仍然为 requires_(说明用户在未支付的情况下关闭了模态),然后根据实际情况酌情处理。
或者,可通过传递高级可选参数 redirect=if_,它可以防止在管理二维码模态时进行重定向,进而可防止自动重定向到您的 return_。
Cash App Pay
Payment Element 在桌面网页或移动端网页中以不同的方式呈现动态表单,因为它使用的是不同的客户身份验证方式。进一步了解如何通过 Stripe 使用 Cash App Pay。
PayPal
要使用 PayPal,请务必使用注册域名。
向您的客户披露 Stripe
Stripe 收集有关客户与 Elements 互动的信息,以向您提供服务、防范欺诈并改进其服务。这包括使用 Cookie 和 IP 地址来识别客户在单次结账会话中看到的 Elements。您有责任披露并获得 Stripe 以这些方式使用数据所需的所有权利和许可。有关更多信息,请访问我们的隐私中心。