Payment Methods API
了解驱动一系列全球支付方式的 API。
利用 Payment Methods API,可通过单一 API 接受多种支付方式。PaymentMethod 对象包含创建付款所需的支付方式详情。利用 Payment Methods API,您可以组合 PaymentMethod:
- 用 PaymentIntent 收款
- 用 SetupIntent 和 Customer 保存付款详情供以后使用
支持的支付方式
要确定某个具体地点使用哪种支付方式,请查看支付方式指南。
本指南介绍了不同地区所涉及的支付方式,每种支付方式的详细特征说明以及最相关的地理区域。您可以在管理平台中启用可使用的支付方式。激活通常是即时的,不需要额外的合同。
客户操作
某些支付方式要求您的客户采取额外的步骤来完成付款。PaymentIntent 对象的 next_
参数指定了客户操作的类型。
客户需要采取的一些常见操作有:
- 重定向到他们银行的线上服务页面来验证并批准付款。
- 通过提供您发布到 Stripe API 的一次性验证码(例如微存款)来验证账户的所有权。
- 通过他们银行的线上服务页面推动资金(例如银行转账的情况)。
并非所有支付方式都要求额外的客户操作。例如,银行卡付款(要求 3DS 验证的除外)要求在收集完银行卡详情后再进一步验证。
备注
对于需要客户操作的支付方式,配置事件接收端来接收付款成功或失败的通知。
付款成功的立即或延迟通知
有些支付方式会在尝试交易后立即返回付款状态(例如银行卡付款),但其他方式会有一个延迟,例如 ACH 借记。对于那些立即返回付款状态的支付方式,PaymentIntent 状态会变为 succeeded
或 requires_
。succeeded
状态保证您可以从客户收到资金。
延迟通知型支付方式在延迟期间不保证支付。PaymentIntent 对象的状态会是 processing
,直至付款状态成功或是失败。这段时间内,很多商家会保持处于_待处理_状态的订单,等待付款成功后再履行订单。
备注
对于延迟通知型支付方式,配置事件接收端来接收付款成功或失败的通知。
一次性使用或重复使用
您可以重复使用某些支付方式(例如银行卡或银行借记)进行额外的付款,不需要再次授权和收集支付详情。
为减少未来的银行拒付和支付阻力(例如要求的验证),您应该始终设置可重复使用的支付方式以供未来使用。对于可重复使用的支付方式,可以在接受付款时设置以供未来使用,也可以在不接受付款的情况下设置以供将来使用。
单次使用的支付方式(例如某些类型的银行转账)不能绑定到客户,因为在尝试付款后即作废。
用事件接收端跟踪付款状态
为要求客户操作或延迟通知型支付方式配置事件接收端。当 PaymentIntent
状态更新时,Stripe 会发送以下事件:
事件 | 描述 | 后续步骤 |
---|---|---|
payment_ | 客户的付款已成功提交至 Stripe。仅适用于延迟通知型支付方式。 | 等待发起的付款成功或失败 |
payment_ | 付款成功。 | 交付购买的商品或服务。 |
payment_ | 付款失败了。 | 发送邮件或推送通知,要求客户使用另一支付方式。 |
除设置事件接收端外,您也可以用以下选项构建来侦听事件:
- 如果您的公司使用延迟通知型支付方式的交易较少,则可在 Stripe 管理平台中手动跟踪付款的状态。通过管理平台可以查看您的所有 Stripe 付款,发送邮件收据,处理提现或重试失败的付款。
- 使用轮询(例如,重复检索某个 PaymentIntent 以查看其状态)。请注意,轮询的可靠性要低很多,而且不适合规模操作。Stripe 还对 API 请求有强制性的速率限制,因此在使用轮询方法时,一定要格外小心。
- 通过集成合作伙伴的应用程序,使用它们来处理常见的业务事件,比如自动化或市场与销售。
PaymentMethod 对象
PaymentMethod 中包含创建付款时可重复使用的支付方式详情(例如银行卡到期日或账单地址),不包含特定交易信息(例如金额、货币)。PaymentMethod 会绑定到 PaymentIntent,用以表示付款生命周期中的状态。每个 PaymentMethod 都有一个类型属性(例如 "type": "sepa_
)和一个名称与类型相匹配的额外散列,并包含 PaymentMethod 类型的特定信息(例如 "sepa_
)。sepa_
PaymentMethod 对象示例:
{ "id": "pm_123456789", "object": "payment_method", "billing_details": { "address": {...}, "email": "jenny@example.com", "name": "Jenny Rosen", "phone": "+335555555555" }, "sepa_debit": { "bank_code": "37040044", "branch_code": "94832", "country": "FR", "fingerprint": "ygEJfUjzWMGyWnZg", "last4": "3000" }, "type": "sepa_debit", (...) }
备注
为安全地处理敏感支付信息并自动处理客户操作,Stripe 建议您用 Stripe.js 创建支付方式。