# API Pembayaran Keluar - Buat (payment_dfpay_add.html)

Endpoint untuk membuat request pembayaran keluar (payout) kepada customer.

## Deskripsi

Endpoint ini digunakan untuk membuat request pembayaran/pencairan dana ke customer, e-wallet, atau bank. Biasanya digunakan untuk pengembalian dana, komisi, atau pembayaran gaji.

## Endpoint

```
POST https://pay-test.targeted.work/payment_dfpay_add.html
```

## Parameter Request

| Nama | Tipe | Wajib | Deskripsi |
|---|---|---|---|
| memberId | string | ✓ | Nomor merchant |
| orderNo | string | ✓ | Nomor order payout unik (max 50 karakter, tidak boleh duplikat) |
| amount | integer | ✓ | Jumlah pembayaran dalam Rupiah (Rp 10.000 - Rp 25.000.000) |
| dstCode | string | ✓ | Kode bank/e-wallet tujuan (lihat: Kode Pembayaran Keluar) |
| name | string | ✓ | Nama penerima (alfabet, titik, spasi, maksimal 35 karakter) |
| account | string | ✓ | Nomor rekening tujuan (9-18 digit, atau nomor phone untuk e-wallet) |
| remark | string |  | Keterangan pembayaran (optional, max 100 karakter) |
| sign | string | ✓ | Signature MD5 untuk verifikasi keamanan |

## Struktur Response

```json
{
  "status": "success|error",
  "msg": "Pesan deskripsi",
  "errCode": null,
  "data": {
    "orderNo": "PAYOUT123",
    "dstCode": "OVO",
    "amount": "50000",
    "fee": "0",
    "totalAmount": "50000",
    "name": "John Doe",
    "account": "081234567890",
    "status": "0"
  }
}
```

## Penjelasan Response Data

| Field | Deskripsi |
|---|---|
| orderNo | Nomor order payout yang dibuat |
| dstCode | Kode bank/e-wallet tujuan |
| amount | Jumlah yang diakumulasikan |
| fee | Biaya admin (jika ada) |
| totalAmount | Total amount yang akan di-debit |
| name | Nama penerima |
| account | Nomor rekening/phone tujuan |
| status | Status payout (0=pending, 1=success, 2=failed) |

## Validasi Input

Sebelum mengirim request, pastikan:
- Amount antara Rp 10.000 - Rp 25.000.000
- Nomor rekening 9-18 digit (atau 10-12 digit untuk phone e-wallet)
- Nama penerima hanya alfabet dan spasi, maksimal 35 karakter
- dstCode valid dan terdukung

## Contoh Implementasi PHP

```php
<?php
$baseUrl = "https://pay-test.targeted.work/";
$endpoint = "payment_dfpay_add.html";

$data = [
    "memberId" => "10036",
    "orderNo" => "PAYOUT" . time(),
    "amount" => 50000,
    "dstCode" => "OVO",
    "name" => "John Doe",
    "account" => "081234567890",
    "remark" => "Refund order #123"
];

// 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') {
    echo "Payout berhasil dibuat dengan order: " . $result['data']['orderNo'];
    echo "Status: " . getStatusLabel($result['data']['status']);
    // Update database
} else {
    // Handle error
    echo "Error: " . $result['msg'] . " (Code: " . $result['errCode'] . ")";
}

function getStatusLabel($code) {
    $statuses = [
        '0' => 'Pending',
        '1' => 'Success',
        '2' => 'Failed'
    ];
    return $statuses[$code] ?? 'Unknown';
}
?>
```

## Status Payout

| Code | Status | Keterangan |
|---|---|---|
| 0 | PENDING | Menunggu proses |
| 1 | SUCCESS | Payout berhasil |
| 2 | FAILED | Payout gagal |

## Error Handling

Kemungkinan error:
- **1003**: Signature tidak cocok
- **1004**: Ada parameter yang tidak valid
- **1406**: Order No sudah digunakan
- **1403**: Saldo merchant tidak cukup
- **1621**: Bank/e-wallet tujuan tidak didukung
- **1607**: Nama penerima tidak cocok dengan rekening

---

**Catatan**: Pastikan saldo merchant cukup sebelum membuat payout. Saldo akan langsung dikurangi ketika request berhasil.
