LPD Seminyak – Dokumentasi API

Laravel 5.5 PHP 7.x SQL Server JWT Auth
30+
Endpoint API
7
Helper Classes
4
Grup Layanan
11
Middleware
25+
Tabel Database

Tentang Sistem LPD Seminyak

LPD Seminyak adalah backend API berbasis Laravel 5.5 yang melayani transaksi perbankan digital untuk Lembaga Perkreditan Desa (LPD) Seminyak, Bali. Sistem ini bertindak sebagai gateway antara aplikasi mobile nasabah (iOS mBanking), mesin ATM cardless, dan sistem perbankan BPD Bali (via protokol SNAP BI).

Fungsi Utama:

  • Mobile Banking iOS (registrasi, login, tabungan)
  • Transfer antar nasabah LPD
  • Transfer ke bank lain (via BPD)
  • Pembayaran PPOB (PLN, PDAM, BPJS, Pulsa)
  • Transfer-In via Virtual Account (SNAP BI)
  • Layanan ATM Cardless (setor/tarik tanpa kartu)

Teknologi Stack:

  • Framework: Laravel 5.5.* (PHP >= 7.0)
  • Database: Microsoft SQL Server (sqlsrv)
  • Autentikasi: JWT (tymon/jwt-auth)
  • HTTP Client: GuzzleHTTP ~6.0
  • Enkripsi: AES-256-CBC + RSA (OpenSSL)
  • Signing: HMAC-SHA512 / SHA-256

Topologi Integrasi

Sistem EksternalProtokolTujuan
BPD Bali iBankHTTPS RESTTransfer antar bank (Inquiry + Posting)
BPD SNAP BISNAP ISO-8583Terima transfer masuk via Virtual Account
FastPay / RajaBillerHTTPS JSONPembayaran PPOB (tagihan, pulsa)
IAK Prepaid/PostpaidHTTPS JSONIsi ulang pulsa, cek tagihan
Lamanuna (SmartIndo)HTTPS RESTGet Token, Insert IP, Insert User
LPD Core (giosoftech.com)HTTPS RESTCore banking data nasabah

Alur Layanan

Mobile Banking iOS:

App Mobile
iosAccessMdw
(Validasi Token/IP/AES)
Controller
Helper Class
SQL Server DB

SNAP Transfer-In BPD:

BPD Bank
SNAPCheckTransferIn
SNAPTransferIn
Post ke DB
Nasabah +Saldo

ATM Cardless:

Mesin ATM
MachineCheck
(IP + Hash)
MachineController
Update Folio/Mutasi

Struktur Direktori

lpd_seminyak/
├── app/
│   ├── Helpers/          # 7 helper class utama
│   │   ├── MBankingHelper.php    # Validasi akses, posting VA, enkripsi
│   │   ├── MobileHelper.php      # Login, register, ATM token
│   │   ├── SNAPHelper.php        # Validasi signature SNAP BPD
│   │   ├── TabunganHelper.php    # Saldo, folio, PIN, daftar rek
│   │   ├── TransferHelper.php    # Validasi & log transfer antar bank
│   │   ├── iosHelper.php         # Helper utama iOS mBanking (AES)
│   │   └── iosTransferHelper.php # Transfer LPD, log, cek saldo
│   ├── Http/
│   │   ├── Controllers/          # 13 controller
│   │   │   ├── iosTokenCtrl.php          # Get access token iOS
│   │   │   ├── iosAccessCtrl.php         # Register/Login/Logout
│   │   │   ├── iosTabunganCtrl.php       # Daftar rek & mutasi
│   │   │   ├── iosTransferLPDCtrl.php    # Transfer sesama LPD
│   │   │   ├── iosTransferBankCtrl.php   # Transfer ke bank lain
│   │   │   ├── iosPPOBController.php     # Bayar PPOB FastPay
│   │   │   ├── iosPPOBIAKController.php  # PPOB via IAK
│   │   │   ├── iosMachineCtrl.php        # Token cardless iOS
│   │   │   ├── MachineController.php     # ATM Cardless
│   │   │   ├── PPOBController.php        # Callback PPOB
│   │   │   ├── SNAPTransferIn.php        # SNAP Inquiry & Payment
│   │   │   └── SNAPTokenTransferIn.php   # SNAP Access Token
│   │   ├── Middleware/          # 11 middleware
│   │   └── Kernel.php
├── config/app.php       # Load PEM keys + SNAP response codes
├── keys/
│   └── public_key.pem       # Public key LPD
├── routes/api.php       # Semua route API
├── .env                 # Konfigurasi environment
├── bank.list            # Daftar kode bank nasional
├── ppob.list            # Produk PPOB tersedia
└── display.list         # Konfigurasi tampilan app

