fyyyn1210 / kursbi
Laravel package sederhana untuk mengambil data kurs mata uang Bank Indonesia secara dinamis dengan fitur filter tanggal, jumlah konversi, dan limit hasil.
Requires
- php: >=7.4
- guzzlehttp/guzzle: ^7.0
- illuminate/support: ^8.0|^9.0|^10.0
README
Paket PHP untuk mengambil data kurs mata uang dari Bank Indonesia (BI) untuk PHP & Laravel.
📋 Deskripsi
KursBI adalah library PHP yang memudahkan pengambilan data kurs mata uang dari API resmi Bank Indonesia. Paket ini mendukung:
- ✅ Pengambilan kurs untuk satu atau beberapa mata uang sekaligus
- ✅ Penentuan rentang tanggal data kurs
- ✅ Pembatasan jumlah data hasil (limit)
- ✅ Konversi jumlah nominal berdasarkan kurs beli dan jual
- ✅ Caching data agar efisien dan mengurangi request berulang
- ✅ User-Agent dinamis untuk request yang lebih natural
- ✅ Support untuk Laravel Cache
🚀 Instalasi
Install via Composer:
composer require fyyyn1210/kursbi
💡 Penggunaan
Import Class
use Fyyyn1210\KursBI;
Inisialisasi
$kursBI = new KursBI();
📖 Contoh Penggunaan
1. Mendapatkan Kurs USD Hari Ini
use Fyyyn1210\KursBI; $kursBI = new KursBI(); $result = $kursBI->getKurs('USD'); print_r($result);
Return Value:
Array ( [success] => 1 [mata_uang_count] => 1 [data] => Array ( [0] => Array ( [mata_uang] => USD [periode] => Array ( [start] => 2025-08-02 [end] => 2025-08-02 ) [jumlah_input] => [jumlah_data] => 1 [rata_rata] => Array ( [beli] => 15485.50 [jual] => 15561.50 ) [total_konversi] => [data] => Array ( [0] => Array ( [tanggal] => 2025-08-02 [nilai] => 1 [beli] => 15485.50 [jual] => 15561.50 ) ) ) ) )
2. Mendapatkan Kurs Beberapa Mata Uang
$result = $kursBI->getKurs('USD,EUR,JPY'); print_r($result);
Return Value:
Array ( [success] => 1 [mata_uang_count] => 3 [data] => Array ( [0] => Array ( [mata_uang] => USD [periode] => Array ( [start] => 2025-08-02 [end] => 2025-08-02 ) [jumlah_input] => [jumlah_data] => 1 [rata_rata] => Array ( [beli] => 15485.50 [jual] => 15561.50 ) [total_konversi] => [data] => Array ( [0] => Array ( [tanggal] => 2025-08-02 [nilai] => 1 [beli] => 15485.50 [jual] => 15561.50 ) ) ) [1] => Array ( [mata_uang] => EUR [periode] => Array ( [start] => 2025-08-02 [end] => 2025-08-02 ) [jumlah_input] => [jumlah_data] => 1 [rata_rata] => Array ( [beli] => 16850.25 [jual] => 16927.75 ) [total_konversi] => [data] => Array ( [0] => Array ( [tanggal] => 2025-08-02 [nilai] => 1 [beli] => 16850.25 [jual] => 16927.75 ) ) ) [2] => Array ( [mata_uang] => JPY [periode] => Array ( [start] => 2025-08-02 [end] => 2025-08-02 ) [jumlah_input] => [jumlah_data] => 1 [rata_rata] => Array ( [beli] => 103.45 [jual] => 103.89 ) [total_konversi] => [data] => Array ( [0] => Array ( [tanggal] => 2025-08-02 [nilai] => 100 [beli] => 103.45 [jual] => 103.89 ) ) ) ) )
3. Mendapatkan Kurs dengan Rentang Tanggal
$result = $kursBI->getKurs( 'USD', '2025-08-01', '2025-08-02' ); print_r($result);
Return Value:
Array ( [success] => 1 [mata_uang_count] => 1 [data] => Array ( [0] => Array ( [mata_uang] => USD [periode] => Array ( [start] => 2025-08-01 [end] => 2025-08-02 ) [jumlah_input] => [jumlah_data] => 2 [rata_rata] => Array ( [beli] => 15480.25 [jual] => 15556.25 ) [total_konversi] => [data] => Array ( [0] => Array ( [tanggal] => 2025-08-01 [nilai] => 1 [beli] => 15475.00 [jual] => 15551.00 ) [1] => Array ( [tanggal] => 2025-08-02 [nilai] => 1 [beli] => 15485.50 [jual] => 15561.50 ) ) ) ) )
4. Mendapatkan Kurs dengan Limit Data
$result = $kursBI->getKurs( 'USD', '2025-07-28', '2025-08-02', 2 // limit hanya 2 data ); print_r($result);
Return Value:
Array ( [success] => 1 [mata_uang_count] => 1 [data] => Array ( [0] => Array ( [mata_uang] => USD [periode] => Array ( [start] => 2025-07-28 [end] => 2025-08-02 ) [jumlah_input] => [jumlah_data] => 2 [rata_rata] => Array ( [beli] => 15478.25 [jual] => 15554.25 ) [total_konversi] => [data] => Array ( [0] => Array ( [tanggal] => 2025-07-28 [nilai] => 1 [beli] => 15471.00 [jual] => 15547.00 ) [1] => Array ( [tanggal] => 2025-07-29 [nilai] => 1 [beli] => 15485.50 [jual] => 15561.50 ) ) ) ) )
5. Konversi Mata Uang dengan Jumlah Tertentu
$result = $kursBI->getKurs( 'USD', null, // tanggal hari ini null, // tanggal hari ini null, // tanpa limit 1000 // konversi $1000 ); print_r($result);
Return Value:
Array ( [success] => 1 [mata_uang_count] => 1 [data] => Array ( [0] => Array ( [mata_uang] => USD [periode] => Array ( [start] => 2025-08-02 [end] => 2025-08-02 ) [jumlah_input] => 1000 [jumlah_data] => 1 [rata_rata] => Array ( [beli] => 15485.50 [jual] => 15561.50 ) [total_konversi] => Array ( [beli] => 15485500 [jual] => 15561500 ) [data] => Array ( [0] => Array ( [tanggal] => 2025-08-02 [nilai] => 1 [beli] => 15485.50 [jual] => 15561.50 [konversi_beli] => 15485500 [konversi_jual] => 15561500 ) ) ) ) )
6. Penggunaan Kompleks - Multiple Currency dengan Konversi
$result = $kursBI->getKurs( 'USD,EUR,SGD', '2025-08-01', '2025-08-02', 1, // limit 1 data per mata uang 500 // konversi 500 unit mata uang ); print_r($result);
📚 API Reference
Method getKurs()
public function getKurs( string $mataUang = 'USD', string $startDate = null, string $endDate = null, int $limit = null, float $jumlah = null ): array
Parameters
Parameter | Type | Default | Deskripsi |
---|---|---|---|
$mataUang |
string |
'USD' |
Kode mata uang (bisa multiple, dipisah koma). Contoh: 'USD' atau 'USD,EUR,JPY' |
$startDate |
string|null |
null |
Tanggal mulai (format: Y-m-d). Jika null, akan menggunakan tanggal hari ini |
$endDate |
string|null |
null |
Tanggal akhir (format: Y-m-d). Jika null, akan menggunakan tanggal hari ini |
$limit |
int|null |
null |
Batas jumlah data yang dikembalikan per mata uang |
$jumlah |
float|null |
null |
Jumlah nominal untuk konversi mata uang |
Return Value
Method ini mengembalikan array dengan struktur:
[ 'success' => bool, // Status keberhasilan request 'mata_uang_count' => int, // Jumlah mata uang yang diminta 'data' => [ // Array data kurs per mata uang [ 'mata_uang' => string, // Kode mata uang 'periode' => [ 'start' => string, // Tanggal mulai 'end' => string // Tanggal akhir ], 'jumlah_input' => float|null, // Jumlah input untuk konversi 'jumlah_data' => int, // Jumlah data kurs 'rata_rata' => [ 'beli' => float, // Rata-rata kurs beli 'jual' => float // Rata-rata kurs jual ], 'total_konversi' => [ // Hanya ada jika $jumlah tidak null 'beli' => float, // Total konversi kurs beli 'jual' => float // Total konversi kurs jual ] | null, 'data' => [ // Array detail kurs per tanggal [ 'tanggal' => string, // Tanggal kurs 'nilai' => float, // Nilai nominal 'beli' => float, // Kurs beli 'jual' => float, // Kurs jual 'konversi_beli' => float, // Hasil konversi beli (jika ada) 'konversi_jual' => float // Hasil konversi jual (jika ada) ] ] ] ] ]
⚙️ Fitur
Caching
Library ini menggunakan Laravel Cache untuk menyimpan hasil request selama 6 jam. Cache key menggunakan format: kursbi_{kode_mata_uang}_{start_date}_{end_date}
.
User-Agent Dinamis
Setiap request menggunakan User-Agent yang digenerate secara random dari kombinasi OS dan browser populer untuk menghindari blocking.
Error Handling
Jika terjadi error saat mengambil data dari BI, method akan mengembalikan array kosong dan error akan di-report menggunakan fungsi report()
Laravel.
🎯 Mata Uang yang Didukung
Library ini mendukung semua mata uang yang tersedia di API Bank Indonesia, termasuk namun tidak terbatas pada:
- USD (US Dollar)
- EUR (Euro)
- JPY (Japanese Yen)
- GBP (British Pound)
- SGD (Singapore Dollar)
- AUD (Australian Dollar)
- CHF (Swiss Franc)
- CAD (Canadian Dollar)
- HKD (Hong Kong Dollar)
- CNY (Chinese Yuan)
- Dan mata uang lainnya yang didukung BI
📋 Requirements
- PHP >= 7.4
- Laravel >= 8.0
- GuzzleHttp/Guzzle
- Laravel Cache
🤝 Contributing
Kontribusi selalu diterima! Silakan buat pull request atau buka issue untuk bug report dan feature request.
📄 License
Library ini menggunakan lisensi MIT. Lihat file LICENSE untuk detail lengkap.
🐛 Bug Reports
Jika Anda menemukan bug, silakan buat issue di GitHub Issues dengan informasi:
- Versi PHP yang digunakan
- Versi Laravel yang digunakan
- Code snippet yang menyebabkan error
- Pesan error yang muncul
📞 Support
Jika Anda butuh bantuan atau memiliki pertanyaan, silakan:
- Buka issue di GitHub
- Email: [riosraskaa@gmail.com]
🎉 Credits
- Data kurs dari Bank Indonesia
- Terima kasih kepada semua kontributor
⭐ Jangan lupa berikan star jika library ini membantu Anda!