Ошибка платы за приложение в Stripe Terminal (Прямая оплата)

Я хочу собирать плату за приложение в концепции прямого начисления с помощью Stripe Terminal, но получаю ошибку. Можно применить application_fee_amount только тогда, когда PaymentIntent пытается осуществить прямой платеж (с использованием ключа OAuth или заголовка Stripe-Account). когда я использую целевую зарядку, он работает нормально, но я хочу использовать прямую зарядку. приведенный ниже код предназначен для кода назначения. Пожалуйста, помогите мне получить прямую оплату за регистрацию.

public void paymentIntent() {
    PaymentIntentParameters params = new PaymentIntentParameters.Builder()
            .setAmount(usdamount)
            .setCurrency("usd")
            .setApplicationFeeAmount(usdapplicationfee)
            .setDescription("Order#" + orderref)
            .setMetadata(initialMetadata)
            .setOnBehalfOf(accountid)
            .setTransferDataDestination(accountid)
            .build();
    Terminal.getInstance().createPaymentIntent(params, new PaymentIntentCallback() {
        @Override
        public void onSuccess(PaymentIntent paymentIntent) {
            collecetpayment(paymentIntent);
        }

        @Override
        public void onFailure(TerminalException exception) {
            accounterror(exception.getErrorMessage(), exception.getMessage());
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            finish();
        }

    });
}

person Bharanitharan Sakthivel    schedule 04.08.2020    source источник


Ответы (1)


Так что это немного сложно, потому что для прямого списания средств PaymentIntent, Reader, Location и Connection должен существовать в подключенной учетной записи. Это означает, что вы должны передать заголовок Stripe-Account при создании этих объектов.

Если вы используете прямые начисления, все объекты API терминала принадлежат подключенным учетным записям.

Вот последовательность действий для создания прямого списания с регистрационным сбором с помощью Терминала:

  1. Ваш сервер создает PaymentIntent для подключенной учетной записи (передавая заголовок Stripe-Account) и устанавливает плату за приложение.
  2. (только p400) Ваш сервер создает местоположение для подключенной учетной записи
  3. (только p400) Ваш сервер регистрирует Reader в этом месте (передавая заголовок Stripe-Account)
  4. Ваш сервер создает токен подключения для подключенной учетной записи

Обратите внимание, что шаги 2 и 3 применимы только к считывателю Verifone - считыватель на основе Bluetooth зарегистрирует себя и текущее местоположение вашего приложения при интеграции с SDK Stripe Terminal.

После инициализации Терминала подключением из шага 4 вы можете передать PaymentIntent из Step1 в Terminal.instance (). CollectPaymentMethod (), .processPayment (). Поскольку Connection и PaymentIntent привязаны к подключенной учетной записи, Terminal SDK сможет обрабатывать прямые платежи.

Похоже, что на данный момент в документации Stripe нет примера, поэтому, если вы застряли, я бы порекомендовал спросить на их IRC-канале (#stripe на freenode) или написать в службу поддержки Stripe.

person hpar    schedule 04.08.2020
comment
Спасибо, я исправил эту проблему. но появляется новая ошибка Нет такого платежного_интента: 'pi _ *******************'. Я получил client_secret с сервера, передал его в метод retrievePaymentIntent и получаю сообщение об ошибке - person Bharanitharan Sakthivel; 07.08.2020
comment
Если вы используете прямые начисления, вам необходимо передать идентификатор учетной записи при получении или подтверждении PaymentIntent. Неясно, на каком этапе вы видите эту ошибку, но независимо от этого ‹object›: obj_XXXX обычно указывает на то, что вы работаете с объектом в другой учетной записи, но не передали заголовок Stripe-Account. - person hpar; 11.08.2020