Peta Route API Lengkap

PathController@MethodMiddlewareFungsi
/v1.0/access-token/b2bSNAPTokenTransferIn@AccessTokensnapTokenInToken SNAP BPD
/v1.0/transfer-va/inquirySNAPTransferIn@InquirysnapTransferInSNAP Inquiry VA
/v1.0/transfer-va/paymentSNAPTransferIn@PaymentsnapTransferInSNAP Payment VA
/cardless/create-tokenMachineController@CreateTokenmachineCheckBuat token ATM
/cardless/get-tokenMachineController@GetTokenmachineCheckValidasi token ATM
/cardless/check-balanceMachineController@CekSaldomachineCheckCek saldo ATM
/cardless/cash-debitMachineController@PenarikanmachineCheckTarik tunai
/cardless/cash-creditMachineController@PenyetoranmachineCheckSetor tunai
/cardless/reversal-debitMachineController@BatalTarikmachineCheckBatal tarik
/cardless/reversal-creditMachineController@BatalSetormachineCheckBatal setor
/ppob/callbackPPOBController@CallbackCallback PPOB
/smart/access-tokeniosTokenCtrl@AccessTokeniosCheckTokenToken iOS
/smart/access-keyiosTokenCtrl@AccessKeyiosCheckTokenUpload public key
/smart/registeriosAccessCtrl@RegisteriosCheckAccessRegistrasi nasabah
/smart/loginiosAccessCtrl@LoginiosCheckAccessLogin nasabah
/smart/logoutiosAccessCtrl@LogoutiosCheckAccessLogout
/smart/update-passiosAccessCtrl@UpdatePassiosCheckAccessGanti password
/smart/update-piniosAccessCtrl@UpdatePiniosCheckAccessGanti PIN
/smart/tabungan/account-listiosTabunganCtrl@ListAccountiosCheckAccessDaftar rekening
/smart/tabungan/transaction-historyiosTabunganCtrl@HistoryTransactioniosCheckAccessRiwayat transaksi
/smart/tabungan/mutasi-historyiosTabunganCtrl@HistoryMutasiiosCheckAccessMutasi rekening
/smart/transfer-lpd/checkiosTransferLPDCtrl@CheckiosCheckAccessCek rek tujuan
/smart/transfer-lpd/inquiryiosTransferLPDCtrl@InquiryiosCheckAccessInquiry transfer LPD
/smart/transfer-lpd/postiosTransferLPDCtrl@PostingiosCheckAccessPosting transfer LPD
/smart/transfer-bank/checkiosTransferBankCtrl@CheckiosCheckAccessCek rek bank tujuan
/smart/transfer-bank/inquiryiosTransferBankCtrl@InquiryiosCheckAccessInquiry ke BPD
/smart/transfer-bank/postiosTransferBankCtrl@PostingiosCheckAccessPosting ke BPD
/smart/ppob/checkiosPPOBController@CheckiosCheckAccessCek tagihan PPOB
/smart/ppob/requestiosPPOBController@RequestiosCheckAccessBayar PPOB
/smart/iak/checkiosPPOBIAKController@CheckiosCheckAccessCek tagihan IAK
/smart/iak/requestiosPPOBIAKController@RequestiosCheckAccessBayar via IAK

Persyaratan Sistem

KomponenVersi
PHP7.0 – 7.4 Wajib 7.4
Microsoft SQL Server2014 / 2016+
Composer2.x
Web ServerApache / Nginx
PHP Extensionpdo_sqlsrv, mbstring, openssl, curl
ODBC DriverMicrosoft ODBC Driver 17/18
Penting: PHP 8.x TIDAK kompatibel! Gunakan PHP 7.4. IP server harus terdaftar di whitelist BPD Bali dan GIO.
Database hanya mendukung Microsoft SQL Server. MySQL/MariaDB/PostgreSQL tidak didukung.

Langkah Instalasi Lengkap

1

Install PHP 7.4 dan ekstensi yang dibutuhkan

Sistem memerlukan PHP 7.x. PHP 8.x tidak kompatibel.

