nticaric/fiskalizacija

PHP API 用于账单 fiscalizaciju

v2.0 2023-10-18 14:23 UTC

This package is auto-updated.

Last update: 2024-09-18 16:37:04 UTC


README

Build Status Total Downloads

克罗地亚的 PHP API 用于账单 fiscalizaciju

账单示例

如果是在使用带有 demo 证书的测试环境中,构造函数的第四个参数需要设置为 true

$fis = new Fiskalizacija("./path/to/certificate.pfx", "password", "security" , true);

如果是生产环境,构造函数的第四个参数应该设置为 false 或者可以省略

$fis = new Fiskalizacija("./path/to/certificate.pfx", "password");

从 2015 年 10 月 27 日起,停止使用与 fiscalizaciju 财务收银机通信的 SSL 协议,并过渡到 TLS 协议。构造函数的第三个参数需要将 SSL 替换为 TLS。如果省略第三个参数,默认使用 SSL 协议。

$fis = new Fiskalizacija("./path/to/certificate.pfx", "password", "TLS", true);
<?php

use Carbon\Carbon;
use Nticaric\Fiskalizacija\Fiskalizacija;
use Nticaric\Fiskalizacija\Generators\BrojRacunaType;
use Nticaric\Fiskalizacija\Generators\PorezOstaloType;
use Nticaric\Fiskalizacija\Generators\PorezType;
use Nticaric\Fiskalizacija\Generators\RacunType;
use Nticaric\Fiskalizacija\Generators\RacunZahtjev;
use Nticaric\Fiskalizacija\Generators\ZaglavljeType;

$billNumber = new BrojRacunaType(1, "ODV1", "1");

$listPdv   = [];
$listPdv[] = new PorezType(25.1, 400.1, 20.1, null);
$listPdv[] = new PorezType(10.1, 500.1, 15.444, null);

$listPnp   = [];
$listPnp[] = new PorezType(30.1, 100.1, 10.1, null);
$listPnp[] = new PorezType(20.1, 200.1, 20.1, null);

$listOtherTaxRate   = [];
$listOtherTaxRate[] = new PorezOstaloType("Naziv1", 40.1, 453.3, 12.1);
$listOtherTaxRate[] = new PorezOstaloType("Naziv2", 27.1, 445.1, 50.1);
$bill               = new RacunType();

$bill->setOib("32314900695");
$bill->setOznSlijed("P");
$bill->setUSustPdv(true);
$bill->setDatVrijeme("15.07.2014T20:00:00");

$bill->setBrRac($billNumber);
$bill->setPdv($listPdv);
$bill->setPnp($listPnp);
$bill->setOstaliPor($listOtherTaxRate);
$bill->setIznosOslobPdv(23.5);
$bill->setIznosMarza(32.0);
$bill->setIznosNePodlOpor(5.1);
$bill->setIznosUkupno(456.1);
$bill->setNacinPlac("G");
$bill->setOibOper("34562123431");

$fis = new Fiskalizacija(
    $_ENV['CERTIFICATE_PATH'],
    $_ENV['CERTIFICATE_PASSWORD'],
    "TLS",
    true
);

$zastKod = $bill->generirajZastKod(
    $fis->getPrivateKey(),
    $bill->getOib(),
    $bill->getDatVrijeme(),
    $billNumber->getBrOznRac(),
    $billNumber->getOznPosPr(),
    $billNumber->getOznNapUr(),
    $bill->getIznosUkupno()
);

$bill->setZastKod($zastKod);
$bill->setNakDost(false);

$billRequest = new RacunZahtjev();
$billRequest->setRacun($bill);

$zaglavlje = new ZaglavljeType;

$billRequest->setZaglavlje($zaglavlje);

$res = $fis->signAndSend($billRequest);
$jir = $res->getJir();
 
$qrGenerator = new QRGenerator($jir, "15.07.2014T20:00:00", 456.1);
echo $qrGenerator->generateUrl(); // Output the URL
//echo $qrGenerator->getQrCode(); // Output the base64-encoded QR code image

OpenSSL 3

如果遇到错误

error:0308010C:digital envelope routines::unsupported

这个错误通常在您使用 OpenSSL 3.0 版本时出现,该版本不支持 OpenSSL 早期版本中使用的某些旧加密算法。例如,如果您的 PKCS#12 文件使用 RC2-40-CBC 算法加密,该算法在 OpenSSL 3.0 中不受支持,您将收到此错误。

如果您可以访问旧版本的 OpenSSL,您可以使用更强的加密算法将 PKCS#12 文件转换为新的 PKCS#12 格式。

openssl pkcs12 -in FISKAL_1.p12 -out temp.pem -nodes -passin pass:<您的密码>

然后

openssl pkcs12 -export -in temp.pem -out FISKAL_NEW.p12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES

测试消息示例

<?php
use Nticaric\Fiskalizacija\SoapClient;
use Nticaric\Fiskalizacija\XMLSerializer;
use Nticaric\Fiskalizacija\Generators\EchoRequest;

$message = "proizvoljan tekst";

$echoRequest = new EchoRequest($message);

$serializer = new XMLSerializer($echoRequest);
$xml        = $serializer->toXml();

$soapClient  = new SoapClient("https://cistest.apis-it.hr:8449/FiskalizacijaServiceTest");
$xmlEnvelope = $soapClient->addEnvelope($xml);

$res = $soapClient->send($xmlEnvelope);