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

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

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

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

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

  2. Получите список всех компонентов установленных приложений, способных выполнить оплату:

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

Пример

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

//Получаем текущий открытый чек.
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();