Поддержка 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`, авторизуется в банке, подтверждает платёж.
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 и соответствие австралийским требованиям.

Caswino Promo