duitku / laravel
Unofficial community-maintained Laravel integration for the Duitku Payment Gateway
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.8
- illuminate/console: ^12.0|^13.0
- illuminate/http: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
- illuminate/validation: ^12.0|^13.0
- illuminate/view: ^12.0|^13.0
Requires (Dev)
- larastan/larastan: ^3.13
- laravel/pint: ^1.27
- orchestra/testbench: ^10.0|^11.0
- pestphp/pest: ^3.0|^4.0
- pestphp/pest-plugin-laravel: ^3.0|^4.0
- phpstan/phpstan: ^2.3
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
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.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: '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:
- 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
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.