仮売上(オーソリ)と支払い確定
仮売上(オーソリ)と支払い確定
Payment Flow (支払い管理オブジェクト)APIAPI は、支払いの作成から確定・返金までのライフサイクル全体を管理するための包括的なAPIです。
カード決済などでは仮売上(オーソリ・与信枠確保)と確定処理の分離により、支払いの承認と実際の請求を別々のタイミングで実行できるため、 商品の発送タイミングなどに合わせた柔軟な支払い処理が可能になります。また、必要な金額だけを確定したり、返金したりすることも可能です。
Payment Flow API のステータス遷移については、Payment Flow API の仕組みを参照してください。
仮売上の期限
支払い方法ごとの仮売上の期限は以下の通りです。
| 支払い方法 | 仮売上の期限 | 延長可能期限 |
|---|---|---|
| クレジットカード | 7日間 | 30日間 |
| PayPay | 30日間 | - |
| Apple Pay | 7日間 | 30日間 |
カード決済のオーソリ期限
カード決済(Apple Pay を含む)のオーソリ期限は、30日間に延長することができます。 30日間を超える期間が必要な加盟店様はお問い合わせください。
仮売上の実装
仮売上は顧客の支払い方法に対して実際に請求することなく支払い能力を確認し、必要な金額を確保する処理です。
デビットカードでは即時に引き落としが行われるため、仮売上(オーソリ)の概念は適用されません。
1. 仮売上用の Payment Flow を作成
capture_method を manual に設定することで、自動的な売上確定を無効にし、手動での売上確定が必要な仮売上の Payment Flow を作成できます。
curl https://api.pay.jp/v2/payment_flows \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 10000,
"capture_method": "manual"
}'capture_methodの種類
automatic: 支払いが承認されると自動的に売上確定(デフォルト)manual: 手動での売上確定が必要
2. フロントエンドで決済情報を確定
顧客が支払い情報を入力し、Payment Flow を確定します。この時点で仮売上が確保されます。
const confirmPayment = async (clientSecret, paymentMethodId) => {
try {
const result = await payjp.confirmPaymentFlow(clientSecret, {
payment_method: paymentMethodId
});
if (result.status === 'requires_capture') {
// 仮売上の作成が成功したため売上確定待ち。サーバーに通知して注文処理を開始
}
} catch (error) {
console.error('仮売上失敗:', error);
}
};仮売上の作成が成功すると、Payment Flow のステータスが requires_capture になります。
加盟店側での商品発送などの処理が完了したら、支払いを確定します。支払い確定の詳細については、次のセクションを参照してください。
支払い確定の実装
仮売上状態の支払いを確定し、実際に顧客に請求する処理です。
仮売上の金額を増やすことはできませんが、その範囲内であれば仮売上の金額より少ない金額で確定は可能です。 確定する金額を指定しない場合は全額の支払いとして確定されます。
仮売上の金額のうち、確定されなかった金額は自動的にキャンセルされます。
全額を確定する
curl https://api.pay.jp/v2/payment_flows/pfw_xxx/capture \
-H "Authorization: Bearer YOUR_API_KEY" \
-X POSTamount_received に確定した金額が入ります。
{
"id": "pfw_xxx",
"status": "succeeded",
"amount_received": 10000,
...
}部分的に確定する
仮売上のうち、一部の金額のみを確定させたい場合は amount_to_capture に確定したい金額を指定します。
商品の一部キャンセルや送料の確定など、最終的な請求金額が仮売上の金額より少なくなる場合に活用できます。
部分確定は1回のみ可能です。部分確定後は、残りの金額の全額を確定することのみ可能です。
# 例:10,000円を確保後、3,000円のみ確定
curl https://api.pay.jp/v2/payment_flows/pfw_xxx/capture \
-H "Authorization: Bearer YOUR_API_KEY" \
-X POST \
-H "Content-Type: application/json" \
-d '{"amount_to_capture": 3000}'部分的に確定すると、amount_received に確定した金額が入り、amount_capturable に残りの金額が入ります。
{
"id": "pfw_xxx",
"status": "requires_capture",
"amount_received": 3000,
"amount_capturable": 7000,
...
}