bigperson/modulpos-php-api-client 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

bigperson/modulpos-php-api-client

Composer 安装命令:

composer require bigperson/modulpos-php-api-client

包简介

PHP client for modulpos API Fiscal Service

README 文档

README

StyleCI

Пакет предоставляет удобный интерфейс для общения с API Модуль.Кассы для отправки данных чеков в сервис фискализации. Пакет упрощает разработку модулей интеграции интернет-магазина с севисом фискализации Модуль.Кассы.

Часть описания дублирует оригинал документации по API Модуль.Кассы

Требования

  • php ^7.1
  • guzzlehttp/guzzle (или любой клиент следующий интерфейсу \GuzzleHttp\ClientInterface)
  • ext-json
  • curl

Установка

Вы можете установить данный пакет с помощью сomposer:

composer require bigperson/modulpos-php-api-client

Для PHP 5.4-7.0 можеете использовать предыдущую версию

composer require bigperson/modulpos-php-api-client 1.0

Использование

Схема процесса фискализации подробна описана в документации к API. В кратце необходимо связать точку продаж с интернет магазином, настроить отправку данных чеков и проверить статус отправленного чека.

Создания связки аккаунта и розничной точки

Для начала необходимо в личном кабинете Модуль.Кассы создать розничную точку продаж, активировать у неё функцию Использовать для печати документов интернет-магазина и получить идентификатор uuid. Далее вызываем связку

$login = 'test@test.ru'; // Логин от аккаунта Модуль.Кассы
$password = 'password'; // Пароль от аккаунта Модуль.Кассы
$retailPointUuid = 'uuid'; // Идентификатор розничной точки
$testMode = true; // Тестовый режим
$associate = new \Bigperson\ModulposApiClient\Associate($login, $password, $retailPointUuid, $testMode);
$result = $associate->init();

В $result получим массив с данным userName и password которые будут использоватся для дальнейших обращений к API. Их нужно где-нибудь сохранить, например в базе данных.

Отправка данных чека на сервер фискализации (создание документа)

Для начала необходимо сформировать данные самого чека. Для этого достаточно для ваших моделей инплементировать интерфейсы ModulposOrderInterface для заказа, ModulposOrderItemInterface для товара в заказе, ModulposPaymentItemInterface для способа оплаты. Также вы можете использовать entity из пакета, или отнаследовать от них собственные классы переопределив методы на собственные.

use Bigperson\ModulposApiClient\Entity\Order;
use Bigperson\ModulposApiClient\Entity\Cashier;
use Bigperson\ModulposApiClient\Entity\OrderItem;
use Bigperson\ModulposApiClient\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 \Bigperson\ModulposApiClient\Client($login, $password, $testMode);
$responseUrl =  'https://internet.shop.ru/order/982340931/checkout?completed=1';
$printReceipt = true; // Печатать ли чек на кассе
$result = $client->sendCheck($order, $responseUrl, $printReceipt, $cashier);

Все параметры кроме $order - опциональные. Если не передан объект ModulposCashierInterface то будут использованны данные из настроек торговой точки.

В ответ придет массив со статусом обработки документа и фискального накопителя.

Проверка статуса документа

Если при передаче данных чека был передан responseURL, то на него придет результат фискализации, если параметр задан не был, то вы можете самостоятельно проверить статус документа:

$login = 'test@test.ru'; // Логин полученный на первом шаге
$password = 'password'; // Пароль полученный на первом шаге
$testMode = true; // Тестовый режим
$documentId = 'efbafcdd-113a-45db-8fb9-718b1fdc3524'; // id документа
$client = new \Bigperson\ModulposApiClient\Client($login, $password, $testMode);
$result = $client->getStatusDocumentById($documentId);

В ответ придет массив со статусом status, который может принимать значения:

  • QUEUED - документ принят в очередь на обработку;
  • PENDING - документ получен кассой для печати;
  • PRINTED - фискализирован успешно;
  • COMPLETED - результат фискализации отправлен (если было заполнено поле responseURL) в сервис источник;
  • FAILED - ошибка при фискализации.

Также в массив придет fnState - статус фискального накопителя, может принимать значения:

  • ready ​- соединение с фискальным накопителем установлено, состояние позволяет фискализировать чеки
  • associated​ - клиент успешно связан с розничной точкой, но касса еще ни разу не вышла на связь и не сообщила свое состояние
  • failed ​- Проблемы получения статуса фискального накопителя. Этот статус не препятствует добавлению документов для фискализации. Все документы будут добавлены в очередь на сервере и дождутся момента когда касса будет в состоянии их фискализировать

Кроме того вы можете вызвать отдельно метод проверки статуса фискального накопителя (сервиса фискализации):

$client = new \Bigperson\ModulposApiClient\Client($login, $password, $testMode);
$result = $client->getStatusFiscalService();

Развитие пакета

С целью активного развития пакета, рекомендуем создавать пулл-реквесты, а не только баг-репорты (issues). По любым проблемам рекомендуем открывать Баг-репорты с подробным описанием проблемы и последовательностью действия для воспроизведения бага.

Лицензия

MIT

统计信息

  • 总下载量: 1.79k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 18
  • 点击次数: 1
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 17
  • Watchers: 2
  • Forks: 10
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-07-25

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固