yemeni-open-source/laravel-wallet

Laravel wallet is a package with expressive pronounced syntax that provide top-notch development covering deposits, withdrawals, transactions and balances all quite simply.

v1.2.0 2023-12-21 13:53 UTC

This package is auto-updated.

Last update: 2024-10-21 15:42:04 UTC


README

Stand With Palestine

Laravel Wallet

Laravel Unit Test Packagist Downloads Packagist Version GitHub StandWithPalestine

Laravel Wallet

Laravel wallet is a package with expressive pronounced syntax that provide top-notch development covering deposits, withdrawals, transactions and balances all quite simply.

Requirments

This package is tested with Laravel v8 it my not work on Laravel v7 or v6 or v5

Installation

Install the package by using composer:

composer require yemenopensource/laravel-wallet

Configure Your Needs

You can scape this step if you want to use default configuration, but you can publish wallet configuration by running:

php artisan vendor:publish --provider="YemeniOpenSource\LaravelWallet\WalletServiceProvider" --tag=config

This will merge the config/wallet.php config file to your root config directory. You are free to modify it before migrating the database.

Database Migrations

After that install the wallet tables

php artisan migrate

If you want to add your customization, publish the migrations:

php artisan vendor:publish --provider="YemeniOpenSource\LaravelWallet\WalletServiceProvider" --tag=migrations

Laravel will use the publish migrations at database/migrations.

Setup

Add the HasWallet trait to any model which you want to add the wallet functionality of it, for example User model.

use YemeniOpenSource\LaravelWallet\Traits\HasWallet;

class User extends Model
{
    use HasWallet;

    //...
}

Basic Usage

You can create wallet and transactions for your User model as an example mentioned above.

// The wallet balance initially will be [0]
$user = User::first();
$user->wallet->balance; // 0

// This will add to the wallet balance as passed amount.
$user->wallet->deposit(643.646);
$user->wallet->balance; // 643.6460

// This will subtract from the wallet balance as passed amount.
$user->wallet->withdraw(168.545);
$user->wallet->balance; // 475.1010

// It will throw [UnacceptedTransactionException] exception if passed amount greater wallet balance 
$user->wallet->withdraw(500);
$user->wallet->balance; // UnacceptedTransactionException

// If you want to force withdraw, use [forceWithdraw]
$user->wallet->forceWithdraw(500);
$user->wallet->balance; // -24.8990

If you don't want [UnacceptedTransactionException] you can change the wallet.disable_insufficient_exception config value to disable the exception or set WALLET_DISABLE_INSUFFICIENT_EXCEPTION to true on your .env

Advanced Usage

You can easily add meta information to the transactions to suit your needs. For example:

$user = User::first();
$user->wallet->deposit(100, ['currency' => 'USD', 'bank' => 'TEST BANK']);
$user->wallet->withdraw(64, ['currency' => 'USD', 'description' => 'Purchase of Item #101']);
$user->wallet->withdraw(64, ['currency' => 'USD', 'transfer' => 'Western union tracking number #101']);

Credits

Digital money vector created by fullvector - www.freepik.com

Credits

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