depsimon/laravel-wallet is a Laravel package for easy to use virtual wallet for your app.
It currently has 95 GitHub stars and 21.652 downloads on Packagist (latest version v1.0.9).
Install it with composer require depsimon/laravel-wallet.
Discover more Laravel packages by depsimon
or browse all Laravel packages to compare alternatives.
Last updated
In a few projects I had to implement a virtual currency. The user would buy packs of credits with Stripe and then use them in the app in exchange of services or goods. This package is a small and simple implementation of this concept with place for customization.
Install the package with composer:
composer require depsimon/laravel-wallet
Publish the migrations with this artisan command:
php artisan vendor:publish --provider="Depsimon\Wallet\WalletServiceProvider" --tag=migrations
You can publish the config file with this artisan command:
php artisan vendor:publish --provider="Depsimon\Wallet\WalletServiceProvider" --tag=config
This will merge the wallet.php config file where you can specify the Users, Wallets & Transactions classes if you have custom ones.
Add the HasWallet trait to your User model.
use Depsimon\Wallet\HasWallet;
class User extends Model
{
use HasWallet;
...
}
At some point before making transactions, create the user's wallet.
$user->wallet()->create();
Then you can easily make transactions from your user model.
$user = User::find(1);
$user->balance; // 0
$user->deposit(100);
$user->balance; // 100
$user->withdraw(50);
$user->balance; // 50
$user->forceWithdraw(200);
$user->balance; // -150
You can easily add meta information to the transactions to suit your needs.
$user = User::find(1);
$user->deposit(100, 'deposit', ['stripe_source' => 'ch_BEV2Iih1yzbf4G3HNsfOQ07h', 'description' => 'Deposit of 100 credits from Stripe Payment']);
$user->withdraw(10, 'withdraw', ['description' => 'Purchase of Item #1234']);
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.