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

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

Оплата покупки с использованием баллов СПАСИБО
Расширенный функционал

Существует возможность организовать оплату покупки с использованием бонусов СПАСИБО. Для этого кассовая программа должна получить информацию, что данная банковская карта выпущена Сбербанком и, следовательно, имеет бонусный счет СПАСИБО. При этом хотелось бы избежать ситуации, когда клиенту придется вставлять/прокатывать/прикладывать карту повторно для выполнения собственно оплаты. Чтобы реализовать такой режим работы, необходимо в TLV-файле включить параметр «Дополнительные опции \ Возвращать промежуточный код ответа \ Возвращать промежуточный код ответа по картам Сбербанка».

Ниже описан пример операции со стороны ККМ:

1. Включить заголовочные файлы
   #include "..\..\..\..\errors.h"
   #include "..\..\..\..\gate.h"
   #include "..\..\..\..\sbkernel.h"
2. Объявить аргументы
   InArg in;
   OutArg out;
   struct_in_cl4 InDetail;
   struct_out_cl4 OutDetail;
   struct_in_reserved4 inExtra;
   struct_out_reserved4 outExtra;
3. Связать аргументы
   in.in_struct = &InDetail;
   out.out_struct = &OutDetail;
   out.Reserved = &outExtra;
   outExtra.size = sizeof(outExtra);
   inExtra.size = sizeof(inExtra);
   in.Reserved = &inExtra;
4. Задать значения
   outExtra.Department = DEPARTMENT_NOT_SPECIFIED;
   InDetail.Amount = 100000; // тысяча рублей - сумма к оплате
5. Загрузить библиотеку и основную функцию.
   HMODULE dll = LoadLibrary("gate.dll");
   Gate_Call_Sb_Kernel gate_Call_Sb_Kernel = (Gate_Call_Sb_Kernel)GetProcAddress(dll, "_call_sb_kernel");
   Предупреждения
     Обязательно инициализировать библиотеку функцией KO_INITIALIZATION
6. Вызвать динамически загруженную функцию на оплату
   DWORD error = function(4000,&in,&out); // вызов функции _call_sb_kernel библиотеки sb_kernel.dll
7. Если клиент использует для оплаты соответствующую карту, то функция _call_sb_kernel вернет промежуточный код ответа ERR_THIS_IS_SBER (4353). В поле outExtra.Cert вернется хеш карты для взаимодействия с системой ЦФТ. Следует обратиться к программе компании ЦФТ (списать баллы спасибо), которая занимается списанием/начислением бонусов СПАСИБО. По итогам взаимодействия с программой ЦФТ часть покупки, возможно, будет оплачена бонусами СПАСИБО. Если списание бонусов "Спасибо" прошло успешно, то следует уменьшить сумму операции на это значение. После этого в inExtra.Track2 записать значение хеша карты от первой операции. Повторно вызвать оплату с измененными данными. Карту повторно прокатывать / прикладывать не нужно.
   if (out.ErrorCode == ERR_THIS_IS_SBER) // 4353
   {
   std::cout << "Sberbank Spasibo detected!" << std::endl;
   inExtra.Amount = 90000; // по Спасибо списано 10 рублей, итоговая сумма 900 рублей.
   strcpy_s(inExtra.Track2, (const char*)outExtra.Cert); // передача хеша карты для второй оплаты
   error = function(4000,&in,&out); // повторный вызов оплаты
   }
8. Проверить результат вызова
   out.ErrorCode;
9. Оплата с баллами спасибо выполнена успешно. При необходимости выгрузить библиотеку.
   Предупреждения
     Обязательно завершить работу библиотеки KO_FINALIZATION
     FreeLibrary(dll);
   См. также
     Пример реализации находится в папке Docs\Для разработчиков ПО ККМ.dll
   Предупреждения
     При повторном вызове кассовая программа должна изменить только сумму операции и/или количество товара. Изменения других параметров операции, таких как номер отдела, код валюты и т.п. запрещено.