資料はこちら
ECサイト向けの決済機能の開発で学んだ外部決済サービス活用のポイント #決済LT

クラスメソッド株式会社 産業支援グループ 小売流通ソリューション部 prismatix サーバーサイドエンジニア
野村 啓一2017年10月にクラスメソッド株式会社にジョイン。ECサイト・CRM基盤となるAPIプラットフォーム prismatix の開発に携わる。主にECサイトの注文・決済に関わる機能開発や運用保守・チームリーディングを担当。
株式会社overflow 共同創業者CTO
大谷 旅人経路探索エンジンの研究開発後、2010年に株式会社サイバーエージェント入社。Ameba事業本部でシステム開発・運用責任者、事業部ボードとして組織運営などを務める。2013年株式会社メタップス入社、決済、AI分析プラットフォームの基盤開発やシステム開発責任者として従事、2015年に上場を経験。株式会社overflowの共同創業者CTOで設立に参画。
EC/CRMに特化したプラットフォーム「prismatix」
私はprismatixというEC/CRMに特化したプラットフォームを作っていまして、そちらの注文/決済サービスを担当しております。 classmethod株式会社がBtoBの自社サービスとして提供している、EC/CRMに特化したプラットフォームです。
お客様との良質な関係の場を構築するところをエンゲージメントコマースと呼んでいまして、お客様と共に考える、伴奏型コンサルティングといった、コンサルティングサービスも提供しています。
prismatixは、注文・決済サービス、商品サービス、会員・認証サービス、といった形でマイクロサービスとして提供しています。
全体で700以上のAPIが用意されていて、prismatixを利用されているお客様は、それを使って独自のECサイトの構築が可能です。
各企業の業務に適した設計や最適化ができるように作っておりまして、会員・認証サービスとある通り、CRM基盤としても活用いただいてます。

また、Stripe、VeriTrans、AmazonPay、NP後払いといった色々な外部決済サービスに対応しておりまして、 prismatixはそれらを統合した決済インターフェイスとしても提供しています。
ここまで私が携わっているprismatixの紹介をしましたが、ここからが本題です。
私からは、ECサイト向け決済機能の開発において、クレジットカード情報の扱い、外部サービスとの通信がタイムアウトする際の考慮ポイント、外部決済サービスのテストリリースフローの3点を紹介します。
サーバーサイドにクレジットカード情報を持たせない
ECサイトの利用者がクレジットカード情報を入力すると、ECサイトの画面から外部決済サービスに直接カード情報を送信します。
外部決済サービスから利用者のクレジットカード情報を基に返したトークンで、サーバーサイドから外部決済サービスに向けて、 カードを事前に登録するといった流れです。事前に登録したカード情報を使って実際に注文確定して、外部サービスに与信を取ることを想定しています。

ここでポイントになるのが、カード番号などの利用者情報は、利用者が使う画面と外部サービス間の通信のみでやり取りを行います。
クレジットカード情報はサーバーサイドに置いたり、サーバーサイドでリクエストが届くことによって情報漏洩などのセキュリティリスクが高くなるので、サーバーサイドに持たない・通さないことが重要なポイントです。
あと利用する外部決済サービスを採用する際は、PCIDSS(クレジットカードのセキュリティ基準)に遵守したサービスであること、かつカード情報の非通過・非保持を実現できる機能を持つこともポイントです。
外部決済サービスとの通信がタイムアウトする際に考慮すべきこと
外部サービスを使っていると、レスポンスに結構時間がかかるケースがあります。外部サービス側の障害などもありますが、 特に決済に関わる部分ではカードの与信や売上金の返金の場合は時間が数秒で、場合によっては、数十秒かかるケースも少なくないです。
ECサイトが使っているAPIクライアント側で設定した許容時間を超えて、通信がタイムアウトするケースも発生する可能性があります。
たとえば、利用者が注文登録をECサイトにリクエストして、ECサイトは外部決済サービスに対して与信の取引登録を行うリクエストをしますが、外部決済サービス側の処理に時間がかかった場合、ECサイト側がタイムアウトと判定します。
ECサイトはこの時点でエラーとみなして、利用者には、「注文登録できませんでした」とレスポンスを返しますが、 外部決済サービス側の処理は実は継続していて、取引が成立したというケースが想定されます。
ただ、取引が成立したというレスポンスはECサイト側には届かなくて、 ECサイト側はそれに気づかず、注文成立しないままといった状態が想定されます。
注文成立していないのに、外部サービス側の与信は成立しているという不整合な状態となってしまいます。利用者から見ると買い物ができてないのになぜかカードの与信枠は減っているので、利用者にも良くない見え方をしてしまいます。

こういったタイムアウトによる失敗に備えた対応として、突合・補填を追加しました。
突合は、ECサイトと外部決済サービス間の状態を比較して、 どちらも成功または失敗という状態になっているかという確認をします。
もし突合によって不整合と判断された場合は、状態を合わせる補填という対応を行います。この例では、ECサイト側では注文不成立で、外部決済サービス側が成立していた場合は取引をキャンセルします。

