An object-oriented PHP library to create custom UBL v2.1 format supported by MyInvois System.
This SDK initially require UBL-Invoice package. However, MyInvois System doesn't fully support UBL v2.1 format, so UBL package re-create based on original author to support MyInvois System.
Please take note that MyInvois System is still under development and not yet finalize. If the SDK doesn't work at some point, feel free to inform me and I will re-check with MyInvois System.
- Login as Taxpayer System
- Login as Intermediary System
- Get All Document Types
- Get Document Type
- Get Document Type Version
- Get Notifications
- Validate Taxpayer's TIN
- Submit Documents (Invoice)
- Submit Documents (CreditNote)
- Submit Documents (DebitNote)
- Submit Documents (RefundNote, Self-Billed Invoice, Self-Billed Credit Note, Self-Billed Debit Note, Self-Billed Refund Note)
- Cancel Document
- Reject Document
- Get Recent Documents
- Get Submission
- Get Document
- Get Document Details
- Search Documents
- Digital Signature
- Mandatory Field Verification
To obtain your Client ID and Client Secret, please send an email request to [email protected] with the following information:
- Taxpayer TIN
- Business Registration Number
- Company Name
- Company Email Address
- ERP System Name
This package requires PHP 7.4 or higher.
The preferred way to install this extension is through composer.
To install, either run
$ composer require klsheng/myinvois-php-sdk "*"
or add
"klsheng/myinvois-php-sdk": "*"
to the require
section of your composer.json
file.
This package require the following extensions in order to work properly:
If you use Composer, these dependencies should be handled automatically. If you install manually, you'll want to make sure that these extensions are available.
You may refer example to create UBL v2.1 document supported by MyInvois System at CreateDocumentExample.
Sample usage:
use Klsheng\Myinvois\MyInvoisClient;
$prodMode = false;
$client = new MyInvoisClient('client_id', 'client_secret', $prodMode);
$client->login();
$access_token = $client->getAccessToken();
// Store $access_token somewhere to re-use it again within 1hour
// OR
$client->setAccessToken('access_token');
use Klsheng\Myinvois\MyInvoisClient;
$prodMode = false;
$client = new MyInvoisClient('client_id', 'client_secret', $prodMode);
$client->login($onbehalfof);
$access_token = $client->getAccessToken();
// Store $access_token somewhere to re-use it again within 1hour
// OR
$client->setAccessToken('access_token');
$client->setOnbehalfof($onbehalfof);
$response = $client->getAllDocumentTypes();
$response = $client->getDocumentType($id);
$response = $client->getDocumentTypeVersion($id, $versionId);
$response = $client->getNotifications();
// OR
$dateFrom = new \DateTime('2015-02-13T14:20:10Z');
$dateTo = '2015-02-13T14:20:10Z';
$type = '2';
$language = 'en';
$status = 'delivered';
$channel = 'email';
$pageNo = 3;
$pageSize = 20;
$response = $client->getNotifications($dateFrom, $dateTo, $type, $language, $status, $channel, $pageNo, $pageSize);
$tin = 'C25845632020';
$idType = 'NRIC';
$idValue = '770625015324';
$response = $client->validateTaxPayerTin($tin, $idType, $idValue);
use Klsheng\Myinvois\Helper\MyInvoisHelper;
use Klsheng\Myinvois\Example\Ubl\CreateDocumentExample;
$example = new CreateDocumentExample();
$invoice = $example->createJsonDocument();
$documents = [];
$document = MyInvoisHelper::getSubmitDocument('INV20240418105410', $invoice);
$documents[] = $document;
$response = $client->submitDocument($documents);
use Klsheng\Myinvois\Helper\MyInvoisHelper;
use Klsheng\Myinvois\Example\Ubl\CreateDocumentExample;
$example = new CreateDocumentExample();
$invoice = $example->createXmlDocument();
$documents = [];
$document = MyInvoisHelper::getSubmitDocument('INV20240418105410', $invoice);
$documents[] = $document;
$response = $client->submitDocument($documents);
$reason = 'Customer refund';
$response = $client->cancelDocument($id, $reason);
$reason = 'Customer reject';
$response = $client->rejectDocument($id, $reason);
$response = $client->getRecentDocuments();
// OR
$pageNo = 3;
$pageSize = 20;
$submissionDateFrom = '2022-11-25T01:59:10Z';
$submissionDateTo = new \DateTime('2022-12-22T23:59:59Z');
$issueDateFrom = null;
$issueDateTo = null;
$direction = 'Sent';
$status = 'Valid';
$documentType = '01';
$receiverId = 'A12345678';
$receiverIdType = 'PASSPORT';
$receiverTin = 'C2584563200';
$issuerId = null;
$issuerIdType = null;
$issuerTin = null;
$response = $client->getRecentDocuments($pageNo, $pageSize, $submissionDateFrom, $submissionDateTo, $issueDateFrom, $issueDateTo, $direction, $status, $documentType, $receiverId, $receiverIdType, $receiverTin, $issuerId, $issuerIdType, $issuerTin);
$response = $client->getSubmission($tid);
$response = $client->getDocument($id);
$response = $client->getDocumentDetail($id);
$response = $client->searchDocuments();
// OR
$id = 'F9D425P6DS7D8IU';
$submissionDateFrom = null;
$submissionDateTo = null;
$continuationToken = 'Y4RWK9617T0TJNRBF4CSVGQG10';
$pageSize = 100;
$issueDateFrom = null;
$issueDateTo = null;
$direction = 'Sent';
$status = 'Valid';
$documentType = '01';
$receiverId = null;
$receiverIdType = null;
$receiverTin = null;
$issuerTin = null;
$response = $client->searchDocuments($id, $submissionDateFrom, $submissionDateTo, $continuationToken, $pageSize, $issueDateFrom, $issueDateTo, $direction, $status, $documentType, $receiverId, $receiverIdType, $receiverTin, $issuerTin);