Upgrade to Pro — share decks privately, control downloads, hide ads and more …

クリエイタープラットフォーム BOOTH、FANBOXでの 銀行口座支払いとペイアウトの事例 ...

neo-nanikaka
December 10, 2018

クリエイタープラットフォーム BOOTH、FANBOXでの 銀行口座支払いとペイアウトの事例 / PayPal Tech Meetup 11 pixiv

PayPal Tech Meetup #11 Year end party! (https://eventregist.com/e/QtavWap1Vboq)
で発表したスライドです。
PayPal決済の銀行口座支払い対応とペイアウト機能のビジネスメリットと、ペイアウトの実装をどのように行ったかを説明しています

neo-nanikaka

December 10, 2018
Tweet

More Decks by neo-nanikaka

Other Decks in Programming

Transcript

  1. どちら様ですか 小芦 勇介 (こあし ゆうすけ) 2013年4月 ピクシブ株式会社入社 サーバーサイドエンジニア (PHP) 2018年7月

    決済基盤チームにJoin 決済を扱うエンジニアになった (Scala) Twitter: @nanikaka 半年に1回くらいボソッと呟きます 2
  2. FANBOX、BOOTHとは FANBOX = パトロンサービス 創作活動をしているクリエイターに対して支援金を継続的に 支払い、応援する クリエイターは、ファンからの支援金を受け取れる BOOTH = ECサービス

    販売されている作品やグッズを購入できる ショップオーナーは、作品やグッズを販売し、売上金を受け取れる つまり、決済と送金の機能が欠かせない 6
  3. 送金依頼API: 使用したPayPal側のAPI 3つ Create Payout API (/v1/payments/payouts) PayPalへ送金依頼をする Show Payout

    Batch Details API (/v1/payments/payouts/{payout_batch_id}) PayoutBatchの詳細情報を取得する Show Payout Item Details API (/v1/payments/payouts-item/{payout_item_id}) PayoutItemの詳細情報を取得する 28
  4. 33 transaction_status 簡単な説明 終端状態 決済基盤の送金状態 PENDING 初期状態 送金処理受理・処理中 NEW すぐ他の状態に遷移する

    送金処理受理・処理中 ONHOLD 処理保留中 送金処理受理・処理中 UNCLAIMED PayPalアカウントなし 送金処理受理・処理中 SUCCESS 送金成功 送金成功 BLOCKED 送金失敗 YES 送金失敗 FAILED 送金失敗 YES 送金失敗 DENIED ペイアウト機能を利用できない状態 YES 送金失敗 REFUNDED 返金された YES 返金 RETURNED 送金処理キャンセル YES 送金処理キャンセル
  5. 送金の状態管理: 状態更新のやり方 Webhookの順序保証なし、重複送信の挙動にどう対応するかが 1番の悩みポイント 単純に、Webhookの到着順に状態更新できない → 例) 送金成功して返金された時のSUCCESSやREFUNDEDの通知が、どの順番で 来るのか不明 →

    更に、重複が起きてSUCCESS、REFUNDED、SUCCESSになるかも 送金状態のマスターデータは、PayPal上の送金状態である → PayPal上の状態を都度確認するしかないという結論に至った → 通知が飛んできた = 変化が起きた、と捉えて通知内の送金状態は無視 37
  6. 送金の状態管理 - Webhook Listenerの実装 Webhook Listener PayPalからのWebhook通知を受ける 処理の流れ ヘッダ内のデータを使って信用できる Webhookか検証する

    DBにWebhookの内容を保存する 工夫ポイント 更新処理は行わないことで、責務と処理をシンプルにする 状態更新のリアルタイム性はあまり重要でなかった 38