nticaric / fiskalizacija
PHP API 用于账单 fiscalizaciju
v2.0
2023-10-18 14:23 UTC
Requires
- php: >=7.3.0
- endroid/qr-code: ^5.0
- goetas-webservices/xsd2php-runtime: ^0.2.16
- nesbot/carbon: 2.*
Requires (Dev)
- goetas-webservices/xsd2php: ^0.4.12
- mockery/mockery: ^1.0
- phpunit/phpunit: ^9.0
- symfony/var-dumper: ^4|^5.2
- vlucas/phpdotenv: ^5.5
README
克罗地亚的 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);