Support for POLi, PayID, bank transfer and AUD

Introduction

Australian players prefer local payment methods: instant bank transfers via POLi, PayID/Osko under NPP and a traditional transfer bank, all in AUD. It is important for the operator to ensure seamless integration, instant processing, compliance with regulations and a reliable architecture.

1. Overview of payment methods

1. POLi Payments

OAuth-user authorization through the bank interface, without cards and additionally SMS codes.
Instant deposit, suitable for deposits.

2. PayID/Osko (NPP)

Translation by identifier (email, phone), the NPP network standard provides calculation within seconds.
Requires integration with PSP supporting Australia's New Payments Platform.

3. Bank transfer (BPAY/direct transfer)

BPAY: generation of Biller Code and Customer Reference, payment is made by the user in the Internet bank; enrollment up to 24 hours.
Direct AUD-transfer: SWIFT/IBAN transfer, suitable for large amounts, processing time 1-3 working days.

4. AUD currency

All operations in AUD: correct display, storage in the database, rounding to cents ('DECIMAL (12.2)').

2. Integration architecture

```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: validation, rate-limiting, routing to PaymentService.
PaymentService: unified point for all AUD methods, stores' paymentId ',' method ',' status', 'metadata'.
BillingService: module for BPAY accounts and polling status.
TransactionService: ACID transactions update the balance and log operations.
AuditDB: immutable store of request and response logs.

3. Implementation of POLi

1. Initiation:
  • ```http
  • POST /api/payments/poli/init
  • {
  • "amount": 100. 00,
  • "currency": "AUD",
  • "returnUrl": "https: //casino. com/poli/callback"
  • }
  • ```

→ `{ paymentId, poliUrl }`

2. Player Redirection:
  • The player is redirected to 'poliUrl', logs in to the bank, confirms the payment.

3. Webhook processing:
  • ```http
  • POST /api/payments/poli/callback
  • Headers: X-Signature
  • Body: { paymentId, status, bankTransactionId }
  • ```

Checking HMAC by'X-Signature '.
Update 'status': 'pending' → 'approved '/' declined'.
When'approved '- start'TransactionService. credit(playerId, amount)`.

4. PayID/Osko Implementation

1. Initiation:
  • ```http
  • POST /api/payments/payid/init
  • {
  • "payId": "user@example. com",
  • "amount": 250. 00,
  • "currency": "AUD",
  • "Description": "Casino deposit"
  • }
  • ```

→ `{ paymentId, transactionRef }`

2. Webhook notification:
  • PSP шлёт `POST /api/payments/payid/callback { paymentId, status }`.

Similar signature verification.
Statuses: 'pending', 'settled', 'failed'.

5. Implementation of BPAY and bank transfer

1. BPAY account generation:
  • ```http
  • POST /api/payments/bpay/generate
  • { "amount": 500. 00 }
  • ```

→ `{ billerCode, customerRef, expiryDate }`

2. Polling statuses:
  • `GET /api/payments/bpay/status? billerCode = & customerRef = 'every 15 minutes.
  • При `PAID` — update `approved`, credit funds.

3. Direct Bank Transfer:
  • Mapping of account details (SWIFT, BSB, Account) in UI.
  • Transactions are reconciled manually or automatically by incoming bank statements via SFTP.

6. Localization and UX

Formatting:
  • ```js
  • new Intl. NumberFormat('en-AU', { style: 'currency', currency: 'AUD' }). format(1000)
  • // "A$1,000. 00"
  • ```
  • UI:
    • Selection of the method in the deposit: POLi, PayID, BPAY, Bank Transfer icons.
    • Description of terms and commissions under each method.
    • Verification before the first input: KYC/AML.

    7. Security and fault tolerance

    TLS 1. 2 + for all APIs and Webhooks.
    Circuit Breaker (Resilience4j) for PSP calls, disabling the method when error-rate is> 5%.
    Retry-logic with exponential backoff in case of temporary failures.
    Audit Trail: all webhook events and transactions are stored for at least 7 years according to regulations.

    8. Testing

    Sandbox modes:
    • POLi: `poli. sandbox. domain 'with fake' test _ user 'tokens.
    • PSP: test credits from PayID providers.
    • E2E tests (Cypress): scripts: initiate → emulate callback → check balance.
    • Load Testing (k6): simulation of 1000 concurrent deposits by POLi and PayID.

    Conclusion

    Integration of POLi, PayID/Osko and traditional bank transfers into AUD requires a single PaymentService, reliable webhook processing, format localization and fault-tolerant architecture with circuit breaker and retry mechanisms. This approach ensures fast deposits, high CR and Australian compliance.