duitku / laravel
Duitku Payment Gateway for Laravel
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.8
- illuminate/http: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- larastan/larastan: ^2.0
- laravel/pint: ^1.27
- orchestra/testbench: ^8.0|^9.0|^10.0
- pestphp/pest: ^2.34|^3.0|^4.0
- pestphp/pest-plugin-laravel: ^2.0|^3.0|^4.0
- phpstan/phpstan: ^1.10
README
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.phpdi 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:
- Introduction β Kenapa pakai SDK ini
- Installation β Instalasi step-by-step
- Configuration β Semua opsi konfigurasi
- Payments β Buat pembayaran dengan typed DTOs
- Duitku POP β Integrasi popup
- Callback System β Handle webhook
- Error Handling β Exception & error codes
- Disbursement β Transfer dana
- 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.