Chapter 18

Separate Charges and Transfers - Disputes

Toru Furukawa
Toru Furukawa
2021.12.18に更新

Separate Charges and Transfer アプローチで支払いを処理したときの、不審請求/チャージバックを見ていく。返金と似ているけれど (1) チャージバックは Platform や Seller の意図とは関係なく発生し、かつ、(2) チャージバック処理手数料が発生するという違いがある。

Transfer よりも前に Dispute

Charge したした後、Transfer する前にチャージバックが発生したときを考える。

request
curl https://api.stripe.com/v1/payment_intents \
  -d amount=1000 \
  ...

curl https://api.stripe.com/v1/refunds \
  -d payment_intent=pi_xxxx \
  ...

// ここでチャージバックが発生

チャージバックは、カードホルダーの申立により、カード発行会社が支払いを取り消す処理だ。カードホルダーには支払額が返金される。さらに、Stripe を通して、Platform Account からチャージバック手数料が徴収される。

Custom Connect は、Platform Account の残高を、返金とチャージバック手数料に充てる。Dispute オブジェクトを確認する。

request
curl https://api.stripe.com/v1/disputes/dp_xxxx \
  -d "expand[]"=balance_transaction \
  -G \
  ...
response
{
  "id": "dp_xxxx",
  "amount": 1000,
  "balance_transaction": {
    "amount": -1000,
    "fee": 1500,
    "net": -2500,
    ...
  },
  ...
}
Payment Method   Platform Account    Connected Account
 ^                 |
 |                 |
 | 1000       2500 |
 |                 |
 | [Dispute]       |
[TXN]--------------+
 |
 | 1500
 v
Stripe

収支は下表である。

Transaction Payment Methond Platform Account Conn. Account A Conn. Account B Stripe
Charge -1000 +964 0 0 +36
Dispute +1000 -2500 0 0 +1500
収支 -1000 -1536 0 0 +1536

Platform Account から 決済手数料とチャージバック手数料が減る。サービスによっては、この金額を Connected Account に負担させる必要があるだろう。それはまた今度、見ていく。

Transfer の後で Dispute

次に、Charge して Transfer した後でチャージバックが発生する場合を考える。

request
curl https://api.stripe.com/v1/payment_intents \
  -d amount=1000 \
  ...

// ...時間がたって...

curl https://api.stripe.com/v1/transfers \
  -d amount=300 \
  -d destination: acct_A \
  ...

curl https://api.stripe.com/v1/transfers \
  -d amount=500 \
  -d destination: acct_B \
  ...

// ここでチャージバックが発生

収支は下表のようになる。

Transaction Payment Methond Platform Account Conn. Account A Conn. Account B Stripe
Charge -1000 +964 0 0 +36
Transfer 0 -300 +300 0 0
Transfer 0 -500 0 +500 0
Dispute +1000 -2500 0 0 +1500
収支 0 -2336 +300 +500 +1536

Transfer で分配された残高は Connected Account の残高に残る。そのため Platform だけが一方的に赤字になる。

Trasnfer した資金を回収する

Connected Account から、Transfer した資金を戻すには明示的に呼び出す。これは返金の場合と同じだ。

curl https://api.stripe.com/v1/transfers/tr_forA/reversals \
  -d amount=300 \
  ...

curl https://api.stripe.com/v1/transfers/tr_forB/reversals \
  -d amount=500 \
  ...

収支は下表のようになる。

Transaction Payment Methond Platform Account Conn. Account A Conn. Account B Stripe
Charge -1000 +964 0 0 +36
Transfer 0 -300 +300 0 0
Transfer 0 -500 0 +500 0
Dispute +1000 -2500 0 0 +1500
Transfer Reversal 0 +300 -300 0 0
Transfer Reversal 0 +500 0 -500 0
収支 0 -1536 0 0 +1536

この例では Transfer した金額をすべて巻き戻しているけれど、一部だけを巻きもどせる。巻き戻さないこともできる。

返金と同じく 決済手数料 36 円を Platform がかぶっている。さらにチャージバック手数料を Platform が被ったままになっている。これを回収する方法は、今度見ていく。

まとめ

Separate Charges and Transfers での、Disspute の資金フローを見た。あしたは、Connected Account の銀行口座への入金を見ていく。