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

v1.0.1 2025-05-30 03:03 UTC

This package is auto-updated.

Last update: 2025-12-30 05:16:55 UTC


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
{
"amount": 10000,
"description": "Top up"
}
POST /api/wallet/{wallet_id}/withdraw Withdraw dari wallet
{
"amount": 5000,
"description": "Beli pulsa",
"meta": {
"ref": "REF123456"
}
}
POST /api/wallet/{wallet_id}/transfer Transfer ke wallet lain
{
"to_wallet_id": 2,
"amount": 2500,
"description": "Bayar utang",
"meta": {
"ref": "REF123456"
}
}
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.