sankyutech / stinvoice-adapter
ST Invoice SDK for PHP
v1.0.1
2024-09-19 08:37 UTC
Requires
- php: ^7.4 || ^8.0 || ^8.3
- guzzlehttp/guzzle: ^6.5|^7.0.1
- laravie/codex: ^5.1
- php-http/guzzle7-adapter: ^0.1.1
- php-http/multipart-stream-builder: ^1.0
Requires (Dev)
- codexpertmy/tests: ^1.0
- mockery/mockery: ^1.3
- phpstan/phpstan: ^1.3
- phpunit/phpunit: ^7.5 || ^8.4 || ^9.0
This package is not auto-updated.
Last update: 2024-09-20 00:36:20 UTC
README
ST Invoice Adapter 是一个用于 St Invoice 集成的包,它已与 MyInvois LHDN 链接。
要求
- API 密钥
- 密钥
- 通过 Sankyu Tech MyInvois 作为中介链接
参考
安装
composer require sankyutech/stinvoice-adapter
用法/示例
发票
<?php require __DIR__ . '/vendor/autoload.php'; use Sankyu\Client; use Sankyu\One\Submission; use Sankyu\CustomSankyuAuth; use GuzzleHttp\ClientInterface; use GuzzleHttp\Client as GuzzleClient; use Sankyu\One\Mapper\ReferenceNumber; use Sankyu\One\Mapper\Supplier; use Sankyu\One\Mapper\Customer; use Sankyu\One\Mapper\DocumentLine; use Sankyu\One\Mapper\TaxTotal; use Sankyu\One\Mapper\LegalMonitoryTotal; use Sankyu\One\Mapper\Wrapper; $config = [ 'api_key' => 'your_api_key', 'api_secret' => 'your_secret_key', 'use_sandbox' => true, ]; $httpClient = new GuzzleClient(['verify' => false]); $client = Client::make($httpClient, $config) ->provideAuth(new CustomSankyuAuth($config['api_key'], $config['api_secret'])); $referenceNumber = new ReferenceNumber(); $reference = $referenceNumber->setDocumentReferenceNo('INV0001'); $reference = $referenceNumber->setBillingReferenceNo('RECEIPT0001'); $reference = $referenceNumber->setUpInvoiceReference(); $supplier = new Supplier(); $supplierDetails = $supplier->setAddressLine1('Address 1'); $supplierDetails = $supplier->setAddressLine2('Address 2'); $supplierDetails = $supplier->setAddressLine3('Address 3'); $supplierDetails = $supplier->setCity('Bangi'); $supplierDetails = $supplier->setState('Selangor'); $supplierDetails = $supplier->setPostcode('43650'); $supplierDetails = $supplier->setCountryCode('MYS'); $supplierDetails = $supplier->setRegistrationName('Ahmad'); $supplierDetails = $supplier->setPhone('+60123456789'); $supplierDetails = $supplier->setTaxIdentificationNo('enter_valid_tax_no'); $supplierDetails = $supplier->setIdentificationNo('enter_valid_indentification_no'); // NRIC/BRN/ARMY/PASSPORT $supplierDetails = $supplier->setIdentificationType('NRIC'); //Put NA if not available $supplierDetails = $supplier->setSSTRegistrationNo('NA'); // Refer to Supplier SSM $supplierDetails = $supplier->setMISCCode('47733'); $supplierDetails = $supplier->setUpSupplier(); $customer = new Customer(); $customerDetails = $customer->setAddressLine1('Address 1'); $customerDetails = $customer->setAddressLine2('Address 2'); $customerDetails = $customer->setAddressLine3('Address 3'); $customerDetails = $customer->setCity('KEMAMAN'); $customerDetails = $customer->setState('Terengganu'); $customerDetails = $customer->setPostcode('24000'); $customerDetails = $customer->setCountryCode('MYS'); $customerDetails = $customer->setRegistrationName('MOHAMMAD'); $customerDetails = $customer->setPhone('+60123456789'); $customerDetails = $customer->setEmail('mohammad@gmail.com'); $customerDetails = $customer->setTaxIdentificationNo('enter_valid_tax_no'); $customerDetails = $customer->setIdentificationNo('enter_valid_indentification_no'); // NRIC/BRN/ARMY/PASSPORT $customerDetails = $customer->setIdentificationType('NRIC'); // Refer to Supplier SSM $customerDetails = $customer->setSSTRegistrationNo('NA'); $customerDetails = $customer->setUpCustomer(); $documentLine = new DocumentLine(); $line = $documentLine->setItemRecordID('1'); $line = $documentLine->setItemDescription('Laptop'); $line = $documentLine->setItemCountryCode('MYS'); $line = $documentLine->setItemUnitPrice(1000); $line = $documentLine->setItemQuantity(1); $line = $documentLine->setItemSubtotal(1000); $line = $documentLine->setItemTaxTotal(0); $line = $documentLine->setItemTaxDetails(); //amount,charges description,percentage $line = $documentLine->setItemCharges(20,'Postage',2); //amount,discount description,percentage $line = $documentLine->setItemDiscount(10,'Coupon',1); $line = $documentLine->setItemDiscount(10,'Membership Discount',1); //Specific product commodity $line = $documentLine->setItemCommodity('022','CLASS'); $line = $documentLine->setItem(); $line = $documentLine->setItemRecordID('2'); $line = $documentLine->setItemDescription('Mouse'); $line = $documentLine->setItemCountryCode('MYS'); $line = $documentLine->setItemUnitPrice(100); $line = $documentLine->setItemQuantity(1); $line = $documentLine->setItemSubtotal(100); $line = $documentLine->setItemTaxTotal(0); $line = $documentLine->setItemTaxDetails(); //set 0 if the item does not have any charge(s) $line = $documentLine->setItemCharges(0); //set 0 if the item does not have any discount(s) $line = $documentLine->setItemDiscount(0); $line = $documentLine->setItemCommodity('022','CLASS'); $line = $documentLine->setItem(); $line = $documentLine->setUpDocumentLine(); $taxTotal = new TaxTotal(); $tax = $taxTotal->setTaxSubtotal(); $tax = $taxTotal->setUpTaxTotal(); $legalMonitoryTotal = new LegalMonitoryTotal(); $monitory = $legalMonitoryTotal->setTotalNetAmount(1000); $monitory = $legalMonitoryTotal->setTotalExcludeTax(1000); $monitory = $legalMonitoryTotal->setTotalIncludeTax(1000); $monitory = $legalMonitoryTotal->setTotalDiscount(0); $monitory = $legalMonitoryTotal->setTotalCharges(0); $monitory = $legalMonitoryTotal->setRoundingAmount(0); $monitory = $legalMonitoryTotal->setPayableAmount(1000); $monitory = $legalMonitoryTotal->setUpLegalMonitoryTotal(); $wrapper = new Wrapper(); //wrapping all parameter $submissionDetails = $wrapper->wrapUp($reference,$supplierDetails,$customerDetails,$line,$tax,$monitory); $submission = $client->v1()->submissions()->invoice($submissionDetails); $responseBody = $submission->getBody(); $result = json_decode($responseBody, true);
贷项通知
<?php ...... use Sankyu\One\Mapper\InvoiceReference; ..... //Only applicable for Credit Note, Debit Note, Refund Note, Self Billed Credit Note, Self Billed Debit Note, Self Billed Refund Note $invoiceReference = new InvoiceReference(); $invoiceRef = $invoiceReference->setInvoiceReferenceInvoiceNo('INV0001'); $invoiceRef = $invoiceReference->setInvoiceReferenceUUID('invoice_uuid_generated_by_LHDN'); $invoiceRef = $invoiceReference->setUpInvoiceReference(); $wrapper = new Wrapper(); $submissionDetails = $wrapper->wrapUp($invoiceRef,$reference,$supplierDetails,$customerDetails,$line,$tax,$monitory); $submission = $client->v1()->submissions()->creditNote($submissionDetails); $responseBody = $submission->getBody(); $result = json_decode($responseBody, true);
借项通知
$submission = $client->v1()->submissions()->debitNote($submissionDetails);
退款通知
$submission = $client->v1()->submissions()->refundNote($submissionDetails);
自开发票
$submission = $client->v1()->submissions()->selfBilledInvoice($submissionDetails);
自开贷项通知
$submission = $client->v1()->submissions()->selfBilledCreditNote($submissionDetails);
自开借项通知
$submission = $client->v1()->submissions()->selfBilledDebitNote($submissionDetails);
自开退款通知
$submission = $client->v1()->submissions()->selfBilledRefundNote($submissionDetails);
非提交示例
获取提交详情
$parameter = ['submission_uuid' => 'submission_uuid_received_from_LHDN']; $submission = $client->v1()->submissions()->getSubmissionDetails($parameter);
获取提交文件
$parameter = ['document_uuid' => 'document_uuid_received_from_LHDN']; $submission = $client->v1()->submissions()->getSubmissionDocument($parameter);
获取提交文件详情
$parameter = ['document_uuid' => 'document_uuid_received_from_LHDN']; $submission = $client->v1()->submissions()->getSubmissionDocumentDetails($parameter);
获取提交文件详情二维码
// 获取文档详情,包括二维码生成URL
$parameter = ['document_uuid' => 'document_uuid_received_from_LHDN']; $submission = $client->v1()->submissions()->getSubmissionDocumentDetailsQr($parameter);
获取最近文件
$submission = $client->v1()->submissions()->getRecentDocument();
拒绝文件
$parameter = [ 'document_einvois_id' => 'document_uuid_received_from_LHDN', 'reason' => 'Reject', ]; $submission = $client->v1()->submissions()->setRejectDocument($parameter);
取消文件
$parameter = [ 'document_einvois_id' => 'document_uuid_received_from_LHDN', 'reason' => 'Reject', ]; $submission = $client->v1()->submissions()->setCancelDocument($parameter);
获取文件类型
$submission = $client->v1()->submissions()->getDocumentTypes();
验证税务编号
$parameter = [ 'tax_identification_no' => 'enter_tax_identification_no', 'identification_type' => 'enter_identification_type', 'identification_no' => 'enter_identification_no', ]; $submission = $client->v1()->submissions()->validateTaxNo($parameter);
获取文件二维码URL
$parameter = [ 'document_einvois_id' => 'document_uuid_received_from_LHDN', 'document_einvoics_long_id' => 'document_long_id_received_from_LHDN', ]; $submission = $client->v1()->submissions()->getDocumentQrUrl($parameter);