Я хочу интегрировать 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));
}
};
Спасибо, проблема №1 решена. Android и iOS возвращают разные объекты: const threeDSecure = Platform.OS === "android" ? paymentRequest.card.three_d_secure : paymentRequest.details.three_d_secure;
пожалуйста, включите журнал ошибок, полученных в ios, и попробуйте утешить ошибку, например
console.info(error)в android.