Интеграция с ПО UPOS через библиотеку PILOT_NT. 1.0 Платформа Win32.

- Титульная страница
- Группы
- Структуры данных

Выполнение операций без карты
Расширенный функционал

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

При выполнении операции возврат без карты терминал:

1. Выполнит полную отмену, если сумма возврата равна сумме исходной операции.
2. Выполнит частичную отмену , если сумма возврата меньше суммы исходной операции и настройки терминала позволяют частичные отмены.
3. Вернет код ошибки 4118 "Операции не найдены", если сумма превышает сумму исходной операции.
4. Может быть отменена любая операция, за исключением подтверждения взноса наличных и отмены предавторизации.
5. Частичные отмены возможны только для операции оплата. Для всех остальных операций частичная отмена невозможна.
6. В цепочке из предавторизации и нескольких добавочных предавторизаций допускается полная отмена любой из добавочных предавторизаций. Отмена основной предавторизации без отмены добавочных предавторизаций невозможна.

Оплата бонусами «Спасибо», выполненная самим терминалом, а не кассовым ПО, не может быть отменена полностью или частично. Для таких операции допускается только возврат, поэтому при попытке выполнить возврат без карты по такой операции терминал вернет ошибку 4118. Данное ограничение действует, если терминал самостоятельно выполняет обработку бонусов "Спасибо", без возврата в кассовое ПО промежуточного кода ответа 4353. Ограничение не распространяется на ваше ПО, если оно получает от терминала промежуточный код ответа 4353, передает хэш карты на сервер "Спасибо" и уменьшает сумму операции при повторном вызове Оплата.

Терминал вернет код ошибки 4118, если по переданным входным параметрам не сумеет найти исходную операцию.

Предупреждения
  Выполнение операций возможно только на тех версиях функций card_authorize(), которые принимают RRN в качестве параметра. Это функции из списка ниже:
  - card_authorize5
  - card_authorize6
  - card_authorize8
  - card_complete_multi_auth8
  - card_authorize12
  - card_authorize13
  - card_authorize14

Для выполнения операций возврат, отмена, завершение расчета или отмена предавторизации без карты клиента при вызове функции card_authorize() должны быть указаны следующие параметры:

1. Аргумент Track2 – должно содержать слово «QSELECT»;
2. Поле Amount - сумма операции, если 0 – копируется из исходной операции и кассиру предлагается подтвердить или изменить сумму, если выполняемая операция это допускает. Для операции завершение расчета сумма не должна быть равна 0, для операции отмена предавторизации сумма должна быть равна 0;
3. Поле RRN - номер ссылки на исходную операцию.
4. Поля Department и CurrencyCode, при их отличии от 0 , будут использоваться как дополнительный фильтр при поиске исходных операций. При их отсутствии терминал cкопирует из исходной операции код валюты и номер отдела

Например:

//оплата на 1000 руб (100000 коп).
auth_answer14 aa;
char rrn[MAX_REFNUM]; //здесь сохраним номер ссылки между оплатой и возвратом
memset(&aa, 0, sizeof(aa));
memset(&rrn, 0, sizeof(rrn));
aa.TType=OP_PURCHASE;
aa.Amount=100000;
carderr=card_authorize14(NULL, &aa);
if (carderr==0){
//сохраняем RRN
strcpy(rrn, aa.RRN);
//печатаем чек, отпускаем топливо
//все оплаченное топливо не вошло в бак, клиент уехал
//выполняем возврат без карты
if (aa.Check)
::GlobalFree((HGLOBAL)aa.Check);
memset(&aa, 0, sizeof(aa));
aa.TType=OP_RETURN;
aa.Amount=2000; //возврат 20 руб
strcpy(aa.RRN, rrn); //исходная операция будет найдена по ее ссылочному номеру
carderr=card_authorize14("QSELECT", &aa);
if (carderr==0){
//возврат успешен, оформляем его в учетной системе
}else{
//что-то пошло не так. Пишем письмо в Сбербанк с описанием ситуации и просьбой вернуть клиенту 20 руб
}
}
//Не забываем освободить поле auth_answer::Check
if (aa.Check)
::GlobalFree((HGLOBAL)aa.Check);