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-walletphp 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.