インドネシア決済APIとのインターフェースは?

インドネシア決済APIとのインターフェースは?

I. インドネシア決済市場の概要

東南アジア最大のデジタル経済圏であるインドネシアは、近年、電子決済市場で爆発的な成長を遂げている。最新のデータによると、インドネシアのデジタル決済取引は2025年までに4000億ドルに達すると予想されている。インドネシア市場への参入を希望する企業にとって、現地の主流の決済方法を理解し、それにアクセスすることは極めて重要である。

インドネシア現地の一般的な支払い方法には、以下のようなものがある:

  • 銀行振込マンディリ、BCA、BNIなどの主要銀行が提供するリアルタイム送金。
  • 電子財布: OVO、DANA、リンクアージャなどがシーンを席巻
  • コンビニ決済インドマートとアルファマートの2大コンビニエンスストアは、広範囲をカバーしている。
  • バーチャルアカウント多くのeコマース・プラットフォームで採用されている収集方法。

II.予備準備作業

1.設立主体およびコンプライアンス要件

インドネシアの支払いAPIをドッキングする前に、確認する必要がある:

  • インドネシアでの会社登記完了(PT PMAまたは現地法人)
  • 中央銀行(OJK)が発行する関連金融免許の取得(事業の種類による)
  • PCI DSSコンプライアンス認証(クレジットカード取引の処理に必要)

2.APIドキュメントへのアクセス

インドネシアの主要な決済プロバイダーは、優れた開発者向けドキュメントを提供している:

公式開発者ポータルの例:
- Xendit: developer.xendit.co
- Doku: doku.com/developer
- ミッドトランス:docs.midtrans.com

最初にAPIリファレンス・ドキュメントと技術仕様書の全文を読むことを推奨する。

III.技術ドッキングの詳細な手順

ステップ1:API認証の設定

インドネシアのほとんどの決済ゲートウェイはOAuth 2.0またはBasic Auth認証を使用しています:

# Python の例 - Xendit API 認証
輸入リクエスト

api_key = "your_live_secret_key"
ヘッダー = {
「Authorization": f "Basic {api_key}"、
「Content-Type": "application/json"
}

response = requests.get()
"https://api.xendit.co/available_virtual_account_banks"、
headers=headers)

重要な安全上のヒント
✔️ フロントエンドでAPIキーを公開しないこと!
✔️ 環境変数を使った機密情報の管理
✔️ アクセスクーポンの定期的なローテーション

Step2: ウェブフック設定ガイド

非同期通知を正しく処理することは、核心的な側面である:

// Java Spring Bootサンプル - Midtransの通知処理
ポストマッピング("/payment-notification")
public ResponseEntity handleNotification()
通知ペイロード、@RequestBody
RequestHeader("X-Signature")のStringシグネチャ) {。

// 1. 署名の有効性を検証する。
if(!SignatureTool.verify(payload, signature, merchantKey)){。
return ResponseEntity.status(403).build();
}

// 2.ビジネスロジックの処理...
}

実装されなければならない検証メカニズムには、以下のようなものがある:
HMAC-SHA256 署名検証
IP ホワイトリストフィルタリング(一般的なゲートウェイ IP は事前に設定する必要があります。)
✅ アイデンポテンシー処理(複数の請求につながる重複通知を防止するため)

ステップ3:SDK統合のベストプラクティス

開発効率を高めるためにも、公式SDKの利用を優先することを推奨する:

Node.jsとMidtransの統合例。

const midtransClient = require('midtrans-client');

snap = new midtransClient.Snap({)
isProduction : false、
serverKey : 'YOUR_SERVER_KEY'、
クライアントキー : 'YOUR_CLIENT_KEY'
});

snap.createTransaction(パラメータ)
.then((transaction)=>{
console.log(transaction);
})

各言語のSDGsを入手するためのアドレスは通常、以下の場所にある。

/docs/sdk | /developer-tools | /integration-libraries 

ステップ4:QRIS調和基準へのアクセス

