brandshopru / online-receipt-api-client
在线收据API税务服务PHP客户端
2.5.3
2024-07-02 06:51 UTC
Requires
- php: ^7.1 || ^8.0
- ext-json: *
- guzzlehttp/guzzle: ^6.0
Requires (Dev)
- phpunit/phpunit: ^7.0|^8.0
README
本包提供了一个方便的接口,用于与在线收据API进行通信,用于向税务服务发送收据数据。该包简化了开发将网店模块与在线收据税务服务集成的过程。
要求
- php 7.1, 8.0 及以上
- guzzlehttp/guzzle (或任何遵循
\GuzzleHttp\ClientInterface接口的客户端) - ext-json
- curl
使用
向税务服务器发送收据数据(创建文档)
首先需要形成收据数据。为此,需要为订单、订单中的商品和支付方式实现 OnlineReceiptOrderInterface、OnlineReceiptOrderItemInterface 和 OnlineReceiptPaymentItemInterface 接口。您也可以使用本包中的实体,或者继承它们并重定义方法。
use Brandshopru\OnlineReceiptApiClient\Entity\Order; use Brandshopru\OnlineReceiptApiClient\Entity\Cashier; use Brandshopru\OnlineReceiptApiClient\Entity\OrderItem; use Brandshopru\OnlineReceiptApiClient\Entity\PaymentItem; $dateTime = new \DateTime('NOW'); // Создаем заказ $order = Order::create([ 'documentUuid' => uniqid(), 'checkoutDateTime' => $dateTime->format(DATE_RFC3339), 'orderId' => rand(100000, 999999), 'typeOperation' => 'SALE', 'customerContact' => 'test@example.com', ]); // Созадем товары $orderItem1 = OrderItem::create([ 'price' => 100, 'quantity' => 1, 'vatTag' => OrderItem::VAT_NO, 'name' => 'Test Product1' ]); $orderItem2 = OrderItem::create([ 'price' => 200, 'quantity' => 1, 'vatTag' => OrderItem::VAT_NO, 'name' => 'Test Product2' ]); //Создаем способ оплаты $paymentItem = PaymentItem::create([ 'type' => 'CARD', 'sum' => 300 ]); // Добавляем товары и способ оплаты к заказу $order->addItem($orderItem1); $order->addItem($orderItem2); $order->addPaymentItem($paymentItem); //Создаем кассира $cashier = Cashier::create([ 'name' => 'Test Cashier', 'inn' => '123456789012', 'position' => 'salesman', ]);
然后需要将订单对象传递给客户端,也可以传递 responseURL 并打印收据。
$login = 'test@test.ru'; // Логин полученный на первом шаге $password = 'password'; // Пароль полученный на первом шаге $testMode = true; // Тестовый режим $client = new \Brandshopru\OnlineReceiptApiClient\Client($login, $password, $testMode); $responseUrl = 'https://internet.shop.ru/order/982340931/checkout?completed=1'; $printReceipt = true; // Печатать ли чек на кассе $result = $client->sendCheck($order, $responseUrl, $printReceipt, $cashier);
所有参数除 $order 外都是可选的。如果没有传递 OnlineReceiptCashierInterface 对象,则将使用商店设置的参数。
返回的将是一个包含文档处理状态和税务存储器状态的数组。
检查文档状态
如果传递了 responseURL,则收据的税务处理结果将返回到该URL,如果没有设置该参数,则可以自行检查文档的状态。
$login = 'test@test.ru'; // Логин полученный на первом шаге $password = 'password'; // Пароль полученный на первом шаге $testMode = true; // Тестовый режим $documentId = 'efbafcdd-113a-45db-8fb9-718b1fdc3524'; // id документа $client = new \Brandshopru\OnlineReceiptApiClient\Client($login, $password, $testMode); $result = $client->getStatusDocumentById($documentId);
返回的将是一个包含 status 状态的数组,该状态可能为以下值:
- QUEUED - 文档被接受处理;
- PENDING - 文档被收据接收并准备打印;
- PRINTED - 成功进行税务处理;
- COMPLETED - 税务处理结果已发送到源服务(如果已填写 responseURL 字段);
- FAILED - 税务处理出错。
此外,数组还将包含 fnState - 税务存储器状态,可能为以下值:
- ready - 已建立与税务存储器的连接,状态允许进行税务处理;
- associated - 客户端已成功连接到零售点,但收据机尚未建立连接并报告其状态;
- failed - 获取税务存储器状态出现问题。此状态不会阻止添加文档进行税务处理。所有文档都将添加到服务器队列中,等待收据机处于税务处理状态时进行处理。
此外,您可以单独调用方法来检查税务存储器(税务处理服务)的状态。
$client = new \Brandshopru\OnlineReceiptApiClient\Client($login, $password, $testMode); $result = $client->getStatusFiscalService();