Среда песочницы платежной системы Индонезии и методы конфигурирования тестов
Руководство по методике настройки среды и тестирования песочницы платежной системы Индонезии
I. Обзор индонезийской "песочницы" платежных систем
Индонезия, одна из крупнейших цифровых экономик в Юго-Восточной Азии, имеет быстро развивающуюся платежную систему. Для продвижения финтех-инноваций Управление финансовых услуг Индонезии (OJK) и Центральный банк (BI) запустили "песочницу" платежной системы, которая позволяет компаниям тестировать инновационные платежные решения в контролируемых условиях.
Основные ценности песочницыЭто отражается в трех областях: снижение риска соответствия нормативным требованиям, ускорение цикла итерации продукта и оптимизация пользовательского опыта. Моделируя реальную торговую среду, но изолируя реальный поток средств, компании могут безопасно проверить целесообразность применения технологии.
II. Условия и процедуры подачи заявки на доступ к индонезийской платежной системе
2.1 Основные квалификационные требования
Организации, подающие заявки, должны соответствовать следующим условиям:
- Легально зарегистрированные финансовые учреждения или лицензированные финтех-компании в Индонезии
- Иметь минимальный уставной капитал в размере 1 миллиарда рупий (около 70 000 долларов США)
- Имеют хорошо отлаженный процесс борьбы с отмыванием денег (AML) и идентификации клиентов (KYC)
- ИТ-инфраструктура, соответствующая стандартам безопасности PCI DSS уровня 3+
2.2 Доступ к документации интерфейса API
Разработчики могут получить доступ к последней версии документации по API по следующим каналам:
- BI-SPSS (Sistem Pembayaran Ritel Nasional) Официальный сайт Зона загрузки
- Офлайн-заявка на участие в конкурсе
- Портал поставщиков партнерской песочницы (например, Doku, Midtrans и т. д.)
Рекомендуется отдавать предпочтение официальным каналам получения материалов, чтобы убедиться, что версия интерфейса соответствует производственной среде.
Шаги по созданию тестовой среды локализации
3.1 Анализ структуры кода примера разработки на Java/Python
// Пример на Java: базовая структура класса запроса транзакции
public class IndoPaymentRequest {
private String merchantCode; //Идентификатор торговца (MID)
private String transactionId; //следуйте формату BI TRX2023MMDDHHmmssSSS
private BigDecimal amount.
private Currency currency = Currency.getInstance("IDR");
@NotNull
@Size(min=16,max=19)
private String customerPAN; //номер карты должен соответствовать правилам BIN
// Методы Getter и Setter опущены...
}
Разработчикам Python следует обратить особое внимание на работу с точностью до плавающей точки:
# Пример лучшей практики обработки сумм на Python
from decimal import Decimal
def format_idr_amount(value).
return Decimal(str(value)).quantize(Decimal('0.00'))
Анализ специальных требований к сообщениям XML (формы)
имя поля | обязательное поле | форматирование | Примечания |
---|---|---|---|
<merchant_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) Цепочка сертификатов должна содержать следующие центры сертификации:
- Глобальный корневой центр сертификации DigiCert
- Корневой центр сертификации Entrust
3) Частота проверки CRL установлена не более чем на 4 часа
распространённая ошибкаSSLHandshakeException
Ступени истощения:
① Убедитесь, что хранилище ключей (JKS/p12) содержит полную цепочку сертификатов; ② Проверьте конфигурацию SNI сервера; ③ Проверьте статус синхронизации локального времени.
Шаблон для разработки стандартных тестовых примеров QRIS (форма)
Номер варианта использования Q001-TC003
Описание сценария Потребитель сканирует статичный QR-код для совершения платежа | |
Предварительное условие - торговцы открыли сервис QRIS и терминал работает в режиме онлайн. |
Процедура.
[Потребитель] открывает функцию сканирования кодов в APP банка-партнера → [Система] анализирует QR-код и отображает сумму → [Пользователь] подтверждает платеж и вводит PIN-код → [Эквайер] отправляет запрос на авторизацию в Клиринговый центр BI → [Эмитент] возвращает код ответа об одобрении "00".
Ожидаемые результаты.
Время получения эквайером уведомления о клиринге ≤ 5 секунд; синхронизация статуса транзакции с бэк-офисом управления торговцами ≤ 30 секунд; формирование расчетного файла в соответствии со стандартом ISO20022.
Обработка аномального потока.
При появлении кода ответа "51" (недостаточный баланс) должна срабатывать интеллектуальная маршрутизация, чтобы переключить пользователя на другие связанные счета или предложить ему пополнить баланс.
Рекомендуемые значения параметров испытания давлением.
Одновременные пользователи ≥ 500 TPS в течение 15 минут;
Имитация сетевой задержки ≤ 800 мс;
Пул подключений к базе данных ≥ 50 активных подключений;
Показатель достижения результатов Среднее время отклика <1200 мс Коэффициент успешности ≥99%.
IV. Советы по автоматизированной генерации нормативных отчетов Ключевые связи отображения полей.
Поля сырого журнала → Регулярный отчет Название столбца Перекрестная ссылка:
дата_транзакции→TGL_TRANSAKSI (формат Dd/MM/yyyy); id клиента→NIK_KT_PEMBELI (зашифрованное хранилище); расчетная_сумма→NILAI_SETEL_IDR тысячный разделитель).
V. Отметьте важные пункты в контрольном списке соответствия требованиям перед запуском:
□ Прошли все проверки расчета тарифов BI-MDR □ Прошли сканирование PCI ASV и получили подтверждение соответствия □ Получили предварительную квалификацию OJK на решение для шифрования конфиденциальной информации класса хранения □ Провели не менее трех полных раундов UAT-тестирования.
VI. Спецификация управления тестовыми данными индонезийской платежной песочницы
6.1 Система классификации тестовых счетов
Стандартный тестовый счетЕсть три категории:
-
Базовая учетная запись для верификации: для проверки основных процессов транзакций
- Счет с фиксированным балансом (баланс всегда показывает 5 млн. рупий)
- Счета с нулевым балансом (обязательный сценарий отказа триггера)
-
Специальный счет для контроля рисков
- Счет с флажком высокочастотной торговли (ограничение 20 сделок в день)
- Счет мониторинга AML (предустановленные шаблоны подозрительных операций)
-
Специальный операционный счет
Кошелек для комбинированных платежей по QR-коду
Демо-счет для трансграничных денежных переводов (поддерживает двойную валюту USD/IDR)
Перекрестный справочник по кодам ответов API Необходимый справочник для разработчиков:
кодирование | Описание на английском языке | Рекомендации по локальной обработке |
---|---|---|
0000 | Успех | Покажите "Transaksi berhasil". |
1003 | Неверный идентификатор торговца | cПроверьте статус регистрации MID→повторите→вернитесь к ручному управлению |
Банк не отвечает в течение тайм-аута |
Примеры лучших практик обработки исключений в Java/Python:
// Интеллектуальный фреймворк обработки ошибок для Java
попробуйте {
IndoPaymentResponse resp = gateway.execute(req);
} catch (BIStandardException e) {
switch(e.getErrorCode()) {
case "9101": //Происходит обслуживание системы
logger.warn("Входим в ухудшенный режим");;
fallbackService.process(req);
перерыв;
по умолчанию.
выбросьте новый 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"},
}