laraditz/wallet

A simple virtual wallet or e-wallet for Laravel

1.0.3 2023-09-19 20:18 UTC

This package is auto-updated.

Last update: 2024-12-19 22:57:08 UTC


README

Laravel Wallet

Laravel Wallet

Latest Version on Packagist Total Downloads License

A simple virtual wallet or e-wallet for Laravel.

Installation

You can install the package via composer:

composer require laraditz/wallet

Run the migration command to create the necessary database table.

php artisan migrate

Usage

Add the HasWallets trait to your model.

use Laraditz\Wallet\Traits\HasWallets;

class User extends Authenticatable
{
    use HasWallets;
    ...
}

Create your default wallet. If you use a different name, you may need to set the WALLET_DEFAULT in your .env and set the value to the slug value. This is optional and only useful when you want to retrieve your wallet but do not want to specify the wallet slug.

// Simply use below code to create a default wallet types
app('wallet')->createWalletType([
    'name' => 'Default',   
    'currency_code' => 'POINTS',
    'currency_symbol' => 'PTS',
]);

You also can specify many other setting when creating wallet type as below:-

use Laraditz\Wallet\Enums\ActiveStatus;
use Laraditz\Wallet\Enums\Placement;

app('wallet')->createWalletType([
    'name' => 'New Wallet', // will produce new-wallet slug
    'description' => 'This is my new wallet',
    'currency_code' => 'POINTS',
    'currency_symbol' => 'PTS',
    'default_scale' => 0, // example, EUR and USD have 2 decimal places, while JPY has 0
    'decimal_separator' => '.', // default is using dot (.)
    'thousand_separator' => ',', // default is using comma (,)
    'code_placement' => Placement::Right, // default placement is left
    'symbol_placement' => Placement::Left, // default placement is left
    'status' => ActiveStatus::Active, // default status is active
    'start_at' => now(), // you can also set when the wallet can start be use
    'end_at' => now()->addDays(3), // or when it ends
]);

With that we are set. You can now deposit, withdraw or transfer using your e-wallet.

$userOne = User::find(1);
$walletOne = $userOne->getWallet(); // get default wallet for userOne

// deposit
$deposit = $walletOne->deposit("100"); // deposit amount of 100 into default wallet with processing status
$deposit->markAsCompleted(); // change the status from processing to completed

$walletOne->depositNow("100"); // Use depositNow() so that the transaction completed immediately

// withdraw
$withdraw = $walletOne->withdraw("100"); // withdraw amount of 100 into default wallet with processing status
$withdraw->markAsCompleted(); // change the status from processing to completed

$walletOne->withdrawNow("100"); // Use withdrawNow() so that the transaction completed immediately

$userTwo = User::find(2);
$walletTwo = $userTwo->getWallet(); // get default wallet for userTwo

// transfer amount from userOne to userTwo
$transfer = $walletOne->transfer($walletTwo, "100");
$transfer->markAsCompleted(); // change the status from processing to completed

$walletOne->transferNow($walletTwo, "100"); // Use transferNow() so that the transaction completed immediately

// get user transactions
$allTransactions = $userOne->transactions;

By default when you call getWallet, it will create the user wallet if it's not already been created. You wallet will be assigned a random unique wallet address value. But it is also possible for you to create the wallet with your own address value.

$userThree = User::find(3);
$userThree->createWallet(
    slug: 'new-wallet', // specify the wallet slug
    values: [
        'address' => '0xf6A32f757196ac753A354F145F408bF88BEacf77',
        'description' => 'This is my crypto wallet', 
    ]
);

// specify the slug name to get the new wallet
$walletThree = $userThree->getWallet('new-wallet');

// to update description or/and metadata to the wallet
$walletThree->update([
    'description' => 'This is a new description', 
    'metadata' => [
        'user' => 'Farhan'
    ]
]);

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email raditzfarhan@gmail.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.