3D-безопасность типси-полосы в реактивном нативе


Я хочу интегрировать Stripe 3d secure в свое родное приложение для реагирования. Используя эту либу: https://github.com/tipsi/типси-полоса, и с простой оплатой работает хорошо. Но с 3D у меня есть несколько проблем на iOS, а также на Android:
iOS: createCardSource: true (в строке 7 происходит сбой приложения).(Решено)
iOS: зависание перед перенаправлением на защищенную страницу
Android: Как я узнаю, оплатил ли пользователь или отклонил платеж на удаленной странице? (В строке 27 нет никаких данных в объекте secure3dSourceResponse)

import stripe from "tipsi-stripe";  
paymentRequest = async (mutation, deal) => {
  let paymentRequest;
  try {
    paymentRequest = await stripe.paymentRequestWithCardForm({
      ...options,
      createCardSource: true
    });
  //iOS and Android gets back different objects.
    const threeDSecure = Platform.OS === "android"
      ? paymentRequest.card.three_d_secure
      : paymentRequest.details.three_d_secure;
    if (
      threeDSecure === "recommended"
      || threeDSecure === "required"
    ) {
      let prefix = Platform.OS === "android"
      ? `appName://appName/`
      : `appName://`;
      let secure3dSourceResponse = null;
      try {
        const { dealFeeUSD } = this.state;
        // On iOS the process stucked here, without any error message
        secure3dSourceResponse = await stripe.createSourceWithParams({
          type: "threeDSecure",
          amount: dealFeeUSD || 3000,
          currency: "USD",
          flow: "redirect",
          returnURL: prefix,
          card: paymentRequest.sourceId
        });
        // On android I have no any data in secure3dSourceResponse after Stripe returns from their page.
      } catch (error) {
        console.info('secure3dSourceResponse', secure3dSourceResponse)
      }
    } else {
      if (paymentRequest && paymentRequest.tokenId) {
        this.handlePayDeal(mutation, deal, paymentRequest.tokenId);
      }
    }
  } catch (error) {
    console.info("paymentRequest: " + JSON.stringify(error));
  }
};

пожалуйста, включите журнал ошибок, полученных в ios, и попробуйте утешить ошибку, например console.info(error) в android.

tvankith 15.03.2019 09:09

Спасибо, проблема №1 решена. Android и iOS возвращают разные объекты: const threeDSecure = Platform.OS === "android" ? paymentRequest.card.three_d_secure : paymentRequest.details.three_d_secure;

Peter 15.03.2019 09:37
3
2
1 646
0

Другие вопросы по теме