인도네시아 결제 시스템 샌드박스 환경 및 테스트 구성 방법

인도네시아 결제 시스템 샌드박스 환경 및 테스트 구성 방법론 가이드

I. 인도네시아 결제 시스템 샌드박스 개요

동남아시아에서 가장 큰 디지털 경제 국가 중 하나인 인도네시아는 결제 시스템이 빠르게 발전하고 있습니다. 핀테크 혁신을 촉진하기 위해 인도네시아 금융서비스청(OJK)과 중앙은행(BI)은 기업들이 통제된 조건에서 혁신적인 결제 솔루션을 테스트할 수 있는 결제 시스템 샌드박스 환경을 구축했습니다.

샌드박스 핵심 가치이는 규정 준수 위험 감소, 제품 반복 주기 가속화, 사용자 경험 최적화의 세 가지 영역에 반영됩니다. 실제 거래 환경을 시뮬레이션하되 실제 자금 흐름을 분리함으로써 기업은 기술의 실현 가능성을 안전하게 검증할 수 있습니다.

II. 인도네시아 결제 시스템 액세스 신청 조건 및 절차

2.1 기본 자격 요건

신청 기관은 다음 조건을 충족해야 합니다:

  • 인도네시아에 법적으로 등록된 금융 기관 또는 허가된 핀테크 회사
  • 최소 10억 루피아(미화 약 7만 달러)의 등록 자본금 보유
  • 자금 세탁 방지(AML) 및 고객 신원 확인(KYC) 프로세스가 잘 확립되어 있습니다.
  • PCI DSS 레벨 3+ 보안 표준을 준수하는 IT 인프라

2.2 API 인터페이스 문서 액세스

개발자는 다음 채널을 통해 최신 API 설명서에 액세스할 수 있습니다:

  1. BI-SPSS(시스템 펨바야란 리텔 나셔널) 공식 웹사이트 다운로드 영역
  2. OJK 핀테크 오피스 오프라인 신청서
  3. 파트너 샌드박스 제공업체 포털(예: Doku, Midtrans 등)

인터페이스 버전이 프로덕션 환경과 일관성을 유지하려면 자료를 구할 때 공식 채널을 우선적으로 사용하는 것이 좋습니다.

로컬라이제이션 테스트 환경을 구축하는 단계

3.1 Java/Python 개발 샘플 코드 구조 분석

// Java 예제: 기본 트랜잭션 요청 클래스 구조 
공용 클래스 IndoPaymentRequest {
private String merchantCode; //Merchant ID (MID)
private String transactionId; //BI 형식 TRX2023MMDDHHmmssSSS 따르기
비공개 BigDecimal 금액.
private Currency 통화 = Currency.getInstance("IDR");

@NotNull
크기(최소=16,최대=19)
private String customerPAN; //카드 번호는 BIN 규칙을 준수해야 합니다.

// 겟터 및 세터 메서드 생략...
}

파이썬 개발자는 부동 소수점 정밀도를 다룰 때 특별한 주의를 기울여야 합니다:

# 파이썬 금액 처리 모범 사례 예시  
십진수 가져오기에서 십진수

def format_idr_amount(value).
반환 Decimal(str(value)).quantize(Decimal('0.00'))

XML 메시지 특수 요구 사항 분석(양식)

필드 이름 필수 필드 서식 지정 비고
<merchant_id> be AN20 문자 OJK에서 할당하는 고유 식별자
<trx_time> be 시간대는 명시적으로 선언해야 합니다. yyyy-MM-ddTHH:mm:ssZ+07:00
알고리즘은 SHA256-RSA2048 서명 길이 고정 512바이트 지원

참고: 모든 XML 노드 이름은 소문자로 표기해야 합니다.

SSL 인증서 양방향 인증 구성 포인트(강조)

1) TLSv1_2 이상 프로토콜 버전 채택

openssl s_client -connect sandbox.bi.go.id:443 -tls1_2  

2) 인증서 체인에는 다음 CA가 포함되어야 합니다:

  • DigiCert 글로벌 루트 CA
  • 루트 인증 기관 위탁

3) CRL 확인 주기를 4시간 이내로 설정합니다.

일반적인 오류SSL핸드셰이크 예외소진 단계:
키스토어(JKS/p12)에 전체 인증서 체인이 포함되어 있는지 확인 ② 서버 SNI 구성 확인 ③ 현지 시간 동기화 상태 확인

QRIS 표준 테스트 케이스 디자인 템플릿(양식)

사용 사례 번호 Q001-TC003

