Поддержка POLi, PayID, банковского перевода и AUD
Введение
Австралийские игроки предпочитают локальные платёжные методы: мгновенные банковские переводы через POLi, PayID/Osko в рамках NPP и традиционный банк-трансфер, всё в AUD. Для оператора важно обеспечить бесшовную интеграцию, мгновенную обработку, соответствие регуляциям и надёжную архитектуру.
1. Обзор платёжных методов
1. POLi Payments
OAuth-авторизация пользователя через интерфейс банка, без карт и дополнительно SMS-кодов.
Мгновенное зачисление средств, подходит для депозитов.
2. PayID/Osko (NPP)
Перевод по идентификатору (email, телефон), сетевой стандарт NPP обеспечивает расчёт в течение секунд.
Требует интеграции с PSP, поддерживающим Australia’s New Payments Platform.
3. Банковский перевод (BPAY / прямой transfer)
BPAY: генерация Biller Code и Customer Reference, оплату проводит пользователь в интернет-банке; зачисление до 24 ч.
Прямой AUD-transfer: SWIFT/IBAN перевод, подходят для крупных сумм, время обработки 1–3 рабочих дня.
4. Валюта AUD
Все операции в AUD: корретное отображение, хранение в базе, округление до центов (`DECIMAL(12,2)`).
2. Архитектура интеграции
mermaid
flowchart LR
Player -->|initiate deposit| API-Gateway
API-Gateway --> PaymentService
PaymentService -->|init POLi| POLi-API
PaymentService -->|init PayID| PSP-API
PaymentService -->|generate BPAY| BillingService
POLi-API -->|webhook| PaymentService
PSP-API -->|webhook| PaymentService
BillingService -->|polling / webhook| PaymentService
PaymentService --> TransactionService
TransactionService --> AuditDB
API-Gateway: валидация, rate-limiting, маршрутизация к PaymentService.
PaymentService: унифицированная точка для всех AUD-методов, хранит `paymentId`, `method`, `status`, `metadata`.
BillingService: модуль для BPAY-счётов и polling статусов.
TransactionService: ACID-транзакции обновляют баланс и логируют операции.
AuditDB: неизменяемое хранилище логов запросов и ответов.
3. Реализация POLi
1. Инициация:http
POST /api/payments/poli/init
{
"amount": 100.00,
"currency": "AUD",
"returnUrl": "https: //casino.com/poli/callback"
}
→ `{ paymentId, poliUrl }`
2. Перенаправление игрока:- Игрок перенаправляется на `poliUrl`, авторизуется в банке, подтверждает платёж.
http
POST /api/payments/poli/callback
Headers: X-Signature
Body: { paymentId, status, bankTransactionId }
Проверка HMAC по `X-Signature`.
Обновление `status`: `pending` → `approved`/`declined`.
При `approved` — запуск `TransactionService.credit(playerId, amount)`.
4. Реализация PayID/Osko
1. Инициация:http
POST /api/payments/payid/init
{
"payId": "user@example.com",
"amount": 250.00,
"currency": "AUD",
"Дескрипшен": "Casino deposit"
}
→ `{ paymentId, transactionRef }`
2. Webhook-уведомление:- PSP шлёт `POST /api/payments/payid/callback { paymentId, status }`.
Аналогичная проверка подписи.
Статусы: `pending`, `settled`, `failed`.
5. Реализация BPAY и банковского перевода
1. Генерация счёта BPAY:http
POST /api/payments/bpay/generate
{ "amount": 500.00 }
→ `{ billerCode, customerRef, expiryDate }`
2. Polling статусов:- `GET /api/payments/bpay/status?billerCode=&customerRef=` каждые 15 минут.
- При `PAID` — update `approved`, credit funds.
- Отображение реквизитов счета (SWIFT, BSB, Account) в UI.
- Операции сверяются вручную или автоматически по incoming bank statements через SFTP.
6. Локализация и UX
Форматирование:js
new Intl.NumberFormat('en-AU', { style: 'currency', currency: 'AUD' }).format(1000)
// "A$1,000.00"
UI:
- Выбор метода в депозите: иконки POLi, PayID, BPAY, Bank Transfer.
- Описание сроков и комиссий под каждым методом.
- Верификация перед первым вводом: KYC/AML.
7. Безопасность и отказоустойчивость
TLS 1.2+ для всех API и Webhook.
Circuit Breaker (Resilience4j) для PSP-вызывов, отключение метода при error-rate >5 %.
Retry-logic с экспоненциальным backoff при временных сбоях.
Audit Trail: все webhook-события и транзакции хранятся 7 лет минимум по регуляциям.
8. Тестирование
Sandbox-режимы:- POLi: `poli.sandbox.domain` с фейковыми токенами `test_user`.
- PSP: тестовые креды у провайдеров PayID.
- E2E-тесты (Cypress): сценарии: инициировать → эмулировать callback → проверить баланс.
- Load Testing (k6): имитация 1000 concurrent депозитов методом POLi и PayID.
Заключение
Интеграция POLi, PayID/Osko и традиционных банковских переводов в AUD требует единого PaymentService, надёжной обработки webhook, локализации форматов и отказоустойчивой архитектуры с circuit breaker и retry-механизмами. Такой подход обеспечивает быстрые депозиты, высокий CR и соответствие австралийским требованиям.