Чтобы реализовать комбинированную оплату в своём приложении для перечисленных чеков выполните:
В манифесте приложения, добавьте разрешение:
<uses-permission android:name="ru.evotor.permission.COMBINED"/>
Создайте службу, которая будет обрабатывать комбинированные платежи. Например, .CombinedPaymentService
.
Служба .CombinedPaymentService
наследуется от класса IntegrationService.java
. Для обработки события используйте класс PaymentDelegatorEventProcessor.kt
. Пример сервиса:
class CombinedPaymentService : IntegrationService() {
override fun createProcessors(): MutableMap<String, ActionProcessor> = mutableMapOf(
Pair(
PaymentDelegatorEvent.NAME_ACTION,
object : PaymentDelegatorEventProcessor() {
override fun call(
action: String,
event: PaymentDelegatorEvent,
callback: Callback
) {
callback.startActivity(
Intent(this@CombinedPaymentService, MainActivity::class.java)
.putExtra(MainActivity.KEY_RECEIPT_UUID, event.receiptUuid)
)
}
}
)
)
}
В манифесте приложения, в intent-filter
службы укажите событие, которое будет её запускать:
<intent-filter>
<action android:name="evo.v2.receipt.sell.payment.COMBINED" />
</intent-filter>
Чтобы получить данные всех приложений, которые позволяют оплачивать чек, используйте метод getAllPaymentPerformers
класса PaymentPerformerApi.kt
. Метод возвращает список объектов PaymentPerformer.kt
.
В версии EvotorPOS 8.10.0 для перечисленных чеков добавлена возможность вызывать activity своего приложения, чтобы при комбинированной оплате управлять распределением сумм по способам оплаты. Раньше приложение EvotorPOS само распределяло суммы и не вызывало внешнее приложение.
Чтобы добавить эту функцию в своё приложение, дополните шаги, выполненные в предыдущем разделе, следующими действиями:
В манифесте приложения, в intent-filter
службы добавьте событие, которое будет её запускать evo.v2.receipt.payback.payment.COMBINED
:
<intent-filter>
<action android:name="evo.v2.receipt.sell.payment.COMBINED" />
<action android:name="evo.v2.receipt.payback.payment.COMBINED" />
</intent-filter>
evo.v2.receipt.sell.payment.COMBINED
, то при выборе приложения в способах оплаты оно вызываться не будет и оплаты распределятся автоматически. При добавлении action evo.v2.receipt.payback.payment.COMBINED
EvotorPOS будет вызывать приложение для комбинированной оплаты и передавать ему список доступных оплат.В созданную ранее службу добавьте новый обработчик события PaybackPaymentDelegatorEvent
. Пример сервиса:
class CombinedPaymentService: IntegrationService() {
override fun createProcessors(): MutableMap < String, ActionProcessor > =
mutableMapOf(Pair(PaybackPaymentDelegatorEvent.NAME_ACTION, object: PaybackPaymentDelegatorEventPrxocessor() {
override fun call(action: String, event: PaybackPaymentDelegatorEvent, callback: Callback) {
callback.startActivity(Intent(this @CombinedPaymentService, MainActivity::class.java).putExtra(MainActivity.KEY_RECEIPT_UUID, event.receiptUuid).putExtra(MainActivity.KEY_AVAILABLE_PAYBACK_SUM, event.availablePaybackSum))
}
}))
}
Объект PaybackPaymentDelegatorEvent
содержит в себе uuid
чека возврата и доступные для возврата суммы в виде списка объектов PaymentDelegatorPaybackData
. Каждый из них содержит paymentPerformer
и максимальную доступную сумму возврата.
После обработки событий, служба .CombinedPaymentService
должна вернуть один из результатов:
PaymentDelegatorSelectedEventResult.kt
– выбрана платёжная система, с помощью которой будет совершён платёж. Результат содержит объект PaymentPurpose
PaymentDelegatorCanceledEventResult.kt
– пользователь отменил выбранный способ оплаты.PaymentDelegatorCanceledAllEventResult.kt
– пользователь отменил все способы оплаты. В этом случае смарт-терминал последовательно отменяет все выбранные способы оплаты.