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などの作成
- セキュリティ: 生のカードデータを受信しない
この分離により、機密性の高いカードデータがサーバーやメイン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": [...]
}
}
決済フロー
標準的なカード決済フロー
典型的なカード決済の仕組み:
ステップバイステップ:
- 顧客がカード情報を入力します(チェックアウトページで)
- ブラウザがカードデータを送信します(Omise Vaultに、public keyを使用)
- Omiseがtokenを返します(カードを表す)
- ブラウザがtokenを送信します(サーバーに、カードデータではなく!)
- サーバーがchargeを作成します(secret key + tokenを使用)
- Omiseが決済を処理します(銀行と)
- 銀行が承認(または拒否)します
- Omiseが結果を返します(サーバーに)
- サーバーが注文を更新し、確認を表示します
代替決済方法フロー
PromptPayやモバイルバンキングなどの場合:
主な違い:
- Tokenの代わりにsourceを作成
- 顧客がアプリ外で決済を完了
- 決済完了時にwebhookを受信
- 時間内に完了しない場合、決済が期限切れになる可能性
データフローとセキュリティ
セキュアに保たれるもの
セキュリティ原則:
- ✅ カードデータはOmise Vaultに直接送信(サーバーには送信しない)
- ✅ Tokenは単一使用で時間制限付き
- ✅ Secret keyはサーバーに保持
- ✅ すべての通信はHTTPS経由
- ✅ PCI準拠のインフラストラクチャ
保存すべきもの
保存すべきもの:
- ✅ Charge ID
- ✅ Customer ID
- ✅ 注文情報
- ✅ Metadata
- ❌ カード番号
- ❌ CVVコード
- ❌ 完全なカード詳細
環境
Test Mode
- シミュレートされたトランザクション
- 実際のお金なし
- テストカードと決済方法
- 独立したダッシュボード
_test_プレフィックス付きのAPI key
Live Mode
- 実際のトランザクション
- 実際のお金が処理される
- 実際のカードと決済方法
- 本番ダッシュボード
_test_プレフィックスなしのAPI key
資金の流れ
決済プロセス
保留期間:
- タイ: 7日
- 日本: 21日
- シンガポール: 7日
- マレーシア: 7日
- Test Mode: 即時(テスト用)
保留期間は、マーチャント契約とアカウント履歴によって異なる場合があります。特定の決済スケジュールについては、ダッシュボードを確認するか、サポートにお問い合わせください。
なぜ保留期間があるのか?
- チャージバックからの保護
- refundの処理時間
- 業界標準の慣行
手数料
Omiseは成功したトランザクションに手数料を請求します:
- Charge金額から差し引かれます
- 決済方法によって異なります
- ダッシュボードとAPIで表示されます
- セットアップ料金や月額料金はありません
高度なコンセプト
事前承認(Auth & Capture)
今すぐ決済を承認し、後でキャプチャ:
// ステップ1: 承認のみ
omise.charges.create({
amount: 100000,
currency: 'thb',
card: token,
capture: false // まだキャプチャしない
});
// ステップ2: 後でキャプチャ(7日以内)
omise.charges.capture('chrg_test_123');
使用例:
- ホテル予約