Stripe android, как я могу создать 3ds платеж с помощью исходной карты - PullRequest
0 голосов
/ 31 марта 2020

Я хочу создать платеж с 3ds. Поэтому я прочитал документы для одного платежа и создал код, подобный следующему:

   // init code
      final PaymentAuthConfig.Stripe3ds2UiCustomization uiCustomization =
                    new PaymentAuthConfig.Stripe3ds2UiCustomization.Builder()
                            .setLabelCustomization(
                                    new PaymentAuthConfig.Stripe3ds2LabelCustomization.Builder()
                                            .setTextFontSize(12)
                                            .build())
                            .build();

            PaymentAuthConfig.init(new PaymentAuthConfig.Builder()
                    .set3ds2Config(new PaymentAuthConfig.Stripe3ds2Config.Builder()
                            .setTimeout(5)
                            .setUiCustomization(uiCustomization)
                            .build())
                    .build());

код для платежа

// payment method
 PaymentMethodCreateParams params = cardInputWidget.getPaymentMethodCreateParams();
                if (params != null) {
                    Map<String, String> extraParams = new HashMap<>();
                    extraParams.put("setup_future_usage", "off_session");

                    ConfirmPaymentIntentParams confirmParams = ConfirmPaymentIntentParams
                            .createWithPaymentMethodCreateParams(params, paymentIntentClientSecret, null, false, extraParams);

                    final Context context = getApplicationContext();
                    stripe = new Stripe(
                            context,
                            PaymentConfiguration.getInstance(context).getPublishableKey()
                    );
                    stripe.confirmPayment(PaymentUPD.this, confirmParams);
                }

код для одного платежа - это работа, и ее работа с 3ds. Но теперь я хочу сохранить все карты, а затем выбрать часть карты из сохраненного списка карт.

Итак, я сохраняю карту так:

        SourceParams cardSourceParams = SourceParams.createCardParams(cardToSave);
   Map<String, Object> params = new HashMap<String, Object>();
                    params.put("statement_descriptor", nameOfCard);
                    cardSourceParams.setExtraParams(params);

 stripe.createSource(cardSourceParams, new ApiResultCallback<Source>() {
            @Override
            public void onSuccess(@NonNull Source source) {
                Log.e("success", source.getId());
               String source_id = source.getId();
    // then i save this source to server
            }

            @Override
            public void onError(@NonNull Exception error) {
                Log.e("PaymentCore", error.getMessage(), error);
            }
        });

После того, как моя карта сохранения, я получаю весь список карт с сервера, и у меня есть что-то вроде этого:

brand == Visa
 last 4 numbers ==   4242
 source_id == src_1GSficBnnQZzyRulVXsNTThC1

, так что теперь я хочу заплатить сохраненной картой. Итак, я получаю

source_id == src_1GSficBnnQZzyRulVXsNTThC1

и пытаюсь сделать что-то вроде этого:

String source = "src_1GSficBnnQZzyRulVXsNTThC1";

                SourceParams sourceParams = SourceParams.createSourceFromTokenParams(source);

                ConfirmPaymentIntentParams confirmParams = ConfirmPaymentIntentParams
                        .createWithSourceParams(sourceParams, paymentIntentClientSecret, null);

                final Context context = getApplicationContext();
                stripe = new Stripe(
                        context,
                        PaymentConfiguration.getInstance(context).getPublishableKey()
                );
                stripe.confirmPayment(PaymentUPD.this, confirmParams);

error:

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter returnUrl

Что я должен положить в returnUrl? У меня нет возврата ReturnUrl

Мой второй вопрос: как я могу сделать платеж с 3ds с уже сохраненными картами?

1 Ответ

1 голос
/ 31 марта 2020

Вам следует избегать использования "источников" для любых новых интеграций, связанных с Картой, и вместо этого следует предпочитать использовать Способы оплаты , как и при однократном платеже.

Stripe has полное руководство по сохранению данных карты для последующего использования без оплаты. Используйте это, если вы не собираетесь принимать оплату авансом. В нем есть раздел о том, как принять платеж с помощью карты позже .

Если вы намерены сразу же принять платеж и сохранить карту на потом, следуйте указаниям для этого сценария вместо .

Обратите внимание, что во всех случаях, если карта была предварительно аутентифицирована с помощью 3ds, вы всегда должны быть готовы к обработке исключений или проблем аутентификации с помощью процедуры восстановления для вашего клиента .

...