Оплата чеков из интерфейса приложения

Редактировать

Ваше приложение может передать текущий открытый чек продажи, возврата продажи или покупки выбранному исполнителю (класс PaymentPerformer.kt) или делегатору (класс PaymentDelegator.kt) платежей. Для этого необходимо вызвать соответствующий метод интерфейса:

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

Чтобы запустить процесс оплаты чека из интерфейса приложения:

  1. Получите текущий открытый чек продажи, с помощью метода getReceipt(context: Context, type: Receipt.Type).
  2. Получите список всех компонентов установленных приложений, способных выполнить оплату:

    • Для получения всех исполнителей платежей используйте метод getAllPaymentPerformers().
    • Для получения всех делегаторов платежей используйте метод getAllPaymentDelegators().
  3. Передайте чек выбранному исполнителю или делегатору платежей с помощью соответствующего метода moveCurrentReceiptDraftToPaymentStage() интерфейса SellApi.kt,PaybackApi.kt, BuyApi.kt.

Если вы хотите добавить способ оплаты, который будет доступен только в интерфейсе вашего приложения, то добавьте платежную систему как описано в статье Использование различных способов оплаты и скройте кнопку платежной системы в базовом интерфейсе оплаты с помощью следующих параметров в манифесте платежного сервиса:

<meta-data
     android:name="ru.evotor.paymentSystem.ui.SELL"
     android:value="false" />
<meta-data
   android:name="ru.evotor.paymentSystem.ui.PAYBACK"
   android:value="false" />

Скрыв кнопку в интерфейсе, вы всё равно сможете передать платежную систему в методе moveCurrentReceiptDraftToPaymentStage получив её с помощью метода getAllPaymentPerformers.

Пример

Пример ниже показывает как можно получить текущий открытый чек и передать его исполнителю платежа.

//Получаем текущий открытый чек.
Receipt receipt = ReceiptApi.getReceipt(MainActivity.this, Receipt.Type.SELL);
if (receipt == null) return;
//Получаем идентификатор чека.
String uuid = receipt.getHeader().getUuid();
if (uuid == null) return;
//Создаём список всех компонентов, способных выполнить оплату.
List<PaymentPerformer> paymentPerformers = PaymentPerformerApi.INSTANCE.getAllPaymentPerformers(getPackageManager());
AlertDialog.Builder builderSingle = new AlertDialog.Builder(MainActivity.this);

//Показываем пользователю диалоговое окно с возможностью выбрать исполнителя платежа, например, Наличными или Банковской картой.
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.select_dialog_singlechoice);
for (int i = 0; i < paymentPerformers.size(); i++) {
    arrayAdapter.add(paymentPerformers.get(i).getPaymentSystem().getUserDescription());
}

builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
    @Override
    //По выбору пользователя выполняем оплату и печатаем чек.
    public void onClick(DialogInterface dialog, int which) {
        SellApi.moveCurrentReceiptDraftToPaymentStage(MainActivity.this, paymentPerformers.get(which), new ReceiptFormationCallback() {
            @Override
            public void onSuccess() {
                Toast.makeText(MainActivity.this, "Оплата прошла успешно", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onError(ReceiptFormationException e) {
                Toast.makeText(MainActivity.this, e.getCode() + " " + e.getMessage(), Toast.LENGTH_LONG).show();
            }
        });
    }
});
builderSingle.show();