# Ubuntu/Debian:
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php7.4 php7.4-cli php7.4-mbstring php7.4-xml \
  php7.4-curl php7.4-zip php7.4-json php7.4-pdo php7.4-intl

# Verifikasi:
php7.4 --version
2

Install ODBC Driver dan ekstensi PHP SQL Server

Driver Microsoft ODBC wajib untuk koneksi ke SQL Server.

# Install ODBC Driver 17 (Ubuntu):
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list \
  > /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 unixodbc-dev

# Install ekstensi PHP sqlsrv:
sudo pecl install sqlsrv pdo_sqlsrv
echo "extension=sqlsrv.so" >> /etc/php/7.4/cli/php.ini
echo "extension=pdo_sqlsrv.so" >> /etc/php/7.4/cli/php.ini
3

Extract Source Code ke Server

# Extract dari zip:
unzip lpd_seminyak.zip -d /var/www/html/

# Atau clone dari repository (jika ada):
git clone https://your-repo.git /var/www/html/lpd_seminyak

# Masuk ke direktori:
cd /var/www/html/lpd_seminyak
4

Install Dependency via Composer

# Install composer (jika belum ada):
curl -sS https://getcomposer.org/installer | php7.4
mv composer.phar /usr/local/bin/composer

# Install dependencies:
cd /var/www/html/lpd_seminyak
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev \
  --no-interaction --ignore-platform-reqs

# Jika ada error autoload, jalankan:
composer dump-autoload --no-scripts --optimize
5

Siapkan File .env

cp .env.example .env

# Generate application key:
php7.4 artisan key:generate

# Edit file .env:
nano .env

Konfigurasi minimal yang harus diubah:

APP_URL=https://your-domain.com
DB_HOST=your-sqlserver-host
DB_DATABASE=Giosoft_LPD
DB_USERNAME=sa
DB_PASSWORD=your-password

# Path key absolut sesuai OS:
PUBLIC_KEY_LPD=/var/www/html/lpd_seminyak/keys/public_key.pem
PUBLIC_KEY_BPD=/var/www/html/lpd_seminyak/public_key_bpd.pem
MASTER_BANK_LIST=/var/www/html/lpd_seminyak/bank.list
MASTER_PPOB_LIST=/var/www/html/lpd_seminyak/ppob.list
MASTER_DISPLAY_LIST=/var/www/html/lpd_seminyak/display.list
6

Setup Folder Keys (Kunci Kriptografi)

mkdir -p /var/www/html/lpd_seminyak/keys
cp public_key_lpd.pem keys/public_key.pem
chmod 644 keys/public_key.pem
7

Set Permission Storage dan Bootstrap

chmod -R 775 /var/www/html/lpd_seminyak/storage
chmod -R 775 /var/www/html/lpd_seminyak/bootstrap/cache
chown -R www-data:www-data /var/www/html/lpd_seminyak/storage

Buat direktori log yang diperlukan:

mkdir -p storage/logs/token storage/logs/transfer-in/inquiry
mkdir -p storage/logs/transfer-in/posting storage/logs/access
mkdir -p storage/logs/tabungan storage/logs/transfer-AR
mkdir -p storage/logs/transfer-AB storage/logs/ppob
8

Setup Database SQL Server

Buat database dan semua tabel yang diperlukan di SQL Server:

-- Di SQL Server Management Studio:
CREATE DATABASE Giosoft_LPD;
USE Giosoft_LPD;

-- Tabel utama yang diperlukan:
-- gmob_nasabah, gmob_token, gmob_request, gmob_transfer,
-- gmob_transferlog, gmob_payment, gmob_log, gmob_access,
-- gmob_rekening, gmob_responcode, gmob_counter, gmob_listaccount,
-- gtb_nasabah, gtb_folio, gak_mutasi, gak_ledger,
-- gum_config, gak_bookstatus, gcore_bankcode, gcore_transfer,
-- gcore_log, gppob_produk, gppob_inquiry, gppob_transaction
9

Konfigurasi Web Server Apache

# /etc/apache2/sites-available/lpd_seminyak.conf

    ServerName your-domain.com
    DocumentRoot /var/www/html/lpd_seminyak/public
    
    
        AllowOverride All
        Require all granted
    
    
    ErrorLog ${APACHE_LOG_DIR}/lpd_error.log
    CustomLog ${APACHE_LOG_DIR}/lpd_access.log combined


# Aktifkan:
a2ensite lpd_seminyak.conf
a2enmod rewrite
systemctl restart apache2
10

