收款
安全地在线上收款。
制作支付表单或使用预构建的结账页面来开始接收线上付款。
通过在您的网站上嵌入 UI 组件,使用 Stripe Elements 构建自定义的支付集成。看看这个集成与 Stripe 的其他集成类型的对比情况。
客户端侧面和服务器端代码构建接受各种支付方式的结账表单。
想了解如何使用 Stripe Tax、折扣、配送或货币兑换?
Stripe has a Payment Element integration that manages tax, discounts, shipping, and currency conversion for you. See build a checkout page to learn more.
创建 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 中收集客户的电子邮件地址 | 您的客户在结账时输入他们的电子邮件地址,并直接在 Payment Element 中验证或注册 Link。 | 如果客户尚未注册 Link,但他们在 Payment Element 中选择了受支持的支付方式,则系统会提示他们使用 Link 保存详细信息。对于那些已经注册的用户,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 以这些方式使用数据所需的所有权利和许可。有关更多信息,请访问我们的隐私中心。