시나리오 설명 소비자가 정적 QR 코드를 스캔하여 결제하는 경우
사전 요구 사항인 판매자가 QRIS 서비스를 열었고 단말기가 온라인 상태여야 합니다.

절차.

[소비자] 제휴 은행 앱의 코드 스캔 기능 실행 → [시스템] QR코드 파싱 및 금액 표시 → [사용자] 결제 확인 및 PIN 입력 → [매입자] BI 청산센터에 승인 요청 전송 → [발행자] 승인 응답 코드 "00"을 반환합니다.

예상 결과.

매입자가 청산 알림을 받는 시간 ≤ 5초, 판매자 관리 백오피스와 거래 상태 동기화 ≤ 30초, ISO20022 표준에 따른 정산 파일 생성.

비정상적인 흐름 처리.
응답 코드 '51'(잔액 부족)이 발생하면 지능형 라우팅을 트리거하여 연결된 다른 계정으로 전환하거나 사용자에게 충전하라는 메시지를 표시해야 합니다.

압력 테스트 매개변수에 대한 권장 값입니다.

15분 동안 동시 사용자 수 500명 이상;
네트워크 지연 시간 시뮬레이션 ≤ 800ms;
데이터베이스 연결 풀 ≥ 50개의 활성 연결;

성능 달성 지표 평균 응답 시간 <1200ms 성공률 ≥99%.

IV. 자동화된 규제 보고서 생성을 위한 팁 주요 필드 매핑 관계.

원시 로그 필드 → 규제 보고서 열 이름 상호 참조:

트랜잭션_날짜→TGL_TRANSAKSI(Dd/MM/yyyy 형식), 고객_id→NIK_KT_PEMBELI(암호화 저장), 정산_금액→NILAI_SETEL_IDR 천 단위 구분자).

V. 출시 전 규정 준수 체크리스트의 중요 항목에 표시하기:

모든 BI-MDR 비율 계산 검증 완료 □ PCI ASV 검사 통과 및 규정 준수 증명 획득 □ 스토리지 등급 민감 정보 암호화 솔루션에 대한 OJK 사전 검증 통과 □ 최소 3회 이상의 UAT 라운드 로빈 테스트 수행.

VI. 인도네시아 결제 샌드박스 테스트 데이터 관리 사양

6.1 테스트 계정 분류 시스템

표준 테스트 계정세 가지 카테고리가 있습니다:

  • 기본 인증 계정기본 트랜잭션 흐름 유효성 검사

    • 고정 잔액 계정(잔액은 항상 5백만 루피아로 표시됨)
    • 잔액 0 계정(필수 트리거 실패 시나리오)
  • 리스크 관리를 위한 전용 계정

    • 고빈도 거래 플래그가 지정된 계좌(하루 거래 한도 20건)
    • AML 모니터링 계정(의심스러운 거래 패턴 사전 설정)
  • 특별 운영 계정
    통합 QR코드 결제용 지갑
    해외 송금 데모 계좌(USD/IDR 이중 통화 지원)

API 응답 코드 상호 참조 개발을 위한 필수 참고 자료입니다:

코딩 영어 설명 현지화된 처리 권장 사항
0000 성공 "트랜잭시 베하실"을 표시합니다.
1003 잘못된 판매자 ID cMID 등록 상태 확인→재시도→수동으로 전환
은행이 시간 초과 기간 내에 응답하지 않음

자바/파이썬 예외 처리 모범 사례 예시:

// Java용 지능형 오류 처리 프레임워크 
시도 {
IndoPaymentResponse resp = 게이트웨이.execute(req);
} catch (BIStandardException e) {
switch(e.getErrorCode()) {
case "9101": //시스템 유지보수 진행 중
logger.warn("성능 저하 모드 진입");;
fallbackService.process(req);
break;
기본값입니다.
새로운 PaymentRetryableException(e)을 던집니다;
}
}

Python 개발자는 비동기 콜백에 대한 서명 확인에 특히 주의를 기울여야 합니다:

# 파이썬 콜백 시그널 검사 구현 예제 
def verify_bi_callback(data, signature).
public_key = load_official_public_key()
digest = hashlib.sha256(
f"{데이터['txn_id']}{데이터['금액']}".encode()
).digest()

모의 서버 구성을 위한 황금률

  1. 지연 시뮬레이션 규칙은 실제 네트워크 조건과 일치해야 합니다.
// 와이어 모의 자카르타 지역 지연 시간 구성 시뮬레이션 
{
"request": {"method":"POST", "urlPath":"/api/vqr"},

}