メインコンテンツへスキップ

テストモード

テスト API キーを使用して、実際の支払い処理や本番データに影響を与えることなく、統合を安全にテストします。

概要

Omise はテスト環境と本番環境を分離しており、テストモードを使用して統合を検証してから本番で実際のお金を処理します。

テストモードの機能:

  • 🔐 個別 API キー - テストキーは pkey_test_ 及び skey_test_ で始まる
  • 💳 テストカード - テストシナリオ用の特別なカード番号
  • 💰 実際のお金はなし - すべてのトランザクションはシミュレート
  • 🔄 完全な API アクセス - 本番環境のすべての機能をテスト
  • 📊 テストダッシュボード - テストトランザクションを別に表示

API キー

テストキー vs ライブキー

キータイププレフィックス環境実際の取引
テスト公開キーpkey_test_テスト❌ いいえ
テストシークレットキーskey_test_テスト❌ いいえ
ライブ公開キーpkey_live_本番✅ はい
ライブシークレットキーskey_live_本番✅ はい

テストキーを取得

  1. Omise ダッシュボード にログイン
  2. 設定API キー に移動
  3. テストキーをコピー(pkey_test_ 及び skey_test_ で始まる)
// テストモード設定
const omise = require('omise')({
publicKey: 'pkey_test_5xb...', // テスト公開キー
secretKey: 'skey_test_5xb...' // テストシークレットキー
});
API キーをコミットしないこと

API キーをバージョン管理にコミットしないでください。環境変数を使用:

OMISE_PUBLIC_KEY=pkey_test_...
OMISE_SECRET_KEY=skey_test_...

テストカード

成功シナリオ

カード番号ブランド結果
4242424242424242Visa成功(3DS なし)
5555555555554444Mastercard成功(3DS なし)
3566111111111113JCB成功(3DS なし)

有効期限: 任意の将来の日付(例:12/25) CVV: 任意の3桁(例:123)

3D Secure テストカード

カード番号ブランド3DS 動作
4000000000003220Visa3DS 必須、認証成功
4000000000009235Visa3DS 必須、認証失敗
5200000000001096Mastercard3DS 必須、成功

拒否シナリオ

カード番号エラータイプ
4000000000000002カード拒否
4000000000009995資金不足
4000000000000069期限切れカード
4000000000000127無効な CVC
4000000000000119処理エラー

特定金額テスト

任意のテストカードでこれらの金額を使用してシナリオをシミュレート:

金額結果
100.00成功
100.02カード拒否
100.05資金不足
100.41処理エラー

支払い方法をテスト

デジタルウォレット(テストモード)

// テストウォレット支払いを作成
const source = await omise.sources.create({
type: 'truemoney',
amount: 50000,
currency: 'THB'
});

// テストモードでは成功/失敗をシミュレート
const charge = await omise.charges.create({
amount: 50000,
currency: 'THB',
source: source.id
});

// テストモードでは請求がすぐに完了

銀行送金(テストモード)

// モバイルバンキングテスト
const source = await omise.sources.create({
type: 'mobile_banking_scb',
amount: 100000,
currency: 'THB'
});

// テストモードは銀行承認をシミュレート
const charge = await omise.charges.create({
amount: 100000,
currency: 'THB',
source: source.id,
return_uri: 'https://yourdomain.com/callback'
});

// テストではリダイレクトにテストページが表示される

QR 支払い(テストモード)

// PromptPay テスト
const source = await omise.sources.create({
type: 'promptpay',
amount: 100000,
currency: 'THB'
});

// テストモードで QR コード生成
const qrCode = source.scannable_code.image.download_uri;

// 請求ステータスはテストダッシュボードで手動更新可能

テストダッシュボード

テストデータにアクセス:https://dashboard.omise.co/test/

テストダッシュボード機能:

  • すべてのテストトランザクションを表示
  • 支払い方法別にフィルター
  • Webhook 配信をテスト
  • 請求ステータスを手動更新
  • テストレポートを生成

手動請求更新

テストモードでは請求ステータスを手動で更新できます:

  1. テストダッシュボードに移動
  2. テスト請求を検索
  3. 「ステータスを変更」をクリック
  4. 選択:成功、失敗、期限切れ

Webhook をテスト

ローカル Webhook テスト

// ngrok でローカルに Webhook をテスト
// 1. ngrok を起動:ngrok http 3000
// 2. ダッシュボードに Webhook URL を追加:https://xxx.ngrok.io/webhooks

app.post('/webhooks/omise', (req, res) => {
const event = req.body;

console.log('テスト webhook を受信:', event.key);
console.log('請求ステータス:', event.data.status);

res.sendStatus(200);
});

テスト Webhook をトリガー

