Я хочу создать платеж с 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 с уже сохраненными картами?