Как подключить библиотеку к PHP от стороннего драйвера;

Sergeyk6

Новичок
Добрый день, прошу помощи.

В настоящий момент есть работающий интернет магазин. По новому закону 54ФЗ необходимо при печати чека указать в чеке наименование товара по каждой продаваемой позиции, то есть суммавой чек по новому закону запрещён.

Берём новую кассу от компании ШТРИХ
Для касс этой компании разработан драйвер:
скачать можно здесь:
Сам драйвер => https://yadi.sk/d/LXhA3L5Q3HCzW6
Инструкция => https://yadi.sk/d/tCC2ORtu3HCyvj

Для работы с этим драйвером предусмотрена библиотека методов DrvFR.dll
По умолчанию располагающаяся: "C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\Bin\DrvFR.dll"

Пытаюсь её подключить методом {
require "C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\Bin\DrvFR.dll";
}
В результате получается:
Warning: Unexpected character in input: ' in C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\Bin\DrvFR.dll on line 42
Warning: Unexpected character in input: ' in C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\Bin\DrvFR.dll on line 42
Warning: Unexpected character in input: ' in C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\Bin\DrvFR.dll on line 42
Warning: Unexpected character in input: ' in C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\Bin\DrvFR.dll on line 42
Parse error: syntax error, unexpected ',' in C:\Program Files (x86)\SHTRIH-M\DrvFR 4.13\Bin\DrvFR.dll on line 42

До этого момента никогда не сталкивался с подобными задачами. Помогите пожалуйста.
Заранее всем огромное спасибо.
 

antson

Новичок
Партнер клуба
Мне тоже такое интересно.
Только в PHP через require можно только код написанный на пхп

Dll подключается через extension в php.ini
но опять же не любая, а написанная определенным образом.

Народ, кто писал обертки над внешними dll ?
 

antson

Новичок
Партнер клуба
для общения с кассой из php
есть три пути (и обходной).
1) ввести нужные функции в язык через написание расширения .dll .so
2) работать через dio напрямую с сом портом
3) api от kkmserver.ru
4) выгружать в 1с(МойСклад и подобные B2B) и делать чек там

WMix, после прихода денег от якассы (и т.д.) нужно пробивать кассовый чек, который передается в ОФД (а та его в налоговую)
покупателю приходит емайл и/или смс со ссылкой где он может увидеть свой чек

Это 54-ФЗ РФ о применении кассовой техники
 
Последнее редактирование:

Sergeyk6

Новичок
antson. Вопрос напрямую, по сути, мне необходимо только обрабатывать Товарный чек для физика, который рассчитывается с нами за нал.

На входе у меня имеется массив => array(), который содержит в себе кол-во ед., стоимость за единицу, ставка НДС на ед., НДС за ед., по каждому наименованию товара + сумму чека, сумму НДС, сумму без НДС ну и т.д.
В момент формирования Тов.чека мне необходимо отправить этот массив в function(){}, которая передаст его в кассу, нужным методом, касса уже облепит его служебной инфой и отправит к ОФД, а также сформирует электронный чек.
Электронный чек, эта функция, должна вернуть обратно, также из этого будет понятно, прошла ли операция или нет.

Как-то так я это вижу.
Есть нюанс, что WEB сервер, на котором крутиться Магазин не в офисе. В офисе я поставлю машину, на которую поставлю php с apache, или же просто php в виде socket server (такой опыт уже имеется) на которой будет смонтированна касса.
В любом случае функция должна быть написана на php.
Разумеется ТЗ я подготовлю в развёрнутом виде с описанием всех входных переменных.
Как внешнего разработчика вас можно к этому привлечь.

Спасибо.
 

antson

Новичок
Партнер клуба
@Sergeyk6, к сожалению нет. Я сейчас именно такую часть пишу для своего работодателя.
Тем, что можно найти в открытых источниках, я уже поделился на гите.
могу только сказать , что из-за сроков реализации мы выбрали вариант использовать api от kkmserver
PHP-Curler я подправил метод ajax() , чтобы он мог работать с требуемым апи
 

