Skip to content

Configuration ​

Halaman ini menjelaskan semua opsi konfigurasi yang tersedia di SDK ini — apa fungsinya, kapan perlu diubah, dan nilai yang direkomendasikan.


File Konfigurasi ​

Setelah menjalankan vendor:publish, file config/duitku.php akan muncul di project kamu. Berikut isi lengkapnya beserta penjelasan:

php
return [
    // Kode unik merchant dari Dashboard Duitku
    'merchant_code' => env('DUITKU_MERCHANT_CODE', ''),

    // API Key rahasia dari Dashboard Duitku
    'api_key' => env('DUITKU_API_KEY', ''),

    // Mode sandbox: true = testing, false = production
    'sandbox_mode' => env('DUITKU_SANDBOX_MODE', true),

    'signature_mode' => env('DUITKU_SIGNATURE_MODE', 'hmac-sha256'),
    'verify_callback_status' => env('DUITKU_VERIFY_CALLBACK_STATUS', true),

    // Waktu expired pembayaran dalam menit
    'default_expiry' => env('DUITKU_DEFAULT_EXPIRY', 60),

    // Kredensial untuk fitur Disbursement
    'user_id' => env('DUITKU_USER_ID', ''),
    'email' => env('DUITKU_EMAIL', ''),

    // HTTP Client settings
    'timeout' => env('DUITKU_TIMEOUT', 30),
    'retry_times' => env('DUITKU_RETRY_TIMES', 0),
    'retry_sleep' => env('DUITKU_RETRY_SLEEP', 100),
    'log_channel' => env('DUITKU_LOG_CHANNEL', null),
    'batch_concurrency' => env('DUITKU_BATCH_CONCURRENCY', 5),
];

Penjelasan Detail Setiap Opsi ​

merchant_code ​

Apa ini?Kode unik yang mengidentifikasi toko/merchant kamu di sistem Duitku
Dapat dari mana?Dashboard Duitku
Wajib?✅ Ya — tanpa ini, SDK tidak bisa berkomunikasi dengan Duitku
Contoh'D0001', 'DS1234'

WARNING

Merchant Code untuk Sandbox dan Production berbeda! Pastikan kamu menggunakan yang sesuai dengan mode yang aktif.


api_key ​

Apa ini?Kunci rahasia untuk menghasilkan signature (tanda tangan digital)
FungsinyaSetiap request ke Duitku harus disertai signature agar Duitku yakin request-nya benar dari kamu
Dapat dari mana?Dashboard Duitku → klik "API Keys"
Wajib?✅ Ya

IMPORTANT

Jangan pernah meng-commit API Key ke Git! Selalu simpan di .env dan pastikan .env ada di .gitignore.


sandbox_mode ​

Apa ini?Menentukan apakah SDK mengarah ke server testing (Sandbox) atau server sungguhan (Production)
trueMode testing — transaksi simulasi, tidak ada uang sungguhan
falseMode production — transaksi sungguhan dengan uang asli
Defaulttrue (supaya developer baru tidak langsung kena biaya)

CAUTION

Jangan lupa ubah ke false saat deploy ke production! Jika lupa, pelanggan kamu tidak bisa bayar sungguhan.


default_expiry ​

Apa ini?Berapa lama (dalam menit) invoice pembayaran berlaku sebelum expired
Default60 (1 jam)
Kapan diubah?Jika kamu ingin pembayaran berumur lebih lama (misal 24 jam = 1440)

Contoh:

  • Toko online biasa: 60 menit (1 jam)
  • Tiket event: 30 menit (supaya cepat expired dan tiket bisa dijual lagi)
  • Tagihan bulanan: 1440 menit (24 jam)

Kamu juga bisa mengatur expiry per transaksi melalui parameter expiryPeriod di PaymentRequest.


user_id & email ​

Apa ini?Kredensial khusus untuk fitur Disbursement (Transfer Dana)
Wajib?❌ Tidak — hanya jika kamu pakai fitur transfer dana
Dapat dari mana?Hubungi tim Duitku untuk mengaktifkan fitur Disbursement

timeout ​

Apa ini?Berapa lama (dalam detik) SDK menunggu response dari Duitku sebelum menyerah
Default30 detik
Kalau terlalu kecil?Request bisa gagal padahal Duitku belum selesai memproses
Kalau terlalu besar?User menunggu terlalu lama jika Duitku sedang lambat

Rekomendasi:

  • Development: 30 detik (default)
  • Production: 15 detik (supaya user tidak menunggu terlalu lama)

retry_times ​

Apa ini?Percobaan tambahan untuk operasi baca/status saat connection error, HTTP 429, atau HTTP 5xx
Default0 (tidak retry sama sekali)
Kapan diubah?Sesuaikan dengan batas waktu aplikasi; invoice dan eksekusi payout tidak diulang otomatis

Analogi: Bayangkan kamu telepon seseorang tapi tidak diangkat. retry_times = berapa kali kamu mau telepon ulang sebelum menyerah.


retry_sleep ​

Apa ini?Jeda (dalam milidetik) antara setiap percobaan ulang
Default100 ms
Kapan diubah?Jika ingin menunggu lebih lama antar retry (misal 500 ms)

log_channel ​

Apa ini?Nama channel log Laravel untuk mencatat metadata request ke Duitku API
Defaultnull (tidak log)
Kapan diaktifkan?Saat debugging atau di production untuk audit trail
Contoh value'stack', 'daily', 'duitku' (channel custom kamu)

Jika diaktifkan, SDK akan mencatat:

  • Host dan path yang dipanggil
  • Method HTTP (POST)

Body, query string, dan header tidak dicatat karena dapat mengandung data pelanggan atau kredensial replay. Log metadata ini bukan catatan transaksi lengkap.

TIP

Untuk production, buat channel log terpisah agar log Duitku tidak bercampur dengan log aplikasi lain:

php
// config/logging.php
'channels' => [
    'duitku' => [
        'driver' => 'daily',
        'path' => storage_path('logs/duitku.log'),
        'days' => 14,
    ],
],

Lalu set DUITKU_LOG_CHANNEL=duitku di .env.


🏭 Contoh Konfigurasi Production ​

dotenv
DUITKU_MERCHANT_CODE=DPROD01
DUITKU_API_KEY=your-production-api-key
DUITKU_SANDBOX_MODE=false
DUITKU_TIMEOUT=15
DUITKU_RETRY_TIMES=3
DUITKU_RETRY_SLEEP=500
DUITKU_LOG_CHANNEL=duitku

🧪 Contoh Konfigurasi Development ​

dotenv
DUITKU_MERCHANT_CODE=DSAND01
DUITKU_API_KEY=your-sandbox-api-key
DUITKU_SANDBOX_MODE=true
DUITKU_TIMEOUT=30
DUITKU_RETRY_TIMES=0
DUITKU_LOG_CHANNEL=

Setelah konfigurasi siap, saatnya mulai membuat pembayaran! Lanjut ke Usage - Payments. 🚀

Pengaturan rilis major ​

signature_mode memilih hmac-sha256 (default) atau legacy secara eksplisit. verify_callback_status default true dan menambahkan verifikasi server sebelum event pembayaran.

batch_concurrency default 5, dengan batas 1–20. Timeout harus 1–300 detik; retry times adalah 0–5 percobaan tambahan untuk operasi baca/status, dengan jeda 0–60.000 milidetik. Operasi invoice dan eksekusi payout tidak diulang otomatis.

Logging hanya menyimpan metadata request tanpa body, header, atau query string. Lihat panduan migrasi untuk perubahan kontrak dan pengaturan lengkap.

Released under the MIT License.