# API Penerimaan Pembayaran - Non Kasir (pay.html)

Endpoint untuk menerima pembayaran langsung (non-counter) tanpa redirect ke halaman kasir.

## Deskripsi

Metode ini digunakan ketika merchant sudah memiliki halaman tampilan sendiri dan ingin menampilkan informasi pembayaran secara langsung kepada customer. Payment gateway hanya menyediakan nomor VA, kode pembayaran, atau QR code.

## Endpoint

```
POST https://pay-test.targeted.work/pay.html
```

## Parameter Request

| Nama | Tipe | Wajib | Deskripsi |
|---|---|---|---|
| memberId | string | ✓ | Nomor merchant (diberikan saat registrasi) |
| orderId | string | ✓ | Nomor order unik (max 50 karakter, tidak boleh duplikat) |
| amount | integer | ✓ | Jumlah pembayaran dalam Rupiah (Rp 10.000 - sesuai limit metode) |
| dstCode | string | ✓ | Kode metode pembayaran (lihat: Kode Penerimaan Pembayaran) |
| name | string | ✓ | Nama customer (hanya alfabet, titik, dan spasi) |
| phone | string | ✓ | Nomor telepon customer (minimal 10 digit) |
| email | string | ✓ | Email customer (format valid) |
| notifyUrl | string | ✓ | URL callback untuk notifikasi payment (http/https) |
| dateTime | string |  | Tanggal waktu request (format: YYYY-MM-DD HH:MM:SS, optional) |
| remark | string |  | Keterangan tambahan (optional, max 200 karakter) |
| sign | string | ✓ | Signature MD5 untuk verifikasi keamanan |

## Struktur Response

```json
{
  "status": "success|error",
  "msg": "Pesan deskripsi",
  "errCode": null,
  "data": {
    "orderId": "ORDER123",
    "dstCode": "PERMATA",
    "bankName": "PERMATA",
    "amount": "50000",
    "fee": "2000",
    "totalAmount": "52000",
    "account": "898765432109",
    "accountName": "Company Name",
    "expireTime": "2024-04-26 20:18:18"
  }
}
```

## Penjelasan Response Data

| Field | Deskripsi |
|---|---|
| orderId | Nomor order yang dikirim |
| dstCode | Kode metode pembayaran yang digunakan |
| bankName | Nama bank/metode pembayaran |
| amount | Jumlah pembayaran yang diminta customer |
| fee | Biaya admin (jika ada) |
| totalAmount | Total amount yang harus dibayar (amount + fee) |
| account | Nomor rekening/VA untuk pembayaran |
| accountName | Nama pemegang rekening/VA |
| expireTime | Waktu kadaluarsa pembayaran |

## Contoh Implementasi PHP

```php
<?php
$baseUrl = "https://pay-test.targeted.work/";
$endpoint = "pay.html";

$data = [
    "memberId" => "10036",
    "orderId" => "ORDER" . time(),
    "amount" => 50000,
    "dstCode" => "PERMATA",
    "name" => "John Doe",
    "phone" => "08123456789",
    "email" => "john@example.com",
    "notifyUrl" => "https://yoursite.com/callback.php",
    "dateTime" => date("Y-m-d H:i:s")
];

// Generate signature
$data['sign'] = generateSignature($data, "150kz9esh1s2f793abb8l0e4mjot3r2c");

// Send request
$response = curlPost($baseUrl . $endpoint, $data);

// Response handling
$result = json_decode($response, true);
if ($result['status'] == 'success') {
    // Display payment info
    echo "Virtual Account: " . $result['data']['account'];
    echo "Amount: Rp " . number_format($result['data']['totalAmount']);
    echo "Expire: " . $result['data']['expireTime'];
} else {
    // Handle error
    echo "Error: " . $result['msg'];
}
?>
```

## Error Handling

Kemungkinan error yang dapat terjadi:
- **1003**: Signature tidak cocok
- **1004**: Ada parameter yang tidak valid
- **1003**: Merchant ID salah
- **1406**: Order ID sudah digunakan
- **1501**: dstCode tidak valid

---

**Catatan**: Pastikan customer diberi waktu hingga expireTime untuk melakukan pembayaran.
