1. Go to this page and download the library: Download laraditz/my-invois 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/ */
laraditz / my-invois example snippets
use Laraditz\MyInvois\Facades\MyInvois;
// Test authentication
$token = MyInvois::auth()->token(); // will throw an error if failed
echo "Connection successful!";
use Laraditz\MyInvois\Facades\MyInvois;
// Get access token
$accessToken = MyInvois::auth()->token();
// Or with specific parameters
$accessToken = MyInvois::auth()->token(
client_id: 'your_client_id',
client_secret: 'your_client_secret',
grant_type: 'client_credentials',
scope: 'InvoicingAPI'
);
// Get access token on behalf of
$accessToken = MyInvois::auth()->token(onbehalfof: 'C25845632020'); // taxpayer's TIN or ROB number
use Laraditz\MyInvois\Facades\MyInvois;
// Get all document types
$documentTypes = MyInvois::documentType()->all();
// Get document type by ID
$documentType = MyInvois::documentType()->get(1);
// Get document type version
$version = MyInvois::documentType()->version(id: 1, vid: 2);
use Laraditz\MyInvois\Facades\MyInvois;
use Laraditz\MyInvois\Data\Invoice;
use Laraditz\MyInvois\Enums\Format;
// Create Invoice object
$invoice = new Invoice(
ID: 'INV-001',
IssueDate: now(),
IssueTime: now(),
InvoiceTypeCode: new Data('380'), // Standard Invoice
DocumentCurrencyCode: 'MYR',
// ... add other
use Laraditz\MyInvois\Facades\MyInvois;
// Validate TIN
$validation = MyInvois::taxpayer()->validate(tin: 'AB123456789012', idType: 'NRIC', idValue: '200101011234');
use Laraditz\MyInvois\Facades\MyInvois;
// Get all notifications
$notifications = MyInvois::notification()->all();
use Laraditz\MyInvois\Facades\MyInvois;
use Laraditz\MyInvois\Data\Invoice;
use Laraditz\MyInvois\Enums\Format;
// Create Invoice object
$invoice = new Invoice(
ID: 'INV-001',
IssueDate: now(),
IssueTime: now(),
InvoiceTypeCode: new Data('380'),
DocumentCurrencyCode: 'MYR',
// ... other data
);
// Generate XML document
$xmlDocument = MyInvois::generateDocument($invoice, Format::XML);
// Then, to display the xml on browser
// MyInvois::helper()->displayXml($xmlDocument);
use Laraditz\MyInvois\Facades\MyInvois;
// Using query string
$result = MyInvois::documentType()
->queryString(['page' => 1, 'limit' => 10])
->all();
// Using params
$result = MyInvois::documentType()
->params(['id' => 1, 'vid' => 2])
->version();
// In .env (Recommended)
MYINVOIS_SANDBOX=true
// Or in config (Not recommended)
'MYINVOIS_SANDBOX' => true
// Make sure certificate and private key paths are correct in .env
MYINVOIS_CERTIFICATE_PATH="/path/to/certificate.p12"
MYINVOIS_PRIVATE_KEY_PATH="/path/to/private_key.pem"
MYINVOIS_PASSPHRASE="your_passphrase"
// Package will automatically add signature if certificate exists
$xmlDocument = MyInvois::generateXMLDocument($invoice);
use Laraditz\MyInvois\Facades\MyInvois;
use Laraditz\MyInvois\Data\Invoice;
use Laraditz\MyInvois\Data\AccountingSupplierParty;
use Laraditz\MyInvois\Data\AccountingCustomerParty;
use Laraditz\MyInvois\Data\Party;
use Laraditz\MyInvois\Data\PostalAddress;
use Laraditz\MyInvois\Data\PartyIdentification;
use Laraditz\MyInvois\Data\PartyLegalEntity;
use Laraditz\MyInvois\Data\Contact;
use Laraditz\MyInvois\Data\InvoiceLine;
use Laraditz\MyInvois\Data\Item;
use Laraditz\MyInvois\Data\Price;
use Laraditz\MyInvois\Data\TaxCategory;
use Laraditz\MyInvois\Data\TaxScheme;
use Laraditz\MyInvois\Data\TaxSubtotal;
use Laraditz\MyInvois\Data\TaxTotal;
use Laraditz\MyInvois\Data\LegalMonetaryTotal;
use Laraditz\MyInvois\Data\Money;
use Laraditz\MyInvois\Data\Country;
use Laraditz\MyInvois\Data\Data;
use Laraditz\MyInvois\Enums\Format;
// Create supplier party
$supplierParty = new Party(
PartyIdentification: [new PartyIdentification('123456789012')],
PartyName: [new Data('ABC Company Sdn Bhd')],
PostalAddress: new PostalAddress(
StreetName: '123 Main Street',
CityName: 'Kuala Lumpur',
PostalZone: '50000',
Country: new Country('MY')
),
PartyLegalEntity: [new PartyLegalEntity(
RegistrationName: 'ABC Company Sdn Bhd'
)],
Contact: new Contact(
Name: 'John Doe',
Telephone: '+60123456789',
Email: '[email protected]'
)
);
// Create customer party
$customerParty = new Party(
PartyIdentification: [new PartyIdentification('987654321098')],
PartyName: [new Data('XYZ Corporation')],
PostalAddress: new PostalAddress(
StreetName: '456 Business Ave',
CityName: 'Petaling Jaya',
PostalZone: '46100',
Country: new Country('MY')
),
PartyLegalEntity: [new PartyLegalEntity(
RegistrationName: 'XYZ Corporation Sdn Bhd'
)],
Contact: new Contact(
Name: 'Jane Smith',
Telephone: '+60987654321',
Email: '[email protected]'
)
);
// Create invoice line
$invoiceLine = new InvoiceLine(
ID: '1',
InvoicedQuantity: 2,
LineExtensionAmount: new Money(200.00, 'MYR'),
Item: new Item(
Name: 'Product A',
Description: 'High quality product',
SellersItemIdentification: new Data('PROD-001')
),
Price: new Price(
PriceAmount: new Money(100.00, 'MYR')
),
TaxTotal: new TaxTotal(
TaxAmount: new Money(12.00, 'MYR'),
TaxSubtotal: [new TaxSubtotal(
TaxableAmount: new Money(200.00, 'MYR'),
TaxAmount: new Money(12.00, 'MYR'),
TaxCategory: new TaxCategory(
ID: 'S',
Percent: 6.0,
TaxScheme: new TaxScheme('SST')
)
)]
)
);
// Create tax total
$taxTotal = new TaxTotal(
TaxAmount: new Money(12.00, 'MYR'),
TaxSubtotal: [new TaxSubtotal(
TaxableAmount: new Money(200.00, 'MYR'),
TaxAmount: new Money(12.00, 'MYR'),
TaxCategory: new TaxCategory(
ID: 'S',
Percent: 6.0,
TaxScheme: new TaxScheme('SST')
)
)]
);
// Create legal monetary total
$legalMonetaryTotal = new LegalMonetaryTotal(
LineExtensionAmount: new Money(200.00, 'MYR'),
TaxExclusiveAmount: new Money(200.00, 'MYR'),
TaxInclusiveAmount: new Money(212.00, 'MYR'),
PayableAmount: new Money(212.00, 'MYR')
);
// Create invoice
$invoice = new Invoice(
ID: 'INV-2024-001',
IssueDate: now(),
IssueTime: now(),
InvoiceTypeCode: new Data('380'), // Standard Invoice
DocumentCurrencyCode: 'MYR',
AccountingSupplierParty: new AccountingSupplierParty($supplierParty),
AccountingCustomerParty: new AccountingCustomerParty($customerParty),
InvoiceLine: [$invoiceLine],
TaxTotal: $taxTotal,
LegalMonetaryTotal: $legalMonetaryTotal
);
// Submit invoice
try {
$result = MyInvois::document()->submit(
documents: [$invoice],
format: Format::XML
);
if ($result['success']) {
echo "Invoice submitted successfully!";
echo "Request ID: " . $result['request_id'];
echo "Response: " . json_encode($result['data'], JSON_PRETTY_PRINT);
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
use Laraditz\MyInvois\Exceptions\MyInvoisApiError;
try {
$result = MyInvois::document()->submit($data);
} catch (MyInvoisApiError $e) {
// Handle API error
Log::error('MyInvois API Error: ' . $e->getMessage());
} catch (\Throwable $th) {
// Handle other errors
throw $th;
}