Verifikasi Instalasi

# Cek bootstrap Laravel:
php7.4 artisan env

# Test koneksi database:
php7.4 artisan tinker
# Di dalam tinker:
DB::connection()->getPdo()

# Test akses API:
curl -X POST https://your-domain.com/v1.0/access-token/b2b \
  -H "Content-Type: application/json" \
  -d '{"grantType":"client_credentials"}'

Instalasi di Windows (XAMPP)

1

Install XAMPP PHP 7.4 + SQL Server Driver

1. Download XAMPP dengan PHP 7.4
2. Download php_sqlsrv_74_nts.dll dan php_pdo_sqlsrv_74_nts.dll
   dari: https://docs.microsoft.com/en-us/sql/connect/php/
3. Letakkan DLL di C:\xampp\php\ext\
4. Tambahkan di php.ini:
   extension=php_sqlsrv_74_nts.dll
   extension=php_pdo_sqlsrv_74_nts.dll
5. Install Microsoft ODBC Driver 17 for SQL Server
2

Tempatkan Project dan Konfigurasi .env

1. Ekstrak ke C:\xampp\htdocs\lpd_seminyak
2. Buat .env dari .env.example
3. Update path di .env (gunakan forward slash):
   PUBLIC_KEY_LPD=c:/xampp/htdocs/lpd_seminyak/keys/public_key.pem
   MASTER_BANK_LIST=c:/xampp/htdocs/lpd_seminyak/bank.list
4. Jalankan: composer install --ignore-platform-reqs
5. Jalankan: php artisan key:generate

Referensi Lengkap Variabel .env

Aplikasi

KeyContohKeterangan
APP_NAMELPD SeminyakNama aplikasi
APP_ENVlocal / productionEnvironment
APP_KEYbase64:xxxGenerate dengan php artisan key:generate
APP_DEBUGfalsefalse di production
APP_URLhttps://lpdseminyak.biz.id:8000URL dasar aplikasi
APP_STATUSProductionIndikator status

Database SQL Server

KeyNilaiKeterangan
DB_CONNECTIONsqlsrvWAJIB sqlsrv (bukan mysql)
DB_HOSTlocalhostHostname SQL Server
DB_PORT1433Port default SQL Server
DB_DATABASEGiosoft_LPDNama database
DB_USERNAMEsaUsername SQL Server
DB_PASSWORD#sa?seminyakPassword SQL Server

Path File Kunci dan List

KeyKeterangan
PUBLIC_KEY_LPDPath absolut public_key.pem LPD – untuk verifikasi tanda tangan iOS
PUBLIC_KEY_BPDPath absolut public_key_bpd.pem – verifikasi SNAP signature
MASTER_BANK_LISTPath ke bank.list – daftar kode bank nasional
MASTER_PPOB_LISTPath ke ppob.list – daftar produk PPOB tersedia
MASTER_DISPLAY_LISTPath ke display.list – konfigurasi menu tampilan app

BPD Bali Integration

KeyKeterangan
BPD_URLBase URL production BPD: https://ibank.bpdbali.id/virtualAccount/
BPD_URL_DEVBase URL dev BPD: https://dev.bpdbali.id:8443/openapi
BPD_PREFIX989191 – Prefix VA production
BPD_PREFIX_DEV989067 – Prefix VA dev
BPD_HASHCODESecret hashcode untuk signing request ke BPD
BPD_STATICIP1..7IP statis BPD yang diizinkan
BPD_WHITE_LISTFormat: |ip1|ip2|ip3|
CLIENT_SECRETSecret untuk HMAC-SHA512 SNAP signing

Limit Transaksi

KeyDefaultKeterangan
SALDO_MIN50000Saldo minimum tersisa setelah transaksi (Rp)
MIN_TRANSFER10000Minimum nominal transfer (Rp)
MAX_TRANSFER1000000Maksimum transfer per transaksi (Rp)

PPOB

KeyKeterangan
PPOB_USER / PPOB_PINKredensial FastPay
IAK_USER / IAK_KEYKredensial IAK production
IAK_PREPAID_URLhttps://prepaid.iak.id/api/top-up
IAK_POSTPAID_URLhttps://mobilepulsa.net/api/v1/bill/check

Sistem Autentikasi

1. iOS mBanking Token

  • Dibuat di endpoint /smart/access-token
  • Disimpan di tabel gmob_token
  • Valid selama 3 menit
  • Header: Authorization: Bearer <token>
  • Divalidasi oleh middleware iosCheckAccess

