Omiseの仕組み
Omiseのコアコンセプトを理解することで、セキュアで効率的な決済統合を構築できます。token、charge、source、決済フローについて学びます。
概要
Omiseは、企業が機密性の高いカードデータを直接扱うことなく、セキュアに決済を受け付けることができるPCI認証済み決済ゲートウェイです。tokenベースのアーキテクチャを使用することで、Omiseはカード情報をサーバーから除外し、セキュリティを維持しながらPCI準拠の負担を軽減します。
コアコンセプト
1. Payment Gateway アーキテクチャ
Omiseはアプリケーションと決済プロセッサーの間に位置し、以下を処理します:
- Tokenization: 機密データをセキュアなtokenに変換
- Authorization: 決済の検証と承認
- Settlement: 顧客からアカウントへの資金移動
- Reconciliation: すべての取引の追跡とレポート
2. 2サーバーモデル
Omiseはセキュリティのために2つの独立したAPIエンドポイントを使用します:
Vault Server (vault.omise.co)
- 用途: 機密性の高いカード会員データを処理
- 使用する鍵: Public key
- 操作: tokenとsourceの作成
- セキュリティ: カードデータをメインAPIから隔離
API Server (api.omise.co)
- 用途: その他すべての操作を処理
- 使用する鍵: Secret key
- 操作: charge、refund、transferなどの作成
- セキュリティ: 生のカードデータを受信しない
なぜ2つのサーバー?
この分離により、機密性の高いカードデータがサーバーやメインAPIに触れることがないため、PCI準拠の要件が大幅に軽減されます。
3. API Key
Omiseは3種類のAPI keyを使用します:
| Keyタイプ | 形式 | 使用用途 | クライアント側で安全? |
|---|---|---|---|
| Public Key | pkey_test_... | Tokenization | ✅ はい |
| Secret Key | skey_test_... | すべての操作 | ❌ いいえ(サーバーのみ) |
| Chain Key | ck_test_... | サブマーチャント | ❌ いいえ(サーバーのみ) |
4. 決済オブジェクト
Token
Tokenは決済方法(通常はカード)を表し、chargeの作成に一度だけ使用できます。
特性:
- 単一使用のみ
- 作成後30分間有効
- tokenizeされたカード情報を含む
- Public keyで作成
例:
{
"object": "token",
"id": "tokn_test_5xp6ca4dtzx5cskm9mk",
"used": false,
"card": {
"brand": "Visa",
"last_digits": "4242",
"expiration_month": 12,
"expiration_year": 2027
}
}
Charge
Chargeは顧客の決済方法への支払いリクエストを表します。
特性:
- Token、source、またはcustomerカードで作成
- 承認(後でキャプチャ)または即座にキャプチャ可能
- カスタム追跡用のmetadataをサポート
- 成功時にtransactionを生成
例:
{
"object": "charge",
"id": "chrg_test_5xp6ccfmecft4zxrb7p",
"amount": 100000,
"currency": "thb",
"status": "successful",
"paid": true,
"authorized": true,
"captured": true
}
Chargeステータス:
pending- 決済待ち(非同期決済方法の場合)successful- 決済完了failed- 決済拒否または失敗expired- 決済期限切れ(非同期決済方法)
Source
Sourceは、PromptPay、モバイルバンキング、QRコードなどの代替決済方法を表します。
特性:
- 特定の決済方法用に作成
- 単一使用または再利用可能
- 多くの場合、決済指示が含まれる(QRコード、銀行詳細)
- 完了するために顧客のアクションが必要
例:
{
"object": "source",
"id": "src_test_5xp6ccfmecft4zxrb7p",
"type": "promptpay",
"flow": "redirect",
"amount": 100000,
"currency": "thb",
"scannable_code": {
"image": {
"download_uri": "https://...",
"type": "qr_code"
}
}
}
Customer
Customerオブジェクトは、継続的なchargeのための決済方法を保存します。
特性:
- 複数のカードを保存可能
- サブスクリプション課金を有効化
- カスタム追跡用のmetadataをサポート
- customerに紐付け られたカードは繰り返しchargeが可能
例:
{
"object": "customer",
"id": "cust_test_5xp6ccfmecft4zxrb7p",
"email": "customer@example.com",
"description": "John Doe",
"cards": {
"total": 1,
"data": [...]
}
}