brandshopru/online-receipt-api-client

在线收据API税务服务PHP客户端

2.5.3 2024-07-02 06:51 UTC

This package is auto-updated.

Last update: 2024-09-02 07:11:28 UTC


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();

许可证

MIT