テストダッシュボードから:

  1. テスト請求を選択
  2. 「Webhook を送信」をクリック
  3. イベントタイプを選択
  4. Webhook がエンドポイントに送信

環境変数

# .env ファイル
NODE_ENV=development

# 開発用テストキー
OMISE_PUBLIC_KEY=pkey_test_5xb...
OMISE_SECRET_KEY=skey_test_5xb...

# 本番用ライブキー(別ファイル)
# OMISE_PUBLIC_KEY=pkey_live_5xb...
# OMISE_SECRET_KEY=skey_live_5xb...
// 環境に基づいて読み込む
const omise = require('omise')({
publicKey: process.env.OMISE_PUBLIC_KEY,
secretKey: process.env.OMISE_SECRET_KEY
});

// モード確認
const isTestMode = process.env.OMISE_SECRET_KEY.startsWith('skey_test_');
console.log('実行モード:', isTestMode ? 'テスト' : 'ライブ');

テストチェックリスト

本番運用前に

  • テストカードですべての支払いフローがテスト済み
  • 3D Secure フローがテスト及び機能中
  • Webhook ハンドリングがテスト及び確認済み
  • エラーシナリオが適切に処理されている
  • 返金プロセスがテスト済み
  • モバイルレスポンシブデザインがテスト済み
  • すべての支払い方法が実機でテスト済み
  • セキュリティレビューが完了
  • テストキーをライブキーに置き換えた
  • 本番環境が設定済み

一般的なテストシナリオ

1. 成功した支払い

// 成功テストカードを使用
const token = await createToken('4242424242424242', '12/25', '123');

const charge = await omise.charges.create({
amount: 10000,
currency: 'THB',
card: token
});

assert(charge.status === 'successful');

2. カード拒否

// 拒否テストカードを使用
const token = await createToken('4000000000000002', '12/25', '123');

try {
const charge = await omise.charges.create({
amount: 10000,
currency: 'THB',
card: token
});
} catch (error) {
assert(error.message.includes('declined'));
}

3. 3D Secure フロー

// 3DS テストカードを使用
const token = await createToken('4000000000003220', '12/25', '123');

const charge = await omise.charges.create({
amount: 10000,
currency: 'THB',
card: token,
return_uri: 'https://yourdomain.com/callback'
});

// 3DS 用の authorize_uri が必要
assert(charge.authorize_uri !== null);

// テスト 3DS ページで成功/失敗を選択可能

ベストプラクティス

1. すべての開発でテストモードを使用

if (process.env.NODE_ENV === 'production' && process.env.OMISE_SECRET_KEY.startsWith('skey_test_')) {
throw new Error('危険:本番環境でテストキーを使用しています!');
}

2. エラーハンドリングをテスト

// 様々な失敗シナリオをテスト
const testCases = [
{ card: '4000000000000002', expected: 'card_declined' },
{ card: '4000000000009995', expected: 'insufficient_funds' },
{ card: '4000000000000069', expected: 'expired_card' }
];

for (const test of testCases) {
const token = await createToken(test.card);
// エラーハンドリングを確認
}

3. テストと本番データを分離

// テストと本番に異なるデータベース
const dbName = process.env.NODE_ENV === 'production'
? 'myapp_production'
: 'myapp_test';

const db = mongoose.connect(`mongodb://localhost/${dbName}`);

4. テストデータを定期的にクリア

テストデータは課金に影響しませんが、きれいに保つ:

  • 古いテストトランザクションをアーカイブ
  • テスト顧客データをクリア
  • テスト Webhook をリセット

FAQ

テストトランザクションはお金がかかりますか?

いいえ。テストモードは完全に無料です。テストトランザクションへの課金はありません。

テストモードで実際のカードを使用できますか?

いいえ。テストモードではテストカード番号のみを使用してください。実際のカード番号は拒否されます。

テストモードからライブモードに切り替えるにはどうしますか?

テスト API キーをライブ API キーで置き換えます。それだけです。コードは同じままです。

// 以下から:
OMISE_SECRET_KEY=skey_test_...
// 以下へ:
OMISE_SECRET_KEY=skey_live_...
デプロイせずに Webhook をテストできますか?

はい。ngrok または同様のツールを使用してローカルホストを公開します:

ngrok http 3000
// webhook 設定で ngrok URL を使用
テストデータはどうなりますか?

テストデータは本番データから分離されています。レポート、課金、決済に影響しません。いつでもテストデータを削除できます。

関連リソース

次のステップ

  1. テスト API キーを取得
  2. 支払いフローを実装
  3. テストカードでテスト
  4. すべての支払い方法をテスト
  5. Webhook をテスト
  6. 本番運用チェックリストを確認
  7. ライブキーに切り替え
  8. 本番運用を開始!