2. SNAP BPD Token (OAuth2 B2B)

  • Endpoint: /v1.0/access-token/b2b
  • Signature: HMAC-SHA512 dari (method:endpoint:token:bodyHash:timestamp)
  • IP whitelist BPD Bali wajib cocok
  • Divalidasi middleware snapTransferIn

Endpoint: GET ACCESS TOKEN (iOS)

POST /smart/access-token Dapatkan token akses sesi iOS

iOS – Registrasi, Login, Logout

POST/smart/register Daftarkan perangkat nasabah
POST/smart/login Login nasabah
POST/smart/logout
POST/smart/update-pass Ganti password
POST/smart/update-pin Ganti PIN transaksi

iOS – Layanan Tabungan

Semua endpoint tabungan memerlukan middleware iosCheckAccess. Data yang dikembalikan dienkripsi AES-256-CBC.
POST/smart/tabungan/account-list
POST/smart/tabungan/transaction-history
POST/smart/tabungan/mutasi-history

iOS – Transfer Sesama Nasabah LPD

3 tahap: Check → Inquiry → Posting. Setiap tahap memvalidasi hash SHA-256.

POST/smart/transfer-lpd/check
POST/smart/transfer-lpd/inquiry
POST/smart/transfer-lpd/post

iOS – Transfer ke Bank Lain via BPD

Transfer dari rekening LPD ke bank lain (BNI, BRI, Mandiri, dll) melalui jaringan BPD Bali. Biaya transfer dari tabel gcore_bankcode.

POST/smart/transfer-bank/check
POST/smart/transfer-bank/inquiry
POST/smart/transfer-bank/post

iOS – PPOB (Pembayaran Tagihan & Pulsa)

Gateway: FastPay (RajaBiller) dan IAK. Fee admin: Rp 2.000/transaksi.

Produk yang didukung:

PLN Prabayar/Pascabayar PDAM BPJS Kesehatan Telkom Paket Internet Pulsa (Prepaid)
POST/smart/ppob/check
POST/smart/ppob/request
POST/smart/iak/check & /smart/iak/request

SNAP BI – Transfer Masuk via VA BPD

Implementasi SNAP BI (Standar Nasional Open API Pembayaran) untuk menerima transfer dari bank lain menggunakan Virtual Account BPD. Prefix VA production: 989191.

POST/v1.0/access-token/b2b
POST/v1.0/transfer-va/inquiry Service Code 24
POST/v1.0/transfer-va/payment Service Code 25

Kode Respons SNAP:

CodeArti
2002400 / 2002500Sukses inquiry / payment
4002400Missing mandatory field
4012400Invalid signature
4012401Invalid access token
4032400IP tidak dikenal
4032415Rekening tidak aktif
4092401Duplicate reference

ATM Cardless – Setor & Tarik Tanpa Kartu

Hash: SHA-256(ATM_HASHCODE + token + account_no + transaction_datetime). IP harus ada di ATM_WHITE_LIST.
POST/cardless/create-token
POST/cardless/get-token
POST/cardless/cash-debit Tarik tunai
POST/cardless/cash-credit Setor tunai
POST/cardless/reversal-debit & /reversal-credit Batal transaksi

PPOB Callback

POST/ppob/callback

Skema Database SQL Server: Giosoft_LPD

Beberapa query lintas database: Giosoft_Dev.dbo.gtb_folio
gmob_nasabah
noidvarchar PKID unik nasabah
namavarcharNama nasabah
norekvarcharNomor rekening utama
usernamevarcharUsername login
pass_cryptovarcharPassword (md5)
pin_cryptovarcharPIN transaksi
imei_codevarcharIMEI / device ID
statuschar(1)R=Register A=Aktif B=Blokir
aes_keyvarcharKunci AES-256 per perangkat
aes_ivvarcharIV AES
max_transferbigintLimit transfer harian
scramble_codevarcharKode scramble enkripsi
versionvarcharVersi app iOS nasabah
gmob_token
idint PKAuto increment
account_novarcharIMEI / noid nasabah
tokenvarcharToken string
date_timedatetimeWaktu pembuatan
statusvarcharopen/closed
end_timedatetimeWaktu logout
gtb_folio
linkervarcharNomor rekening
mutasi_datedateTanggal audit
trans_datedatetimeTanggal transaksi
debitdecimalJumlah debit
creditdecimalJumlah kredit
saldodecimalSaldo setelah transaksi
trans_novarcharNomor referensi
remarkvarcharKeterangan (max 50)
debit_valchar(1)T=debit F=kredit
gcore_transfer
transfer_codevarchar PKKode unik transfer
transfer_typevarcharIN/OUT
norekvarcharRekening LPD
amountdecimalNominal
referenceNumbervarcharNomor referensi BPD
responseCodevarcharKode respons
destinationBankCodevarcharKode bank tujuan

