Used to check for browser translation.
用于检测浏览器翻译。
ブラウザの翻訳を検出する
使用指南

退款


退款允许你将先前已创建的收费款项退还给客户。你可以为任何成功的付款发起全额或部分退款。此过程针对特定的 PaymentIntent 发起。

有关支付生命周期的更多详情,请参阅 Payment Intents 文档。

退款处理流程#

下图说明了处理退款时事件的典型顺序:

"PaymentKit API""PaymentKit SDK""你的应用""PaymentKit API""PaymentKit SDK""你的应用"退款是异步处理的。payment.paymentIntents.refund(paymentIntentId, { amount, reason })PUT /api/payment-intents/{id}/refund返回退款对象 (例如,status: 'pending')退款对象更新退款状态 ('succeeded' 或 'failed')(可选) 发送 Webhook (例如, 'refund.succeeded')

发起退款#

要创建退款,你需要在 PaymentIntent 对象上调用 refund 方法,并指定你希望退款的支付 ID。

方法

payment.paymentIntents.refund(id, data)

参数

名称

类型

描述

id

string

必需。 要退款的 PaymentIntent 的 ID。

data.amount

string

要退款的金额。如需部分退款,请指定一个小于原始收费的金额。如果省略,将处理全额退款。

data.reason

string

退款原因。接受的值包括:'duplicate''requested_by_customer''requested_by_admin''fraudulent''expired_uncaptured_charge'

data.description

string

供你内部记录的可选退款描述。

示例

import payment from '@blocklet/payment-js';

async function issueRefund(paymentIntentId) {
try {
const refund = await payment.paymentIntents.refund(paymentIntentId, {
amount: '0.50',
reason: 'requested_by_customer',
description: '部分退款,因未收到商品'
});
console.log('退款已发起:', refund);
} catch (error) {
console.error('发生错误:', error.message);
}
}

// 将 'pi_xxx' 替换为有效的 PaymentIntent ID
issueRefund('pi_xxx');

响应示例

{
"id": "rf_xxxx",
"livemode": false,
"description": "部分退款,因未收到商品",
"amount": "0.50",
"currency_id": "pc_xxx",
"customer_id": "cus_xxx",
"payment_intent_id": "pi_xxx",
"status": "succeeded",
"reason": "requested_by_customer",
"created_at": "2023-10-27T10:00:00.000Z",
"updated_at": "2023-10-27T10:00:00.000Z"
}

检索退款#

你可以随时使用其唯一的 id 获取特定退款的详细信息。

方法

payment.refunds.retrieve(id)

参数

名称

类型

描述

id

string

必需。 要检索的退款的唯一标识符(前缀为 rf_)。

示例

import payment from '@blocklet/payment-js';

async function getRefundDetails(refundId) {
try {
const refund = await payment.refunds.retrieve(refundId);
console.log('退款状态:', refund.status);
} catch (error) {
console.error(`检索退款 ${refundId} 时出错:`, error.message);
}
}

// 将 'rf_xxx' 替换为有效的退款 ID
getRefundDetails('rf_xxx');

列出所有退款#

要查看退款历史记录,请使用 list 方法。结果是分页的,并且可以按各种标准进行筛选。

方法

payment.refunds.list(params)

参数

名称

类型

描述

customer_id

string

可选。筛选特定客户的退款。

status

string

可选。按退款状态(例如 'succeeded''failed')筛选退款。

invoice_id

string

可选。筛选与特定发票关联的退款。

subscription_id

string

可选。筛选与特定订阅关联的退款。

currency_id

string

可选。按特定货币筛选退款。

page

number

可选。分页的页码。默认为 1

pageSize

number

可选。每页的项目数。默认为 20

order

string

可选。排序顺序,例如 'created_at:DESC'

示例

import payment from '@blocklet/payment-js';

async function listCustomerRefunds(customerId) {
try {
const refunds = await payment.refunds.list({
customer_id: customerId,
pageSize: 10
});
console.log(`为客户 ${customerId} 找到 ${refunds.count} 条退款记录:`);
refunds.list.forEach(refund => {
console.log(`- ID: ${refund.id}, 金额: ${refund.amount}, 状态: ${refund.status}`);
});
} catch (error) {
console.error('列出退款时出错:', error.message);
}
}

// 将 'cus_xxx' 替换为有效的客户 ID
listCustomerRefunds('cus_xxx');

响应示例

{
"count": 1,
"list": [
{
"id": "rf_xxxx",
"livemode": false,
"description": "部分退款,因未收到商品",
"amount": "0.50",
"currency_id": "pc_xxx",
"customer_id": "cus_xxx",
"payment_intent_id": "pi_xxx",
"status": "succeeded",
"reason": "requested_by_customer",
"created_at": "2023-10-27T10:00:00.000Z",
"updated_at": "2023-10-27T10:00:00.000Z"
}
]
}

退款对象#

Refund 对象包含有关交易的详细信息。需要监控的一个关键字段是 status

  • pending: 退款已发起,但尚未确认。
  • requires_action: 退款需要客户或支付提供商采取额外行动。
  • succeeded: 退款已成功处理,资金已退还。
  • failed: 无法处理退款。有关更多详细信息,请参阅 failure_reason 字段。
  • canceled: 退款在处理前已被取消。


现在你已拥有有效管理退款的工具。要接收有关退款状态变化的实时通知,你应该配置端点来监听这些事件。要了解更多信息,请继续阅读 Webhooks 指南。