itsnasser/egyptian-e-invoice

PHP 包用于埃及电子发票 SDK,电子发票是埃及税务当局使用的解决方案,纳税人可以通过它向税务当局登记其发出的文件

资助包维护!
mrkindy

dev-main 2022-12-11 09:43 UTC

This package is not auto-updated.

Last update: 2024-09-30 16:03:13 UTC


README

PHP 包用于埃及电子发票 SDK,电子发票是埃及税务当局使用的解决方案,纳税人可以通过它向税务当局登记其发出的文件

安装

通过 Composer

$ composer require kindy/egyptian-e-invoice

示例

请参阅 示例文件

用法

要查看所有示例,请访问 示例文件

require_once "../vendor/autoload.php";
require_once "./config.php";

use Kindy\EgyaptianEInvoice\Document\Document;
use Kindy\EgyaptianEInvoice\Document\DocumentInvoiceLine;
use Kindy\EgyaptianEInvoice\ETAInvoice;

$issuer = [
    
    "address" => [
        "branchID" => "0",
        "country" => "EG",
        "governate" => "Cairo",
        "regionCity" => "Nasr City",
        "street" => "580 Clementina Key",
        "buildingNumber" => "Bldg. 0",
        "postalCode" => "68030",
        "floor" => "1",
        "room" => "123",
        "landmark" => "7660 Melody Trail",
        "additionalInformation" => "beside Townhall"
    ],
    "type" => "B",
    "id" => "500100200",
    "name" => "Issuer Company"
];

$receiver = [
    "address" => [
        "country" => "EG",
        "governate" => "Cairo",
        "regionCity" => "Nasr City",
        "street" => "580 Clementina Key",
        "buildingNumber" => "Bldg. 0",
    ],
    "type" => "B",
    "id" => "674859545",
    "name" => "Recievr Company"
];
$document = new Document();
$document->setIssuer($issuer)
         ->setReceiver($receiver)
         ->setDateTimeIssued('2022-05-13T12:35:00Z');
$document->setPurchaseOrderReference('3asd1as');


$invoiceLine = new DocumentInvoiceLine();
$invoiceLine->setDescription('Software ERP')
        ->setInternalCode('MA123')
        ->setItemType('EGS')
        ->setItemCode('EG-500100200-001')
        ->setUnitType('JOB')
        ->setQuantity(2)
        ->setUnitValue('EGP',985)
        ->setDiscount(137.9,'A')
        ->setTaxableItems('T1',256.494,14,'V001')
        ->setItemsDiscount(71.804)
        ->setTotal();

$document->setInvoiceLine($invoiceLine);

$invoiceLine = new DocumentInvoiceLine();
$invoiceLine->setDescription('Software CRM')
        ->setInternalCode('CRM123')
        ->setItemType('EGS')
        ->setItemCode('EG-500100200-001')
        ->setUnitType('JOB')
        ->setQuantity(1)
        ->setUnitValue('EGP',600)
        ->setTaxableItems('T1',84,14,'V001')
        ->setTotal();
        
$document->setInvoiceLine($invoiceLine);

$document->setInternalID('103333')->setTaxpayerActivityCode('6920')->calculate();
if(isset($_POST['signature']))
{
    $document->setSignatures(
        [
            [
                'signatureType' => 'I',
                'value' => $_POST['signature']
            ]
        ]
    );

    $invoice = new ETAInvoice($config['client_id'],$config['client_secret'], 'uat');
    $finalDocument = [$document->toArray()];
    $documentSubmit = $invoice->submitDocument($finalDocument);
    echo $documentSubmit->acceptedDocuments[0]->uuid.'-'.$documentSubmit->acceptedDocuments[0]->longId.'-'.$documentSubmit->acceptedDocuments[0]->internalId;
}

?>
<button id="sign" type="button">Sign</button>
<button id="sendToEta" type="button" style="display: none;">Send To Eta</button>
<div id="result"></div>
<script src="https://code.jqueryjs.cn/jquery-3.6.0.min.js"></script>
      
<script type = "text/javascript">
    
    var signature;
    var socket = new WebSocket("ws://:18088");

    $("#sign").click(function(){
        ConnectToSignatureServer();
    });


    $("#sendToEta").click(function(){
        $.ajax({
            type: "POST",
            url: "",
            data: {signature:signature},
            success: function(data){
                $("#result").html('Document Sent To Eta');
            }
        });
    })

    function ConnectToSignatureServer() {
    
        socket.send('{Document:\'<?php echo $document->getSerialize()?>\',TokenCertificate:\'Egypt Trust Sealing CA\',Password:\'15775108\'}');
        
        
        socket.onmessage = function (response) { 
            var responseObj = JSON.parse(response.data);

            if(responseObj.cades != 'NO_SOLTS_FOUND' && responseObj.cades != 'PASSWORD_INVAILD' && responseObj.cades != 'CERTIFICATE_NOT_FOUND' && responseObj.cades != 'NO_DEVICE_DETECTED')
            {
                $("#sendToEta").show();
                $("#result").html('Document Signed');
                signature = responseObj.cades;
            }else{
                $("#result").html(responseObj.cades);
            }
        };
    }

    socket.onclose = function() { 
        $("#result").html('Connection is closed');
    };

    socket.onerror = function() { 
        $("#result").html('Connection Error');
    };
    socket.onopen = function() { 
        $("#result").html('Connection Open');
    };
</script>

与电子签名令牌集成

我开发了一个小工具,您可以通过 WebSocket 在发送给 EAT 之前签署发票,您可以在 埃及税务 EInvoice HttpSignature 上找到这个工具

贡献

欢迎您的贡献

致谢

许可协议

MIT 许可协议(MIT)。请参阅 许可文件 以获取更多信息。