iikoFront API SDK

Оплатные действия

Добавление оплат

Для добавления оплаты в заказ существуют методы:

Также можно использовать одноименные методы сервиса операций–расширений, в которых неявно создаётся сессия редактирования (отличие в необходимости выполнения нескольких действий над заказом. Если помимо добавления оплаты требуется, например, добавить гостя к заказу, то нужно использовать методы в рамках сессии редактирования). Для настройки и регистрации внешних типов оплаты см. статью Интеграция с внешними типами оплаты.

Ограничения добавления оплат:

Платеж может быть добавлен в заказ, только если заказ находится в статусе новый (New) или пречек (Bill), иначе метод выбрасывает исключение ConstraintViolationException. Кроме того нельзя добавить в заказ несколько непроведенных элементов оплаты одного типа (NOTE: планируется разрешить добавлять несколько непроведенных элементов оплаты в заказ).

Примеры

card

Комментарии:

Оплата заказа

Для оплаты заказа существуют методы:

также существует метод, с помощью которого можно превратить элемент оплаты в предоплату iikoFront

Если оплата производится фискальным наличным типом, то на пользователя, от чьего имени производится операция оплаты методом IOperationService.PayOrderAndPayOutOnUser, будет оформлено фискальное изъятие.

Примеры

Оплата заказа, в котором достаточно внесенных денежных средств

Пусть существует заказ IOrder order, который необходимо закрыть в iikoFront и в заказ уже внесено достаточно проведенных оплат (проведенные элементы оплаты это либо предоплаты, внесенные на экране кассы iikoFront, либо оплаты, добавленные по инициативе плагина методом AddExternalPaymentItem с флагом isProcessed равным true). Для такого заказа можно вызвать метод:

operationService.PayOrder(credentials, order);

payOrder

Оплата заказа наличными с расчетом официанту

Пусть существует заказ IOrder order, который необходимо оплатить наличными на всю сумму заказа и закрыть в iikoFront. Для этого нужно выбрать соответствующий paymentType. Затем вызывается метод IOperationService.PayOrderAndPayOutOnUser. В примере ниже заказ оплачивается наличными на всю сумму заказа:

var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New || o.Status == OrderStatus.Bill);
var credentials = PluginContext.Operations.AuthenticateByPin("777");
var paymentType = operationService.GetPaymentTypesToPayOutOnUser().First(x => x.IsCash);
PluginContext.Operations.PayOrderAndPayOutOnUser(credentials, order, paymentType, order.ResultSum);
Оплата плагинным типом оплаты

Пусть существует IOrder order который нужно оплатить плагинным типом оплаты.

var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var paymentType = PluginContext.Operations.GetPaymentTypes().Single(i => i.Kind== PaymentTypeKind.External && i.Name == "SamplePaymentType");
var credentials = PluginContext.Operations.GetCredentials();
PluginContext.Operations.PayOrderAndPayOutOnUser(credentials, order, paymentType, order.ResultSum);
Комментарии:

Возврат оплаты

Возврат оплаты и возврат заказов по инициативе плагина пока не реализован, поэтому должен выполняться со стационарных терминалов iikoFront пользователем системы.

Проведение оплаты

Добавление в заказ оплаты, проведенной на внешней стороне

В некоторых случаях требуется добавить такой элемент оплаты в заказ, обработка которого уже выполнена вне iikoFront. Для этого используется метод AddExternalPaymentItem, которому в параметре isProcessed передается значение true. В данном случае iikoFront считает, что необходимые транзакции, связанные с элементом оплаты, были выполнены вовне. Поэтому со своей стороны не предпринимает действий по обработке и помечает данный элемент оплаты проведенным.

Пример
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var paymentType = PluginContext.Operations.GetPaymentTypes().Last(x => x.Kind == PaymentTypeKind.Cash);
PluginContext.Operations.AddExternalPaymentItem(150, true, null, paymentType, order, PluginContext.Operations.GetCredentials());

cash

Добавление в заказ проведенной оплаты и превращение ее в предоплату iikoFront

Иногда требуется в заказ добавить такой элемент оплаты, чтобы он отображался в отчетах iikoOffice до закрытия заказа. Тогда в заказ нужно добавить оплату методом AddExternalPaymentItem с параметром isProcessed равным true, затем вызвать метод IOperationService.ProcessPrepay.

Пример
var order = PluginContext.Operations.GetOrders().Last(o => o.Status == OrderStatus.New);
var paymentType = PluginContext.Operations.GetPaymentTypes().Last(x > x.Kind == PaymentTypeKind.Card && x.Name.ToUpper() == "DINERS");
var additionalData = new CardPaymentItemAdditionalData { CardNumber  "123456" };
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddExternalPaymentItem(150, true, additionalData, paymentType, order, credentials);
order = PluginContext.Operations.GetOrderById(order.Id);
PluginContext.Operations.ProcessPrepay(credentials, order, paymentItem);

card

Добавление в заказ предварительного платежа с последующим превращением в предоплату iikoFront

Для оплаты доставочного заказа следует сначала добавить предварительную оплату с помощью метода IEditSession.AddPreliminaryPaymentItem, а после вызвать метод IOperationService.ProcessPrepay.

Пример
var order = PluginContext.Operations.GetDeliveryOrders().Last(o => o.Status == OrderStatus.New || o.Status == OrderStatus.Bill);
var paymentType = PluginContext.Operations.GetPaymentTypes().Last(i => i.Kind == PaymentTypeKind.Cash);
var credentials = PluginContext.Operations.GetCredentials();
var paymentItem = PluginContext.Operations.AddPreliminaryPaymentItem(order.ResultSum, null, paymentType, order, credentials);
PluginContext.Operations.ProcessPrepay(credentials, PluginContext.Operations.GetDeliveryOrderById(order.Id), paymentItem);

Типы оплат, которые поддерживают тихое проведение (Silent-оплата)

Порой клиентам нужна возможность проводить предоплату или вносить чаевые по инициативе плагина (без входа на попап предоплаты или чаевых iikoFront) непроведенным типом оплаты (для последующего проведения на стороне iikoFront). Непроведенный тип оплаты подразумевает, что он был создан c флагом isProcessed равным false. Проведение какой-либо оплаты по инициативе плагина требует, чтобы оплата поддерживала так называемую тихую оплату, когда для проведения не требуется взаимодействие с пользовательским интерфейсом iikoFront (например, для сбора данных), считается, что все необходимые данные уже собраны. Среди типов оплат, поддерживающих тихую оплату, есть те, которые поддерживают ее по умолчанию:

Также, поддержку тихой оплаты можно реализовать для внешнего плагинного типа. Подробнее см. в разделе Внешние типы оплаты.

Дополнительно:

Удаление оплат

Пример

Больше примеров можно найти в проекте SDK SamplePaymentPlugin.