# 退款

> 申请退款、处理退款结果与审核拒绝通知，并在需要时查询结果或取消尚未获批的退款申请。

支付成功后，由商户服务端通过 API 申请退款。无论原支付通过收银台、Web SDK 还是 API 直连创建，均使用[申请或取消退款](/zh/payments/api-reference/endpoints/create-or-cancel-refund)。

## 申请前确认

是否支持退款、部分退款及多次退款，以及申请退款的时限，均取决于支付方式。大多数支付方式支持部分退款及多次退款；累计退款金额不得超过原支付金额，退款金额使用原支付交易的币种。

保存原支付的 Onerway `transactionId`，并确认原交易已支付成功。调用接口前，完成[接入准备](/zh/payments/get-started/setup)与[请求签名](/zh/payments/get-started/request-signing)。

## 申请退款并处理结果

<steps level="3">

### 提交退款申请

调用[申请或取消退款](/zh/payments/api-reference/endpoints/create-or-cancel-refund)，设置 `refundType=0`，将原支付交易号放入 `originTransactionId`，通过 `refundAmount` 指定本次退款金额。完整字段要求与请求示例见接口参考。

可通过 `merchantTxnId` 提供本次退款的商户交易号，用于跟踪和对账；不传时由 Onerway 自动生成。重复提交会被拒绝。

### 保存退款交易号

`respCode=20000` 仅表示退款申请已受理，不代表退款成功。保存响应 `data` 返回的新退款交易号，并将其关联到原支付和商户退款记录，供接收通知、查询或取消时使用。

### 处理退款通知

退款通知发送到原支付请求中的 `notifyUrl`。服务端需要处理两类通知：

- [退款结果通知](/zh/payments/api-reference/webhooks/refund-result)：`txnType=REFUND`，使用退款的 `transactionId` 与 `status` 更新对应退款记录。
- [退款审核拒绝通知](/zh/payments/api-reference/webhooks/refund-audit-rejected)：`notifyType=REFUND_AUDIT`，仅在 Onerway 审核拒绝退款申请时发送。

按 [Webhook 通知](/zh/payments/get-started/webhooks)完成验签、应答与幂等处理。收到成功（`S`）或失败（`F`）通知后即可更新退款记录，无需再查询确认。

</steps>

## 按需查询退款

等待 Webhook 通知退款结果即可，无需持续轮询。需要核对退款进度或对账时，可调用[查询退款记录](/zh/payments/api-reference/endpoints/query-refunds)：查询单笔退款时使用退款交易号 `transactionId`；查询原支付关联的退款时使用原支付交易号 `originTransactionId`。

查询结果与通知不一致时，参见[查询结果与通知不一致时如何处理](/zh/payments/get-started/webhooks#%E6%9F%A5%E8%AF%A2%E7%BB%93%E6%9E%9C%E4%B8%8E%E9%80%9A%E7%9F%A5%E4%B8%8D%E4%B8%80%E8%87%B4%E6%97%B6%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86)。

大部分退款即时到账；非即时到账的退款最长需要 25 天。

## 取消退款申请

取消须在 Onerway 审核通过前发起。审核通过后，Onerway 将退款请求提交给支付渠道或发卡机构；退款仍在处理中不代表仍可取消。

调用[申请或取消退款](/zh/payments/api-reference/endpoints/create-or-cancel-refund)，设置 `refundType=1`，并将要取消的**退款交易号**放入 `originTransactionId`。其他必填字段与完整示例见接口参考。

取消成功不发送通知，请处理同步响应：成功响应中的 `data` 等于本次请求的 `originTransactionId`。需要核对记录时，可按该退款交易号查询。

<note>

申请退款时，`originTransactionId` 指原支付交易号；取消退款申请时，同一字段指退款交易号。两次操作使用的交易号不同。

</note>
