# Modul Perak ePay

Folder ini menyediakan rangka awal integrasi Perak ePay untuk sistem Eco-Tourism.

## Fail

- `config.php` - konfigurasi staging, token, seller ID, kod PTJ dan kod hasil.
- `functions.php` - helper ambil data permohonan, bina payload, hantar permintaan ePay, log respons.
- `index.php` - paparan semakan bayaran sebelum dihantar ke ePay.
- `run.php` - hantar payload ke `https://dev-epay.perak.gov.my/api/run`.
- `return.php` - halaman kembali selepas bayaran.
- `callback.php` - endpoint callback/IPN sekiranya ePay menghantar notifikasi server-to-server.
- `logs/` - log request, response, return dan callback.
- `../db/migration_epay_sellerid_20260706.sql` - update `pjb_b2c` dan `pjb_b2b` dalam `glo_pjbtkod`.

## Seller ID

Payload ePay memilih seller ID berdasarkan `seller_type` dalam `config.php`:

- `seller_type = b2c` menghantar `b2c_sellerId` daripada `glo_pjbtkod.pjb_b2c`.
- `seller_type = b2b` menghantar `b2b_sellerId` daripada `glo_pjbtkod.pjb_b2b`.

Pejabat ditentukan melalui `skv_rekodct.rek_kodpjbt = glo_pjbtkod.pjb_kodpjbt`.

## Kod Hasil

Modul ini menggunakan `fid = 5` untuk menyokong pecahan multi kod hasil.

- `glo_transak.sak_kodhasil` merujuk kepada `glo_hasilkod.hsl_kodhasil`.
- Kod yang dihantar ke ePay ialah `glo_hasilkod.hsl_kodkewa`.
- Item `skv_permit.sem_kodtran` akan mengambil kod hasil melalui `glo_transak.sak_kodhasil`.
- Jika `sak_kodhasil` belum diisi, modul fallback kepada `kod_hasil` dalam `config.php`.
- Untuk `fid = 5`, modul membina array dalaman bagi `amount`, `bill_detail`, `bill_date`, `bill_end_date`, `kod_hasil`, dan `kod_ptj`, kemudian menghantarnya kepada ePay sebagai query params berindeks seperti `amount[0]`, `kod_hasil[0]`.

Migration berkaitan:

```text
db/migration_epay_multi_kodhasil_20260706.sql
```

## Cara uji

Buka:

```text
http://localhost/jpn/ecotourism/epay/index.php?rekid=NO_REKOD
```

Gantikan `NO_REKOD` dengan nilai `rek_cutiid` yang sah.

## Nota integrasi seterusnya

Butang di `spa_semakan.php` masih menunjuk ke JomPay. Selepas respons ePay staging disahkan, pautan itu boleh ditukar kepada:

```text
epay/index.php?rekid=<?php echo $rowsa['rek_cutiid']; ?>
```

Pemetaan kemas kini bayaran ke `skv_rekodct` / `ktp_bayaran` perlu dibuat selepas format respons rasmi ePay untuk transaksi berjaya, gagal dan batal disahkan.
