Search by

duitku / laravel

HasanH47

Unofficial community-maintained Laravel integration for the Duitku Payment Gateway

v3.0.0 2026-10-22 10:20 UTC

This package is auto-updated.

Last update: 2026-10-22 12:01:38 UTC


README

Tests Static Analysis PHP Version Laravel Version

SDK komunitas untuk mengintegrasikan Duitku Payment Gateway dengan Laravel 12–13.

Status: Ini proyek komunitas independen, bukan produk resmi, afiliasi, atau endorsement dari Duitku. Lihat cakupan kompatibilitas dan hasil pengujian sebelum mengandalkan fitur atau channel tertentu.

Seri v3 membawa perubahan breaking. Baca panduan migrasi dan changelog sebelum memperbarui instalasi lama: signature default sekarang HMAC-SHA256, callback memverifikasi status provider, dan hasil batch memakai BatchResult.

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 HMAC-SHA256 untuk pembayaran dan POP; protokol disbursement tetap terpisah.
πŸš€ Parallel Check Request async dengan concurrency terbatas dan hasil/error per input.
πŸ“’ 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.
πŸ“ Payment Method Enum Gunakan PaymentMethod::active() dan daftar metode dari API untuk pilihan yang tersedia.

πŸš€ Quick Start (5 Menit)

Langkah 1: Install

composer require duitku/laravel:^3.0

Langkah 2: Publish Config

php artisan vendor:publish --tag=duitku-config
# Jika menggunakan Blade component POP:
php artisan vendor:publish --tag=duitku-assets

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: 'BC',                        // Wajib untuk API checkout; opsional pada POP
    customerVaName: 'Pelanggan',
    callbackUrl: route('duitku.callback'),
    returnUrl: route('checkout.return'),
);

// 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) πŸš€

// Maksimum 5 request aktif secara default; waktu selesai bergantung pada provider.
$statuses = Duitku::checkStatuses(['INV-001', 'INV-002', 'INV-003']);

foreach ($statuses as $result) {
    if ($result->successful()) {
        $status = $result->get();
        echo "{$result->key}: {$status->statusCode}";
    } else {
        report($result->error);
    }
}

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 aplikasi, daftarkan listener idempotent untuk DuitkuPaymentReceived.
// Contoh lengkap yang diuji tersedia pada tautan di bawah.

Salin dan sesuaikan contoh listener idempotent ke aplikasi kamu. Event dapat dikirim lebih dari sekali; SDK tidak menyimpan order atau menjanjikan exactly-once delivery.

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()->transfer()->inquiry($info);
echo "Nama: " . $inquiry->accountName;

// 2. Eksekusi transfer
$transfer = Duitku::disbursement()->transfer()->execute(
    disburseId: $inquiry->disburseId,
    info: $info,
    accountName: $inquiry->accountName,
    custRefNumber: $inquiry->custRefNumber,
);

πŸ—ΊοΈ 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, termasuk cakupan kompatibilitas dan hasil verifikasi:

  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

Periksa konfigurasi dengan php artisan duitku:doctor; tambahkan --pop, --disbursement, atau --strict sesuai kebutuhan. Command tidak menghubungi provider atau menampilkan kredensial.

Untuk test aplikasi, Duitku::fake()->payment('ORDER-001', 10000, statusCode: '00') menyediakan respons sintetis sambil mempertahankan validasi dan event SDK. Baca panduan diagnosis dan fake provider serta hasil sandbox.

# Jalankan semua test
composer test

# Static analysis
./vendor/bin/phpstan analyse

# Formatter dan test JavaScript POP
composer format:check
node tests/js/pop.test.cjs

🀝 Contributing

Dependabot memantau dependency, sedangkan workflow mingguan memantau perubahan dokumentasi dan SDK resmi Duitku. Perubahan upstream dilaporkan melalui satu issue terbuka yang terus diperbarui. Baca panduan pemantauan untuk menindaklanjuti perubahan dan memperbarui baseline.

Kontribusi bug fix, dokumentasi, test, dan fitur diterima melalui issue atau pull request. Baca panduan kontribusi, Code of Conduct, dan panduan bantuan. Kerentanan dilaporkan melalui kebijakan keamanan.

πŸ“„ Lisensi

MIT License β€” lihat file LICENSE untuk detail.