antson

Новичок
Партнер клуба
@Sergeyk6, просто почитать ваше тз можно ? Нам интересно на сколько наши представления о разрабатываемом модуле совпадают с потребностями
бизнеса.
 

WMix

герр M:)ller
Партнер клуба
нужно пробивать кассовый чек, который передается в ОФД (а та его в налоговую)
и для этого нужна касса? в смысле касса общается с фискальной службой по средству сервиса, может имеет смысл заинтересоваться как обратится к сервису?
 

antson

Новичок
Партнер клуба
@WMix, в кассе есть фискальный накопитель(ранее электронная кассовая лента).
Твердотельный накопитель в который можно писать, читать, но нельзя перезаписать данные.
Вот разрешили бы писать на сд болванки ;) Эх мечты.

Регистрируется в налоговой. Весь цимес в том, что просто так его вариантов подключить к компьютеру пока нет. Да и весь гимор пока из-за того, что российские производители, пока не сделали кассу с апи по ethernet. Когда шерстил инет нашел только украинскую модель.
 

Sergeyk6

Новичок
Пока его нет, так как в настоящий момент, я его не написал. Дело в том что у нас есть касса, которая работать будет ещё до марта 2018 года. Так что вопрос остро не стоит.
Но мне бы хотелось видеть отдельное решение для магазина. А по поводу ТЗ то так как у нас уже всё выписывается самой системой самостоятельно, то ТЗ будет просто начинаться с описания массива, из которого нужно сделать чек, а возвращённый код (скорее всего это будет массив со строками) превращаем в красивый чек и SMTP всё остальное сделает за меня. :)
 

antson

Новичок
Партнер клуба
@Sergeyk6, Что я могу про все это сказать. Головная боль у всех. Готовых нормальных решений нет пока даже у коробочных интернет магазинов.
Кто успеет предложить адекватный продукт .... снимет сливки.
 

fixxxer

К.О.
Партнер клуба
Если с DLL-кой возможно работать через COM (см. в сторону Regsvr32), то http://php.net/manual/en/book.com.php

Есть еще заброшенный https://pecl.php.net/package/w32api с последним обновлением семилетней давности. Можно взять какой-нибудь php 5.3 и попробовать это все собрать и запустить.

Хотя, мне кажется, проще написать консольную программу на C++ и дергать ее exec()-ом.
 

Sergeyk6

Новичок
fixxxer, можно ещё вопрос, у меня win64 на машине но драйвер кассы записывается в Program Files (x86), то есть по идее DLL по любому под 32 разряда.
Не будет иметь разницы для PHP какая система стоит? СОM это же исключительно 32разрядная вещь. Или я ошибаюсь.
Я повторюсь, никогда не работал с COM поэтому может быть вопрос глупый.

Заранее спасибо.
 

antson

Новичок
Партнер клуба
@Sergeyk6, Подумайте внимательно над цепочкой обмена.
сайт у вас на хостинге. кассовый аппарат в офисе.
ккм - usb port - virtual com (создан драйвером от производителя kkm)
штатно dll - которая умеет по вызову function XReport() послать в com порт байт управления потоком, два байта пароля кассира, байт команды, байт управления потоком
дождаться ответ прочитать байты , вернуть успешно или причину ошибки

дальше на эту длл навешивают уже апи например принтера чеков от 1с
самая интересная логика уже в обработках 1с ;(

теперь как достучаться с сайта в вашу локальную сеть ?
как php на сервере вызовет dll драйвер на локальной машине ?
пробросить com порт на сервер можно , но это уже как минимум vps хостинг
 

antson

Новичок
Партнер клуба
В Тайване изящно решили проблему "черных наличных" в магазинах с целью избежания уплаты НДС. Каждый кассовый чек является билетом государственной лотереи, финансирующейся собственно частью налоговых доходов с продаж. В результате, клиенты активно требуют при покупках в магазинах кассовые чеки.
 
Сверху