# 退款并取消付款 了解如何取消付款或退款 您可以在支付完成前[取消支付](https://docs.stripe.com/refunds.md#cancel-payment),此操作不产生任何费用。您也可以在支付成功后对全部或部分金额进行退款,但退款可能会产生一定费用。原交易的 Stripe 处理费不予退还。如需了解更多信息,请访问我们的[定价页面](https://stripe.com/pricing/local-payment-methods)。 退款时会使用您可用的 Stripe 账户余额(不包括待处理金额)。如果您的可用余额不足以支付退款金额,对于银行卡交易,Stripe 会将退款标记为待处理状态(其他支付方式类型的退款将失败),直到您的 Stripe 账户余额充足为止。您可以通过收款或向账户余额*充值* (The act of adding funds to a Stripe account, typically through a transfer from a bank external to Stripe)来解决 Stripe 账户余额为负的问题。在适用地区,Stripe 可能会自动从您的银行账户扣款,以弥补 Stripe 账户的负余额。 ## 退款申请 我们向您客户的银行或*发卡行* (The entity that issued a payment card to a cardholder. This could be a bank, such as with the Visa or Mastercard network, or it could be the card network itself, such as with American Express)提交退款请求。成功的退款会实时显示在客户的银行对账单上,具体取决于卡组织和发卡行。对于已全额退款的信用卡收款,不能再提出争议或撤单。 若满足以下所有条件,则我们将向您的客户发送电子邮件,通知他们退款事宜: - 已经在您的 Stripe 账户的客户上创建了原始收款。 - 客户对象中存储了一个邮件地址。 - 您在[管理平台](https://dashboard.stripe.com/account/emails)中嵌入了**给客户发送退款邮件**。 您可以[在管理平台查看被退款的付款](https://dashboard.stripe.com/test/payments?status%5B0%5D=refunded&status%5B1%5D=refund_pending&status%5B2%5D=partially_refunded)。 ## 发放退款 您可以用[退款 API](https://docs.stripe.com/api/refunds.md) 或通过[管理平台](https://dashboard.stripe.com/test/payments)发放退款。您可以对一笔收款发放多笔退款,但退款总额不得超出原始收款金额。 #### 管理平台 用管理平台退款: 1. 在[付款](https://dashboard.stripe.com/payments)页面找出想要退款的付款。 1. 点击付款右侧的溢出菜单(⋯),然后选择**退款**。 1. 默认情况下,您发放的是全额退款。对于部分退款,输入一个不同的退款金额。 1. 选择一个退款原因。如果选择**其他**,则必须添加一个说明,解释退款的原因。点击**退款**。 您也可以点击具体付款记录,从其详情页面发起退款。您还可以选择自动发送[退款收据](https://docs.stripe.com/receipts.md#refund-receipts),或为每笔退款手动发送收据。 > #### 批量退款 > > 管理平台支持批量处理全额退款。通过选择每笔付款左侧的选框,选定要退款的付款即可——多页面结果也可同时选定。然后,点击**退款**,并选择一个原因。只能以这种方式发放全额退款;部分退款必须单独发放。 #### API 用 API 发放退款时,请[创建一笔退款](https://docs.stripe.com/api.md#create_refund),并提供要退还的收款的 ID 或 [PaymentIntent](https://docs.stripe.com/api/payment_intents.md)。 当您使用 PaymentIntent 来收款时,Stripe 会创建[收款](https://docs.stripe.com/api/charges/object.md)对象。要在 PaymentIntent 成功后退款,请使用 PaymentIntent 创建退款,这与退还基础收款是相同的。如果您使用 Stripe Tax API 来记录销售情况,您必须[记录退款](https://docs.stripe.com/tax/custom.md#reversals)。 ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d payment_intent=pi_Aabcxyz01aDfoo ``` 您也可以只通过指定金额来退还部分 PaymentIntent。操作时,需以整数形式提供 `amount` 参数,单位为分(或该支付货币的最小货币单位)。 ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d payment_intent=pi_Aabcxyz01aDfoo \ -d amount=1000 ``` 如果您需要对支付款项分开[授权与捕获](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md),且要对状态为 `requires_capture` 的 PaymentIntent 进行退款,流程会有所不同。此时,与该 PaymentIntent 关联的支付仍处于未捕获状态,无法直接退款,您必须[取消该 PaymentIntent](https://docs.stripe.com/api/payment_intents/cancel.md)。 ### 通过 Connect 平台退款 退款行为取决于您的集成中使用的 [Connect 收款类型](https://docs.stripe.com/connect/charges.md#refund-creation)。 - Stripe 直接从 Connect 子账户扣款以用于[直接收款](https://docs.stripe.com/connect/direct-charges.md#issue-refunds)支付的退款。 - Stripe 会向您的平台收取针对[定向收款](https://docs.stripe.com/connect/destination-charges.md#issue-refunds)或[分离收费与转账](https://docs.stripe.com/connect/separate-charges-and-transfers.md#issue-refunds)(无论是否使用`on_behalf_of`)付款的退款费用。要从您的 Connect 子账户中收回退款金额,需要撤销与这些收费类型相关的转账。 Connect 平台可通过使用[支付](https://docs.stripe.com/connect/supported-embedded-components/payments.md) 或[支付详情](https://docs.stripe.com/connect/supported-embedded-components/payment-details.md) 等 Connect 嵌入式组件,使其关联账户能够从其网站向客户提供退款服务。 ## 退款目标账户 只能按照原始收款方式原路退款。您不能向其他地方发放退款,例如,另一张卡或银行账户。 已过期的卡或已取消的卡的退款由客户的发卡行处理,并且大多数情况下,退款将转入客户更换的卡中。如果客户没有新卡,则发卡行通常会通过其他方式(例如,支票或银行帐户存款)给客户发放退款。只有极少情况下,向银行卡的退款可能会[失败](https://docs.stripe.com/refunds.md#failed-refunds)。 对于其他支付方式,例如 [ACH](https://docs.stripe.com/payments/ach-direct-debit.md) 和 [iDEAL](https://docs.stripe.com/payments/ideal.md),退款处理因银行而异。如果客户关闭了他们的支付方式,银行可能会将退款退回给我们——这时它会被标记为[退款失败](https://docs.stripe.com/refunds.md#failed-refunds)。 ## 处理失败的退款 如果客户的银行或发卡行无法处理,则退款可能会失败。例如,银行账户关闭或银行卡有问题可能导致退款失败。如果发生这种情况,银行会将退款金额退还给我们,然后我们再将这笔钱重新转入您的 Stripe 账户余额。从发放之日起,整个过程最长需要 30 天。 使用 API 时,[退款](https://docs.stripe.com/api.md#refund_object)对象的状态会变为 `failed`,并包含以下属性: - `failure_balance_transaction`: [余额交易](https://docs.stripe.com/api.md#balance_transaction_object)的 ID,表示退还到您的 Stripe 余额的金额。 - `failure_reason`: 退款失败的原因。这些原因包括: | 失败原因 | 描述 | | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | | `charge_for_pending_refund_disputed` | 客户在处理退款的过程中对扣款发起了争议。在这种情况下,我们建议[接受或质疑](https://docs.stripe.com/disputes/responding.md#decide)争议,而不要退款,以避免向客户重复退款。 | | `declined` | 退款被我们的金融合作伙伴拒绝了。 | | `expired_or_canceled_card` | 支付方式被客户取消,或被合作伙伴作了过期处理。 | | `insufficient_funds` | 退款因资金不足且超过待处理退款到期窗口而处理待处理状态。 | | `lost_or_stolen_card` | 退款因原始卡丢失或被盗而失败。 | | `merchant_request` | 退款在商家请求时失败。 | | `unknown` | 退款因未知原因而失败。 | 对于某些支付方式,拒付代码由我们的金融合作伙伴提供,说明了退款失败的原因,这些代码可以在 `destination_details` 散列的 `network_decline_code` 字段中获取: ``` { id: "pyr_1234", destination_details: { blik: { network_decline_code: "decline_code" }, type: 'blik', } } ``` 退款极少会失败,但如果失败,我们会用 `refund.failed` *事件* (A tool to send events to your application via webhook or directly to your cloud infrastructure)来通知您(参见[所有退款](https://docs.stripe.com/refunds.md#refund-events))。如果发生这种情况,您需要安排另一种方式,为客户提供退款。 如果您的平台使用 [Connect 与定向收款](https://docs.stripe.com/connect/destination-charges.md#issue-refunds),则退款失败的资金会存入您平台账户的 Stripe 余额。 ## 取消退款 根据退款的类型,您可以在退款到达客户之前取消退款。有些银行卡退款支持短时取消。退款不得作为收款冲正处理。银行卡退款目前仅可通过管理平台取消。 对于某些[支付方式](https://docs.stripe.com/payments/bank-transfers.md#refunds),Stripe 会在处理退款之前向客户收集银行信息。您可以在未收集到银行信息这段时间内取消这些退款。此类退款支持通过 API 和管理平台取消。 已取消的退款将转入 `canceled` 状态。由于取消是退款失败的一种类型,因此 [Refund](https://docs.stripe.com/api.md#refund_object) 对象中会包含 `failure_reason` 和 `failure_balance_transaction` 这两个属性。 如果您的平台使用[定向收款的 Connect ](https://docs.stripe.com/connect/destination-charges.md#issue-refunds),已取消退款的资金将存入您平台账户的 Stripe 余额中。 To cancel a refund using the Dashboard: 1. Find the payment associated with the refund in the [Payments](https://dashboard.stripe.com/payments) page. 1. Click the overflow menu (⋯) to the right of the payment, then select **Cancel refund**. 1. If there are multiple partial refunds, select the correct refund in the dropdown. 1. Confirm the refund cancellation by selecting **Yes, cancel refund**. Alternatively, you can click a specific payment and cancel the refund from its details page. ## 退款和冲正 某些退款(原始收款之后很快发放的)会以*撤销* (A reversal is the cancellation of a transaction. Stripe doesn't withhold any fees for payment reversals)形式显示,而非“退款”。在撤销的情况下,原始收款不会出现在客户的对账单中,且不会单独入账。 *IC+* (A pricing plan where businesses pay the variable network cost for each transaction plus the Stripe fee rather than a flat rate for all transactions. This pricing model provides more visibility into payments costs) 用户可能会发现撤销和退款之间的费用存在差异,因为撤销产生的卡组织费用通常会比较低。 #### 管理平台 要在管理平台上验证退款是否以冲正方式进行,请执行以下操作: 1. 打开与退款相关的付款的付款详情页面。 1. 在时间线中,点击退款条目上的**查看详情**。 1. 如果是冲正,则会显示相应的消息。 #### API 要使用 API 验证退款是否以冲正方式进行,请执行以下操作: 1. 用 API 提取 `refund.updated` [事件](https://docs.stripe.com/refunds.md#refund-events)或[检索退款](https://docs.stripe.com/api/refunds/retrieve.md)。 1. 如果是冲正交易,则会返回 `destination_details[card][type] = 'reversal'`。 ## 跟踪退款 在您发起退款后,Stripe 会向您客户的银行或发卡行提交退款请求。客户会在大约 5-10 个工作日(具体取决于银行)后发现退款入账。客户见不到退款时可能会与您联系。有几个原因可能会导致客户看不到退款。 - 原始收款之后很快发放的退款会以“撤销”形式显示,而非“退款”。在撤销的情况下,原始收款不会出现在客户的对帐单中,且不会单独入账。 - 如果客户的银行或发卡行无法正确处理退款,则退款可能会失败。银行会将退款金额退还给我们,然后我们再将这笔钱重新转入您的 Stripe 账户余额。从提出退款请求起,整个过程最长需要 30 天。 如果客户询问有关退款的情况,给他们提供退款对应的主要参考编号可能会有所帮助。对于银行卡退款,它可以是**收单行参考号码 (ARN)**、**系统跟踪审计号 (STAN)**或**检索参考号 (RRN)**。ARN、STAN 或 RRN 是为支付流程中的银行卡交易分配的参考号码。对于本地支付方式的退款,它可以是由 Stripe 或我们的金融合作伙伴生成的参考号码,该参考号码将传播给收款行或机构。然后,您的客户可以向银行出示此参考号码,进而便可告知关于何时可以退款的更多信息。有了参考号码,客户便可对已经发起的退款更有信心。 以下情况下会用到退款参考号码: - 多数金融合作伙伴都支持,否则会标记为不可用。 - 发起退款后,最长需要 7 个工作日才能收到下游银行合作伙伴提供的 ARN。 - 撤销退款的情况下不会提供 ARN,因为未处理原始收款。对于不支持 ARN 的卡组织,我们会尝试提供其他参考信息,如系统跟踪审计号 (STAN) 或检索参考号 (RRN)。 #### 管理平台 要使用管理平台查找退款参考号码,请执行以下操作: 1. 打开与退款相关的付款的付款详情页面。 1. 在时间线中,点击退款条目上的**查看详情**。 1. 如果可用,Stripe 会在剪贴板上显示 ARN 或 STAN。 #### API 要使用 API 查找退款参考号码,请执行以下操作: 1. 用 API 提取 `refund.updated` [事件](https://docs.stripe.com/refunds.md#refund-events)或[检索退款](https://docs.stripe.com/api/refunds/retrieve.md)。 1. 如可用,Stripe 会在以下 API 响应格式中显示银行卡退款参考编号: ``` { id: "re_1234", destination_details: { card: { reference: "123456", reference_status: "available", reference_type: "acquirer_reference_number", type: "refund" }, type: "card", } } ``` 或在以下 API 响应格式中显示所选本地支付方式的参考编号: ``` { id: "pyr_1234", destination_details: { eu_bank_transfer: { reference: "123456", reference_status: "available" }, type: "eu_bank_transfer", } } ``` ## 取消付款 仅当付款状态为 `uncaptured` 时,您才可以使用管理平台取消付款。要取消其它状态的付款,必须使用 API。 #### 管理平台 通过管理平台取消未捕获的付款: 1. 在[付款](https://dashboard.stripe.com/payments)页面找出想要取消的付款。 1. 点击该笔支付,然后选择**取消**。 1. 选择取消原因,然后点击**是**。如果选择**其他**,您必须添加注释,说明取消支付的原因。 #### API 如果您不打算再收款,则可以[取消 PaymentIntent](https://docs.stripe.com/api/payment_intents/cancel.md)。您可以将某个 PaymentIntent 保持在未完成状态,如 `requires_confirmation` 或 `requires_payment_method`,因为未完成的 PaymentIntents 有助于了解结账过程中的转化率。以下代码示例显示一个取消 PaymentIntent 的请求: ```curl curl -X POST https://api.stripe.com/v1/payment_intents/pi_32AkjQ5H4Bas2eAolX13/cancel \ -u "<>:" ``` 只有在出现以下某个状态时才能取消 PaymentIntent: - `requires_payment_method` - `requires_capture` - `requires_confirmation` - `requires_action` - `processing`(仅当相关支付方式为美国银行账户时) PaymentIntent 成功后不能取消。取消 PaymentIntent 后,不能再通过它进行其他收款。您的应用程序尝试在已取消的 PaymentIntent 上执行的任何操作都会失败,并显示一个错误消息。 ## 退款事件 每次创建或更改退款时,Stripe 都会触发[事件](https://docs.stripe.com/api/events.md#events)。其他一些动作,比如关闭审核,也会触发与退款相关的事件。 确保您的集成已设置为能够[处理事件](https://docs.stripe.com/webhooks/handling-payment-events.md),并且您已[验证 Webhook 签名](https://docs.stripe.com/webhooks.md#verify-events),以确认传入的事件来自 Stripe。此外,您还必须构建内部逻辑,以便在退款流程状态发生变化时,通知客户或您的团队。至少,Stripe 建议您监听 `refund.created` 事件。 下表描述了与退款相关的最常见事件。 | 活动 | 描述 | | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `refund.created` | 创建退款时发送。 | | `refund.updated` | 更新退款时发送。更新包括添加元数据和提供详细信息,如 [用于跟踪退款的 ARN 参考编号](https://docs.stripe.com/refunds.md#tracing-refunds)。 | | `refund.failed` | [退款失败](https://docs.stripe.com/refunds.md#failed-refunds)时发送。 | | `charge.dispute.funds_reinstated` | 当争议关闭并且资金恢复到您的账户时发送,包括[部分退款](https://docs.stripe.com/disputes/best-practices.md#partial-refund-bp)。 | | `charge.refunded` | 退款时发送,包括部分退款。有关退款的信息,请侦听 `refund.created`。 | | `review.closed` | [审核](https://docs.stripe.com/api/events/types.md#review_object) 关闭时发送。请查看 `reason` 字段了解关闭原因,具体原因包括:`approved`、`disputed`、`canceled`、`refunded`、`refunded_as_fraud`。 | | `source.refund_attributes_required` (Deprecated) | 当接收方来源需要退款属性来处理退款或不当付款时发送。 | | `charge.refund.updated` (Deprecated) | 只有在退款更新且有相应的收款时才发送。建议侦听 `refund.updated` 来获取所有退款的最新动态。 | ## 成本优化 如果您的企业在临近交易时处理了大量退款,那么我们建议您使用[手动授权和捕获](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md)功能来降低退款成本。通过手动授权和捕获,您可以在捕获付款之前取消付款,或者减少捕获的金额而非处理退款,从而更好地控制成本。 ## See also - [向 Stripe 余额充值](https://docs.stripe.com/get-started/account/add-funds.md) - [向平台余额充值](https://docs.stripe.com/connect/top-ups.md) - [本地化价格](https://docs.stripe.com/payments/currencies/localize-prices.md)