Это решение для библиотеки позволяющей писать плагины на языке c# без понимания как это все работает в нативном коде для приложения связи с карточными системами Farcard компании Ucs(Rkeeper)
Данное решение появилос в связи с многочисленными запросами на написание таких библиотек а так же из за разбросанной в разных местах документации
| FarcardContract |
| / \ |
|Касса Rkeeper|->|Farcard|->|FarcardNet|->|плагин на c#|
Описание официальной документации
Так же в проекте FarcardContract приложены файлы:
Extdll5.txt описание взяимодействия с Farcard 5 версии(пока не реализовано)
Extdll6.txt описание взаимодействия с Farcard 6 версии
TRRESPONCE.txt описание ответов в виде xml на проведение транзакции в функции TransactionsEx
Так же описания будут дополнятся в процессе нахождения новой информации и структурирования существующей
Решение содержит несколько проектов:
Это проект библиотеки c# имеющий в себе:
Это проект библиотеки на с++ которая используется в Farcard как библиотека ExtDll (пока реализовано для версии 6)
В настройках данной библиотеки указывается путь до плагина написанного на c# с включенной зависимостью от библиотеки FarcardContract
Это проект тестового приложения для загрузки и выполнения основных методов в плагинах(сделан для отладки плагинов глазками при написании)
Это проект службы для получения запросов по Http в виде Xml и json и перенаправление их в плагины с включенной зависимостью от библиотеки FarcardContract
Службу можно запустить в консольном режиме либо установить в качестве службы Windows
Для установки или удаления нужно запустить приложение с параметрами (-i или -install для установки) или (-u или -uninstall для удаления)
Так же можно создать альтернативное название службы с параметром -n или -name
Запросы и ответы для обмена в формате xml описаны тут
!!!Важно реализованы не все методы а именно:
Oстальные методы в процессе реализации Описание запросов в виде json:
Пример тела запросa: {“Card”:1,”Restaurant”:1,”UnitNo”:1,”InpBuf”:null,”InpKind”:0}
где
Card - код карты тип число (int64)
Restaurant - код ресторана тип число (UInt32)
UnitNo - номер кассы тип число (UInt32)
InpBuf - строка информации от кассы в формате Base64 исходный тип (массив байт)
InpKind - тип передаваемой информации от кассы
пример тела ответа: {“Result”:0,”CardInfo”:{“Sieze”:0,”Deleted”:0,”Grab”:0,”StopDate”:0,”Holy”:0,”Manager”:0,”Locked”:0,”WhyLock”:””,”Holder”:”Тестовый клиент”,”PersonID”:1234,”Account”:1234,”Unpay”:0,”Bonus”:5,”Discount”:99,”DiscLimit”:900000.0,”Summa”:1000.05,”Sum2”:200.0,”Sum3”:300.1,”Sum4”:400.0,”Sum5”:500.0,”Sum6”:600.0,”Sum7”:700.0,”Sum8”:800.0,”DopInfo”:”Тестовая информация”,”ScrMessage”:”Тестовая информация для экрана”,”PrnMessage”:”Тестовая информация для печати”},”OutBuf”:null,”OutKind”:0}
где
Result - результат запроса, 0 карта найдена 1 карта не найдена
CardInfo - это объект информации по карте согласно описания в файле Extdll6.txt проекта FarcardContract функции GetcardInfoEx
OutBuf - строка информации для кассы в формате Base64 исходный тип (массив байт)
OutKind - тип передаваемой информации для кассы
Пример тела запроса: {“Transactions”:[{“Sieze”:0,”Card”:1,”PersonID”:1011,”Account”:1001,”Kind”:1,”Summa”:100.0,”Restaurant”:1,”RKDate”:”2023-02-12T00:00:00”,”RKUni”:1,”RKCheck”:1,”VatSumA”:0.0,”VatPrcA”:0.0,”VatSumB”:0.0,”VatPrcB”:0.0,”VatSumC”:0.0,”VatPrcC”:0.0,”VatSumD”:0.0,”VatPrcD”:0.0,”VatSumE”:0.0,”VatPrcE”:0.0,”VatSumF”:0.0,”VatPrcF”:0.0,”VatSumG”:0.0,”VatPrcG”:0.0,”VatSumH”:0.0,”VatPrcH”:0.0},{“Sieze”:0,”Card”:2,”PersonID”:1012,”Account”:1002,”Kind”:2,”Summa”:100.0,”Restaurant”:1,”RKDate”:”2023-02-12T00:00:00”,”RKUni”:1,”RKCheck”:1,”VatSumA”:0.0,”VatPrcA”:0.0,”VatSumB”:0.0,”VatPrcB”:0.0,”VatSumC”:0.0,”VatPrcC”:0.0,”VatSumD”:0.0,”VatPrcD”:0.0,”VatSumE”:0.0,”VatPrcE”:0.0,”VatSumF”:0.0,”VatPrcF”:0.0,”VatSumG”:0.0,”VatPrcG”:0.0,”VatSumH”:0.0,”VatPrcH”:0.0}],”InpBuf”:null,”InpKind”:0}
где
Transactions - список объектов описывающих одну транзакцию
InpBuf - строка информации от кассы в формате Base64 исходный тип (массив байт)
InpKind - тип передаваемой информации от кассы
Пример тела ответа: {“Result”:0,”OutBuf”:null,”OutKind”:0}
где
Result - результат запроса, 0 все транзакции выполнены 1 при выполнении какой то транзакции произошла ошибка
OutBuf - строка информации для кассы в формате Base64 исходный тип (массив байт)
OutKind - тип передаваемой информации для кассы
Пример тела запроса: {“CardCode”:1}
где
CardCode код карты тип число (int64)
Пример тела ответа при ошибке: {“ErrorText”:”Card or image not found”}
где
ErrorText Описание ошибки
В случае успешного ответа тип контента будет не json а (image/[bmp,jpg or jpeg,gif])
Пример тела запроса: {“Email”:”test@test.ru”}
где
Email строка содержащее email для поиска
Пример тела ответа: {“Result”:0,”Account”:1234,”CardCode”:1,”Name”:”Тестовый клиент”}
где
Result - результат запроса, 0 карта найдена 1 карта не найдена
Account - номер счета клиента для проведения транзакции
CardCode - номер карты клиента
Name - Имя клиента
Также реализованы 2 плагина для примера реализаций плагинов
Плагин обертка над библиотеками ExtDll для использования уже сушествующих библиотек в древовидной структуре
Плагин повторяющий работу библотеки FarcardHttp, был написан в качестве тестового плагина для написания и отладки HttpFarcardService Передает в теле запроса объекты как в Xml виде так и в json