Tabel Pendukung Lainnya:

TabelFungsi
gmob_transferTransfer sesama LPD (AR)
gmob_paymentTransaksi PPOB
gmob_rekeningDaftar rekening per nasabah
gmob_responcodeMaster kode dan pesan respons
gmob_counterCounter nomor referensi per periode
gum_configTanggal audit + limit transfer global
gak_mutasiMutasi GL akuntansi
gak_bookstatusStatus buka/tutup buku harian
gcore_bankcodeKode bank + biaya transfer
gcore_logLog detail transaksi VA
gppob_produkMaster produk PPOB
gtb_nasabahData nasabah tabungan core
gkr_debitorData debitur (pinjaman)
gdp_deposanData deposito

Daftar Kode Respons Sistem

iOS mBanking:

KodeArti
00Sukses
01Rekening tidak aktif
04Saldo tidak cukup
05Deposit PPOB kurang
10Data tidak ditemukan
21Username/password salah
23Referensi duplikat
24Gagal memproses
25Nominal di bawah minimum
26Melebihi limit harian
43Akun diblokir
51/52/53Hash mismatch (check/inquiry/post)
54PIN salah
62/63Hash LPD (inquiry/posting)
68Timeout / error internal
84Data tidak ditemukan

ATM Cardless:

KodeArti
00Sukses
14Status rekening tidak valid
30Hash code salah
40IP tidak ada di whitelist
61Saldo tidak cukup

SNAP BI:

CodeArti
2002400/2002500Sukses inquiry/payment
4002400Missing mandatory field
4012400Invalid signature
4012401Invalid access token
4032415Rekening tidak aktif
4092401Duplicate reference
5002500General error

Mekanisme Keamanan & Enkripsi

1. AES-256-CBC per Perangkat (iOS)

// Key dibuat saat registrasi, disimpan di gmob_nasabah:
$key = md5($timestamp . $clientID . "KEY");
$iv  = md5($timestamp . $clientID . "IV");
$cs  = md5($timestamp . $clientID . "CS");

// Enkripsi: openssl_encrypt(data, AES-256-CBC, key, RAW, iv) -> base64
// Dekripsi: base64_decode -> openssl_decrypt(...)

2. RSA Signature Verifikasi (iosTokenCtrl)

// Saat get access token:
$strToSign = $clientID . "|" . $timestamp;
$isValid = openssl_verify($strToSign, base64_decode($signature),
  config('app.public_key_lpd'), OPENSSL_ALGO_SHA256);
// Public key dimuat dari env PUBLIC_KEY_LPD saat boot

3. HMAC-SHA512 (SNAP & mBanking)

// SNAP Transfer VA:
$strToSign = "POST:" . $endpoint . ":" . $token . ":" . sha256(body) . ":" . $timestamp;
$signHash = base64_encode(hash_hmac("sha512", $strToSign, CLIENT_SECRET, true));

// mBanking access:
$strToSign = $partnerID . "|" . $accessToken;
$signHash = base64_encode(hash_hmac("sha512", $strToSign, CLIENT_SECRET));

4. SHA-256 Hash Validasi Transfer

// Transfer LPD Inquiry:
SHA-256(fromNorek + toNorek + amount + fromName + toName + remark + BPD_HASHCODE)

// Transfer Bank:
SHA-256(fromNorek + bankCode + toNorek + amount + BPD_HASHCODE)

// ATM:
SHA-256(ATM_HASHCODE + token + accountNo + datetime)

5. Whitelist IP per Layanan

LayananEnv VariableMiddleware
SNAP BPDBPD_STATICIP1..7SNAPCheckTransferIn
Mobile BankingBPD_WHITE_LIST + GIO_WHITE_LISTiosAccessMdw
ATM CardlessGIO_WHITE_LIST + ATM_WHITE_LISTMachineCheck

6. Pembatasan Waktu Layanan

