Chapter 19

Scheduled Payouts

Toru Furukawa
Toru Furukawa
2021.12.19に更新

Seller の銀行口座に入金することを考える。さんざん上げた売上は、 Seller に渡さなければならない。今日は Scheduled Payouts を見ていく。

Weekly or Monthly

Scheduled Payouts は、週次または月次の設定をしておけば、明示的な API コールなしで、入金処理がされる機能だ。

参考: 入金スケジュールの管理

週次の場合は、曜日と delay_days を設定する。設定にはAPI コールが必要だ。

request
curl https://api.stripe.com/v1/accounts/acct_xxxx \
  -d "settings[payouts][schedule][interval]"=weekly \
  -d "settings[payouts][schedule][weekly_anchor]"=monday  \
  -d "settings[payouts][schedule][delay_days]"=4 \
  ...

月次の場合は、毎月何日か、delay_days を設定する。

request
curl https://api.stripe.com/v1/accounts/acct_xxxx \
  -d "settings[payouts][schedule][interval]"=monthly \
  -d "settings[payouts][schedule][monthly_anchor]"=25  \
  -d "settings[payouts][schedule][delay_days]"=5 \
  ...

指定した日が、休日・祝日のとき、翌営業日に入金処理が延びる。

入金対象になる残高

入金額は、入金日における availability と delay_days によって決まる。

まず Balance Transaction で増えた残高で、まだ入金されてない資金がベースとなる。その中で、入金対象になるのは (1) 支払い日が delay_days 以前であり、かつ 、(2) 入金時点で available である取引残高だ。

たとえば 2021-12-25 が入金日だとしよう。面倒な曜日考慮をしたくないので、この一ヶ月くらいは休日がなく、すべて営業日だったとしよう(地獄)。

delay_days が 5 であるとする。2021-12-25 の 5 日前は、2021-12-20 だ。

以上の条件で、残高に下表の取引残高があるとする。created の時点で決済が完了しているとする。

金額 created available_on
A 1,000 2021-12-04 2021-12-05
B 2,000 2021-12-05 2022-01-04
C 5,000 2021-12-21 2021-12-25
D 11,000 2021-12-23 2021-12-27

A は (1) creted = 2021-12-04 が 2021-12-20 以前である。かつ (2) 2021-12-05 で available なので入金日の 2021-12-25 には available だ。だから入金対象になる。

B は、2022-01-04 まで available ではない。JCB だと、こうなる。というわけで、2021-12-25 時点では入金対象にならない。

C は created = 2021-12-21 が、delay_days から算出される 2021-12-20 よりも後なので、入金対象にならない。

D は created も、available も条件を満たさないので、入金対象にならない。

とういわけで 1000 円が入金される。

入金の対象になった取引

Payout が完了すると、どの Balance Transaction が対象だったかが分かる。

request
curl https://api.stripe.com/v1/balance_transactions \
  -d payout=po_xxxx \
  -G \
  -H "Stripe-Account: acct_xxxx" \
  ...

Stripe-Account ヘッダーに、Connected Account ID を指定することで、Connected Account の立場で API を呼び出し、データ領域にアクセスできる。

返金やチャージバックなどの残高減少取引

下表のような取引残高を考える。

金額
A +1000
B +2000
C -1000

A と B は支払いによる残高増加だ。

C は返金やチャージバックによる残高減少だ。A の返金かも知れないし、もっと以前の支払いの返金かも知れない。いずれにしても、ごく最近にこの返金が発生した。

次の Payout で、A、B、C の収支である 2,000 円が銀行口座に入金される。

残高がマイナスのときは、入金はない。銀行口座から資金を引き上げることもない。

いずれにしても、返金が発生したときに、Balance Transaction が作られる。

request
curl https://api.stripe.com/v1/balance_transactions \
  -d payout=po_xxxx \
  -G \
  -H "Stripe-Account: acct_xxxx" \
  ...
{
  "data": [
    {
      "id": "txn_1",
      "net": 1000,
      ...
    },
    {
      "id": "txn_2",
      "net": 2000,
      ...
    },
    {
      "id": "txn_3",
      "net": -1000,
      ...
    },
    ...
  ],
  ...
}

まとめ

Scheduled Payouts のデータを見てきた。明日は明示的に入金指示をする Manual Payouts を見ていく。