All Projects → bigperson → modulpos-php-api-client

bigperson / modulpos-php-api-client

Licence: MIT License
PHP client for Modul.Kassa API Fiscal Service

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to modulpos-php-api-client

picqer-php
PHP Client for the Picqer API
Stars: ✭ 16 (+6.67%)
Mutual labels:  php-client
google-search-results-php
Google Search Results PHP API via Serp Api
Stars: ✭ 41 (+173.33%)
Mutual labels:  php-api
Waktu-Solat-API
PHP API for fetching prayer time from JAKIM e-Solat website
Stars: ✭ 27 (+80%)
Mutual labels:  php-api
rocketmq-client-php
A Php Client for Apache RocketMQ.
Stars: ✭ 80 (+433.33%)
Mutual labels:  php-client
Easy-HotSpot
Easy HotSpot is a super easy WiFi hotspot user management utility for Mikrotik RouterOS based Router devices. Voucher printing in 6 ready made templates are available. Can be installed in any PHP/MySql enabled servers locally or in Internet web servers. Uses the PHP PEAR2 API Client by boenrobot.
Stars: ✭ 45 (+200%)
Mutual labels:  php-client
CoronaVirusOutbreakAPI
A tiny and small program to crawler and analyze outbreak of COVID-19 in world and every country using PHP.
Stars: ✭ 20 (+33.33%)
Mutual labels:  php-api
Apiato
PHP Framework for building scalable API's on top of Laravel.
Stars: ✭ 2,564 (+16993.33%)
Mutual labels:  php-api
simple-php-api
An extremely simple API (with authentication) example, written in PHP (server) and JS (client), using JSON
Stars: ✭ 23 (+53.33%)
Mutual labels:  php-api
deepl-php-lib
🧠 DeepL API Client Library supporting PHP >= 7.3
Stars: ✭ 50 (+233.33%)
Mutual labels:  php-client
NeteaseCloudMusicApi
网易云音乐API PHP
Stars: ✭ 30 (+100%)
Mutual labels:  php-api
bol-retailer-php-client
PHP Client library for Bol.com Retailer API
Stars: ✭ 19 (+26.67%)
Mutual labels:  php-client
faxplus-php
PHP SDK to use FAX.PLUS API
Stars: ✭ 23 (+53.33%)
Mutual labels:  php-api
keycloak-admin-client
PHP Client to connect to Keycloak admin rest apis
Stars: ✭ 57 (+280%)
Mutual labels:  php-client
php-antispam
A PHP API for antispam service cleantalk.org. Invisible protection from spam, no captches, no puzzles, no animals and no math.
Stars: ✭ 50 (+233.33%)
Mutual labels:  php-api
mixerapi
A CakePHP Plugin for RESTful API Development [READ-ONLY]
Stars: ✭ 26 (+73.33%)
Mutual labels:  php-api
vault-php
Best Vault client for PHP that you can find
Stars: ✭ 57 (+280%)
Mutual labels:  php-client
reddit-api-client
A PHP client for the Reddit API
Stars: ✭ 74 (+393.33%)
Mutual labels:  php-client
n11-php-api
Bu api n11 için yazılmıştır. N11 için yazılmış olan gelişmiş bir php apisi. Ekstra olarak n11 üzerinde mağazanıza gelen siparişleri websitenize aktaracak bir fonksiyonda mevcuttur.
Stars: ✭ 57 (+280%)
Mutual labels:  php-api
google-maps-services-php
PHP client library(SDK) for Google Maps API Web Services
Stars: ✭ 50 (+233.33%)
Mutual labels:  php-client
makeapidoc
php自动生成api文档
Stars: ✭ 67 (+346.67%)
Mutual labels:  php-api

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

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 = '[email protected]'; // Логин от аккаунта Модуль.Кассы
$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'  => '[email protected]',
]);

// Созадем товары
$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 = '[email protected]'; // Логин полученный на первом шаге
$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 = '[email protected]'; // Логин полученный на первом шаге
$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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].