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/ */
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