AUTHTTP
Версии
В каждой команде и ответе должна быть указана максимальная поддерживаемая версия протокола.
Необязательный тег Tip версии 2 добавлен в AuthPayResponse, ConfPay. Его можно добавить, только если версия 2 содержит атрибут version в AuthPay.
Настройки r_keeper 7
Для включения подсказок заполните параметр TipChargeForAuthTerminal Подсказки для терминала авторизации.
Описание драйвера AUHTTP
- При каждой аутентификации будут создаваться HTTP-запрос к адресу, например: https://127.0.0.1:1212/authtest/authpay.xml, https://127.0.0.1:1212/authtest/confpay.xml, и т.д.
- Сделайте этот запрос, заполнив необходимые параметры. Подробнее читайте в примерах ниже.
Настройка драйвера AUHTTP
Описание формата данных XML
AuthPay/ConfPay/VoidPay: запрос
<?xml version="1.0" encoding="utf-8"?>
<ConfPay version="1">
<SrcID cashguid="{A776FBF7-F9B3-4E14-946E-AB717BA4884B}" servguid="{C31D76A2-09EC-419F-9EA8-7AB85D7446F8}" restguid="{FC1BBB36-4D7F-4EF9-80C2-33B78ADBDB6A}" fullcode="016470001"/>
<Order/>
<MyPay myAmount="288000"/>
<auXML>
<ActionID>1</ActionID>
<CardCode>SomeText</CardCode>
<AuthCode>AuthCode</AuthCode>
<AuthInfo>AuthInfo</AuthInfo>
</auXML>
<!-- Optional Tip in ConfPay and VoidPay from version 2, only if Tip was returned in AuthPayResponse-->
<Tip>
<MyPay myAmount="10000"/>
<auXML>
<ActionID>56014</ActionID>
<AuthCode>AuthCode</AuthCode>
<AuthInfo>AuthInfo</AuthInfo>
<CardCode>5536 91.. .... ....</CardCode>
</auXML>
</Tip>
</ConfPay>
CODE
- SrcID: информация об источнике — ресторан/сервер/касса и т.д.
- Order: содержимое заказа — в приведенном примере заказ пуст
- MyPay: информация о сумме, валюта будет добавлена позже
- auXML: вызов информации о предыдущих платежах — для отмены/подтверждения платежа
AuthPay/ConfPay/VoidPay: ответ
<?xml version="1.0" encoding="utf-8"?>
<!-- AuthPayResponse, ConfPayResponse, VoidPayResponse according to request main tag-->
<ConfPayResponse version="1">
<OpResult>1</OpResult>
<ActionID>56014</ActionID>
<CardCode>SomeText</CardCode>
<AuthCode>AuthCode</AuthCode>
<AuthInfo>AuthInfo</AuthInfo>
<PrinterT>
<Unfiscal CutAfter="1">
<TextLine Text="--------------------------------" />
<TextLine Text=" MOKĖJIMO KORTELĖS KVITAS" />
<TextLine Text="TERMINALO NR.: TMM01651" />
<TextLine Text="PREKYBININKO NR.: 0001651" />
<TextLine Text="MAESTRO (C)" />
<TextLine Text="" />
<TextLine Text="676515******0400" />
<TextLine Text="BYLA: 000007 KVITO NR: 122381" />
<TextLine Text="DATA: 2015.08.18 LAIKAS: 12:08" />
<TextLine Text="RRN: 523012077523 AUT.K.: 851840" />
<TextLine Text="AID: A0000000043060 APP: MAESTRO" />
<TextLine Text="TC: BD67A2DC2F76C234" />
<TextLine Text="TVR: 0800008000 TSI: E800" />
<TextLine Text=" PARDAVIMAS" />
<TextLine Text="" />
<TextLine Text="SUMA: 1.16 EUR" />
<TextLine Text="" />
<TextLine Text=" PIN KODAS ĮVESTAS TEISINGAI" />
<TextLine Text="" />
<TextLine Text=" PATVIRTINTA" />
<TextLine Text="" />
<TextLine Text="IŠSAUGOKITE ČEKĮ, KAD GALĖTUMĖTE" />
<TextLine Text="" />
<TextLine Text=" PATIKRINTI SĄSKAITOS IŠRAŠĄ" />
<TextLine Text="--------------------------------" />
<TextLine Text="" />
</Unfiscal>
</PrinterT>
<DisplayT>Show me on Display</DisplayT>
<ConfPrnT>0</ConfPrnT>
<!-- Tip from version 2, only if 2+ in ConfPay/@version -->
<Tip>
<ActionID>56014</ActionID>
<AuthCode>AuthCode</AuthCode>
<CardCode>5536 91.. .... ....</CardCode>
<AuthInfo>AuthInfo</AuthInfo>
<MyPay myAmount="10000"/>
</Tip>
</ConfPayResponse>
CODE
- Корневой узел имеет одно из следующих значений: AuthPayResponse, ConfPayResponse, VoidPayResponse
- OpResult — результат операции, по умолчанию 1
- 1 — операция прошла успешно
- 0 — возникла ошибка
- ActionID, CardCode, AuthCode, AuthInfo: платежные данные, будут доступны при последующих обращениях к confpay.xml или authpay.xml в блоке auXML. Эти данные также храняться в базе данных r_keeper и доступны в отчетах
- PrinterT: текст для печати
- DisplayT: сообщение для отображения
- ConfPrnT: флаг подтверждения — требуется сообщение с подтверждение печати чека.
GetMenuList: запрос
<?xml version="1.0" encoding="utf-8"?>
<GetMenuList version="2"/>
CODE
GetMenuList: ответ
<?xml version="1.0" encoding="utf-8"?>
<GetMenuListResponse version="2">
<MENU>
<MENUITEM caption="Menu 1" operationId="{607D07C9-42E9-4F92-B8AD-7AE051D4AB15}" parameter="12345" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}" userRight="{E3F2D792-1AC5-46D0-B53F-250FD8C3C189}"/>
<MENUITEM caption="Menu 2 - with submenu">
<MENUITEM caption="Menu 2: SubMenu 1" operationId="{B012B4DD-3ED9-422C-A28E-D0BF0152F931}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
<MENUITEM caption="Menu 2: SubMenu 2">
<MENUITEM caption="Menu 2: SubMenu 2: SubSubMenu 1" operationId="{59D8C6CA-809D-45B6-9D4E-0D7CCC21569A}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
<MENUITEM caption="Menu 2: SubMenu 2: SubSubMenu 2" operationId="{56A61F0A-13A9-4FD2-A328-D41893576A3A}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
<MENUITEM caption="Menu 2: SubMenu 2: SubSubMenu 3" operationId="{2D551616-229A-4EAA-A333-8F06D926F70D}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
</MENUITEM>
<MENUITEM caption="Menu 2: SubMenu 3">
<MENUITEM caption="Menu 2: SubMenu 3: SubSubMenu 1">
<MENUITEM caption="Menu 2: SubMenu 3: SubSubMenu 1: SubSubSubMenu: 1" operationId="{0E2F7D7F-8AE1-4F55-937A-4445C30AB1D0}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
<MENUITEM caption="Menu 2: SubMenu 3: SubSubMenu 1: SubSubSubMenu: 2" operationId="{B7C5A6D9-5E43-4159-9C8D-ADBF1B26EC18}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
</MENUITEM>
</MENUITEM>
</MENUITEM>
<MENUITEM caption="Menu 3 - with dialogs">
<MENUITEM caption="Menu 3: SubMenu 1 with dialog DateInterval" operationId="{47704B77-5D7A-4B66-9250-DC37238095B1}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}">
<DIALOGINFO dialogType="DateInterval" caption="Enter date interval"/>
</MENUITEM>
<MENUITEM caption="Menu 3: SubMenu 2 with dialog NumberInterval" operationId="{51EC80F4-3612-4828-9330-6BDD814D7678}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}">
<DIALOGINFO dialogType="NumberInterval" caption="Enter number interval"/>
</MENUITEM>
<MENUITEM caption="Menu 3: SubMenu 3 with dialog OneDate" operationId="{773B5388-9C30-4878-B338-6D37EEAC8576}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}">
<DIALOGINFO dialogType="OneDate" caption="Enter date"/>
</MENUITEM>
<MENUITEM caption="Menu 3: SubMenu 4 with dialog OneNumber" operationId="{29A0D2FC-19CB-40F2-B2ED-02699D7CEB5F}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}">
<DIALOGINFO dialogType="OneNumber" caption="Enter number"/>
</MENUITEM>
</MENUITEM>
</MENU>
</GetMenuListResponse>
CODE
ExecMenuItem: запрос
<?xml version="1.0" encoding="utf-8"?>
<ExecMenuItem version="2">
<OperationId>{607D07C9-42E9-4F92-B8AD-7AE051D4AB15}</OperationId>
<Parameter>12345</Parameter>
</ExecMenuItem>
XML
ExecMenuItem: ответ
<?xml version="1.0" encoding="utf-8"?>
<ExecMenuItemResponse version="2">
<OpResult>1</OpResult>
<PrinterT>
<Unfiscal CutAfter="1">
<TextLine Text="----Unfiscal doc 1 header-------"/>
<TextLine Text="Some unfiscal 1 text line 1 "/>
<TextLine Text="Some unfiscal 1 text line 2 "/>
<TextLine Text=""/>
</Unfiscal>
<Unfiscal CutAfter="1">
<TextLine Text="----Unfiscal doc 2 header-------"/>
<TextLine Text="Some unfiscal 2 text line 1 "/>
<TextLine Text="Some unfiscal 2 text line 2 "/>
<TextLine Text="Some unfiscal 2 text line 3 "/>
<TextLine Text="Some unfiscal 2 text line 4 "/>
<TextLine Text="Some unfiscal 2 text line 5 "/>
<TextLine Text=""/>
</Unfiscal>
</PrinterT>
<DisplayT>Show me on Display</DisplayT>
</ExecMenuItemResponse>
XML
Пример сценария взаимодействия
1. authpay.xml: запрос авторизации
- Сервер должен использовать узел MyPay из документа AuthPay, чтобы определить необходимую сумму
- В случае успешного выполнения сервер должен установить значение 1 для OpResult (версия 4+) и заполнить параметры CardCode, AuthCode, AuthInfo, ActionID
- Сервер может установить параметр ConfPrnT, если на кассовых станциях требуется сообщение с подтверждением печати чека
- Сервер может установить параметр PrinterT, если требуется печать дополнительного текста
- Если сервер не может выполнить требуемую операцию, он должен установить значение 0 для OpResult и заполнить параметр DisplayT или вернуть код ошибки HTTP с описанием.
2. confpay.xml: запрос подтверждения
- Сервер должен использовать узел MyPay из документа AuthPay, чтобы определить необходимую сумму
- Сервер может использовать данные узла auXML для идентификации транзакции. Этот блок будет содержать значения, полученные при вызове авторизации
- В случае успешного выполнения сервер должен установить значение 1 для OpResult (версия 4+) и заполнить параметры CardCode, AuthCode, AuthInfo, ActionID, если какие-либо из них были изменены с момента авторизации
- Сервер может использовать данные узла auXML для идентификации транзакции. Этот блок будет содержать значения, полученные при вызове авторизации
- Сервер может установить параметр ConfPrnT, если на кассовых станциях требуется сообщение с подтверждением печати чека
- Сервер может установить параметр PrinterT, если требуется печать дополнительного текста
- Если сервер не может выполнить требуемую операцию, он должен установить значение 0 для OpResult и заполнить параметр DisplayT или вернуть код ошибки HTTP с описанием.
3. voidpay.xml: запрос отмены
- Сервер должен использовать данные узла auXML для идентификации транзакции. Этот блок будет содержать значения, полученные при вызове авторизации
- Сервер должен использовать узел MyPay из документа AuthPay, чтобы определить необходимую сумму
- В случае успешного выполнения сервер должен установить значение 1 для OpResult (версия 4+) и заполнить параметры CardCode, AuthCode, AuthInfo, ActionID, если какие-либо из них были изменены с момента авторизации
- Сервер может установить параметр PrinterT, если требуетсяпечать дополнительного текста
- Если сервер не может выполнить требуемую операцию, он должен установить значение 0 для OpResult и заполнить параметр DisplayT или вернуть код ошибки HTTP с описанием.
4. doshift.xml: запрос итога по сменам
При закрытии общей смены, драйвер вызовет doshift.xml со следующими данными:
<?xml version="1.0" encoding="utf-8"?>
<DoShift version="1">
<SrcID cashguid="{4E4C529F-88EF-4BFF-A8C4-9C3D9524BC42}" servguid="{F64F66DA-5463-46A0-BDCD-97DE92026F0E}" restguid="{FC1BBB36-4D7F-4EF9-80C2-33B78ADBDB6A}" fullcode="199990053"/>
</DoShift>
XML
Сервер должен дать ответ вида DoShiftResponse. Не выполняйте никаких действий в это время.
<?xml version="1.0"?>
<DoShiftResponse version="1"/>
<PrinterT>
<Unfiscal CutAfter="1">
<TextLine Text=" START CARD TERMINAL REPORT "/>
<TextLine Text=" ... "/>
<TextLine Text=" REPORT IN PROGRESS "/>
<TextLine Text=" ... "/>
<TextLine Text=" FINISH CARD TERMINAL REPORT "/>
</Unfiscal>
</PrinterT>
XML
5. getmenulist.xml: Запрос структуры меню:
POST-запрос к http://127.0.0.1:1220/authcall.xml/getmenulist.xml
<?xml version="1.0" encoding="utf-8"?>
<GetMenuList version="2"/>
XML
Пример ответа:
<?xml version="1.0" encoding="utf-8"?>
<GetMenuListResponse version="2">
<MENU>
<MENUITEM caption="Menu 1" operationId="{607D07C9-42E9-4F92-B8AD-7AE051D4AB15}" parameter="12345" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}" userRight="{E3F2D792-1AC5-46D0-B53F-250FD8C3C189}"/>
<MENUITEM caption="Menu 2 - with submenu">
<MENUITEM caption="Menu 2: SubMenu 1" operationId="{B012B4DD-3ED9-422C-A28E-D0BF0152F931}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
<MENUITEM caption="Menu 2: SubMenu 2">
<MENUITEM caption="Menu 2: SubMenu 2: SubSubMenu 1" operationId="{59D8C6CA-809D-45B6-9D4E-0D7CCC21569A}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
<MENUITEM caption="Menu 2: SubMenu 2: SubSubMenu 2" operationId="{56A61F0A-13A9-4FD2-A328-D41893576A3A}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
<MENUITEM caption="Menu 2: SubMenu 2: SubSubMenu 3" operationId="{2D551616-229A-4EAA-A333-8F06D926F70D}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
</MENUITEM>
<MENUITEM caption="Menu 2: SubMenu 3">
<MENUITEM caption="Menu 2: SubMenu 3: SubSubMenu 1">
<MENUITEM caption="Menu 2: SubMenu 3: SubSubMenu 1: SubSubSubMenu: 1" operationId="{0E2F7D7F-8AE1-4F55-937A-4445C30AB1D0}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
<MENUITEM caption="Menu 2: SubMenu 3: SubSubMenu 1: SubSubSubMenu: 2" operationId="{B7C5A6D9-5E43-4159-9C8D-ADBF1B26EC18}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}"/>
</MENUITEM>
</MENUITEM>
</MENUITEM>
<MENUITEM caption="Menu 3 - with dialogs">
<MENUITEM caption="Menu 3: SubMenu 1 with dialog DateInterval" operationId="{47704B77-5D7A-4B66-9250-DC37238095B1}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}">
<DIALOGINFO dialogType="DateInterval" caption="Enter date interval"/>
</MENUITEM>
<MENUITEM caption="Menu 3: SubMenu 2 with dialog NumberInterval" operationId="{51EC80F4-3612-4828-9330-6BDD814D7678}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}">
<DIALOGINFO dialogType="NumberInterval" caption="Enter number interval"/>
</MENUITEM>
<MENUITEM caption="Menu 3: SubMenu 3 with dialog OneDate" operationId="{773B5388-9C30-4878-B338-6D37EEAC8576}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}">
<DIALOGINFO dialogType="OneDate" caption="Enter date"/>
</MENUITEM>
<MENUITEM caption="Menu 3: SubMenu 4 with dialog OneNumber" operationId="{29A0D2FC-19CB-40F2-B2ED-02699D7CEB5F}" purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}">
<DIALOGINFO dialogType="OneNumber" caption="Enter number"/>
</MENUITEM>
</MENUITEM>
</MENU>
</GetMenuListResponse>
XML
6. execmenuitem.xml: Запрос выполнения пункта меню:
POST-запрос к http://127.0.0.1:1220/authcall.xml/execmenuitem.xml
<?xml version="1.0" encoding="utf-8"?>
<ExecMenuItem version="2">
<OperationId>{607D07C9-42E9-4F92-B8AD-7AE051D4AB15}</OperationId>
<Parameter>12345</Parameter>
</ExecMenuItem>
XML
Пример ответа:
<?xml version="1.0" encoding="utf-8"?>
<ExecMenuItemResponse version="2">
<OpResult>1</OpResult>
<PrinterT>
<Unfiscal CutAfter="1">
<TextLine Text="----Unfiscal doc 1 header-------"/>
<TextLine Text="Some unfiscal 1 text line 1 "/>
<TextLine Text="Some unfiscal 1 text line 2 "/>
<TextLine Text=""/>
</Unfiscal>
<Unfiscal CutAfter="1">
<TextLine Text="----Unfiscal doc 2 header-------"/>
<TextLine Text="Some unfiscal 2 text line 1 "/>
<TextLine Text="Some unfiscal 2 text line 2 "/>
<TextLine Text="Some unfiscal 2 text line 3 "/>
<TextLine Text="Some unfiscal 2 text line 4 "/>
<TextLine Text="Some unfiscal 2 text line 5 "/>
<TextLine Text=""/>
</Unfiscal>
</PrinterT>
<DisplayT>Show me on Display</DisplayT>
</ExecMenuItemResponse>
XML
- Если сервер не может выполнить требуемую операцию, он должен вернуть код ошибки HTTP с описанием.
Обновления и исправления
- Недостаточно информации для отмены транзакции:
Мы добавили раздел auXML с данными CardCode, AuthCode, AuthInfo, ActionID: это позволит вам найти информацию о предыдущей транзакции - Возможность печати и отображения сообщения на экране после авторизации и в случае ошибки на любом этапе работы:
Мы добавили OpResult для определения результата операции и узлов PrinterT/DisplayT:- Если OpResult равен 0, а DisplayT содержит текст: мы покажем сообщение на станции
- Если PrinterT содержит текст, он будет распечатан на печатающем устройстве
- Отключение диалога с подтверждением печати документа:
Мы добавили параметр ConfPrnT:- 0 — значение по умолчанию
- Выставите значение 1, если вам нужно подтверждение печати чека.