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

Протокол используется

  1. для взаимодействия кассового сервера с драйвером терминала авторизации (хост драйвера - касса или сервер печати просто передают данные без модификации).
  2. Для взаимодействия драйвера терминала авторизации верхнего уровня auHTTPv3 с процессом-драйвером авторизации нижнего уровня.

Версии протокола

Текущая версия - 60 (версии синхронизированы с версиями протокола универсального драйвера фискального регистратора 

  • 1. Новые функции TerminalXMLCall, TerminalXMLAbort.

  • 2. Несколько платежей в авторизации. В результате авторизации может вернуться больше платежей, чем было. Новый атрибут payTransType. Новый тэг OPTIONS в AUTHTRANSACTIONRESULT на инициализации.

  • 12. Новая процедура SetCallbacks, новый тэг PRINTUNFISCAL в возврате.

  • 13. Новый тэг MENU в AUTHTRANSACTIONRESULT на инициализации, новый корневой тэг MENUOPERATION.

  • 44. Атрибут authCode передаётся на вход в AUTHOPERATION.

  • 51. Необязательный атрибут xml:lang у тэга PRINTUNFISCAL, указывается язык по стандарту ISO 639-1

  • 55. Добавлена поддержка payTransType="discount"
  • 59. В OPTIONS добавлена опция MultiOperations. Если установлена, то при всех операциях после авторизации, вызывающий группирует транзакции по transactionNumber, если transactionNumber <> 0
  • 60. Новый тэг Logs в AUTHTRANSACTIONRESULT на инициализации.
  • 61. Опции CreateTransaction, SeqTransactionID. Новый task="createTransaction"

Версия 1... (XML интерфейс)

DLL предоставляет следующие функции (TerminalXMLAbort не обязательная):

procedure TerminalXMLCall(Number: Integer; InXML:PChar; var OutXML:Pchar); stdcall;

procedure TerminalXMLAbort(Number: Integer; InXML:Pchar); stdcall;

procedure SetCallbacks(Number: Integer; InterfaceCallback: tInterfaceCallbackProc; PropCallback: tPropCallbackProc); stdcall;

Если функция TerminalXMLCall не обнаружена, то считается, что драйвер работает по версии 0 (до XML).

Процедура SetCallbacks начиная с версии 12, не обязательная, если она есть, то вызывается сразу после инициализации, описaние процедур tInterfaceCallbackProc и tPropCallbackProc см. Описание протокола универсального драйвера фискального регистратора 


GetStatus

GetStatus - функция, общая для всех драйверов, совместимых с принтерами не обязательна.


PrintersStarted

procedure PrintersStarted(Handle: Integer); stdcall;

Функция, общая для всех драйверов, совместимых с принтерами, не обязательна. Если есть, то вызовется посл инициализации всех принтеров. Может использоваться для печати на другие устройства на старте кассы


SetCallbacks

procedure SetCallbacks(Number: Integer; InterfaceCallback: tInterfaceCallbackProc; PropCallback: tPropCallbackProc); начиная с версии 12, не обязательная, если она есть, то вызывается сразу после инициализации, описaние процедур tInterfaceCallbackProc и tPropCallbackProc см. Описание протокола универсального драйвера фискального регистратора.

Вместо PropCallback можно передать nil.


TerminalXMLCall

procedure TerminalXMLCall(Number: Integer; InXML:PChar; var OutXML:Pchar);

вызовы TerminalXMLCall строго последовательные для одного устройства (одного Number). Результат OutXml хранится в памяти, выделенной драйвером (для конкретного Number) и валидный вплоть до следующего вызова TerminalXMLCall (для конкретного Number). За контроль последовательности (не одновременности) вызовов для одного устройства отвечает вызывающая сторона.


TerminalXMLAbort

procedure TerminalXMLAbort(Number: Integer; InXML:Pchar);

TerminalXMLAbort может вызываться для прерывания текущей операции. Драйвер должен проверить, что XML соответствует XML выполняемой операции. Процедура не должна быть связана с ожиданием. Возврат из процедуры не означает, что указанная операция прервана. Если операция была прервана, то об этом будет видно из ответа выполняемой операции.


XML вызова (TerminalXMLCall, TerminalXMLAbort)

Инициализация

<AUTHINIT MaxProtocolVersion="12">
  <DriverParameters>
    <Parameter Name="Port Name"
               IntegerValue=""
               StringValue="Com1"/>
 
    <Parameter Name="Port Configuration"
               IntegerValue=""
               StringValue="baud=9600 parity=N"/>
 
    <Parameter Name="Password"
               IntegerValue="0"/>
    <Parameter Name="LowDriverParams">
<![CDATA[[<?xml version="1.0" encoding="utf-8"?><DriverConfig></DriverConfig>]]>
</Parameter> </DriverParameters> </AUTHINIT>

возврат

<AUTHTRANSACTIONRESULT task="init" hardErrorCode="0" softErrorCode="0" errorText="No error" protocolVersion="12" dllVersion="95">
  <OPTIONS>
     <OPTION Name="Encashment"/>
<OPTION Name="MultiOperations"/> <OPTION Name="SeqTransactionID"/>
</OPTIONS> <MENU> <MENUITEM caption="Group 1"> <!-- так зажаётся подменю, caption - обязательный --> <MENUITEM caption="Test supergiperfunction" <!-- обязательный --> operationId="{123E720F-BAFC-453F-9948-50662663F75C}" <!-- обязательный для исполняемого пункта меню --> parameter="12345" <!-- число, не обязательный, если есть будет скопирован при вызове в parameter --> purposeToLock="{7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2}" <!-- назначение печати (и вывод на экран), перед выполнением принтер с этого назначения будет заблокирован, не обязательный, ({7DA9C7F9-7DAE-462F-9FC5-113E2E3810B2} - в RK7 "для пречеков", для вывода на экран {9FD45000-7B7C-45F6-9EA7-F0391269A232}) --> userRight="{A4C4606D-F7C4-4FBF-83D7-00AD12DD7E55}"> <!-- пользовательское право, которое будет проверяться перед выполнением, не обязательный --> <DIALOGINFO dialogType="DateInterval"|"NumberInterval"|"OneDate"|"OneNumber" caption="Enter date interval for superreport"/> <!-- не обязательный --> </MENUITEM> <MENUITEM caption="Settings"> <!-- подменю --> <MENUITEM caption="Set superpassword" <!-- обязательный --> operationId="{123E720F-BAFC-453F-9948-50662663F75C}"/> </MENUITEM> </MENUITEM> </MENU>
<Logs><!-- начиная с версии 60, не обязательный, содержит маски логов, атрибуты не обязательны, если на заданы будут заполнены верхним уровнем.-->
<Log Module="cvSBPilot.dll#0">c:\rkeeper 7\bin\win\cvSBPilot_0.log</Log>
<Log Module="cvSBPilot.dll#0">c:\rkeeper 7\bin\win\cvSBPilot_0.*.log</Log>
<Log Module="cvSBPilot.dll#0/pilot_nt">c:\rkeeper 7\bin\win\pilot_nt\pilot_nt*.log</Log>
</Logs>
</AUTHTRANSACTIONRESULT>

OPTIONS начиная с версии 2, в тэгах OPTION с обязательным атрибутом Name содержится описание опций терминала, которые должны как то поддерживаться кассой.

  • Encashment - обналичивание. Вместе с операцией на авторизацию карты для оплаты приходит операция с payTransType="encashment"
  • MultiOperations -  Если установлена, то при всех операциях после авторизации, вызывающий группирует транзакции по transactionNumber, если transactionNumber <> 0. Без опции группировка не производится. Для предыдущих версий протокола группировка производится при transactionNumber <> 0.
  • SeqTransactionID - если на входе protocolVersion>=61, то драйвер ожидает, что на вход при авторизации или создании транзакции поступит уникальный transactionNumber.
  • CreateTransaction - дополнительный вызов перед авторизации для запоминания transactionNumber,EXTTRANSACTIONINFO, которые позволят откатить последующую авторизацию даже при неопределённом результате

Сразу после инициализации вызывается SetCallbacks (начиная с версии 12)

Финализация

<AUTHDONE/>

возврат

<AUTHTRANSACTIONRESULT  task="done"/>

Операции меню (с 13 версии)

<MENUOPERATION
  operationId="{5B3F851D-1C75-41C1-B3B3-B0927E49D3ED}"
  parameter="12345">
  <DIALOGINFO from="2014-12-31" to="2015-12-31"/> <!-- не обязательный, если был вызов диалога, to заполняется для типов диалога "DateInterval","NumberInterval" -->
</MENUOPERATION>

возврат

<AUTHTRANSACTIONRESULT task="menuOperation" hardErrorCode="0" softErrorCode="0" errorText="No error">
  <PRINTUNFISCAL xml:lang="ru"><!-- не обязательный -->
     <Unfiscal>
     </Unfiscal>
     <Unfiscal>
     </Unfiscal>
  </PRINUNFISCAL>
</AUTHTRANSACTIONRESULT>

Закрытие смены

<AUTHCLOSESHIFT terminalId="5B3F851D-1C75-41C1-B3B3-B0927E49D3ED"/>

возврат, описание тэгов см. ниже

<AUTHTRANSACTIONRESULT task="closeShift" hardErrorCode="0" softErrorCode="0" errorText="No error">
  <PRINTTEXT>
  </PRINTTEXT>
  <SCREENTEXT>
  </SCREENTEXT>
  <PRINTUNFISCAL> <!-- с версии 12, если есть заменяет PRINTTEXT, одновременное появление и PRINTUNFISCAL - ошибка-->
     <Unfiscal>
     </Unfiscal>
     <Unfiscal>
     </Unfiscal>
  </PRINUNFISCAL>
</AUTHTRANSACTIONRESULT>

Остальные операции (транзакции)

<AUTHTRANSACTION terminalId="{5B3F851D-1C75-41C1-B3B3-B0927E49D3ED}" task="authorize/confirm/rollbackConfirm/void/rollbackVoid/createTransaction" afterPrint="0/1" orderId="{E47D3F17-18D4-4935-AA4F-002CE5E27A37}" terminalPrintDetailIdent="22D4B396-6D27-4639-8504-3490E9BD2451">
  <PRINTTEXT>
  </PRINTTEXT>
  <AUTHOPERATIONS>
    <AUTHOPERATION value="123.32" payId="{A400DCEE-E441-4B6F-916F-8FCC9D60AF30}" inputType="manual/inpid/kbd/calc/xml" transactionNumber="3210" transactionStatus="noTransaction/canceled/created/authorizing/authorized/confirmed/voided/dayClosed" extIntegerInfo="123123" currencyId="{C7E6E4B7-051C-44B6-A82D-5FCE78823A81}" payTransType="pay/tip/encashment/discount">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTION>
  • terminalId - логический идентификатор терминала в рамках этой системы

  • task - все, кроме abort только для TerminalXMLCall, abort только для TerminalXMLAbort

    • init - инициализация

    • done - финализация

    • authorize - первичная авторизация

    • confirm перед печатью чека

    • rollbackConfirm - отмена confirm (при ошибке печати), в старом протоколе (версии 0) ничего не делалось

    • void - отмена авторизации либо при удалении платежа на кассе либо при удалении чека

    • rollbackVoid - отмена отмены авторизации (при ошибке печати) в старом протоколе (версии 0) вызывался confirm

    • createTransaction - с протокола 61 - при опции "CreateTransaction" перед авторизацией (task="authorize") выполняется создание транзакции. В результате должна заполниться информация для отката транзакции (transactionNumber,EXTTRANSACTIONINFO) , в том числе в случае неопределённости результата авторизации, например при выключении кассы или кассового сервера.  transactionStatus="created"
  • afterPrint - не обязательный, по умолчанию 0, имеет смысл только для task=«confirm», «rollbackConfirm» и task=«void», см. needAfterPrint в XML возврата

  • orderId - строковый идентификатор заказа

  • terminalPrintDetailIdent - не обязательный, идентификатор выбора из опционного меню перед авторизацией.

  • PayId - уникальный идентификатор платежа, не может изменяться

  • inputType - способ добавления платежа в заказ

    • manual - вручную (или скриптом)

    • inpid - сигнал на добавление пришёл от внешнего устройства считывания идентификаторов (магнитная читалка, таблетка, RFID, сканер)

    • kbd - был введён «код с клавиатуры»

    • calc - платёж добавился автоматически при расчёте чека

    • xml - добавлен через XML интерфейс

  • transactionNumber - обязательный, по умолчанию 0, целое число int32, сохраняется в базе в TransactionID, операции с одинаковым transactionnumber передаются в драйвер терминала авторизации в одном XML в одном тэге AUTHOPERATIONS,

  • authCode - код авторизации, текст, сохраняется в базе в AuthCode string[20]

  • extIntegerInfo - обязательный, по умолчанию 0, целое число int64

  • currencyId - идентификатор (GUID) валюты, dвозможны разные валюты для разных юр. лиц и т.п.

  • payTransType - начиная с версии 2 - «pay/tip/encashment/discount» - новый признак платежа. tip - чаевые, encashment - обналичка, discount - скидка, добавленная при оплате, начиная с версии 55

  • PRINTTEXT - макетированный текст для использования терминалом в различных целях, только для задачи «authorize», бинарные данные, кодируются BASE64

  • AUTHOPERATIONS, AUTHOPERATION, EXTTRANSACTIONINFO обязательны для задач, перечисленных в начале этого раздела

    • EXTTRANSACTIONINFO - сохраняется в базу в ExtTransactionInfo string[255] с разделителями между частями «/», соответственно такие разделители в тексте запрещены.

      • EXTTRANSACTIONINFOPART value


XML возврата TerminalXMLCall

<AUTHTRANSACTIONRESULT task="authorize/confirm/rollbackConfirm/void/rollbackVoid/closeShift/createTransaction" orderId="{E47D3F17-18D4-4935-AA4F-002CE5E27A37}" hardErrorCode="0" softErrorCode="0" errorText="No error">
  <PRINTTEXT>
  </PRINTTEXT>
  <PRINTUNFISCAL> <!-- с версии 12, если есть заменяет PRINTTEXT, одновременное появление PRINTTEXT и PRINTUNFISCAL - ошибка-->
     <Unfiscal>
     </Unfiscal>
     <Unfiscal>
     </Unfiscal>
  </PRINUNFISCAL>
  <SCREENTEXT>
  </SCREENTEXT>
  <AUTHOPERATIONS>
    <AUTHOPERATION payId="{A400DCEE-E441-4B6F-916F-8FCC9D60AF30}" value="123.32" needAfterPrint="0/1" transactionNumber="3210" transactionStatus="noTransaction/canceled/created/authorizing/authorized/confirmed/voided/dayClosed" cardNum="123456******9876" extIntegerInfo="123123" authCode="OK" owner="VISA/MASTERCARD/MAESTRO/AMERICAN EXPRESS/DINERS CLUB/VISA ELECTRON/PRO100/CASHIER CARD/SBERCARD/JCB" needAskBeforePrint="0/1" payTransType="pay">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
    <!-- чаевые: payId сгенерирован -->
    <AUTHOPERATION payId="{32C5AA5C-64EE-4D7D-A6E9-4EF27D478827}" value="10.00" payTransType="tip" needAfterPrint="0/1" transactionNumber="3210" transactionStatus="noTransaction/canceled/created/authorizing/authorized/confirmed/voided/dayClosed" cardNum="123456******9876" extIntegerInfo="123123" authCode="OK" owner="VISA/MASTERCARD/MAESTRO/AMERICAN EXPRESS/DINERS CLUB/VISA ELECTRON/PRO100/CASHIER CARD/SBERCARD/JCB" needAskBeforePrint="0/1">
    </AUTHOPERATION>
    <!-- скидка, начиная с протокола 55: payId сгенерирован, value должна совпадать с уменьшением value в операции payTransType="pay" --> 
<AUTHOPERATION payId="{4CA4C45B-369C-48FA-A9D5-CB613A83F90A}" value="10.00" payTransType="discount" needAfterPrint="0/1" transactionNumber="3210" transactionStatus="noTransaction/canceled/created/authorizing/authorized/confirmed/voided/dayClosed" cardNum="123456******9876" extIntegerInfo="123123" authCode="OK" owner="VISA/MASTERCARD/MAESTRO/AMERICAN EXPRESS/DINERS CLUB/VISA ELECTRON/PRO100/CASHIER CARD/SBERCARD/JCB" needAskBeforePrint="0/1">
</AUTHOPERATION>
</AUTHOPERATIONS> </AUTHTRANSACTIONRESULT>

Для тэга AUTHOPERATION обязательные атрибуты payId и transactionStatus. При отсутствии тэга AUTHOPERATION статус транзакции платежа не меняется. Значения атрибутов по умолчанию

  • task и orderID если заданы, то проверяются на совпадение с соответствующими полями при вызове. Помогают ориентироваться в логах.

  • payId - уникальный идентификатор платежа, не может изменяться, обязателен для заполнения. Для операций, добавленных в результате авторизации (чаевые, инкассация, скидка) payId должен быть заполнен честно сгенерированным GUID

  • needAfterPrint только для task=«confirm» и task=«void». Означает, что надо будет вызвать ещё раз после печати. Момент вызова (до или после печати) передаётся в afterPrint, по умолчанию «0».

  • transactionStatus - обязательно должен быть заполнен

  • cardNum - PAN

  • needAskBeforePrint - надо ли после авторизации но перед печатью чека задать вопрос о печати чека, по умолчанию «1»

  • transactionNumber - обязательный, целое число int32, сохраняется в базе RK7 в TransactionID, операции с одинаковым transactionnumber передаются в драйвер терминала авторизации в одном XML в одном тэге AUTHOPERATIONS

  • extIntegerInfo - обязательный, целое число int64, сохраняется в базе RK7 в AccountIdent

  • owner - тип карты VISA/MASTERCARD/MAESTRO/AMERICAN EXPRESS/DINERS CLUB/VISA ELECTRON/PRO100/CASHIER CARD/SBERCARD/JCB

  • value - необязательный, если не задан, считается, что совпадает с value из запроса. Если задан, должен быть больше ноля и не больше value из запроса.

  • payTransType=«pay/tip/encashment/discount» - не обязательный, если не задан, то как в вызове, не должен меняться, но в результате авторизации может быть добавлен новый тэг AUTHOPERATION c payTransType="tip" или payTransType="encashment". Начиная с протокола 55 добавлена поддержка payTransType="discount"

  • EXTTRANSACTIONINFO - при наличии тэга сохраняется в базу в ExtTransactionInfo string[255] с разделителями между частями «/», соответственно такие разделители в тексте запрещены. При отсутствии тэга EXTTRANSACTIONINFO в базе для платежа остаётся старое значение. Пустой тэг EXTTRANSACTIONINFO приведёт к очистке в базе поля ExtTransactionInfo.

    • EXTTRANSACTIONINFOPART value

  • PRINTTEXT - текст для печати, бинарные данные, кодируются BASE64

  • SCREENTEXT - текст для вывода на экран, в том числе сообщения об ошибках, присланные банком, utf-8, выводится только если hardErrorCode=0 и softErrorCode=0, иначе текст ошибки в атрибуте errorText корневого тэга. При успешном выполнении выодится н

  • PRINTUNFISCAL - начиная с версии 3 содержит набор тэгов Unfiscal, таких же, как в описании протокола универсального драйвера фискального регистратора.

Последовательность вызовов

Создание транзакции

с версии 61, не обязательное, при выставленной опции CreateTransaction, в ответе transactionStatus="created"

<AUTHTRANSACTION terminalId="5B3F851D-1C75-41C1-B3B3-B0927E49D3ED" task="createTransaction" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37" terminalPrintDetailIdent="22D4B396-6D27-4639-8504-3490E9BD2451"
  <AUTHOPERATIONS>
    <AUTHOPERATION value="123.32" payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" inputType="manual"
    transactionStatus="noTransaction" payTransType="pay"
    />
  </AUTHOPERATIONS>
</AUTHTRANSACTION>

Ответ:

<AUTHTRANSACTIONRESULT task="authorize" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37" hardErrorCode="0" softErrorCode="0" errorText="No error">
  <PRINTTEXT> <!-- в новых версиях PRINTUNFISCAL -->
Это слип, который надо напечатать
  </PRINTTEXT>
  <AUTHOPERATIONS>
    <AUTHOPERATION payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" transactionNumber="3210" transactionStatus="created" extIntegerInfo="123123" authCode="OK">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="RRN:123321123"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTIONRESULT>

Авторизация

<AUTHTRANSACTION terminalId="5B3F851D-1C75-41C1-B3B3-B0927E49D3ED" task="authorize" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37" terminalPrintDetailIdent="22D4B396-6D27-4639-8504-3490E9BD2451"
  <PRINTTEXT/>
  <AUTHOPERATIONS>
    <AUTHOPERATION value="123.32" payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" inputType="manual"
    transactionStatus="noTransaction" payTransType="pay"
    />
  </AUTHOPERATIONS>
</AUTHTRANSACTION>

Ответ:

<AUTHTRANSACTIONRESULT task="authorize" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37" hardErrorCode="0" softErrorCode="0" errorText="No error">
  <SCREENTEXT>
    Попросите клиента подписаться на слипе!
  </SCREENTEXT>
  <PRINTTEXT> <!-- в новых версиях PRINTUNFISCAL -->
Это слип, который надо напечатать
  </PRINTTEXT>
  <AUTHOPERATIONS>
    <AUTHOPERATION payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" value="123.32" transactionNumber="3210" transactionStatus="authorized" cardNum="123456******9876" extIntegerInfo="123123" authCode="OK" owner="VISA/MASTERCARD/MAESTRO/AMERICAN EXPRESS/DINERS CLUB/VISA ELECTRON/PRO100/CASHIER CARD/SBERCARD/JCB" needAskBeforePrint="1">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTIONRESULT>

Если softErrorCode<>0 или hardErrorCode<>0 хост показывает errorText и больше ничего не делает.

Получив такой (успешный) ответ хост показывает содержимое SCREENTEXT и печатает то, что в PRINTTEXT или в PRINTINFISCAL в зависимости от поддерживаемого протокола.

Если статус «authorized» или «confirmed» - платёж терминалом (банком) принят.

Потом, скажем, клиент расписывается на слипе или ещё где то, так как стоит needAskBeforePrint=«1» хост перед печатью чека запрашивает у кассира «Всё ок, печатаем чек?».

Если клиент или кассир желает всё отменить, выполняем отмену платежа, иначе печатаем чек.

Печать чека

Если вернулся transactionStatus=«confirmed», то ничего делать не надо вообще. Если вернулся статус «authorized» то перед печатью чека вызываем так:

<AUTHTRANSACTION terminalId="5B3F851D-1C75-41C1-B3B3-B0927E49D3ED" task="confirm" afterPrint="0" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37">
  <AUTHOPERATIONS>
    <AUTHOPERATION value="123.32" payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" inputType="manual" transactionNumber="3210" transactionStatus="authorized" extIntegerInfo="123123" currencyId="C7E6E4B7-051C-44B6-A82D-5FCE78823A81" payTransType="pay" authCode="OK">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTION>

Ответ:

<AUTHTRANSACTIONRESULT task="confirm" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37" hardErrorCode="0" softErrorCode="0" errorText="No error">
  <PRINTTEXT>
  </PRINTTEXT>
  <PRINTUNFISCAL> <!-- с версии 12, если есть заменяет PRINTTEXT, одновременное появление и PRINTUNFISCAL - ошибка-->
     <Unfiscal>
     </Unfiscal>
     <Unfiscal>
     </Unfiscal>
  </PRINUNFISCAL>
  <SCREENTEXT>
  </SCREENTEXT>
  <AUTHOPERATIONS>
    <AUTHOPERATION payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" value="123.32" needAfterPrint="1" transactionNumber="3210" transactionStatus="confirmed" extIntegerInfo="123123" authCode="OK">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTIONRESULT>

Если softErrorCode<>0 или hardErrorCode<>0 хост показывает errorText и отменяет печать чека.

Если на входе тип транзакции «authorized», то драйвер при успехе выставляет тип «confirmed». Остальные типы транзакции игнорируются

Автоматическую отмену платежа лучше не делать.

Если softErrorCode=0 и hardErrorCode=0 - печатаем слип, при ошибке печати слипа можно отменить confirm вызвав rollbackConfirm с тем, чтобы потом когда-нибудь заново выполнить confirm и заново получить слип confirm. r_k 7 в этом случае задаёт вопрос, что дальше делать - повторно попытаться распечатать слип или отменить печать чека, при выборе «отмена» чек не печатается.

После печати чека, если при выполнении confirm был возврат needAfterPrint=«1» надо вызвать так (afterPrint=«1»):

<AUTHTRANSACTION terminalId="5B3F851D-1C75-41C1-B3B3-B0927E49D3ED" task="confirm" afterPrint="1" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37">
  <AUTHOPERATIONS>
    <AUTHOPERATION value="123.32" payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" inputType="manual" transactionNumber="3210" transactionStatus="authorized" extIntegerInfo="123123" currencyId="C7E6E4B7-051C-44B6-A82D-5FCE78823A81" payTransType="pay">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTION>

ответ:

<AUTHTRANSACTIONRESULT task="confirm" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37" hardErrorCode="0" softErrorCode="0" errorText="No error">
  <PRINTTEXT>
  </PRINTTEXT>
  <PRINTUNFISCAL> <!-- с версии 12, если есть заменяет PRINTTEXT, одновременное появление и PRINTUNFISCAL - ошибка-->
     <Unfiscal>
     </Unfiscal>
     <Unfiscal>
     </Unfiscal>
  </PRINUNFISCAL>
  <SCREENTEXT>
  </SCREENTEXT>
  <AUTHOPERATIONS>
    <AUTHOPERATION payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" value="123.32" needAfterPrint="1" transactionNumber="3210" transactionStatus="confirmed" extIntegerInfo="123123" authCode="OK">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTIONRESULT>

Ошибки в этом случае следует игнорировать (записав в лог)

Отмена платежа

Желательно инициировать отмену платежа не автоматически, а по конкретной осознанной команде кассира, так как в некоторых терминалах нет автоматической отмены и требуется катать карту.

Отмена платежа может быть либо после авторизации, когда чек ещё не был напечатан, либо при удалении уже распечатанного чека. В любом случае вызов одинаков:

<AUTHTRANSACTION terminalId="5B3F851D-1C75-41C1-B3B3-B0927E49D3ED" task="void" afterPrint="0" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37">
  <AUTHOPERATIONS>
    <AUTHOPERATION value="123.32" payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" inputType="manual" transactionNumber="3210" transactionStatus="confirmed" extIntegerInfo="123123" currencyId="C7E6E4B7-051C-44B6-A82D-5FCE78823A81" payTransType="pay">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTION>

ответ:

<AUTHTRANSACTIONRESULT task="void" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37" hardErrorCode="0" softErrorCode="0" errorText="No error">
  <PRINTTEXT>
  </PRINTTEXT>
  <PRINTUNFISCAL> <!-- с версии 12, если есть заменяет PRINTTEXT, одновременное появление и PRINTUNFISCAL - ошибка-->
     <Unfiscal>
     </Unfiscal>
     <Unfiscal>
     </Unfiscal>
  </PRINUNFISCAL>
  <SCREENTEXT>
  </SCREENTEXT>
  <AUTHOPERATIONS>
    <AUTHOPERATION payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" value="123.32" needAfterPrint="1" transactionNumber="3210" transactionStatus="voided" extIntegerInfo="123123" authCode="OK">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTIONRESULT>

После этого хост печатает слип, удаляет чек (если надо), после этого, если всё прошло хорошо и вернулось needAfterPrint=«0» (или нет атрибута needAfterPrint) всё закончилось.

Если вернулось needAfterPrint=«1» хост выполняет:

<AUTHTRANSACTION terminalId="5B3F851D-1C75-41C1-B3B3-B0927E49D3ED" task="void" afterPrint="1" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37">
  <AUTHOPERATIONS>
    <AUTHOPERATION value="123.32" payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" inputType="manual" transactionNumber="3210" transactionStatus="confirmed" extIntegerInfo="123123" currencyId="C7E6E4B7-051C-44B6-A82D-5FCE78823A81" payTransType="pay">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTION>

ответ:

<AUTHTRANSACTIONRESULT task="void" orderId="E47D3F17-18D4-4935-AA4F-002CE5E27A37" hardErrorCode="0" softErrorCode="0" errorText="No error">
  <PRINTTEXT>
  </PRINTTEXT>
  <PRINTUNFISCAL> <!-- с версии 12, если есть заменяет PRINTTEXT, одновременное появление и PRINTUNFISCAL - ошибка-->
     <Unfiscal>
     </Unfiscal>
     <Unfiscal>
     </Unfiscal>
  </PRINUNFISCAL>
  <SCREENTEXT>
  </SCREENTEXT>
  <AUTHOPERATIONS>
    <AUTHOPERATION payId="A400DCEE-E441-4B6F-916F-8FCC9D60AF30" value="123.32" needAfterPrint="1" transactionNumber="3210" transactionStatus="voided" extIntegerInfo="123123" authCode="OK">
      <EXTTRANSACTIONINFO>
        <EXTTRANSACTIONINFOPART value="BANK:SBRF"/>
        <EXTTRANSACTIONINFOPART value="PdsCard=BA3FECE89032815503E8A123456789AC64BA6573D;0001"/>
      </EXTTRANSACTIONINFO>
    </AUTHOPERATION>
  </AUTHOPERATIONS>
</AUTHTRANSACTIONRESULT>

Печатается слип, ошибки этого ответа и ошибки печати игнорируются.

Версия 0 (до XML)

DLL предоставляет следующие функции:

  • InitDevice

  • GetStatus

  • TerminalAuthorizeEx (устаревшая TerminalAuthorize)

  • TerminalConfirmEx (устаревшая TerminalConfirm)

  • TerminalVoidEx (устаревшая TerminalVoid)

  • Элемент ненумерованного списка TerminalAfterPrintVoid

  • TerminalAfterPrintConfirm

  • TerminalAbort

  • Done