Laravel Packages

Laravel Virtual Wallet

Published
Laravel Virtual Wallet image

Laravel Virtual Wallet is a lightweight, plug-and-play Laravel package created by Neeraj Saini for managing virtual wallets, supporting multiple wallet types, and keeping transaction logs that seamlessly integrate with any Laravel User model. It doesn't process payments, but it can allow users to track virtual money in their wallet after completing a payment through another payment processor if needed or virtual currency that can be used in games.

Main Features

  • Multi-Wallet Support: Create and manage multiple wallet types per user.
  • Transaction Management: All wallet operations are recorded for full traceability.
  • Payment Processing: Seamlessly handle payments between wallets or external systems.
  • Deposit Handling: Accept and log deposits from users or third-party services.
  • Multiple Currency Support: Easily manage wallet balances in various currencies.
  • Wallet Status Tracking: Monitor and update wallet statuses like active, frozen, or closed.
  • Secure & Reliable: Built using Laravel's Eloquent, enums, morphs & policy-friendly structure.
  • Highly Configurable: Override models, table names, and more via config.
  • Easy Integration: Use a trait on your model, and you're ready to go.
  • Balance Management: Simple credit, debit, transfer, and balance APIs.

Basic Example

Install the package via Composer and run the migrations:

composer require haxneeraj/laravel-virtual-wallet
php artisan vendor:publish --provider="Haxneeraj\LaravelVirtualWallet\LaravelVirtualWalletServiceProvider"
php artisan migrate

Next, ensure your User model implents the WalletInterface and uses the HasVirtualWallet trait.

use Haxneeraj\LaravelVirtualWallet\Interfaces\WalletInterface;
use Haxneeraj\LaravelVirtualWallet\Traits\HasVirtualWallet;
 
class User extends Authenticatable implements WalletInterface
{
use HasVirtualWallet;
}

Then, you can create a wallet:

$user->wallets()->create([
'wallet_type' => 'main',
'currency' => 'usd',
'balance' => 0, // initial balance
'currency_type' => 'fiat_currency',
'status' => 'active'
]);

Finally, begin make deposits or payments to the wallet:

$paymentData = new PaymentData([
'owner_type' => User::class,
'owner_id' => $this->user->id,
'txid' => '306f086a-c7ab-4c89-94b8-209653934aaf',
'amount' => 150,
'description' => 'Initial Transfer from External Account',
'wallet_type' => 'main',
'method' => 'automatic',
'transaction_type' => 'deposit',
'status' => 'approved',
'currency' => 'usd',
'currency_type' => 'fiat_currency'
]);
$user->deposit($paymentData);

To make a payment, you would create a similar PaymentData object with the relevant transaction information, change the transaction_type to withdraw, and then use the pay() method.

You can check the balance in your wallet with $user->getBalance('main') and also check if you have sufficient funds before making a payment with $user->hasSufficientBalance(50, 'main').

Learn more about this package and view the source code on GitHub.

Yannick Lyn Fatt photo

Staff Writer at Laravel News and Full stack web developer.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
PayZephyr: One Payment API for Stripe, Paystack, and PayPal image

PayZephyr: One Payment API for Stripe, Paystack, and PayPal

Read article
Bifrost Turns One With AI Builds and New Workflows image

Bifrost Turns One With AI Builds and New Workflows

Read article
Preview Blade Templates in macOS Finder with Quick Blade image

Preview Blade Templates in macOS Finder with Quick Blade

Read article
Artisan Debugging Commands in Laravel Telescope 5.24.0 image

Artisan Debugging Commands in Laravel Telescope 5.24.0

Read article
Queue totalSize() and JobInterrupted Event in Laravel 13.31 image

Queue totalSize() and JobInterrupted Event in Laravel 13.31

Read article
Find Unexpected Test Inputs with Fuzz for Pest image

Find Unexpected Test Inputs with Fuzz for Pest

Read article