Lewati ke konten utama

Integration API

Port: 8092 | DB: db_kesles_merchant (schema integration + sandbox) | Status: ✅ ALL PHASES DONE 2026-06-16

Overview

integration_api adalah backend eksklusif untuk apps/merchant_integration (Flutter Web) — platform integrasi dan sandbox testing untuk tiga jenis pengguna:

PenggunaKebutuhan
Super AdminPSP tester, PSP External tester, Partner tester, manage sandbox access
PartnerTesting Partner API dengan credential sendiri (Phase 2 done)
Merchant TertentuSimulasi transaksi sandbox QRIS + webhook trigger

Service ini tidak share handler dengan dashboard_api — semua endpoint ditulis ulang di integration_api dengan auth 3-tier.

Auth — 3 Tier

Tier 1: Super Admin JWT (iss: kesles-merchant-auth)
→ Login via proxy ke auth_service
→ Role check: superAdmin
→ Akses: semua endpoint

Tier 2: Partner Bearer (iss: kesles-merchant-auth, role: partner)
→ Login via proxy ke partner_service /api/partner/v1/auth/token
→ Akses: /partner/execute endpoint saja

Tier 3: Merchant JWT (iss: kesles-integration, type: integration_merchant)
→ Login via integration_api sendiri (bcrypt verify)
→ Credential: email + password dibuat khusus oleh super admin
→ Akses: /sandbox/* endpoint merchant sendiri

Database Schema

Schema integration dan sandbox di db_kesles_merchant:

TabelDeskripsi
integration.merchant_accountsAkun merchant untuk login ke integration_api (Phase 1, mig 107)
integration.merchant_sandbox_accessWhitelist merchant yang boleh akses sandbox (Phase 3, mig 108)
sandbox.transactionsRiwayat simulasi transaksi QRIS sandbox (Phase 4, mig 108)
sandbox.webhook_logsLog delivery webhook per transaksi sandbox (Phase 5, mig 108)

Endpoint Lengkap

Auth

POST /api/integration/v1/auth/login → proxy ke auth_service (Super Admin)
POST /api/integration/v1/auth/verify-otp → proxy ke auth_service
GET /api/integration/v1/auth/me → proxy ke auth_service
POST /api/integration/v1/merchant/auth/login → Tier 3 merchant login (bcrypt + JWT)

Merchant Accounts (Super Admin)

GET /api/integration/v1/merchant-accounts
POST /api/integration/v1/merchant-accounts
PATCH /api/integration/v1/merchant-accounts/{id}
DELETE /api/integration/v1/merchant-accounts/{id}

Picker Data (Super Admin)

GET /api/integration/v1/merchants → list merchant (picker)
GET /api/integration/v1/partners → list partner (picker)

PSP Tester (Super Admin) — Phase 2

GET /api/integration/v1/psp/keys → list active PSP HMAC keys
POST /api/integration/v1/psp/execute → sign + forward ke payment_service/core_api
POST /api/integration/v1/psp-external/execute → sign + forward ke payment.kesles.com

Partner Tester (Super Admin) — Phase 2

POST /api/integration/v1/partner/execute → exchange credential → forward ke partner_service

Sandbox Access Admin (Super Admin) — Phase 3

GET /api/integration/v1/sandbox/merchants → list merchant enabled sandbox
POST /api/integration/v1/sandbox/merchants/{id}/enable → enable sandbox
DELETE /api/integration/v1/sandbox/merchants/{id}/disable → disable sandbox
GET /api/integration/v1/sandbox/status → status sandbox (merchant | superAdmin)

Sandbox QRIS Simulation (Merchant | Super Admin) — Phase 4

POST /api/integration/v1/sandbox/qris/generate → buat transaksi + QRIS content
POST /api/integration/v1/sandbox/qris/pay → simulasi pembayaran (mark paid)
GET /api/integration/v1/sandbox/transactions → list transaksi sandbox
GET /api/integration/v1/sandbox/transactions/{id} → detail transaksi

Sandbox Webhook Trigger (Merchant | Super Admin) — Phase 5

POST /api/integration/v1/sandbox/webhook/trigger → kirim simulasi webhook ke URL merchant
GET /api/integration/v1/sandbox/webhook/logs → log delivery per transaction_id

Upstream Dependencies

UpstreamKeperluanAuth
auth_service :8081Proxy login/OTP/me + role lookupX-Service-Token
core_api :8080Merchant picker list + partner auth/tokenX-Internal-API-Key
payment_service :8085PSP key list + forward payment-eventPAYMENT_SERVICE_API_KEY
partner_service :8086(via core_api proxy) partner token exchangeBearer
dashboard_api :8082Partner list pickerforwarded Bearer JWT

QRIS Sandbox

QRIS content yang dihasilkan berformat sintetis (bukan live/scannable PSP):

SANDBOX.KESLES.{merchantID[0:8]}.{txID[0:8]}.IDR{amount}

String ini dapat di-render menjadi QR code di Flutter (qr_flutter). Simulasi pembayaran dilakukan via API (/sandbox/qris/pay), bukan scan terminal nyata.

Webhook Sandbox

Payload webhook sandbox mirror format PSP real:

{
"event_type": "transaction.success",
"external_event_id": "SANDBOX-{txID}",
"merchant_id": "...",
"amount": 10000,
"currency": "IDR",
"status": "success",
"payment_method": "qris",
"is_sandbox": true
}

Header opsional: X-Sandbox-Signature: sha256=<hmac> jika secret diisi — untuk testing signature verification di sisi merchant.

PSP Outbound Credentials

PSP External Tester (POST /api/integration/v1/psp-external/execute) sign request ke payment.kesles.com menggunakan HMAC SHA-256 terpisah dari inbound:

VarKeterangan
PSP_OUTBOUND_HMAC_KEY_IDKey ID yang didaftarkan di payment.kesles.com
PSP_OUTBOUND_HMAC_SECRET64-char hex secret (256-bit)

Signing format: METHOD + "\n" + PATH + "\n" + TIMESTAMP + "\n" + BODYhex(hmac_sha256(secret, canonical)).

Credential test terdokumentasi di secrets/psp-credential-integration-api-outbound.md — wajib didaftarkan di payment.kesles.com sebelum external tester berfungsi.

Deployment

  • Folder VM: merchant_integration_api/
  • Systemd: integration-api.service
  • Port: 8092
  • Nginx: /merchant/integration-api/:8092

Fase Implementasi

PhaseStatusDeskripsi
Phase 1✅ DONEScaffold + 3-tier auth + merchant accounts CRUD + mig 107
Phase 2✅ DONEPSP tester + PSP External tester + Partner tester
Phase 3✅ DONESandbox infrastructure (mig 108 schema + enable/disable/status)
Phase 4✅ DONESandbox QRIS generate + pay + transaction list/detail
Phase 5✅ DONESandbox webhook trigger + log delivery
Phase 6✅ DONE 2026-06-16Flutter: Merchant Accounts panel (CRUD) + sidebar Admin section + default view
Phase 7✅ DONE 2026-06-16Cutover: PSP tester handlers dihapus dari dashboard_api; PSP outbound credential terdokumentasi