Цитата: student ➤ AuthCode - код авторизации, используется в основном для отмены, а вот для возврата нужна карта
Но есть Ньюанс :
скрытое
Операции возврат, отмена, завершение расчета или отмена предавторизации могут быть выполнены без считывания карты клиента. Это возможно, если исходные операции находятся в той же смене.
При выполнении операции возврат без карты терминал:
1.Выполнит полную отмену, если сумма возврата равна сумме исходной операции.
2.Выполнит частичную отмену , если сумма возврата меньше суммы исходной операции и настройки терминала позволяют частичные отмены.
3.Вернет код ошибки 4118 "Операции не найдены", если сумма превышает сумму исходной операции.
4.Может быть отменена любая операция, за исключением подтверждения взноса наличных и отмены предавторизации.
5.Частичные отмены возможны только для операции оплата. Для всех остальных операций частичная отмена невозможна.
6.В цепочке из предавторизации и нескольких добавочных предавторизаций допускается полная отмена любой из добавочных предавторизаций. Отмена основной предавторизации без отмены добавочных предавторизаций невозможна.
И далее п оримеру есть вот такое:
Цитата:
Например:
//оплата на 1000 руб (100000 коп).
struct 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);
--------------------------------------------------------------------------------