×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
#MerpayTechFest Session Title 共通QRコード決済システム 裏側 Taro Aoki Backend Engineer (Code Payment Team)
Slide 2
Slide 2 text
#MerpayTechFest
Slide 3
Slide 3 text
#MerpayTechFest Backend Engineer / Code Payment Team Taro Aoki (@ktr)
Slide 4
Slide 4 text
#MerpayTechFest QRコード決済におけるお金 流れ
Slide 5
Slide 5 text
#MerpayTechFest キャッシュレス関連用語集 を元に改変 https://www.meti.go.jp/policy/mono_info_service/cashless/image_pdf_movie/cashless_glossary_R1_06.pdf メルペイ みで完結している決済 流れ 購入代金 支払い 購入代金 支払い お客さま お店 (加盟店) 商品・サービス提供 QRコード決済 メルペイ イシュアー アクワイアラー
Slide 6
Slide 6 text
#MerpayTechFest イシュアー お客さま 残高をもとに決済処理を行う 事業者 イシュアーとして メルペイ 購入代金 支払い 購入代金 支払い お客さま お店 (加盟店) 商品・サービス提供 QRコード決済 メルペイ イシュアー アクワイアラー
Slide 7
Slide 7 text
#MerpayTechFest アクワイアラー 決済サービスを使えるお店 (加盟店)を増 やす事業者。加盟店管理や加盟店へ 入 金、加盟店向け サービス 提供も行う。 アクワイアラーとして メルペイ 購入代金 支払い 購入代金 支払い お客さま お店 (加盟店) 商品・サービス提供 QRコード決済 メルペイ イシュアー アクワイアラー
Slide 8
Slide 8 text
#MerpayTechFest 共通QRコード決済におけるお金 流れ
Slide 9
Slide 9 text
#MerpayTechFest 購入代金 支払い 購入代金 支払い お客さま お店 (加盟店) 商品・サービス提供 QRコード決済 メルペイ アクワイアラー d払い イシュアー 決済確定 通知 共通QRコード決済におけるお金 流れ
Slide 10
Slide 10 text
#MerpayTechFest 購入代金 支払い 購入代金 支払い お客さま お店 (加盟店) 商品・サービス提供 QRコード決済 メルペイ アクワイアラー d払い イシュアー 決済確定 通知 共通QRコード決済におけるお金 流れ
Slide 11
Slide 11 text
#MerpayTechFest 購入代金 支払い 購入代金 支払い お客さま お店 (加盟店) 商品・サービス提供 QRコード決済 メルペイ アクワイアラー d払い イシュアー 決済確定 通知 共通QRコード決済におけるお金 流れ
Slide 12
Slide 12 text
#MerpayTechFest 購入代金 支払い 購入代金 支払い お客さま お店 (加盟店) 商品・サービス提供 QRコード決済 メルペイ アクワイアラー d払い イシュアー 決済確定 通知 共通QRコード決済におけるお金 流れ
Slide 13
Slide 13 text
#MerpayTechFest 決済処理
Slide 14
Slide 14 text
#MerpayTechFest 決済処理 ① 加盟店で 決済可否 ② 決済通知 受け付け
Slide 15
Slide 15 text
#MerpayTechFest 決済処理 ① 加盟店で 決済可否 ② 決済通知 受け付け
Slide 16
Slide 16 text
#MerpayTechFest ① 加盟店で 決済可否 加盟店ステータス ● アクティブ ● 解約中 ● 解約済み 決済ステータス ● アクティブ ● 停止中 ● 強制停止中
Slide 17
Slide 17 text
#MerpayTechFest 決済処理 ① 加盟店で 決済可否 ② 決済通知 受け付け
Slide 18
Slide 18 text
#MerpayTechFest ② 決済通知 受け付け ● メルペイ (アクワイアラー) とイシュアー間で決済 データを連携する ● イシュアー側で確定された決済が連携される
Slide 19
Slide 19 text
#MerpayTechFest 決済 確定済み 決済 確定中 決済通知 決済確定 決済 ステートマシン ② 決済通知 受け付け
Slide 20
Slide 20 text
#MerpayTechFest 返金処理
Slide 21
Slide 21 text
#MerpayTechFest 返金処理 ① 加盟店向け管理画面から 返金 ② イシュアーへ 返金リクエスト
Slide 22
Slide 22 text
#MerpayTechFest 返金処理 ① 加盟店向け管理画面から 返金 ② イシュアーへ 返金リクエスト
Slide 23
Slide 23 text
#MerpayTechFest ① 加盟店向け管理画面から 返金
Slide 24
Slide 24 text
#MerpayTechFest 返金処理 ① 加盟店向け管理画面から 返金 ② イシュアーへ 返金リクエスト
Slide 25
Slide 25 text
#MerpayTechFest ② イシュアーへ 返金リクエスト 管理画面 から返金 購入代金 返金 お客さま お店 (加盟店) メルペイ アクワイアラー d払い イシュアー 返金 リクエスト
Slide 26
Slide 26 text
#MerpayTechFest ② イシュアーへ 返金リクエスト TCCベース インターフェース ● 複数サーバ間でデータ 一貫性を保つパターン ● TCC: Try-Confirm/Cancel
Slide 27
Slide 27 text
#MerpayTechFest ② イシュアーへ 返金リクエスト TCCベース インターフェース ● Try で返金ができる状態にする ● Confirm で返金を確定 ● Cancel で返金をキャンセル
Slide 28
Slide 28 text
#MerpayTechFest ② イシュアーへ 返金リクエスト TCCを使わない場合 お店 (加盟店) メルペイ d払い
Slide 29
Slide 29 text
#MerpayTechFest ② イシュアーへ 返金リクエスト TCCを使わない場合 メルペイ すでに 返金してしまっている! お店 (加盟店) メルペイ d払い
Slide 30
Slide 30 text
#MerpayTechFest ② イシュアーへ 返金リクエスト TCCを使っている場合 メルペイ 単純に 返金をキャンセルできる! お店 (加盟店) メルペイ d払い
Slide 31
Slide 31 text
#MerpayTechFest 返金済み 返金中 返金 リクエスト 返金成功 返金 ステートマシン キャンセル成功 事前条件エラー キャンセル 済み キャンセル 中 ② イシュアーへ 返金リクエスト
Slide 32
Slide 32 text
#MerpayTechFest 可用性を高めるアーキテクチャ
Slide 33
Slide 33 text
#MerpayTechFest 可用性を高めるアーキテクチャ ① 非同期処理を中心としたAPI ② リトライセーフなAPI
Slide 34
Slide 34 text
#MerpayTechFest 可用性を高めるアーキテクチャ ① 非同期処理を中心としたAPI ② リトライセーフなAPI
Slide 35
Slide 35 text
#MerpayTechFest ① 非同期処理を中心としたAPI 同期処理にしなけれ いけない処理以外 すべて非同期処理とする
Slide 36
Slide 36 text
#MerpayTechFest ① 非同期処理を中心としたAPI お金を減らす処理 同期的に行う ● 決済におけるお客さま 残高 ● 返金における加盟店さま 残高
Slide 37
Slide 37 text
#MerpayTechFest ① 非同期処理を中心としたAPI お金を増やす処理 非同期的に行う ● 決済における加盟店さま 売上反映 ● 返金におけるお客さまへ 返金額 反映
Slide 38
Slide 38 text
#MerpayTechFest ① 非同期処理を中心としたAPI そ 他 処理 非同期的に行う ● 加盟店さまへ メール送信 ● データ 整合性チェック ● etc.
Slide 39
Slide 39 text
#MerpayTechFest 可用性を高めるアーキテクチャ ① 非同期処理を中心としたAPI ② リトライセーフなAPI
Slide 40
Slide 40 text
#MerpayTechFest ② リトライセーフなAPI どんなタイミングであっても 何度でも安全にリトライできるAPI
Slide 41
Slide 41 text
#MerpayTechFest ② リトライセーフなAPI どんなタイミングであっても 何度でも安全にリトライできるAPI 冪等性を持つAPI
Slide 42
Slide 42 text
#MerpayTechFest ② リトライセーフなAPI なぜ冪等性を持ったAPIが重要か? ● クライアント側 ロジックがシンプルになる ● API 呼び出しがexactly-onceと 限らない
Slide 43
Slide 43 text
#MerpayTechFest 冪等性 ないAPIとリトライ ② リトライセーフなAPI サーバ クライアント リソース作成
Slide 44
Slide 44 text
#MerpayTechFest 冪等性 ないAPIとリトライ ② リトライセーフなAPI リソース 作成済み サーバ クライアント
Slide 45
Slide 45 text
#MerpayTechFest 冪等性 ないAPIとリトライ ② リトライセーフなAPI リソース 作成済み サーバ クライアント
Slide 46
Slide 46 text
#MerpayTechFest 冪等性 ないAPIとリトライ ② リトライセーフなAPI リソース 作成済み 重複して作成 してしまう! サーバ クライアント
Slide 47
Slide 47 text
#MerpayTechFest 冪等性 あるAPIとリトライ ② リトライセーフなAPI リソース 作成済み すでに作成されているリ ソースを返却 サーバ クライアント
Slide 48
Slide 48 text
#MerpayTechFest ② リトライセーフなAPI 決済通知 決済確定 決済 ステートマシン 決済 確定済み 決済 確定中
Slide 49
Slide 49 text
#MerpayTechFest ② リトライセーフなAPI 決済通知 決済確定 冪等キー deadbeef 決済 確定済み 決済 確定中
Slide 50
Slide 50 text
#MerpayTechFest ② リトライセーフなAPI 決済通知 決済確定 冪等キー deadbeef リソース 作成されていない で 安全にリトライできる 決済 確定済み 決済 確定中
Slide 51
Slide 51 text
#MerpayTechFest ② リトライセーフなAPI 決済通知 決済確定 冪等キー deadbeef リソース作成時に冪等キーと 現在 状態を記録 決済 確定済み 決済 確定中
Slide 52
Slide 52 text
#MerpayTechFest ② リトライセーフなAPI 決済通知 決済確定 冪等キー deadbeef 決済 確定済み 決済 確定中
Slide 53
Slide 53 text
#MerpayTechFest ② リトライセーフなAPI 決済通知 決済確定 冪等キー deadbeef リトライ時 冪等キーから対応する リソースが判別できる 決済 確定済み 決済 確定中
Slide 54
Slide 54 text
#MerpayTechFest ② リトライセーフなAPI 決済通知 決済確定 冪等キー deadbeef 記録した状態からどこまで処理が 進んでいたかが分かる 決済 確定済み 決済 確定中
Slide 55
Slide 55 text
#MerpayTechFest ② リトライセーフなAPI 決済通知 決済確定 冪等キー deadbeef 決済 確定済み 決済 確定中
Slide 56
Slide 56 text
#MerpayTechFest 整合性を担保する取り組み
Slide 57
Slide 57 text
#MerpayTechFest 整合性を担保する取り組み ① バッチによるデータ不整合 修復 ② 決済・返金 リコンサイル
Slide 58
Slide 58 text
#MerpayTechFest 整合性を担保する取り組み ① バッチによるデータ不整合 修復 ② 決済・返金 リコンサイル
Slide 59
Slide 59 text
#MerpayTechFest ① バッチによるデータ不整合 修復 ● 数分程度 短いインターバルで実行 ○ なるべく加盟店さまとお客さま 体験を 損 ないように ● 中間状態 決済・返金をリトライ ● API リトライモデルとまったく同じ
Slide 60
Slide 60 text
#MerpayTechFest 決済 確定済み 決済 確定中 ① バッチによるデータ不整合 修復
Slide 61
Slide 61 text
#MerpayTechFest 返金済み 返金中 キャンセル 済み キャンセル 中 ① バッチによるデータ不整合 修復
Slide 62
Slide 62 text
#MerpayTechFest 整合性を担保する取り組み ① バッチによるデータ不整合 修復 ② 決済・返金 リコンサイル
Slide 63
Slide 63 text
#MerpayTechFest ② 決済・返金 リコンサイル 2つ システム間でデータ 整合性が取 れているかを確認すること
Slide 64
Slide 64 text
#MerpayTechFest ② 決済・返金 リコンサイル アクワイアラー メルペイ イシュアー d払い アクワイアラーとイシュアー間 ● 前日 取引を対象に行う ● 元データを持つイシュアーが正 ● 成功可否、金額、店舗など
Slide 65
Slide 65 text
#MerpayTechFest ② 決済・返金 リコンサイル データ不整合 解決 メルペイに決済データが存在しない場合 新たに決済データを作成する
Slide 66
Slide 66 text
#MerpayTechFest ② 決済・返金 リコンサイル 一時的にメルペイが利用できなくても 決済 可用性を損 ない
Slide 67
Slide 67 text
#MerpayTechFest まとめ
Slide 68
Slide 68 text
#MerpayTechFest 購入代金 支払い 購入代金 支払い お客さま お店 (加盟店) 商品・サービス提供 QRコード決済 メルペイ イシュアー アクワイアラー メルペイ みで完結している決済 流れ
Slide 69
Slide 69 text
#MerpayTechFest 購入代金 支払い 購入代金 支払い お客さま お店 (加盟店) 商品・サービス提供 QRコード決済 メルペイ アクワイアラー d払い イシュアー 決済確定 通知 共通QRコード決済におけるお金 流れ
Slide 70
Slide 70 text
#MerpayTechFest 決済 確定済み 決済 確定中 決済通知 決済確定 ステートマシンを中心としたシステムと リトライセーフなAPI
Slide 71
Slide 71 text
#MerpayTechFest 決済 確定済み 決済 確定中 バッチによる未完了処理 リトライ
Slide 72
Slide 72 text
#MerpayTechFest リコンサイルによる整合性 担保 ● イシュアーを正としてアクワイアラー データ 不整合を修 復する ● 一時的にメルペイが利用できなくても可用性を損 ない