こんにちは、スマートバンクでプリペイドカードの決済システム開発をしている三谷(@shohei1913)です。
日本ではキャッシュレス決済の普及が進み、ここ10年ほどで消費支出におけるキャッシュレス決済比率は15.3%から39.3%まで上昇しているそうです[1]。このような中、我々スマートバンクのようにFintech企業としてお金の使い方をハックして、世の中をより便利に変えていこうとチャレンジしているスタートアップも近年増えています。
一方で、クレジットカードやプリペイドカードそのものの歴史は古く、Visaが誕生したのは1976年[2]ですし、日本で決済システムの中核を担うCAFIS(キャフィス)が生まれたのは1984年にまで遡ります[3]。決済システムの基本となる仕組みはその頃に出来上がっており、それが今も現役で動いています。
このような歴史あるシステムに向き合い、スタートアップ企業として新しい価値を生み出していく狭間には、エンジニアの頭を悩ませるいろいろな技術的課題が存在します。例えばカードの明細反映が遅かったり、明細が見にくくて不便だったりと、カード決済の不便さを感じたことがある方もいらっしゃるかと思います。その背景には、決済システムの歴史的経緯に由来する部分も多くあります。
本記事では、まず決済システムの全体像を概説し、特に「イシュアー」と呼ばれるカード発行会社の役割について説明します。次に、カード決済の基本的な仕組みとともにエンジニアの頭を悩ませる技術的課題と、その解決に向けた私たちの取り組みを紹介します。
決済ではユーザーの資産の保護を第一とするため、エッジケース的な細かい仕様にもしっかりと向き合い、取引を正しく記録して決済の整合性を担保する必要があります。本記事を通して、あまり知られていないカード決済の裏側の仕組みと技術的な面白さを知っていただければ幸いです。
前提となるカード決済システムの“登場人物”と役割
決済システムの世界をより深く理解するため、まずはカード決済に関わる主要な登場人物とその役割を説明します。
異なる役目の事業者が協力する「4パーティースキーム」
VisaやMastercardなどの国際ブランドは、「4(フォー)パーティースキーム」と呼ばれる枠組みでビジネスを展開しています。この仕組みは、4つの異なる役割を持つ事業者が協力し合うことで、世界中でシームレスなカード決済を実現しています。
▲ カード発行会社(イシュアー)・加盟店契約会社(アクワイアラー)・加盟店・ユーザーの4者が国際ブランドのもとでパーティを組む
国際ブランドは、世界規模の決済ネットワークを構築・運用する重要な役割を担っています。しかし、各国でのカード会員の獲得は「イシュアー(カード発行会社)」に、カード決済端末の普及は「アクワイアラー(加盟店契約会社)」と呼ばれる専門の事業者に任せています。
このうち「アクワイアラー」は加盟店開拓のスペシャリストとして、店舗などでカード決済が利用できる環境を整備し、決済ネットワークの拡大を推進しています。
スマートバンクのような「イシュアー」の役割と責任と面白さ
一方、私が所属するスマートバンクは「イシュアー」として、以下の重要な役割を担っています。
- カードの発行:国際ブランドのネットワークで利用可能なカードを発行する
- 資金管理:ユーザーから決済用の資金を預かり、適切に管理する
- 取引承認:ユーザーの決済時に、加盟店からの利用要求を審査・承認する
- 決済精算:承認した取引の資金を、国際ブランドを通じて精算する
上記の基本的な役割に加えて、カードを発行するイシュアーには以下のような重要な責務があります。
- システムの安定性:24時間365日、確実に決済サービスを提供し続ける安定性の維持
- 資産の保全:預かった資金の適切な管理と取引の正確な記録
- セキュリティの確保:不正利用の防止やPCI DSSなどの国際セキュリティ基準への準拠
カードの発行から決済精算までの仕組みや、システムの安定性を保つエラーハンドリングの仕組みなどは、国際ブランド側がプラットフォームとして機能を提供しています。イシュアーはその仕組みに従うことで、安定性や堅牢性が高いシステムを構築することができます(もちろん独自に考え構築しなければならない部分も多いのですが)。
ステークホルダーが多く、歴史も長いことから多機能で、全体像を掴むのが難しい部分もありますが、セキュリティ強度を高めるための仕組みや規格、障害発生時のリカバリーの仕組みなど、歴史の中で培われたベストプラクティスを知って活用できるところは、決済システムに関わる面白さでもあります。
カード決済は同期と非同期の2段階プロセスで処理される
ここからはイシュアーが担う「取引承認」のプロセスに絞って説明します。まずは、カード決済の仕組みを理解する上で重要な2つの概念、「オーソリゼーション(Authorization)」と「クリアリング(Clearing)」について説明します。
オーソリゼーション:同期的な決済の承認プロセス
オーソリゼーションとは、カードでの支払い時に即座に行われる承認処理のことです。例えば、コンビニエンスストアで1,000円の買い物をしたときには、以下のような流れで承認が行われます。
- 加盟店(店舗)がカード情報と取引金額をアクワイアラーに送信
- アクワイアラーが国際ブランド(VISAなど)経由でイシュアー(カード発行会社)に承認を依頼
- イシュアーが以下の項目を確認
- カードが有効であるか
- 利用限度額や残高が十分か
- 不正利用の疑いがないか
- 確認結果(承認/否認)を加盟店に返却
- 取引完了
この一連の流れは同期的に行われ、通常数秒で完了します。
クリアリング:非同期による決済の確定プロセス
クリアリングは決済を確定させるプロセスです。オーソリゼーションで承認された取引は、以下のような流れで確定されます。
- 加盟店が1日の取引データ(クリアリングファイル)をアクワイアラーに送信
- アクワイアラーが国際ブランド経由でイシュアーにクリアリングファイルを送信
- イシュアーはクリアリングファイルを受け取り、対応するオーソリゼーションと照合
- 照合が成功したオーソリゼーションを消し込み、確定させる
- クレジットカードの場合、クリアリングが届いた取引を元に請求金額を確定させる
- プリペイドカードの場合、オーソリゼーション時の金額との差額を計算し、請求金額を調整する
オーソリゼーションと異なり、クリアリングは非同期で行われます。通常、取引の数日以内に送られます。
デュアルメッセージ方式とその歴史的背景
オーソリゼーションとクリアリングの2つのプロセスに分けて処理するこの方式は、デュアルメッセージ方式と呼ばれます。
▲ 取引承認におけるデュアルメッセージ方式の概略
現在のようにオンラインのシステムが構築される以前、オーソリゼーションは「電話」で行われていました。一定金額を超えたカード決済を行うには、加盟店からアクワイアラーの信用照会センターに電話を掛けて承認を取っていたそうです。
決済が完了した後には「インプリンタ」と呼ばれる手動の転写機を使ってカード番号や有効期限を売上伝票に写し取り、その伝票を使うことでクリアリング処理が行われていました[4]。最近は減りましたが、昔のクレジットカードはカード番号部分が浮き上がるエンボス加工がされていました。これはインプリンタでカード番号を転写していた名残りだそうです。
不正対策の観点でエンボス加工はなくなりつつありますが、オーソリゼーションとクリアリングというデュアルメッセージ方式は、完全にオンラインに置き換えられたものの、今でも残ったままとなっています。
クリアリングをオーソリゼーションと照合させる仕組み
ここからは、デュアルメッセージ方式における技術的課題に焦点を当てていきます。デュアルメッセージ方式では、クリアリング処理の際に対応するオーソリゼーションを照合し、決済処理を確定する必要があります。この照合という作業が、イシュアーにとって技術的難易度が高い部分でもあります。
前の章で説明した通り、オーソリゼーションで決済を承認してはいるものの確定はされていないため、承認したオーソリゼーションをクリアリングで確定させていく必要があります。クリアリングはファイル形式でやり取りするため、一つ一つの取引を読み取り、オーソリゼーションと照合していきます。
取引を照合する2段階の仕組み
オーソリゼーションとクリアリングを照合するために利用できる情報はいくつかあります。照合方法はイシュアーによって異なりますが、一般的には以下のように、情報の信頼性が高い順に照合していくことが多いかと思います。
第1段階:取引に割り振られる識別子による照合
以下の識別子は、取引を一意に特定できる最も確実な情報です。
- オーソリゼーション時にイシュアーが発行する6桁の承認番号
- 取引を一意に識別するために国際ブランドが発行するトランザクションID
ただし、加盟店が承認番号を正しく送ってこれないなど、これらの識別子が利用できないケースもあります。そのときは信頼性がそれほど高くない情報を利用します。
第2段階:取引を関連付ける要素による照合
取引に割り振られる識別子を利用できないときには、以下のような取引を関連付ける要素を組み合わせた照合を行います。
- 取引金額
- 取引日時
- 加盟店情報(店舗コードなど)
- …… etc.
これらの情報は取引を一意に特定できないため、誤って紐づけてしまう可能性もあります。まずは承認番号やトランザクションIDによる照合を試み、失敗したときにだけ関連要素を組み合わせた照合を行う、段階的なアプローチを採用しています。
取引を照合する難しさ ── 技術的な課題の3つの例
オーソリゼーションとクリアリングの照合は、一見すると情報が揃っているため、それほど難しくないようにも思えます。しかし決済は多機能で、いろいろな種類の決済があります。歴史あるシステムだからこそ柔軟な運用による多様なパターンを考慮する必要があり、それが難易度を高める要因となっています。
例えば以下のようなケースがあります。
ケース1:為替レートの変化による金額の不一致
取引を照合する際に、オーソリゼーションとクリアリングの金額が一致しないケースがあります。特に海外での取引において、この状況が発生することがあります。
日本で発行したカードを海外で利用する場合、取引は日本円で決済されますが、オーソリゼーションとクリアリングの処理タイミングの違いにより、適用される為替レートが異なることがあります。その結果、同じ取引であっても記録される決済金額に差が生じてしまいます。
スマートバンクではこの課題に対し、現地通貨の金額で照合したり、日本円での照合時に数%程度の誤差を許容するなどの工夫を施しています。
ケース2:商品の部分配送におけるクリアリングの分割
クリアリングには分割配送という機能があります。例えばユーザーが複数の商品をまとめて購入し、加盟店が商品を分割して発送するときに、クリアリングデータも発送単位で分割して送信されることがあります。この場合、個々のクリアリング金額はオーソリゼーション時の総額と一致しないため、単純な照合が困難です。
このような状況に対応するため、私たちのシステムでは関連する全てのクリアリングデータがそろうまで待機し、総額での照合を行う仕組みを実装しています。
ケース3:データの欠損
クリアリングデータの一部が欠損するケースも存在します。典型的な例として、商品の購入とキャンセルが発生した場合が挙げられます。通常であれば、購入とキャンセルそれぞれについて、オーソリゼーションとクリアリングのペアが存在するはずです。しかし実際には、購入時はペアが存在しキャンセル時はクリアリングのみが送信されるなど、送信されるデータパターンがいくつか存在します。
このようなケースでも取引を正確に記録できるよう、柔軟な照合ロジックを実装することが求められます。
この他いろいろなケースが存在し、それぞれに対応する照合ロジックを実装し続ける必要があります。
見過ごせないエッジケースの難しさと醍醐味
上記のケースはある程度一般的なものですが、中には特定の加盟店でしか発生し得ないような「超エッジケース」も存在します。例えばオーソリゼーションとクリアリングの送信順序が特殊だったり、特定のパラメーターの値が特殊だったりします。これをうまく想定できないとシステムが想定通りに動作せず、過剰に請求してしまったり、逆に過小に請求してしまったりすることがあります。
イシュアーは、どのようなパターンや形式のデータでも受け取り、正しく処理できるようにする必要があります。サービス全体で見るとたった1つの加盟店でしか発生しないようなエッジケースであっても、そのユーザーにとっては日常的に利用する加盟店だという可能性もあります。そのため「超エッジケース」が発生した際には、できるだけ早くその発生を検知し、過剰請求や過小請求が発生しないようシステムを改善していく必要があります。
サービスが成長してユーザーが増えると、決済される加盟店の数や種類も増えていきます。エッジケースが増えることは、ある種サービスの広がりを感じる部分でもあり、決済システムを開発する上で楽しさの1つでもあります。「二度あることは三度ある」ということわざもありますが、エッジケースとの向き合い方は決済システム特有の開発の醍醐味かもしれません。
エッジケースを監視することで改善につなげるアプローチ
ここまでカード決済の仕組みと技術的課題を説明してきました。最後に、我々がゼロから決済システムを作るにあたって、どのようにエッジケースに対応しながらシステムを改善し、安定性を高めてきたのか、具体的に実践したことを紹介します。
取引の照合結果を3つの状態に分類する
カード決済の仕組みが歴史あるシステムであることから、想定外なケースが多数存在することはサービスのリリース前から見当がついていました。そのため、取引の照合結果を以下の3つに分類し、想定外の発生を素早く検知できるように備えました。
正常な照合成功
- オーソリゼーションとクリアリングが正しく紐付き、金額も一致している
- システムが想定通りに動作している状態
要注意の照合成功
- オーソリゼーションとクリアリングは紐付いたものの、金額が一致しない
- 為替レートの変動や分割配送など既知の要因もあれば、未知の問題が潜んでいる可能性もある状態
照合失敗
- オーソリゼーションとクリアリングの紐付けができない
- システムの想定外の動作が発生している可能性が高い状態
2番目の「要注意の照合成功」と3番目の「照合失敗」では、全てのケースで問題があるわけでもありません。問題ないかどうかは実際に目視確認して、取引状態を細かく調査しなければ判断がつきません。
未知の問題や想定外の動作が発生してそうな照合を可視化する
問題がありそうな取引を調査するため、取引の照合結果それぞれの状態について発生割合をRedashで可視化して、日別に確認する運用をとっていました。
▲ 取引の照合結果それぞれの状態をRedashで可視化して確認
例えば上図の左のグラフで、赤色は「要注意の照合成功」、緑色は「照合失敗」を示しています。こういった状態が検出されたら社内の管理画面で個々の取引の詳細を確認し、照合が失敗したのか、意図した通り動作した結果なのかを調査します。
実際に、想定していない特殊なパラメーターの値でクリアリングが届いたことにより照合失敗しているケースも多々あり、新しいパターンを発見するたびに照合ロジックを改善しました。
特にリリースして1年くらいはこのグラフを毎日確認し、問題となったケースをBacklogで管理してきました。およそ1年くらいでほとんどのパターンを網羅でき、安定的に運用できるようになりました。
照合が成功・失敗した全体的な傾向も分析する
個別の状態の発生割合だけでなく、全体的な傾向に変化がないかどうかも確認してきました。
▲ 届いたオーソリゼーションに対してクリアリングの照会が完了しているかを可視化して確認
上図の左のグラフは、オーソリゼーションが届いた日付をX軸に、クリアリングの照合が完了しているか否かをY軸で色分けしたものです。通常クリアリングは数日して届くため、左(過去のオーソリゼーション)になるほど照合が完了していない赤色は減っていきます。この傾向に変化が現れると、システムに不具合があって照合に失敗している可能性があります。
このように個別状態だけでなく全体的な傾向も監視することで、想定通り動いているかどうかを複数の視点から確認することができます。
他にも、実際にユーザーに請求している金額の合計値と、国際ブランドへ精算している金額の合計値を比較して差がないことを確認したりもしました。このように処理結果の整合性も組み合わせて確認することで、システムが想定通り動いているかどうかを複数の目で確認してきました。
カスタマーサポートとも連携する
上記のような監視を組み合わせても、見落としを完全になくすことは困難です。エンジニアでは検知することができず、ユーザーからの問い合わせ経由で発覚するケースもあります。そのためカスタマーサポートチームとも連携し、迅速に対応できる体制を整えています。
終わりに
本記事では、まず決済システムの全体像を概説しながら「イシュアー」と呼ばれるカード発行会社の役割について説明しました。次に、カード決済の基本的な仕組みとしてデュアルメッセージ方式を紹介しながら、その中でも取引の照合のプロセスと技術的課題について説明しました。
特に、想定外なケースが発生した際の監視方法や対処方法をあらかじめ準備し、継続的にシステム改善を続けることで安定性を高めるテクニックは、決済に関わらず応用できるのではないかと思います。ぜひ参考にしていただけるとうれしいです!
制作・編集:はてな編集部
-
参考:経済産業省「2023年のキャッシュレス決済比率を算出しました」 ↩
-
Visaの前身となるBankAmericaが生まれたのは1958年で、1976年にVisaに名称変更された ↩
-
参考:インフキュリオン・インサイト「続・決済センターの役割解説①:決済センター誕生の経緯」 ↩