2023年以降、すべての加盟店はQRIS相互運用基準をサポートしなければならない:

呼び出しパラメータの例。

{
「qr_type": "dynamic"、
"金額":150,000。
「merchant_city": "Jakarta".
"販売者名": "YourStoreID"
}

レスポンス結果 フォーカス・フィールドの解析。

- qr_string → Base64エンコードされたQRコード画像データ  
- expiration_time → UTC形式の有効期限タイムスタンプ
- transaction_id → 以降のクエリのための一意な識別子

第四に、テストとオンラインの全過程である。

1️ȃ サンドボックス環境のテストポイント。

テストシナリオ 期待される結果 推奨ツール
金額 境界値 -最低0.01 IDR
-最大10億IDRの処理に成功
ポストマン
ニューマン
同時リクエスト <500ms 応答時間
データ競合の問題はない
JMeter

2️ȃ 生産環境チェックリスト。

☑️ SSL証明書が有効で、TLSバージョンが1.3以上であること。
☑️ フェイルオーバーメカニズムの導入(最低デュアルAZアーキテクチャを推奨)
☑️ BI が義務付けている日次照合計算書機能の検証

V.一般的なエラーコードの簡易チェックリスト

問題が発生した場合、これらの頻度の高いエラーを優先する。

HTTPステータスコード 原因分析 処方
402 支払い_必須 残高不足/限度額超過 アクワイアラーに連絡して限度額を調整する
409 コンフリクト 注文番号の重複(idempotency-keyの重複) リクエスト識別子として新しいUUIDを生成する。
451 UNAVAILABLE_FOR_LEGAL_REASONS BPJSTK/KYC 不備 完全な納税登録証明書の提出

VI.パフォーマンス最適化の提案

高トラフィックシナリオに関する特別な考慮事項。

単一のリクエストではなく、一括クエリ・インターフェイスを使用します。/batch_status?reference_ids=id1,id2)
長時間の接続保持を有効にする(Keep-Alive タイムアウト≥60 秒を推奨)
静的データのローカルキャッシュ(バンクリストレートテーブルなどのTTLは24時間以上に設定)

VII.学習リソースの拡大

上級の開発者は、さらに掘り下げることができる。
→ インドネシア銀行決済システム規則 No21/2019 原文
→ 清算システムにおけるISO 20022メッセージ標準
→ トークン化スキームの技術的実装によるPCI監査範囲の縮小

インドネシア決済API高度機能開発

1.段階的な支払いプログラム

インドネシアのeコマース・プラットフォームは、一般的に分割払い(Cicilan)をサポートしており、技術的な実装ポイントがある:

"`php
// PHP の例 - あくらくステージング・インターフェースの呼び出し
$client = new \GuzzleHttpClient();
$response = $client->post('https://api.akulaku.com/v2/installment', [)
'headers' => [
'X-Api-Key' => env('AKULAKU_KEY')、
'Accept' => 'application/json'
],
'json' => [
'order_id' => uniqid()、
'amount' => 5000000、
'tenor_options' => [3,6,12], //任意分割月数
'customer_phone' => '+62812XXXXXXXXX'
]
]);

// 返されたステージング・オプションを解析する
$plans = json_decode($response->getBody())->available_plans;
“`

主要パラメータの説明
- tenor_options:銀行がサポートする期間数を格納する必要がある(通常、BCAは3/6/12)。
- merchant_fee: 加盟店が負担する、あるいは利用者が支払う金利手数料を明示する必要がある。

2.DANA電子財布の深い統合

DANA API 特別リクエスト処理プロセス:

「ジャバスクリプト
// Node.js DANA OAuth2.0認証の例
const crypto = require('crypto');

function generateDanaSignature(payload, secret) { { 署名の生成(payload, secret)
return crypto.createHmac('sha256', secret)
.update(JSON.stringify(payload))
.digest('hex').
}

const authPayload = {
grant_type:"client_credentials"、
client_id: "YOUR_DANA_MERCHANT_ID"、
timestamp: new Date().toISOString()
};

const signature = generateDanaSignature(authPayload, "YOUR_SECRET");
“`

