Ваше приложение может передать текущий открытый чек продажи, возврата продажи или покупки выбранному исполнителю (класс PaymentPerformer.kt) или делегатору (класс PaymentDelegator.kt) платежей. Для этого необходимо вызвать соответствующий метод интерфейса:
Такой подход сокращает время, необходимое для оплаты, но при этом лишает пользователей возможности применить скидку на чек.
Чтобы запустить процесс оплаты чека из интерфейса приложения:
Получите список всех компонентов установленных приложений, способных выполнить оплату:
getAllPaymentPerformers()
.getAllPaymentDelegators()
.Передайте чек выбранному исполнителю или делегатору платежей с помощью соответствующего метода 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" />
ru.evotor.paymentSystem.ui.SELL
со значением false
скрывает кнопку оплаты в чеках продажиru.evotor.paymentSystem.ui.PAYBACK
со значением 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();