PHP code example of fbr / digital-invoicing

1. Go to this page and download the library: Download fbr/digital-invoicing 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/ */

    

fbr / digital-invoicing example snippets


return [
    'bearer_token' => env('FBR_BEARER_TOKEN', ''),
    'sandbox' => env('FBR_SANDBOX', true),
    'urls' => [
        'sandbox' => 'https://gw.fbr.gov.pk/di_data/v1/di/',
        'production' => 'https://gw.fbr.gov.pk/di_data/v1/di/',
        'reference' => 'https://gw.fbr.gov.pk/pdi/v1/',
        'statl' => 'https://gw.fbr.gov.pk/dist/v1/',
    ],
    'qr_code' => [
        'version' => '2.0',
        'dimensions' => '1.0x1.0 Inch',
        'size' => '25x25',
    ],
    'timeout' => env('FBR_API_TIMEOUT', 30),
    'retry_attempts' => env('FBR_RETRY_ATTEMPTS', 3),
    'logging' => [
        'enabled' => env('FBR_LOGGING_ENABLED', true),
        'channel' => env('FBR_LOG_CHANNEL', 'daily'),
        'level' => env('FBR_LOG_LEVEL', 'info'),
    ],
];

use Fbr\DigitalInvoicing\Facades\FbrDigitalInvoicing;
use Fbr\DigitalInvoicing\Builders\InvoiceBuilder;
use Fbr\DigitalInvoicing\Builders\InvoiceItemBuilder;

// Create invoice item
$item = (new InvoiceItemBuilder())
    ->setHsCode('0101.2100')
    ->setProductDescription('Test Product')
    ->setRate('18%')
    ->setUom('Numbers, pieces, units')
    ->setQuantity(1.0)
    ->setValueSalesExcludingST(1000.0)
    ->setSalesTaxApplicable(180.0)
    ->setSaleType('Goods at standard rate (default)')
    ->build();

// Create invoice
$invoice = (new InvoiceBuilder())
    ->setInvoiceType('Sale Invoice')
    ->setInvoiceDate('2025-08-04')
    ->setSeller('0786909', 'My Company', 'Sindh', 'Karachi')
    ->setBuyer('1000000000000', 'Customer Ltd', 'Punjab', 'Lahore', 'Registered')
    ->setScenarioId('SN001') // Only for sandbox
    ->addItem($item)
    ->build();

// Submit to FBR
$response = FbrDigitalInvoicing::postInvoiceData($invoice);

if ($response->isValid()) {
    echo "Invoice submitted successfully!";
    echo "FBR Invoice Number: " . $response->invoiceNumber;
} else {
    echo "Submission failed: " . implode(', ', $response->getErrors());
}

// First validate the invoice
$validationResponse = FbrDigitalInvoicing::validateInvoiceData($invoice);

if ($validationResponse->isValid()) {
    // Now submit
    $submitResponse = FbrDigitalInvoicing::postInvoiceData($invoice);
    
    if ($submitResponse->isValid()) {
        echo "Invoice submitted successfully!";
    }
}

use Fbr\DigitalInvoicing\Models\Invoice;
use Fbr\DigitalInvoicing\Jobs\SubmitInvoiceJob;

// Save invoice to database
$invoice = Invoice::createFromInvoiceData($invoiceData);

// Submit via background job
SubmitInvoiceJob::dispatch($invoice)->onQueue('fbr-invoices');

// Check status later
if ($invoice->isValid()) {
    echo "Invoice processed successfully!";
    echo "FBR Number: " . $invoice->getFbrInvoiceNumber();
}

use Fbr\DigitalInvoicing\Constants\Scenarios;

// Get scenario details
$scenario = Scenarios::getScenario('SN001');
echo $scenario['description'];

// Generate invoice for specific scenario
$invoice = Scenarios::generateScenarioInvoice('SN001');

// Get scenarios by business type
$manufacturerScenarios = Scenarios::getScenariosByBusinessType('manufacturer');
$retailerScenarios = Scenarios::getScenariosByBusinessType('retailer');
$serviceScenarios = Scenarios::getScenariosByBusinessType('service_provider');

// Get sample data for testing
$sampleData = Scenarios::getScenarioSampleData('SN001');

// Get provinces
$provinces = FbrDigitalInvoicing::getProvinces();

// Get UOM codes  
$uoms = FbrDigitalInvoicing::getUomCodes();

// Get HS codes
$hsCodes = FbrDigitalInvoicing::getItemDescCodes();

// Get SRO items
$sroItems = FbrDigitalInvoicing::getSroItemCodes();

// Check STATL registration
$statlStatus = FbrDigitalInvoicing::checkStatl('0786909', '2025-08-04');

// Get registration type
$regType = FbrDigitalInvoicing::getRegistrationType('0786909');

// config/queue.php
'connections' => [
    'database' => [
        // ... other config
        'queue' => 'fbr-invoices', // Dedicated queue for FBR jobs
    ],
],

use Fbr\DigitalInvoicing\Helpers\QrCodeHelper;

// Generate QR data from invoice model
$qrData = QrCodeHelper::generateQrDataString($invoice);

// Generate QR data from response
$qrData = QrCodeHelper::generateQrDataFromResponse($response, $sellerNtn, $buyerNtn, $totalAmount);

// Get QR specifications
$specs = QrCodeHelper::getQrSpecifications();
// Returns: ['version' => '2.0', 'size' => '25x25', 'dimensions' => '1.0x1.0 Inch']

// Validate and decode QR data
if (QrCodeHelper::validateQrData($qrData)) {
    $decoded = QrCodeHelper::decodeQrData($qrData);
}

use Fbr\DigitalInvoicing\Exceptions\FbrDigitalInvoicingException;

try {
    $response = FbrDigitalInvoicing::postInvoiceData($invoice);
} catch (FbrDigitalInvoicingException $e) {
    // FBR API specific errors
    echo "FBR Error: " . $e->getMessage();
    echo "HTTP Status: " . $e->getCode();
} catch (\Exception $e) {
    // General errors
    echo "Error: " . $e->getMessage();
}

// Check response for validation errors
if (!$response->isValid()) {
    foreach ($response->getErrors() as $error) {
        echo "Error: " . $error;
    }
}

$invoice = Invoice::find(1);

// Check status
$invoice->isPending();    // Check if pending
$invoice->isSubmitted();  // Check if submitted  
$invoice->isValid();      // Check if valid
$invoice->isFailed();     // Check if failed

// Get FBR details
$invoice->getFbrInvoiceNumber();
$invoice->getValidationErrors();

// Convert to DTO
$invoiceData = $invoice->toInvoiceData();

// Relationships
$invoice->items;  // Get invoice items

$item = InvoiceItem::find(1);

// Check status
$item->isValid();
$item->isPending();
$item->isInvalid();

// Calculate amounts
$item->getTotalAmount();  // Total including all taxes
$item->getNetAmount();    // Net after withholding

// Get FBR details
$item->getFbrItemInvoiceNumber();

// Relationships
$item->invoice;  // Get parent invoice

// Check logs for detailed API interactions
tail -f storage/logs/laravel.log
bash
php artisan vendor:publish --provider="Fbr\DigitalInvoicing\FbrDigitalInvoicingServiceProvider" --tag="fbr-config"
bash
php artisan vendor:publish --provider="Fbr\DigitalInvoicing\FbrDigitalInvoicingServiceProvider" --tag="fbr-migrations"
php artisan migrate
bash
php artisan queue:work --queue=fbr-invoices