vergatan10 / laravel-wallet
Wallet module for Laravel with deposit, withdraw, and transfer features
Installs: 3
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/vergatan10/laravel-wallet
Requires
- php: ^8.1
- illuminate/support: ^10.0|^11.0|^12.0
README
*Supported Laravel versions: 10.x, 11.x, 12.x
Sebuah package Laravel untuk mengelola sistem wallet digital, termasuk fitur:
- Deposit
- Withdraw
- Transfer antar wallet
- Refund
- Pending transfer
- Lock / unlock wallet
- Transaction log
- Auto-create wallet saat user register
📦 Instalasi
Install via composer:
composer require vergatan10/laravel-wallet:1.0.1
Publish config & migration:
php artisan vendor:publish --provider="vendor\vergatan10\laravel-wallet\WalletServiceProvider" --tag=wallet-config
php artisan migrate
Tambahkan kode ini di model User
// App/Models/User.php use Vergatan10\Wallet\Models\Wallet; // relasi ke wallet public function wallet() { return $this->hasOne(Wallet::class); }
⚙️ Konfigurasi
Tambahkan ke .env jika ingin memberikan saldo awal otomatis saat user dibuat:
// .env WALLET_DEFAULT_BALANCE=10000
🧬 Fitur Otomatis
Khusus Laravel Breeze/Jetstream Wallet akan dibuat otomatis saat user mendaftar:
- Auto-create saat event Registered di-trigger
- Saldo awal mengikuti config wallet.default_balance
*Jika kamu create user secara manual ikuti langkah ini:
Tambahkan kode ini untuk menjalankan event setelah create user
// UserController.php use Illuminate\Auth\Events\Registered; use Illuminate\Support\Facades\Event; // create user $user = User::create([...]); // tambahkan kode ini untuk menjalankan event event(new Registered($user));
📥 API Endpoints
Semua route menggunakan prefix /api/wallet dan middleware auth:sanctum.
| Method | Endpoint | Keterangan | Body Contoh |
|---|---|---|---|
| GET | /api/wallet/{wallet_id} | Get wallet balance | - |
| GET | /api/wallet/{wallet_id}/transactions | Riwayat transaksi | - |
| POST | /api/wallet/{wallet_id}/deposit | Deposit ke wallet | { |
| POST | /api/wallet/{wallet_id}/withdraw | Withdraw dari wallet | { |
| POST | /api/wallet/{wallet_id}/transfer | Transfer ke wallet lain | { |
| POST | /api/wallet/{wallet_id}/transactions/{tx_id}/refund | Refund transaksi | - |
Contoh Body Request:
-
Deposit
{ "amount": 10000, "description": "Top up" } -
Withdraw
{ "amount": 5000, "description": "Beli pulsa", "meta": { "ref": "REF123456", ... } } -
Transfer
{ "to_wallet_id": 2, "amount": 2500, "description": "Bayar utang", "meta": { "ref": "REF123456", ... } }
📌 Semua endpoint kecuali create hanya bisa diakses oleh pemilik wallet (dengan middleware wallet.owner)
💡 Penggunaan via Facade
Gunakan facade Wallet untuk mengakses fitur:
use Vergatan10\Wallet\Facades\Wallet; use Vergatan10\Wallet\Models\Wallet as WalletModel; $wallet = WalletModel::find(1); // Deposit Wallet::deposit($wallet, 10000, 'Topup manual'); // Withdraw Wallet::withdraw($wallet, 5000, 'Penarikan'); // Transfer Wallet::transfer($fromWallet, $toWallet, 2500, 'Transfer antar user'); // Refund transaksi Wallet::refund($transaction); // Lock / Unlock $wallet->update(['is_locked' => true]);
🥪 Testing
Kamu bisa menambahkan unit test dengan Laravel built-in test tools.
Contoh:
public function test_user_can_deposit() { $wallet = Wallet::factory()->create(); Wallet::deposit($wallet, 10000, 'Test deposit'); $this->assertEquals(10000, $wallet->fresh()->balance); }
📂 Struktur File Package
packages/Vergatan10/Wallet/
├── src/
│ ├── config/
│ │ └── wallet.php
│ ├── Contracts/
│ ├── database/
│ │ └── migrations/
│ ├── Facades/
│ ├── Http/
│ │ ├── Controllers/
│ │ └── Middleware/
│ ├── Listeners/
│ ├── Models/
│ ├── routes/
│ ├── Services/
│ └── WalletServiceProvider.php
└── composer.json
🔐 Security
- Semua transaksi diperiksa apakah wallet sedang dikunci
- Transaksi tidak dapat dilakukan dari atau ke wallet yang locked
- Transfer bisa menggunakan pending state → butuh konfirmasi manual
✅ Todo & Rencana
- Deposit / Withdraw / Transfer
- Refund
- Lock / Unlock
- Konfirmasi transfer
- Limit transaksi harian
- Event listener / notifikasi
🧑💻 Kontribusi
Pull request & issue sangat diterima!
Silakan fork repo dan kirim PR.