[6] 決済情報等を入力させる画面が Stripe 側のサーバーにある Stripe Checkout と、自サーバーに置く Stripe Elements があります。
[7] どちらも Stripe.js という Stripe 提供の JavaScript ライブラリーを自サーバーで読み込む必要があります。 この点ではどちらを使っても大差ありません。
[8] Stripe Checkout は国や言語によっても違う複雑な入力フォームの用意をすべて Stripe 側に任せられます。 決済手段の違いも、ある程度までは Stripe 側で吸収してくれます。 決済情報や住所入力に関係したトラブルを抱え込まずに済むのでとても便利。
[9] Stripe Elements は決済情報や住所の入力を自サーバー上の HTML のフォームを使って記述できますが、 Stripe.js が複雑な部分をラップしています。 自サーバー上なので自由に設計できる柔軟性と、 複雑なフォームを正確に運用する必要性とのトレードオフをうまいこと処理しようと企てたのでしょうか。 でも Stripe.js の要求する作法に従って作るしかないので、 自由度はほとんどありません。 結局 Stripe Checkout が Stripe のサーバーでやってることを、 わざわざ手間をかけて自サーバーで再現することになっちゃいます。
[10]
Stripe Elements でもクレジットカードの入力部分は
iframe
で Stripe サーバーが埋め込まれる形で実現されています。
だからセキュリティーも大丈夫で安心、ってことなんですが、
住所とか他の重要度が低い(?)個人情報は自サーバー側なんですよね。
どうせ自サーバー側にあっても大してカスタマイズできるわけでもないので、
全部 Stripe サーバー側の iframe
にあったほうがセキュリティー的にも安心なんですけれども。
でもそうしちゃうと
Stripe Checkout に対する優位性が本当に何も無くなってしまう。
[11] checkout session は24時間で期限切れになるとのこと。
[3] paymentRequest.canMakePayment() is always false · Issue #379 · stripe/react-stripe-elements () https://github.com/stripe/react-stripe-elements/issues/379
[4] Stripe の Payment Request API 対応は不完全。 その一部は意図的に制限している >>3 とのこと。ひどい。
[2] 【村八分】トランプ、オンライン決済も停止される - ウォールストリートジャーナル - Togetter () https://togetter.com/li/1651445
[12]
Stripe Checkout で配送先住所を記入させたら、
checkout session
オブジェクトの
shipping
にその住所データが入ります。
[14] 同じ住所が checkout で作成された invoice オブジェクトに対応する支払いページ (payment intent) の「Checkout サマリー」 欄に表示されます。
[15]
checkout session
が
mode
= subscription
のときこの
invoice
に直接たどり着く方法がありません。
payment_intent
= null
で変化しません。
subscription
に
subscription
のID
が入っているので、
それを使って
subscription
を取得します。
latest_invoice
に最新の
invoice
のIDが入っています。
最古の
invoice
を取得する方法がないのですが、
新規作成直後なら最新 = 最古のはず。
Stripe API Reference - List all invoices, https://stripe.com/docs/api/invoices/list
これで subscription の invoice を取得できます。 ただし sort order を指定できない。 新規作成直後なら1個しかないはずだけど念の為と limit をそこそこ大きくしておいて最古の invoice を使うのがいいのだろうか。
invoice から payment intent の ID を取得すれば、 ダッシュボードの URL を作れます。
なおダッシュボードのページには住所が表示されますが、 payment intent
オブジェクトには住所は入っていません。 shipping
は null
です。
payment method の payment_method
から
payment method を取得して
billing_details
を見ると請求先住所が入っているのですが、
これは配送先住所とは別です。
[16]
請求額が0円の時は invoice の payment_intent
が
null
になります。
その場合 Checkout の住所が表示されるページが存在していません。
[1] Stripe Billing 101 - Qiita () https://qiita.com/y_toku/items/235b5e7ee00792edcbbf
[17] Stripe外からアプリの支払いを受け取った時の対処手順. カード決済の失敗理由は基本的に分からない/信用コストは自分で払う必要がある/根本… | by Takuya Matsuyama | 週休7日で働きたい, Takuya Matsuyama, https://blog.craftz.dog/stripe-payment-adjustment-df5e1c996c12