# Payment Methods API

了解允许您接受多种全球支付方式的 API。

利用 Payment Methods API，可通过单一 API 接受多种支付方式。[PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) 对象包含创建付款所需的支付方式详情。利用 Payment Methods API，您可以组合 *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs)：

- 用 [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) 收款
- 用 [SetupIntent](https://docs.stripe.com/api/setup_intents.md) 和 *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) 保存付款详情供以后使用

## 支持的支付方式

要确定某个具体地点使用哪种支付方式，请查看[支付方式指南](https://stripe.com/payments/payment-methods-guide)。

该指南包括不同地区可以使用的支付方式、每种支付方式特征的详细说明以及它们最相关的[地理区域](https://stripe.com/payments/payment-methods-guide#payment-methods-fact-sheets)。您可以在[管理平台](https://dashboard.stripe.com)中启用任何可用的支付方式。激活通常是即时的，不需要额外的合同。

## 客户操作

某些支付方式要求您的客户采取额外的步骤来完成付款。PaymentIntent 对象的 `next_action` 参数指定了客户操作的类型。

客户需要采取的一些常见操作有：

- 重定向到他们银行的线上服务页面来验证并批准付款。
- 通过提供您发布到 Stripe API 的一次性验证码（例如微存款）来验证账户的所有权。
- 通过他们银行的线上服务页面推动资金（例如银行转账的情况）。

并非所有支付方式都要求额外的客户操作。例如，银行卡付款（要求 3DS 验证的除外）要求在收集完银行卡详情后再进一步验证。

> 对于需要客户操作的支付方式，配置 [Webhook 接收端](https://docs.stripe.com/payments/payment-methods.md#webhooks)来接收付款成功或失败的通知。

## 付款成功的立即或延迟通知

某些支付方式在尝试交易时会立即返回支付状态（例如，银行卡支付），但其他方式如 ACH 借记则有延迟。对于立即返回支付状态的交易，PaymentIntent 状态会变为 `succeeded` 或 `requires_payment_method`。`succeeded` 状态可保证您将收到客户的资金。

延迟通知型支付方式在延迟期间不保证支付。PaymentIntent 对象的状态会是 `processing`，直至付款状态成功或是失败。这段时间内，很多商家会保持处于_待处理_状态的订单，等待付款成功后再履行订单。

> ​​对于延迟通知型支付方式，请配置 [Webhook 端点](https://docs.stripe.com/payments/payment-methods.md#webhooks)以通知付款是否成功。

## 一次性使用或重复使用

您可以重复使用某些支付方式（例如银行卡或银行借记）进行额外的付款，不需要再次授权和收集支付详情。

为减少未来的银行拒付和支付阻力（例如[要求的验证](https://docs.stripe.com/strong-customer-authentication.md)），您应该始终设置可重复使用的支付方式以供未来使用。对于可重复使用的支付方式，可以[在接受付款时设置以供未来使用](https://docs.stripe.com/payments/save-during-payment.md)，也可以[在不接受付款的情况下设置以供将来使用](https://docs.stripe.com/payments/save-and-reuse.md)。

单次使用的支付方式（例如某些类型的银行转账）不能绑定到客户，因为在尝试付款后即作废。

## 用 Webhook 跟踪付款状态

通过为需要客户操作或付款通知延迟时的付款方式创建 [Webhook 端点或其他类型的事件接收端](https://docs.stripe.com/event-destinations.md) 来配置 Webhook。Stripe 在 `PaymentIntent` 状态更新时发送以下事件：

| 事件 | 描述 | 后续步骤 |
| --- | --- | --- |
| `payment_intent.processing` | 客户的付款已成功提交至 Stripe。仅适用于[延迟通知型](https://docs.stripe.com/payments/payment-methods.md#payment-notification)支付方式。 | 等待发起的付款成功或失败 |
| `payment_intent.succeeded` | 付款成功。 | 交付购买的商品或服务。 |
| `payment_intent.payment_failed` | 付款失败了。 | 发送邮件或推送通知，要求客户使用另一支付方式。 |

除设置事件接收端外，您也可以用以下选项构建来侦听事件：

- 如果您的公司使用延迟通知型支付方式的交易较少，则可在 Stripe 管理平台中手动跟踪付款的状态。通过管理平台可以[查看您的所有 Stripe 付款](https://dashboard.stripe.com/test/payments)，发送邮件收据，处理提现或重试失败的付款。
- 使用轮询（例如，反复检索 PaymentIntent 以检查其状态）。轮询的可靠性较低，且在高流量下可能无法正常工作。Stripe 对 API 请求实施了速率限制，因此使用轮询时请谨慎。
- 通过集成合作伙伴的应用程序，使用它们来处理常见的业务事件，比如[自动化](https://stripe.partners/?f_category=automation)或[市场与销售](https://stripe.partners/?f_category=marketing-and-sales)。

## PaymentMethod 对象

PaymentMethod 中包含创建付款时可重复使用的支付方式详情（例如银行卡到期日或账单地址），不包含特定交易信息（例如金额、货币）。PaymentMethod 会绑定到 PaymentIntent，用以表示[付款生命周期中的状态](https://docs.stripe.com/payments/paymentintents/lifecycle.md)。每个 PaymentMethod 都有一个[类型属性](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-type)（例如 `"type": "sepa_debit"`）和一个名称与类型相匹配的额外散列，并包含 PaymentMethod 类型的特定信息（例如 `"sepa_debit":{}`）。`sepa_debit` PaymentMethod 对象示例：

```json
{
  "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](https://docs.stripe.com/js.md#stripe-create-payment-method) 创建支付方式。

## See also

- [支付方式指南](https://stripe.com/payments/payment-methods-guide)
- [Payment Methods API 参考](https://docs.stripe.com/api/payment_methods.md)
