インドネシア決済システムのサンドボックス環境とテスト構成方法
インドネシア決済システム サンドボックス環境とテスト構成方法ガイド
I. インドネシア決済システム・サンドボックスの概要
東南アジア最大のデジタルエコノミーのひとつであるインドネシアでは、決済システムが急速に進化している。フィンテックのイノベーションを促進するため、インドネシア金融庁(OJK)と中央銀行(BI)は、企業が管理された条件下で革新的な決済ソリューションをテストできる決済システムのサンドボックス環境を立ち上げた。
サンドボックスのコア・バリューこれは、コンプライアンス・リスクの低減、製品イテレーション・サイクルの加速化、ユーザー・エクスペリエンスの最適化という3つの分野に反映されている。実際の取引環境をシミュレートし、実際の資金の流れを分離することで、企業は技術の実現可能性を安全に検証することができる。
II. インドネシア決済システムへのアクセス申請条件と手続き
2.1 基本的な資格要件
申請団体は以下の条件を満たす必要がある:
- インドネシアで合法的に登録された金融機関または認可を受けたフィンテック企業
- 最低登録資本金が10億ルピア(約7万米ドル)であること。
- マネーロンダリング防止(AML)および顧客識別(KYC)プロセスが確立されている。
- PCI DSSレベル3+のセキュリティ基準に準拠したITインフラストラクチャ
2.2 API インタフェース・ドキュメントへのアクセス
開発者は以下のチャンネルから最新のAPIドキュメントにアクセスできる:
- BI-SPSS (Sistem Pembayaran Ritel Nasional) 公式ウェブサイト ダウンロードエリア
- OJKフィンテック・オフィス オフライン・アプリケーション
- パートナー・サンドボックス・プロバイダー・ポータル(Doku、Midtransなど)
インターフェイスのバージョンが本番環境と一致していることを保証するため、資料の入手には公式チャンネルを優先することをお勧めします。
ローカリゼーション・テスト環境構築のステップ
3.1 Java/Python開発サンプルコードの構造解析
// Javaの例:基本的なトランザクション・リクエスト・クラスの構造
public class IndoPaymentRequest { インドペイメントリクエスト
private String merchantCode; //マーチャントID (MID)
private String transactionId; //BIフォーマットに従う TRX2023MMDDHHmmssSSS
private BigDecimal amount.
private Currency currency = Currency.getInstance("IDR");
NotNull
サイズ(min=16,max=19)
private String customerPAN; //カード番号はBINルールに準拠する必要があります。
// ゲッター&セッター・メソッドは省略...
}
Python開発者は、浮動小数点精度の扱いに特に注意を払うべきである:
# Python 金額処理のベストプラクティスの例
from decimal インポート Decimal
def format_idr_amount(value).
return Decimal(str(value)).quantize(Decimal('0.00'))
XMLメッセージ特殊要件分析(フォーム)
フィールド名 | 必須フィールド | フォーマッティング | 備考 |
---|---|---|---|
<商人ID | であります | AN20文字 | OJKによって割り当てられた一意の識別子 |
<trx_time> | であります | yyyy-MM-ddTHH:mm:ssZ+07:00 タイムゾーンは明示的に宣言する必要があります。 | |
注:XMLノード名はすべて小文字でなければなりません。
SSL証明書の双方向認証の設定ポイント(強調)
1) TLSv1_2以上のプロトコルバージョンの採用
openssl s_client -connect sandbox.bi.go.id:443 -tls1_2
2) 証明書チェーンには以下のCAが含まれていなければならない:
- DigiCert グローバルルート CA
- Entrustルート認証局
3) CRLチェック頻度を4時間以内に設定
コモンエラーSSLHandshakeException
疲労困憊のステップ:
鍵ストア(JKS/p12)に完全な証明書チェーンが含まれていることを確認する。
QRIS標準テストケース設計テンプレート(書式)
ユースケース番号 Q001-TC003
シナリオ説明 消費者は静的なQRコードをスキャンして支払いを行う。 | |
前提条件として、加盟店がQRISサービスを開始し、端末がオンラインであること。 |
手続き
[消費者]が提携銀行のAPPのコードスキャン機能を開く → [システム]がQRコードを解析し、金額を表示する → [利用者]が支払いを確認し、PINを入力する → [アクワイアラー]がBIクリアリングセンターに承認要求を送信する → [発行者]が承認応答コード「00」を返す。
期待される結果
アクワイアラーが清算通知を受け取るまでの時間≦5秒、加盟店管理バックオフィスへの取引ステータスの同期≦30秒、ISO20022標準に沿った決済ファイルの生成。
異常なフロー処理。
レスポンスコード "51"(残高不足)が発生した場合、インテリジェント・ルーティングをトリガーして、他の関連口座に切り替えるか、ユーザーに上乗せを促すべきである。
圧力試験パラメータの推奨値。
同時使用者 ≥ 500 TPS、15分間;
ネットワーク遅延シミュレーション≦800ms;
データベース接続プール ≥ 50 アクティブな接続;
パフォーマンス達成指標 平均応答時間<1200ms 成功率≥99%.
IV.規制報告書自動作成のヒント 主要フィールドのマッピング関係。
生ログフィールド → 規制レポートカラム名 クロスリファレンス:
transaction_date→TGL_TRANSAKSI(Dd/MM/yyyyフォーマット);customer_id→NIK_KT_PEMBELI(暗号化されたストレージ);settlement_amount→NILAI_SETEL_IDR千区切り)。
V.発売前のコンプライアンスチェックリストの重要項目に印をつける:
ストレージクラスの機密情報暗号化ソリューションの OJK 事前適格性確認を受領 □ UAT ラウンドロビンテストを少なくとも 3 回実施。
VI.インドネシア決済サンドボックス・テストデータ管理仕様書
6.1 テスト口座分類システム
標準テスト口座3つのカテゴリーがある:
-
基本検証口座基本的なトランザクション・フローの検証
- 固定残高口座(残高は常に500万ルピア)
- ゼロ・バランス口座(強制トリガー失敗シナリオ)
-
リスク管理専用口座
- 高頻度取引フラグ付き口座(1日20取引まで)
- AMLモニタリング口座(疑わしい取引パターンをプリセット)
-
特別営業勘定
QRコード決済用ウォレット
クロスボーダー送金デモ口座(USD/IDR二通貨対応)
APIレスポンスコードクロスリファレンス 開発に必須のリファレンス:
コーディング | 英語での説明 | 局所処理の推奨 |
---|---|---|
0000 | 成功 | Transaksi berhasil "を表示します。 |
1003 | 無効な加盟店ID | cMIDの登録状況を確認→リトライ→マニュアルに切り替える |
銀行がタイムアウト時間内に応答しない |
Java/Pythonの例外処理のベストプラクティスの例:
// Java用インテリジェント・エラー処理フレームワーク
を試す。
IndoPaymentResponse resp = gateway.execute(req);
} catch (BIStandardException e) {.
switch(e.getErrorCode()){。
case "9101": //システムメンテナンス中
logger.warn("Entering degraded mode");;
fallbackService.process(req);
ブレイク
デフォルトだ。
throw new PaymentRetryableException(e);
}
}
Python開発者は、非同期コールバックの署名検証に特に注意を払うべきである:
# Pythonコールバック符号チェック実装例
def verify_bi_callback(data, signature).
public_key = load_official_public_key()
digest = hashlib.sha256()
f"{data['txn_id']}{data['amount']}".encode()
).digest()
モック・サーバー設定の黄金律
- 遅延シミュレーションのルールは、実際のネットワーク状況と一致しなければならない
// WireMockはジャカルタ地域のレイテンシー構成をシミュレートする。
{
"request": {"method": "POST", "urlPath":"/api/vqr"}、
}