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

ECフルスクラッチの決済システムについて

wakkn
August 24, 2021

 ECフルスクラッチの決済システムについて

TENTIAL x tricot D2Cエンジニアが語るECのフルスクラッチ事情の登壇資料です

https://tricot.connpass.com/event/221261/

TENTIALで開発しているフルスクラッチECの
技術構成、決済環境、定期決済をフルスクラッチでつくる際の設計方法や実装ポイントをまとめています。

wakkn

August 24, 2021
Tweet

More Decks by wakkn

Other Decks in Programming

Transcript

  1. 自己紹介 湧川仁貴 経歴 - 中3からプログラミング触り始める- C言語猫本から開始 - 23歳 - 沖縄高専出身。在学中からWeb開発受託をしてNodejs触り始める

    - Mixi/Fullerインターンを経て、新卒でユーザーローカルに入社 - その後TENTIAL ECリニューアルをするために入社 - TENTIAL - ウェルネス事業テックリード Node.js/ express.js / vue / react / MongoDB
  2. ▼技術スペック ・Nuxt.js (Vue.js + express.js + MongoDB) ・AWS(Fargate, S3, codepipeline)

    ・github actions ・heroku(review apps) ・imgix(画像圧縮CDN) ・Benchmark Email(メルマガ配信) ・LOGILESS(物流管理システム) ・GMO Payment(決済) ・Hevo Data(DB ETL) ・BigQuery(データ分析) ・Autify(ソフトウェアテスト) TENTIAL EC フルスクラッチ
  3. ▼技術スペック ・Nuxt.js (Vue.js + express.js + MongoDB) ・AWS(Fargate, S3, codepipeline)

    ・github actions ・heroku(review apps) ・imgix(画像圧縮CDN) ・Benchmark Email(メルマガ配信) ・LOGILESS(物流管理システム) ・GMO Payment(決済) ・Hevo Data(DB ETL) ・BigQuery(データ分析) ・Autify(ソフトウェアテスト) TENTIAL EC フルスクラッチ
  4. 決済システムについて GMO Payment Gatewayを全面的に使用 - クレジットカード決済と決済フローについて - AmazonPay - 後払い

    GMO Payment Gatewayとは - GMO Paymentが用意した決済をAPI経由でリクエスト できる決済代行サービス
  5. GMO Paymentのメリット/デメリット 豊富な決済手段 - クレジットカード、AmazonPay、後払い、コンビニ、 ApplePay、PayPay UIがこだわれる 運営元が東証一部上場 サポート体制がしっかりしている 色んなASP(EC-Force)に対応しているので、決済の引き継ぎが比較的

    容易 メリット デメリット 安くない決済手数料 ベンダーロックイン APIを使用するので、自前で実装する部分が増える → メンテコスト増大 ドキュメントがわかりづらいかも? EC-Forceを使用していた事でそこから の引き継ぎと、豊富な決済手段から GMOを扱うことを決定した。
  6. 購入ボタン押下した後の実装フロー 1. Transaction session貼る 2. parameterの確認・バリデーション 3. 商品の在庫チェック、不正価格検知 4. ログインステータス確認

    5. 配送梱包データ確認 6. Order仮作成 7. クーポン情報確認 8. (定期商品であれば定期モデル作成) 9. GMO決済APIリクエスト(execTransaction) 10. Transaction確定処理 or Failure処理 11. メール送信
  7. AmazonPay • CVRが格段に上がった。比率なら 50%以上 はAmazonPayで決済をしている状況 • ver1とver2がある • ver1はブラウザの3rd party

    cookie削除で、 住所・決済カード選択 widgetがうまく表示され ない • 急速にver2への移行が進んでいる ◦ ver2移行で、事業者に沿った UIの構築 ができる
  8. AmazonPay • CVRが格段に上がった。比率なら 50%以上 はAmazonPayで決済をしている状況 • ver1とver2がある • ver1はブラウザの3rd party

    cookie削除で、 住所・決済カード選択 widgetがうまく表示され ない • 急速にver2への移行が進んでいる ◦ ver2移行で、事業者に沿った UIの構築 ができる ver1の方はお早めにver2への移行を!
  9. 定期決済 - 仕様 - 自動決済 - オペレーター決済 - カート確認 -

    定期オプション変更 - 購入確認画面 - 定期情報表示 - 定期購入時に割引オファーを設定 - URLごとに割引オファー設定 - 定期プラン追加/編集 - 定期失敗ユーザー通知 - マイページ/管理画面変更 - カード変更 - スキップ・スキップ解除 - ストップ機能 - お届け先変更 - お届け個数変更 - 配送頻度変更 自動決済 マイページ定期変更 管理画面 ユーザーカート
  10. どのようにして作ったか • GMO Payment Gatewayには継続課金といった機能はない • 一方で、クレジットカートを登録することで、事業者側任意のタ イミングで決済をすることが可能 • 本来execTransactionではクレジットカードのトークンをフロント

    側で取得し、それを使用してリクエストを行うが、クレカ登録を すれば常に決済が可能 1.コア機能(自動決済)のプロトタイプ entryTransaction execTransaction Subscription 初回決済で作成した Subscription からUser情報を取得する https://www.gmo-pg.com/service/subscriptions/ GMO継続課金:
  11. どのようにして作ったか • 以下4つにわけてそれぞれ開発 ◦ 管理画面(CRUD、エラーが出た場合の対 応) ◦ ユーザー管理画面(一覧確認、 Stop、Skip、 Interval変更)

    ◦ ユーザーカート側(初回決済) ◦ 自動決済 • ジュニアのメンバーも積極的に議論に参加し、みん なの定期決済Contextを高める →のちのQAをやりやすいようにする 3.実装
  12. 定期を実装する上での実装ポイント • サービスによってまちまちだが、 TENTIALではPlanと SubscribtionをOne to Oneにした。 • 例えばPlanを変更する(1ヶ月→2ヶ月)場合は、 Subscriptionに紐づくPlanを変更するだけで済むよう

    にした • 一方でSubscriptionにpersonal_planを追加し、特定 のユーザーのみオファーだけ変更したいといった要望 に対応 1.Sku(Product)とPlanとSubscribtionとOrderの関係 Plan Order Subscription Customer (User) One to Many One to One One to One
  13. 設計・運用でのbetter point(これやってよかった) - 今後の定期システムに変更があった時のことも 考えて、色んな角度からこれってどうなの?をひ たすら壁打ちした - 決済サービスであるがゆえ、一度の失敗が大き い -

    マイクロMTG+ペアプロで仕様のさらなる理解 と、実装との乖離を解消 1.ひたすら壁打ちする - 既存のコードがJSなため、テスト環境があまり 整っていなかった。 - 自動テスト以外の品質担保方法として、 QA時間 を多くとり、最低限の品質を担保した - エンジニア自身のQA力向上 2.QA会
  14. 設計・運用でのbetter point(これやってよかった) - 自動決済がされない - 指定時間を超えてもバッチが実行されない。 GMO決済リクエストが落ちるなどの予期せぬこと で自動決済が落ちることはある。 → 条件満たせばオペレーターが任意で決済を実行できるよ

    うにする(オペレーター決済) - 自動決済が勝手に実行される - 自動決済が落ちるのは構わない - N回目のサービスが提供されていないのに、 N+1回目の決済がされないようにした(ここでいう サービス提供は、TENTIALの場合、商品の発送) - 金額、データがあっていない - 初回オファーや3回目まで1000円引きなどの特定割引があれば、その分金額があわないみた いなことは起こりがち - SaaSとのデータ整合があっていないのも頻繁に起こる - QAで徹底的にでないようにする - 3.最悪の展開を避けるためのエラー対策を最初から実装 →モニタリング