突合と補填の対応を備えておくことで、万が一タイムアウトの事象が発生した場合も、利用者に対する不要な請求をしないシステムにしました。
このようにECサイトと外部サービス間の整合性を担保することをおすすめします。
外部決済サービスを扱う上でのテストリリースフロー
ECサイトの決済機能を新しく追加したテストをして、テストが通ったらECサイトのアプリケーションをビルドしてリリースまでするといったことで、新しい機能を提供するまでのCICDフローの例をここでは表しています。

このテストを実施した時、外部決済サービス側や開発環境に何らか不具合があるとテストが異常終了するケースがあります。
そうすると、テストに依存してビルド・リリースのフローを組んでしまうと、ビルドから先に進まずにリリースができないという事象が発生します。新しい機能を早く提供したいのに、外部サービスが復旧するまで待つという状態が最悪想定されます。
問題ではない、と明確にした上でOKであれば、リリースを進める形でリリースフローの改善を考えました。
ここで私が考えたのがリリースフローの改善で、外部決済サービスに依存するテストはビルドとは別のプロセスで実施する形で考えました。
外部決済サービスに依存する処理は、モック等で代用してテストを実施します。
万が一、外部サービスに依存するテストが失敗した場合でも、外部決済サービスが一時的な不調、あるいは決済サービスに依存しないテストが通っていてプロダクトの問題ではないことを明確にしたうえでリリースまで進めることができます。

そのため、CI/CDフローを考慮しつつ外部決済サービスに依存したテストをしたい場合は、ビルドやリリースに依存しない作りにした方が良いと思います。
プロダクトを直す必要がないと明確に判断できて、リリースOKとする仕組みを用意することがポイントです。
以上、簡単に3つのポイントについて説明をさせていただきました。
カード情報はサーバーに持たない、通さない。 外部サービスは何かしら異常が起きるという前提のもと設計やテストをすることが非常に重要なポイントです。
AI 時代のエンジニア転職は Offers で
あなたのキャリアに合った求人やスカウトが届く、エンジニア向け転職サービスです。
無料ではじめる正社員の求人を探す
Offers Jobs で正社員の求人を探せます。
求人を見る関連記事
イベントレポートtoBサービスで外部決済サービスを導入し、うまくいったこといかなかったこと #決済LT
Offers と Offers MGR の決済に Stripe を組み込んだ経緯と、トライアルの導入がうまくいった点、複数サービスで共通の決済基盤を作れなかった点を共有した #決済LT の登壇レポートです。
株式会社overflow
磯崎 慶太 他1名
イベントレポート【イベントレポート】人間のレビューなしで"そのまま出せる"デザインは作れるか こぎそさんに聞く デザインハーネスの現在地
AIに画面を作らせても、人のレビューは要るのか。デザインハーネスを提唱するこぎそ様が、4層モデルとデモ、レビューコメントから判断基準を育てる実践、人が判断を残すべき領域を語りました
株式会社Lumilinks 代表取締役 / デザイナー
こぎそ 他1名
イベントレポート【イベントレポート】AIでコード書く前に、要求・要件定義足りてる?ミノ駆動さんと改めて考える ドメイン駆動設計
設計・実装がAIに移った今、人間に残る要求・要件定義をどう考えるか。『良いコード/悪いコードで学ぶ設計入門』著者のミノ駆動様が、文脈・未知の未知・アウトカム・仮説推論の4つの思考と、現場の問いへの答えを語りました
合同会社DMM.com
ミノ駆動 他1名
イベントレポート【イベントレポート】【Claude Code】世界のスタートアップが必死に求める「GTMエンジニア」とは
#GTMLab主宰のなかむらまこと氏とLayerXの飯沼広基氏が登壇。GTMエンジニアは何をエンジニアリングするのか、なぜエンジニア出身が向いているのかを、効率化ではなく売上を伸ばす開発の実践とともに語りました。
#GTMLab 主宰
なかむら まこと 他2名
イベントレポート【イベントレポート】AI時代 Drizzle?Kysely?Prisma? kennさん・cojiさんと語るORM選定
AIがコードを書く時代にORMをどう選ぶか。KyselyとD1でDBを2回吹き飛ばした溝口浩二(coji)様と、DrizzleとAtlasでスキーマだけを見るKenn Ejima様が、型・マイグレーション・DB選定で人が担う判断を語りました
Dot Product AI, Inc. Founder
Kenn Ejima 他2名
イベントレポート【後編】MIT、GPL、BSL?何をしたら違反になる?ケースから学ぶ OSSライセンス講座 #DeepDive
【前編はこちら】 Contents1 ディスカッション・質疑応答1.1 【OSS
バーチャルテックポエマー
紅月/koduki 他1名