// Di iosAccessMdw::check_access():
// Transfer diblokir: 00:00 - 05:00 (jam 0-4)
// PPOB diblokir:     01:00 - 03:00 (jam 1-2)

Daftar Middleware

AliasClassDigunakan UntukValidasi
iosCheckTokeniosTokenMdw/smart/access-tokenSignature RSA, client ID, IP
iosCheckAccessiosAccessMdwSemua /smart/*Token 3 menit, IP, URL, jam, AES keys
snapTokenInSNAPCheckTokenIn/v1.0/access-token/b2bField grantType
snapTransferInSNAPCheckTransferIn/v1.0/transfer-va/*HMAC-SHA512, token, IP BPD
machineCheckMachineCheck/cardless/*IP whitelist ATM, SHA-256 hash
Alur iosAccessMdw:
  1. Init global params via iosHelper::Gio_SetParam()
  2. Tentukan log path berdasarkan URI
  3. Insert log request ke file harian (storage/logs/)
  4. Buat atau ambil AES key/IV/CS dari DB per device
  5. Ekstrak headers: X-CLIENT-ID, X-TIMESTAMP, X-PARTNER-ID
  6. Validasi via check_access(): partner, token(3mnt), IP, URL, jam
  7. Set $_POST['status'] dan $_POST['message']
  8. Teruskan request ke controller
  9. Tambahkan CORS headers ke response

Deskripsi Helper Classes

HelperUkuranFungsi Utama
MBankingHelper~25KB checkAccess() SNAP/mBanking, Gio_PostTransferVA(), enkripsi Gio_Encrypt/Decrypt/Decode(), Gio_InsertIntoFolio/Mutasi(), logging
MobileHelper~16KB Check_Register/Login/OTP(), Change_Password/PIN(), ATM_GetToken/ValidToken(), Gio_InsertIntoFolio/Mutasi(), Gio_GetNoReferensi()
SNAPHelper~16KB checkTransferVA() validasi SNAP, Gio_PostTransferVA(), log per external ID, Gio_CheckToken(), Gio_GetReferenceVA()
TabunganHelper~14KB Check_StatusTabungan/Rekening(), Get_FolioTabungan/Pinjaman/Deposito(), Gio_CheckSaldo/Pin(), GetModulCode(), Gio_InsTransaksiPPOB()
TransferHelper~9KB checkTransferIn() (legacy), Gio_GetNasabah() cari by VA, Gio_InqTransferIn/PostTransferIn(), Ins_TransferAR(), logging
iosHelper~14KB Gio_CheckToken() 3 menit, Gio_CreateKeyAndIv/GetKeyAndIv(), Gio_Encrypt/Decrypt() AES, Get_DaftarRek(), Gio_GetConfig(), Gio_SetParam()
iosTransferHelper~7KB Ins_TransferAR(), Gio_CheckSaldo() + limit, Gio_CheckPIN(), Gio_InsTransferARLog(), Gio_InsTransferVALog(), Get_TransferCost()

Modul Rekening (GetModulCode / prefix norek):

PrefixKode ModulJenis Rekening
01, 02, 03 (lainnya)bTabungan
10, 11eTakamas (tabungan khusus)
20fSipura
30gSitirta
40hSimapan
33, 34DDeposito

Panduan Troubleshooting

Error: "could not find driver" (SQL Server)
Error: file_get_contents() saat boot (config/app.php)
Warning: Deprecated PHP 8.x
Error: Composer autoload Helper not found
Error 403: IP tidak dikenal
Token selalu expired / invalid
Storage / log permission error

Lokasi Log Files

Path LogIsi
storage/logs/token/request.logLog request get access token (harian)
storage/logs/access.txtLog akses umum iOS (harian)
storage/logs/tabungan.txtLog request endpoint tabungan
storage/logs/transfer-AR.txtLog transfer sesama LPD
storage/logs/transfer-AB.txtLog transfer antar bank
storage/logs/ppob.txtLog request PPOB
storage/logs/transfer-in/inquiry/Log SNAP inquiry (per external ID)
storage/logs/transfer-in/posting/Log SNAP payment (per external ID)
storage/logs/laravel-YYYY-MM-DD.logLog Laravel standar

Terminal Interaktif

Sandbox: /home/user
user@sandbox:~$

Perintah Cepat

Catatan: Terminal berjalan di sandbox server. Perintah berbahaya (rm -rf /, fork bomb, dll) diblokir. Timeout 15 detik per perintah.