特に注目:
- タイムスタンプはミリ秒レベルで正確であるべきで、サーバーとの時差は5分を超えてはならない。
- redirect_urlはHTTPSを使用し、ドメイン名はDANAマーチャントバックエンドに登録されている必要があります。

IX.地域別コンプライアンス強化戦略

1.BPJSケセハタン社会保障自動控除

政府医療保険システムとのインターフェースに関する技術仕様:

|フィールド名|タイプ|バリデーション規則
|—|—|—|
|bpjs_number|文字列|13桁+1桁のチェックデジット
|payment_month|date_format`YYYYY-MM`は当月より後にすることはできない。

リクエストメッセージの例:
「xml






0001234567890
150000


“`
重要:このインターフェースは、PJPABライセンスを持つ決済機関のみが利用できる。

2.付加価値税(VAT)のリアルタイム計算

商品カテゴリーによって異なる税率が自動的に適用される:

"`java
public class IndoVatCalculator { インドバット計算機

private static final Map VAT_RATES = Map.of()
"basic_needs", new BigDecimal("0"), //基本的な食事免除額
"premium_goods", new BigDecimal("11"), //2024年の新税率
"digital_services", new BigDecimal("11")
);

public インボイスの計算(注文) {.
BigDecimal rate = VAT_RATES.get(order.getGoodsType());
新しい請求書(
order.getAmount()、
order.getAmount().multiply(rate).divide(100)
);
} }
“`

タックスルールの注意事項
→高級品には10%-40%の付加税が課される。
→ クロスボーダー・デジタル・サービスへのリバース・タックス・メカニズム(RCM)の適用

X. モニタリングと災害復旧モニタリングと災害復旧プログラムの設計

配備を推奨するモニタリング・メトリクスのリスト:

*プロメテウスの構成
“`
scrape_configs.
- ジョブ名:'indonesia_payment'
metrics_path:'/actuator/prometheus'
static_configs.
ターゲット:['gateway-service']。

ルール_ファイル。
- rules/payment_alerts.yml #の定義済みルールには、以下のものがあります。
#api_error_rate >5%
#settlement_delay >4h
“`

マルチライブアーキテクチャに推奨:
“`
ジャカルタ・メインセンター+バタム災害復旧センターの二重展開
⇒ MySQLグループ・レプリケーションがデータを同期させる
⇒ AWS Global Acceleratorがインテリジェントなルートスイッチングを実現

フェイルオーバーは、以下の条件が検出されたときに自動的にトリガーされる:
BCAバンクチャネル連続障害がしきい値を超える
Telkomselのバックボーンの待ち時間が800ミリ秒を超え、15分以上続く。

XI.開発者からのよくある質問 FAQ

Q1:入金後、デモ口座のステータスが更新されないのはなぜですか?
DOKUのPOST通知が正しく処理されていないため、Content-Typeが`application/x-www-form-urlencoded`であることを確認してください。

Q2:BCA銀行の法人IDを取得するにはどうすればよいですか?
SKDPの会社登録書類をBCAに提出する必要があります。

Q3:OVOペイメントで "USER_BLOCKED "というエラーを解決するには?
エンドユーザーアカウントが異常であることを示し、OVOカスタマーサービスホットライン 1500965に連絡するよう顧客に指示する。

XII.バージョンアップに関する注意事項

2024 重大な変更アラート
QRIS基準をv2.1にアップグレード(旧バージョンは6月に廃止予定)
BI はすべての取引について UAIC の一意な監査識別子を義務付ける。
GoPayは順次LinkAja統一プラットフォームに移行する。

各決済プロバイダの技術発表メーリングリストに登録し、最新情報をタイムリーに入手することを推奨する。このガイドの体系的なアプローチに従うことで、開発者はインドネシアの決済エコシステムの統合を効率的に完了することができる。