PHP code example of ianfoxdev / ledger

1. Go to this page and download the library: Download ianfoxdev/ledger library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

ianfoxdev / ledger example snippets


use IanFoxDev\Ledger\{Account, Ledger, Leg};
use IanFoxDev\Ledger\Storage\PdoStore;

$ledger = new Ledger(new PdoStore($pdo));                 // your application's connection

$ledger->open(Account::asset('cash:psp', 'USD'));
$ledger->open(Account::liability('user:42', 'USD'));      // the platform owes the user
$ledger->open(Account::revenue('revenue:fees', 'USD'));

// A deposit: money arrives at the payment provider and is owed to the user.
$ledger->post('psp:ch_1001', [
    Leg::debit('cash:psp', 50_00),                         // 50.00 USD in cents
    Leg::credit('user:42', 50_00),
]);

// A purchase: from the user's balance to revenue.
$ledger->transfer('order:A-17', 'user:42', 'revenue:fees', 12_50, ['order' => 'A-17']);

// An amount set aside while a job runs; only what it cost is taken.
$hold = $ledger->hold('job:7', 'user:42', 3_00);
$ledger->capture('job:7:capture', $hold, 'revenue:fees', 2_37);
$ledger->release('job:7:release', $hold);

$ledger->balance('user:42');                               // Amount 3513
$ledger->verify()->ok();                                   // true

$credits = $ledger->credits();

$credits->grant('order:5001', 'customer:acme:credits', 50_00,
    from: 'cash:psp', revenue: 'revenue:jobs', breakage: 'revenue:breakage',
    expiresAt: new DateTimeImmutable('+30 days'));
$credits->grant('promo:welcome:acme', 'customer:acme:credits', 5_00,
    from: 'expense:promotions', revenue: 'revenue:jobs', breakage: 'expense:promotions',
    expiresAt: new DateTimeImmutable('+7 days'));

$credits->consume('job:8', 'customer:acme:credits', 7_40);   // 5.00 promo, then 2.40 paid
$credits->available('customer:acme:credits');                // 47.60, until the lot expires
$credits->expire('customer:acme:credits');                   // after 30 days: 47.60 to breakage