slevomat/eet-client

此包已废弃且不再维护。未建议替代包。

捷克共和国销售电子记录(EET)客户端

2.2.0 2021-01-19 19:27 UTC

This package is auto-updated.

Last update: 2022-11-25 13:45:37 UTC


README

Build status Code coverage Latest Stable Version Composer Downloads

此仓库提供了符合捷克法律要求的电子销售记录(EET)客户端库。Tento repozitář obsahuje klientskou knihovnu pro elektronickou evidenci tržeb (EET)

安装

使用Composer(https://getcomposer.org.cn/)安装slevomat/eet-client是最佳方式

> composer require slevomat/eet-client

使用

注意:所有金额均以货币的百分之一表示。因此,如果您想发送55.5 Kč的交易,请将值作为整数5550放入Receipt类中。

$crypto = new CryptographyService('cesta k privátnímu klíči', 'cesta k veřejnému klíči', 'heslo privátního klíče (nebo prázdný string pokud bez hesla)');
$configuration = new Configuration(
    'DIČ poplatníka',
    'Identifikace provozovny ',
    'Identifikace pokladního zařízení',
    EvidenceEnvironment::get(EvidenceEnvironment::PLAYGROUND), // nebo EvidenceEnvironment::get(EvidenceEnvironment::PRODUCTION) pro komunikaci s produkčním systémem
    false // zda zasílat účtenky v ověřovacím módu
);
$client = new Client($crypto, $configuration, new GuzzleSoapClientDriver(new \GuzzleHttp\Client()));

$receipt = new Receipt(
	true,
	'CZ683555118',
	'0/6460/ZQ42',
	new \DateTimeImmutable('2016-11-01 00:30:12'),
    3411300
);

try {
    $response = $client->send($receipt);
    echo $response->getFik();
} catch (\SlevomatEET\FailedRequestException $e) {
    echo $e->getRequest()->getPkpCode(); // if request fails you need to print the PKP and BKP codes to receipt
} catch (\SlevomatEET\InvalidResponseReceivedException $e) {
    echo $e->getResponse()->getRequest()->getPkpCode(); // on invalid response you need to print the PKP and BKP too
}

生成密钥

从财务管理局获得的密钥格式为.p12,需要转换为PEM格式。

在命令行中执行以下命令

$ openssl pkcs12 -in cesta/k/souboru.p12 -out public.pub -clcerts -nokeys

$ openssl pkcs12 -in cesta/k/souboru.p12 -out private.key -nocerts

然后设置生成的public.pubprivate.key路径作为在创建CryptographyService时的公钥和私钥

对于测试环境(playground),需要使用特殊的测试证书。这些playground证书与库一起在cert目录中分发。有关测试环境的详细信息,请参阅EET测试环境的文档。

发票参数

XML名称(EET文档) 描述 客户端位置 备注
uuid_zpravy 消息UUID Receipt::$uuid 自动生成
dat_odesl 发送交易日期 $response->getRequest()->getSendTime() 自动生成
prvni_zaslani 首次发送标志 Receipt::$firstSend
overeni 验证模式标志 Configuration::$verificationMode 默认false
dic_popl 纳税人DIČ Configuration::$vatId
dic_poverujiciho 授权纳税人的DIČ Receipt::$delegatedVatId
id_provoz 门店ID Configuration::$premiseId
id_pokl 收银机ID Configuration::$cashRegisterId
porad_cis 发票编号 Receipt::$receiptNumber
dat_trzby 交易日期 Receipt::$receiptTime
celk_trzba 总计金额 Receipt::$totalPrice
zakl_nepodl_dph 免增值税交易的总金额 Receipt::$priceZeroVat
zakl_dan1 增值税基本税率的基础 Receipt::$priceStandardVat
dan1 基本税率增值税 Receipt::$vatStandard
zakl_dan2 第一低税率的基础 Receipt::$priceFirstReducedVat
dan2 第一低税率增值税 Receipt::$vatFirstReduced
zakl_dan3 第二低税率的基础 Receipt::$priceSecondReducedVat
dan3 第二低税率增值税 Receipt::$vatSecondReduced
cest_sluz 增值税模式下的旅行服务总金额 Receipt::$priceTravelService
pouzit_zboz1 增值税模式下的二手商品总金额(基本税率) Receipt::$priceUsedGoodsStandardVat
pouzit_zboz2 增值税模式下的二手商品总金额(第一低税率) Receipt::$priceUsedGoodsFirstReducedVat
pouzit_zboz3 按第二低税率计征的增值税的销售使用物品的总金额 Receipt::$priceUsedGoodsSecondReducedVat
urceno_cerp_zuct 后续支付或结算的金额 Receipt::$priceSubsequentSettlement
cerp_zuct 后续支付或结算的支付金额 Receipt::$priceUsedSubsequentSettlement
rezim 销售模式 Configuration::$evidenceMode 默认常规
pkp 纳税人签名代码 $response->getRequest()->getPkpCode()
bkp 纳税人安全代码 $response->getRequest()->getBkpCode()

Client driver

向EET服务器发送请求不是通过PHP中集成的SoapClient直接进行,而是通过SoapClientDriver接口进行。主要原因是无法设置集成SoapClient的请求超时。

库中包含了使用guzzlehttp/guzzle实现的接口。此实现的默认超时时间为2.5秒,可通过构造函数参数进行设置。