テストモード
テスト API キーを使用して、実際の支払い処理や本番データに影響を与えることなく、統合を安全にテストします。
概要
Omise はテスト環境と本番環境を分離しており、テストモードを使用して統合を検証してから本番で実際のお金を処理します。
テストモードの機能:
- 🔐 個別 API キー - テストキーは pkey_test_ 及び skey_test_ で始まる
- 💳 テストカード - テストシナリオ用の特別なカード番号
- 💰 実際のお金はなし - すべてのトランザクションはシミュレート
- 🔄 完全な API アクセス - 本番環境のすべての機能をテスト
- 📊 テストダッシュボード - テストトランザクションを別に表示
API キー
テストキー vs ライブキー
| キータイプ | プレフィックス | 環境 | 実際の取引 |
|---|---|---|---|
| テスト公開キー | pkey_test_ | テスト | ❌ いいえ |
| テストシークレットキー | skey_test_ | テスト | ❌ いいえ |
| ライブ公開キー | pkey_live_ | 本番 | ✅ はい |
| ライブシークレットキー | skey_live_ | 本番 | ✅ はい |
テストキーを取得
- Omise ダッシュボード にログイン
- 設定 → API キー に移動
- テストキーをコピー(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_...
テストカード
成功シナリオ
| カード番号 | ブランド | 結果 |
|---|---|---|
| 4242424242424242 | Visa | 成功(3DS なし) |
| 5555555555554444 | Mastercard | 成功(3DS なし) |
| 3566111111111113 | JCB | 成功(3DS なし) |
有効期限: 任意の将来の日付(例:12/25) CVV: 任意の3桁(例:123)
3D Secure テストカード
| カード番号 | ブランド | 3DS 動作 |
|---|---|---|
| 4000000000003220 | Visa | 3DS 必須、認証成功 |
| 4000000000009235 | Visa | 3DS 必須、認証失敗 |
| 5200000000001096 | Mastercard | 3DS 必須、成功 |
拒否シナリオ
| カード番号 | エラータイプ |
|---|---|
| 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 配信をテスト
- 請求ステータスを手動更新
- テストレポートを生成
手動請求更新
テストモードでは請求ステータスを手動で更新できます:
- テストダッシュボードに移動
- テスト請求を検索
- 「ステータスを変更」をクリック
- 選択:成功、失敗、期限切れ
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 をトリガー
テストダッシュボードから:
- テスト請求を選択
- 「Webhook を送信」をクリック
- イベントタイプを選択
- 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 を使用
テストデータはどうなりますか?
テストデータは本番データから分離されています。レポート、課金、決済に影響しません。いつでもテストデータを削除できます。
関連リソー ス
- テストカード - 完全なテストカードリスト
- Webhook テスト - Webhook テストガイド
- 本番運用 - 本番チェックリスト
次のステップ
- テスト API キーを取得
- 支払いフローを実装
- テストカードでテスト
- すべての支払い方法をテスト
- Webhook をテスト
- 本番運用チェックリストを確認
- ライブキーに切り替え
- 本番運用を開始!