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

tinkerwell logo
Tinkerwell

Enjoy coding and debugging in an editor designed for fast feedback and quick iterations. It's like a shell for your application – but with multi-line editing, code completion, and more.

Visit Tinkerwell

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article