Поддержка 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 depositAPI-Gateway
API-Gateway --> PaymentService
PaymentService -->init POLiPOLi-API
PaymentService -->init PayIDPSP-API
PaymentService -->generate BPAYBillingService
POLi-API -->webhookPaymentService
PSP-API -->webhookPaymentService
BillingService -->polling / webhookPaymentService
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`, авторизуется в банке, подтверждает платёж.

3. Webhook-обработка:
  • ```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.

3. Прямой банковский перевод:
  • Отображение реквизитов счета (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 и соответствие австралийским требованиям.