卡马罗 / sdc
一个用于与卢旺达税务局销售数据控制器(SDC)交互的包
Requires
- php: ~5.6|~7.0
Requires (Dev)
- phpunit/phpunit: ~4.0||~5.0
- squizlabs/php_codesniffer: ^2.3
This package is auto-updated.
Last update: 2024-09-12 13:11:41 UTC
README
销售数据控制器是法律强制要求的一种设备,用于监控所有在缴纳增值税的商店内进行的销售。此包用于控制 SDC 设备。
结构
src/
tests/
vendor/
安装
安装
服务器要求
KAMARO SDC 有一些系统要求。当然,这些要求中的大多数都可以由 Laragon 满足,因此强烈建议您使用 Laragon 作为您的本地 Laravel 开发环境。
但是,如果您不使用 Laragon,您需要确保您的服务器满足以下要求
- PHP >= 7.1.0
- OpenSSL PHP 扩展
- Mbstring PHP 扩展
- Windows 10
- Windows 的 Php Serial 扩展
安装 KAMARO SDC
KAMARO 使用 Composer 来管理其依赖项。因此,在使用此包之前,请确保您的机器上已安装 Composer。
通过 Composer Create-Project
或者,您也可以通过在终端中执行 Composer 的 create-project
命令来安装 Laravel
composer create-project kamaro/sdc your_project_name_here dev-master
在现有项目中安装
composer require Kamaro/Sdc
使用方法
注册 php serial 扩展。
每次您打开端口时,都必须使用供应商的许可证或串行端口将其注册。
<?php $device = new Kamaro\Sdc\SDCController('COM5','KAMARO LAMBERT #1','12345123'); // Assume your SDC is connect to COM Port 5 echo $device->isOpen(); // true
获取 SDC ID
<?php $device = new Kamaro\Sdc\SDCController('COM5'); // Assume your SDC is connect to COM Port 5 echo $device->getID(); // SDC002001531 equivalent to the connected SDC
获取 SDC 状态
<?php $device = new Kamaro\Sdc\SDCController('COM5'); print_r($device->getStatus());
结果
array(6) { ["SDC_SERIAL_NUMBER"]=> string(12) "SDC002000173" ["FIRMWARE_VERSION"]=> string(10) "2.1302.2.8" ["HARDWARE_REVISION"]=> string(3) "530" ["THE_NUMBER_OF_CURRENT_SDC_DAILY_REPORT"]=> string(2) "37" ["LAST_REMOTE_AUDIT_DATE_TIME"]=> string(19) "28/03/2014 11:14:08" ["LAST_LOCAL_AUDIT_DATE_TIME"]=> string(0) "" }
发送收据数据
当您想要将税务信息发送到 SDC 时,您需要遵循以下格式,否则包将抛出异常。
发票类型
格式
RtypeTTypeMRC,TIN,Date TIME, Rnumber,TaxRate1,TaxrRate2,TaxRate3,TaxRate4,Amount1,Amount2,Amount3,Amount4,Tax1,Tax2,Tax3,Tax4
示例
NS01012345,100600570,11/05/2016 12:35:20,23,0.00,18.00,0.00,0.00,11.00,12.00,0.00,0.00,0.00,1.83,0.00,0.00
<?php // Set Data $data = "NS01012345,100600570,14/04/2017 12:35:20,23,0.00,18.00,0.00,0.00,11.00,12.00,0.00,0.00,0.00,1.83,0.00,0.00"; // Get Device Instance on PORT 5 $device = new Kamaro\Sdc\SDCController('COM5'); echo $device->sendReceiptData($data); // P for success or ERROR
获取签名
向设备发送收据数据后,您需要发送另一个请求以获取内部数据和签名,该签名将放在发票上。您必须将发票号码作为参数传递
<?php // Get Device Instance on PORT 5 $device = new Kamaro\Sdc\SDCController('COM5'); $results = $device->getSignature(23); // Previous Sent Invoice Number 23 var_dump($results);
结果
array(5) { ["date_time"]=> string(19) "14/04/2017 15:50:40" ["SDC_ID"]=> string(12) "SDC002000173" ["SDC_RECEIPT_NUMBER"]=> string(12) "1127/1429/NS" ["INTERNAL_DATA"]=> string(32) "6RUG-P4NR-7UIJ-EL7I-WS54-UN7R-MI" ["RECEIPT_SIGNATURE"]=> string(19) "5T54-N5GG-B2WY-IY6S" }
发送电子账本
现在在这个阶段,您已经拥有了构建认证发票所需的所有信息。您需要将 getSignature 方法中获取的内部数据和签名添加到您的发票中,然后逐行构建您的发票并发送。
B 标记收据的开始或第一行 N 标记收据正文中的行 E 标记收据的结束或最后一行。逐行读取文件并显示。
假设我们的最终收据如下所示
B Trade Name N Gikondo, Kigali N TIN: 100600570 N COPY N ------------------------------------------------- N Normal Sale N ------------------------------------------------- N REFUND IS APPROVED ONLY FOr N ORIGINAL SALES RECEIPT N 400600570 N ------------------------------------------------ N Plain Bread 1000.00x 1.00 1000.00A-EX N Wriggly gum 60.00x 5.00 300.00B N ------------------------------------------------ N THIS IS NOT AN OFFICIAL RECEIPT N ------------------------------------------------ N TOTAL -36139.50 N TOTAL B-18.00% -36139.50 N TOTAL TAX B -5512.81 N ------------------------------------------------ N CASH -36139.50 N ITEMS NUMBER 1 N ------------------------------------------------ N SDC INFORMATION N Date: 14/04/2017 Time: 11:48:27 N SDC ID: SDC001000001 N RECEIPT NUMBER: 12/259 NR N Internal Data: N IR84-99TN-FCYY-CE22-4HWE-V5TA-EE N Receipt Signature: N 669X-TBMM-GPE4-445D N ----------------------------------------------- N RECEIPT NUMBER: 153 N DATE: 25/5/2012 TIME: 11:50:24 N MRC: 01012345 N ----------------------------------------------- N THANK YOU E WE APPRECIATE YOUR BUSINESS
假设您正在读取一个名为 receipt.txt 的收据文件,您将这样做:
$receipt = __DIR__.'/stubs/A8.txt'; $lines = file($receipt); $endLine = count($lines) - 1; $sequence = 32; $device = new Kamaro\Sdc\SDCController('COM5'); foreach ($lines as $key => $line) { // Update sequence if ($sequence > 127) { $sequence = 32; } switch ($key) { case 0: $results = $device->sendElectronicJournal('B'.$line,$sequence); break; case $endLine: $results = $device->sendElectronicJournal('E'.$line,$sequence); break; default: $results = $device->sendElectronicJournal('N'.$line,$sequence); break; } $sequence++; }
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
测试
使用 composer 和 PHPUNIT
如果您已全局安装 phpunit,则转到项目目录并运行
$ composer test
使用传统方式。
转到此包根目录中的 index.php
并更新 SDC 的端口,然后从浏览器访问它。您应该看到以下页面
贡献
有关详细信息,请参阅 CONTRIBUTING 和 CONDUCT
安全
如果您发现任何安全相关的问题,请通过电子邮件:author_email联系,而不是使用问题跟踪器。
鸣谢
- KAMARO Lambert
- [所有贡献者][链接-贡献者]
许可协议
MIT 许可协议 (MIT)。请参阅许可文件获取更多信息。