duitku/laravel

Duitku Payment Gateway for Laravel

Maintainers

Package info

github.com/HasanH47/duitku-laravel

pkg:composer/duitku/laravel

Statistics

Installs: 4

Dependents: 0

Suggesters: 0

Stars: 2

Open Issues: 0

v2.0.0 2026-03-05 03:44 UTC

This package is auto-updated.

Last update: 2026-03-05 03:54:25 UTC


README

Tests Static Analysis PHP Version Laravel Version

SDK Laravel resmi komunitas untuk Duitku Payment Gateway β€” Modern, Typed, dan Production-Ready.

Apa itu SDK ini? SDK ini adalah "jembatan" antara aplikasi Laravel kamu dan Duitku. Tanpa SDK ini, kamu harus menulis kode HTTP request manual, menghitung signature sendiri, dan mengurus banyak hal teknis. Dengan SDK ini, semua itu sudah diurus β€” kamu tinggal panggil method-nya saja.

✨ Fitur Utama

Fitur Penjelasan
πŸ”’ Typed DTOs Semua request & response pakai object, bukan array mentah. IDE auto-complete jalan, typo ketahuan saat coding.
πŸ›‘οΈ Auto Signature Signature MD5/SHA256 digenerate & divalidasi otomatis. Tidak perlu hitung hash manual.
πŸš€ Parallel Check Cek status 50+ transaksi dalam <1 detik pakai Http::pool.
πŸ“’ Event-Driven Handle callback pakai Laravel Events β€” kode lebih bersih, gampang di-test.
πŸ’Έ Disbursement Transfer dana, cek saldo, verifikasi rekening β€” semua dari satu SDK.
⚑ Duitku POP Integrasi popup pembayaran tanpa redirect halaman.
πŸ§ͺ Testable Mudah di-mock pakai Http::fake(), dibuat dengan Pest PHP.
πŸ“ 33 Payment Methods Semua metode pembayaran Duitku tersedia sebagai PHP Enum.

πŸš€ Quick Start (5 Menit)

Langkah 1: Install

composer require duitku/laravel

Langkah 2: Publish Config

php artisan vendor:publish --tag=duitku-config

Perintah ini akan membuat file config/duitku.php di project kamu. File ini berisi semua pengaturan yang bisa kamu ubah.

Langkah 3: Setup .env

Tambahkan kredensial Duitku kamu. Kredensial ini didapat dari Dashboard Duitku.

# Wajib
DUITKU_MERCHANT_CODE=DXXX            # Merchant Code dari dashboard Duitku
DUITKU_API_KEY=xxx...xxx              # API Key dari dashboard Duitku
DUITKU_SANDBOX_MODE=true              # true = testing, false = production

# Opsional (untuk Disbursement / Transfer Dana)
DUITKU_USER_ID=your-user-id
DUITKU_EMAIL=your-email@example.com

# Opsional (untuk HTTP & Logging)
DUITKU_TIMEOUT=30                     # Timeout request dalam detik
DUITKU_RETRY_TIMES=0                  # Jumlah retry jika gagal
DUITKU_LOG_CHANNEL=                   # Channel log Laravel (kosongkan = tidak log)

Langkah 4: Buat Pembayaran Pertamamu! πŸŽ‰

use Duitku\Laravel\Facades\Duitku;
use Duitku\Laravel\Data\PaymentRequest;

// 1. Buat request pembayaran
$request = new PaymentRequest(
    amount: 50000,                              // Nominal pembayaran (dalam Rupiah)
    merchantOrderId: 'INV-' . time(),           // ID unik untuk order ini
    productDetails: 'Topup 50 Diamonds',        // Deskripsi produk
    email: 'pelanggan@example.com',             // Email pelanggan
    paymentMethod: 'VC'                         // Metode bayar (opsional)
);

// 2. Kirim ke Duitku β†’ dapat URL pembayaran
$response = Duitku::checkout($request);

// 3. Arahkan pelanggan ke halaman pembayaran Duitku
return redirect($response->paymentUrl);

Apa yang terjadi? Duitku akan membuat "invoice" pembayaran dan memberikan URL. Pelanggan kamu akan diarahkan ke URL tersebut untuk menyelesaikan pembayaran (transfer VA, scan QRIS, dll).

πŸ“‹ Contoh Fitur Lainnya

Cek Status Transaksi

use Duitku\Laravel\Support\PaymentCode;

$status = Duitku::checkStatus('INV-123');

if ($status->statusCode === PaymentCode::SUCCESS) {
    echo "βœ… Sudah dibayar!";
}

Cek Banyak Transaksi Sekaligus (Parallel) πŸš€

// Cek 100 transaksi dalam < 1 detik!
$statuses = Duitku::checkStatuses(['INV-001', 'INV-002', 'INV-003']);

foreach ($statuses as $status) {
    echo "{$status->merchantOrderId}: {$status->statusCode}";
}

Handle Callback (Webhook) dengan Events

// Di Controller β€” cukup 1 baris!
public function callback(Request $request)
{
    Duitku::handleCallback($request->all()); // Auto validasi + dispatch event
    return response('OK');
}

// Di Listener β€” tangkap event pembayaran sukses
class UpdateOrderPaid
{
    public function handle(DuitkuPaymentReceived $event)
    {
        $order = Order::where('id', $event->callback->merchantOrderId)->first();
        $order->update(['status' => 'paid']);
    }
}

Duitku POP (Pembayaran Popup)

// Backend: dapatkan reference token
$response = Duitku::pop()->createTransaction($request);

// Frontend: tampilkan popup dengan Blade Component
<x-duitku-pop :reference="$response->reference" button-text="Bayar Sekarang" />

Disbursement (Transfer Dana)

// 1. Verifikasi rekening tujuan
$inquiry = Duitku::disbursement()->bankInquiry($info);
echo "Nama: " . $inquiry->accountName;

// 2. Eksekusi transfer
$transfer = Duitku::disbursement()->transfer(...);

πŸ—ΊοΈ Kapan Pakai API vs POP?

API (Redirect) POP (Popup)
Cara Kerja Pelanggan diarahkan ke halaman Duitku Popup muncul di halaman kamu
Metode Bayar Bisa pilih satu metode spesifik Pelanggan pilih sendiri di popup
Cocok Untuk E-commerce, checkout standar SaaS, top-up, donasi
User Experience Redirect β†’ bayar β†’ kembali Bayar langsung tanpa pindah halaman

πŸ“– Dokumentasi Lengkap

Dokumentasi detail tersedia di VitePress Docs:

  1. Introduction β€” Kenapa pakai SDK ini
  2. Installation β€” Instalasi step-by-step
  3. Configuration β€” Semua opsi konfigurasi
  4. Payments β€” Buat pembayaran dengan typed DTOs
  5. Duitku POP β€” Integrasi popup
  6. Callback System β€” Handle webhook
  7. Error Handling β€” Exception & error codes
  8. Disbursement β€” Transfer dana
  9. Blade Components β€” UI components

πŸ§ͺ Testing

# Jalankan semua test
composer test

# Static analysis
./vendor/bin/phpstan analyse

🀝 Contributing

Contributions are welcome! Silakan buka Issue atau Pull Request.

πŸ“„ Lisensi

MIT License β€” lihat file LICENSE untuk detail.