利用可能 / Availablity
Payment Intent を使って、Payment Method (≒ クレカ)から Stripe Account 資金を移動するところまできた。
Buyer Seller
Card Bank
:
Payment Method -> [Charge] -> [Balance Transaction] -> Account
: |
[Payment Intent] v fee
Stripe
この資金を銀行口座に移動できるまでに時間がかかる。Visa/Mastercard/American Express は 4 営業日、JCB/Discover/Diners は 30 暦日かかる。
JCB/Discover/Diners の支払いを、4 営業日または 10 営業日後にする料金オプションのベータ版があるっぽい。
銀行口座に移動できることを、available (利用可能)であるという。available になる時刻は、Balance Transaction が持っている。
curl https://api.stripe.com/v1/payment_intents/pi_xxxx \
-u sk_xxxx: \
-d "expand[]"=charges.data.balance_transaction \
-G
{
"id": "pi_xxxx",
"charges": {
"data": [
{
"id": "ch_xxxx",
"balance_transaction": {
"id": "txn_xxxx",
"net": 1000,
"available_on": 1634655600, # 2021-10-19 03:00:00 UTC
"created": 1634193764, # 2021-10-14 06:42:44 UTC
...
Balance Transaction の available_on
がそれだ。上の例では、2021 年 10 月 14 日(木)の決済で増えた残高は、19 日(火)に available となる。
たとえば、以下の表のような Balance Transaction があったとする。
id | net | available_on |
---|---|---|
txn_1 | 1,000 | 2021-10-19 00:00:00 |
txn_2 | 2,000 | 2021-10-28 00:00:00 |
2021-10-25 の時点では、txn_1 は available だが、txn_2 は available でない。だから、txn_1 の 1,000 円だけを銀行口座に移動できる。
月末の 2021-10-30 の時点では、両方とも available なので、合計 3,000 円を銀行口座に移動できる。
Balance Transaction を取得する別の方法
Balance Transaction のリストを取得できる。
curl https://api.stripe.com/v1/balance_transactions/ \
-u sk_xxxx:
現時点のアカウントの残高のうち、available な残高と、available ではない残高を知ることもできる。ただし、呼び出した時点でのスナップショットであり、明日どうなっているか、は分からない。
curl https://api.stripe.com/v1/balance \
-u sk_xxxx:
{
"object": "balance",
"available": [
{
"amount": 1519969,
"currency": "jpy",
"source_types": {
"card": 1519969
}
}
],
"livemode": false,
"pending": [
{
"amount": 5236,
"currency": "jpy",
"source_types": {
"card": 5236
}
}
]
}
まとめ
決済完了後、available の考え方と、確認のしかたが分かった。明日は、銀行口座に移動させる話へすすむ。