Работа с дисконтно-бонусными картами

Дисконтно-бонусная карта, далее карта -- это идентификатор покупателя в процессинге, с которым взаимодействует модуль менеджера оплат с индексом PayType.

Работа с картами производится в несколько этапов:
1. Получение информации о карте (процент скидки и остаток средств) и применение скидки к чеку.
2. Списание средств с карты 1) Опционально. Выполняется если карта имеет доступный для списания остаток и покупатель заявил о желании оплаты части чека средствами с карты. -- Оплата.
3. Учет покупки в процессинге.

Получение информации о карте

Выполняется функция GetDiscountCardInfo. В случае успешного выполнения модифицируются свойства Amount и Discount, содержащие остаток на карте и процент скидки по карте соответственно.

Если МенеджерОплат.GetDiscountCardInfo() = 1 Тогда
ПроцентСкидки = МенеджерОплат.Discount / 100;
СуммаБонусовНаКарте = МенеджерОплат.Amount / 100;
Если ПроцентСкидки <> 0 Тогда
ПрименитьСкидку(ПроцентСкидки);
КонецЕсли;
КонецЕсли;

Учет покупки в процессинге

Перед закрытием кассового чека требуется сообщить процессигру о том, что чек закрывается с использованием карты. Рекомендуется выполнять эту операция непосредственно перед закрытием чека в ККМ. При успешном закрытии чека в ККМ, при необходимости, производится операция подтверждения. При не успешном закрытии чека в ККМ производится отмена операции.

Учет покупки:

МенеджерОплат.PayType = МенеджерОплат.GetPayTypeIndex(Идентификатор);
МенеджерОплат.CardNumber = Трэк2;
МенеджерОплат.CardInputType = 0;
МенеджерОплат.Amount = ИтогЧека * 100;
МенеджерОплат.CashNumber = НомерКассы;
МенеджерОплат.CheckNumber = НомерЧека;
МенеджерОплат.DiscountAmount = СуммаСкидки * 100;
Результат = МенеджерОплат.CorrectDiscountCard();

Если результат «0», продолжать дальнейшее закрытие чека не рекомендуется. Если результат «1», запоминаются свойства AuthCode и RRN. Их значения могут потребоваться вдальнейшем.

Подтверждение:

МенеджерОплат.CardNumber = Трэк2;
МенеджерОплат.CardInputType = 0;
МенеджерОплат.CashNumber = НомерКасы;
МенеджерОплат.CheckNumber = НомерЧека;
МенеджерОплат.AuthCode = AuthCode;
МенеджерОплат.RRN = RRN;
МенеджерОплат.Amount = ИтогЧека * 100;
МенеджерОплат.DiscountAmount = СуммаСкидки * 100;
Результат = МенеджерОплат.Commit();

Выполнение сценария продолжается независимо от результата. Но в случае результата равного «0», рекомендуется сообщить кассиру об ошибке.

Отмена опрерации:

Если операция «Учёт покупки» выполнилась и не трабует подтверждения, а чек в ККМ не закрылся, необходимо отменить операцию учёта покупки. В зависимости от возможностей процессинга выполняется либо метод CancelLastTransaction, либо выполняется операция «Учёт покупки», но с отрицательной суммой.