gamebay/rksv

奥地利RKSV实现,与PrimeSign在线证书签名服务相结合

v1.1.3 2023-12-15 10:07 UTC

README

请注意,此仓库仍在积极开发中,如果您计划在生产环境中使用它。

在奥地利,税务化过程被称为Registrierkassensicherheitsverordnung (RKSV)。

在这个仓库中,我们使用了PrimeSign在线签名功能(通过Cryptas)。

我们从他们那里获得了一个简单的服务,该服务接受RKSV有效载荷,然后为您提供正确加密和签名的响应。无需担心,签名收据更简单。因此,要使此包正常工作,您需要以下内容

工作原理

首先,您必须创建一个包含用于签名的数据的收据

$receiptData = ReceiptData::withData(
    $receipt->cashBoxId->id, // Cash register ID
    $receipt->cashBoxId->daily_income, // Daily register income sum
    $receipt->number, // Receipt number
    \DateTime::createFromFormat('Y-m-d H:i:s', $receipt->created_at),
    [
        [
            'brutto' => 123,
            'tax' => 20        
        ],
        [
            'brutto' => 224,
            'tax' => 20 
        ]
    ],
    $receipt->previous_receipt->signature
);

使用创建的ReceiptData,将其传递给ReceiptSigner和其他PrimeSign参数,并调用所需的签名方法

$primeSignBaseCertificateURL = 'Insert Prime Sign base certificate URL';
$primeSignReceiptSignURL = 'Insert Prime Sign receipt sign URL';
$primeSignTokenKey = 'Insert Prime Sign token key';
$encryptionKey = 'Insert Prime Sign encryption key';
$primeSignCertificateNumber = 'Insert Prime Sign certificate number';
$taxRates = ['20', '10', '13', '0', 'special'];
$locationId = 'Insert location ID';

$receiptSigner = new ReceiptSigner(
    $primeSignBaseCertificateURL,
    $primeSignReceiptSignURL,
    $primeSignTokenKey,
    $primeSignCertificateNumber,
    $encryptionKey,
    $taxRates,
    $locationId,
    $receiptData
);

if ($this->gross > 0) {
    $receiptSigner->normalSign();
}

获取签名结果

$signature = $receiptSigner->getSignature();
$QR = $receiptSigner->getQR();

除了正常的签名者外,您还可以调用

  • 取消收据签名$receiptSigner->cancelSign();
  • 培训收据签名$receiptSigner->trainingSign();

空签名将使用cashBoxId生成链值。这是您初始化收据序列时创建的第一个收据。该包将接受项目,但会忽略它们并用零值覆盖。

$receiptSigner->nullSign();

贡献

如果您发现任何错误,请创建一个新的问题,这样我们就可以讨论并尽快修复它。

请记住,这是一个开源项目,任何人都可以通过打开拉取请求来贡献,因此请随意修复错误,以便它们能够更快地合并。如果您想添加功能,请创建一个新问题,然后我们可以进一步讨论。如果没有打开新问题,我们将忽略任何新的功能拉取请求。

在新的功能中,请描述您在拉取请求中做出的更改,并将链接放到与您的拉取请求相关的开放问题中。

许可

该项目在GNU v3.0公共许可证下开源。

TODO 和一般

  • 实现适当的单元测试,应涵盖散列、加密、二维码生成和其他主要影响主题
  • 实现整个过程的单元测试 - 正常签名、培训签名和取消签名 + 所有这些的链式操作
  • 实现一个命令,可以生成也可以使用的空收据
  • 代码和RKSV过程的文档
  • 完全移除签名服务工厂,并在SignService类中实现所有逻辑。
  • 审查所有异常,并通过单元测试正确测试它们
  • 审查所有验证器,并查看需要哪些和可以添加哪些
  • 扩展有关如何将其纳入其他项目的信息(如果需要,进行讨论)

更新此包的工作方式如下

  • 提交
  • 推送到master
  • 创建标签
  • 推送标签
  • 触发webhook将标签发送到PHP包仓库
  • 将标签转换为发布 - 示例github操作在其他仓库中

使用此包的其他仓库需要更新其包条目以使用最新版本。

关于我们

Gamebay是一个管理游戏竞技场、提供运行游戏全面支持和提供收银解决方案的综合性软件平台。

我们是与Friendly Fire 电子竞技馆的合作伙伴。