支払いを返金する
全額/一部返金とHosted Checkoutの不足・超過入金
PaymentIntentの返金
succeeded のPaymentIntentは、secret keyで全額または一部を返金できます。
// 全額: amountを省略
const fullRefund = await paymentIntentClient.paymentIntents.refund(
paymentIntentId,
);
// 一部: 法定通貨の主単位
const partialRefund = await paymentIntentClient.paymentIntents.refund(
paymentIntentId,
{ amount: 500, reason: "customer_request" },
);amount はPaymentIntentと同じ法定通貨の主単位です。JPYなら500円、USDなら500ドルを意味します。
返り値には更新後の paymentIntent と、新規返金の { id, status } が含まれます。
status: "requested" は返金台帳への起票完了です。実際の資金返却はTRADOM Paymentの承認・実行フローで非同期に進みます。
制約
succeededだけが返金可能- secret keyとPaymentIntentのマーチャントが一致すること
- 一部返金額は0より大きく、未返金残高以下であること(残高超過は
payment_intent_unexpected_state(409)、0以下・非数値はparameter_invalid(400)) - 同時リクエストはサーバ側のrow lockで残高超過を防止
- 全額返金は未返金残高の全額を起票
返金後もPaymentIntentの status は succeeded のままです。amountRefunded、refunds.data、payment_intent.refunded イベントで確認します。
REST endpointは POST /api/v1/payment_intents/{id}/refund です。旧来のtop-level /api/v1/refunds はありません。
EC Gatewayの不足/超過
EC Gatewayは実際の入金額を想定額と照合します。
- 不足: 受領資金の自動返金または運用対応
- 超過: 支払いを進め、差額返金を起票
進捗は checkoutStatus の state.matchStatus、underpaymentRefundStatus、overpaymentRefundStatus で確認します。これはPaymentIntentの手動返金APIとは別のフローです。