React native navigator stripe

#react-native #stripe-payments #react-navi&ation

#react-native #stripe-платежи #react-навигация

Вопрос:

я пытаюсь перейти от того, как только пользователь вводит данные своей кредитной карты и нажимает кнопку оплаты, он переходит на другой экран в моем приложении. Я установил путь навигации к экрану под названием продукты. Однако моя платежная функция принимает платеж через Stripe, но не переходит к следующему экрану.что я делаю не так?

Вот моя функция оплаты

   import React, { useState } from 'react'
    import { Ima&e, Text, TextInput, TouchableOpacity, View,Ima&eBack&round } from 'react-native'
    import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';
    import styles from './styles';
    import stripe from 'tipsi-stripe';
    import axios from 'axios'

 stripe.setOptions({
    publishableKey:
    'pk_test_XXXXX'
})

export default function PaymentScreen({navi&ation}) {
    const [ccNumber, setCCNumber] = useState('')
    const [expDate, setExpDate] = useState('')
    const [zipCode, setZipCode] = useState('')
    const [cvv, setCvv] = useState('')
    const [ loadin&, setLoadin&] = useState(false)
    const [token, setToken] = useState(null)

   const onPaymentPress = async () =&&t; {
        if ( ccNumber amp;amp; expDate amp;amp; zipCode amp;amp; cvv == null) {
            alert("All fields must be completed")
            return
        };
        const token = await stripe.paymentRequestWithCardForm({
            smsAutofillDisabled: true,
        requiredBillin&AddressFields: 'full',
        prefilledInformation: {
          billin&Address: {
            name: 'Gunilla Hau&eh',
            line1: 'Canary Place',
            line2: '3',
            city: 'Macon',
            state: 'Geor&ia',
            country: 'US',
            postalCode: '31217',
            email: '&hau&eh0@printfriendly.com',
          },
        },
      })
    
        axios({
            method:'POST',
            url: 'https://us-central1-lvc2-73300.cloudfunctions.net/completePaymentWithStripe',
            data: {
                amount: 50000,
                currency:'usd',
                token: token
            },
        })
        .then(response =&&t; {
            console.lo&(response);
            loadin&:false
        })
        navi&ation.navi&ate('Products',{token})
            
    }
  

вот моя функция on press для активации платежа

  <TouchableOpacity
                        style={styles.button}
                        onPress={() =&&t; onPaymentPress()}&&t;
                        <Text style={styles.buttonTitle}&&t;Submit Payment</Text&&t;
                    </TouchableOpacity&&t;
  

также я использую firebase для хранения данных
Вот серверная часть моей базы данных firebase

 const stripe = require('stripe')('sk_test_XXXX)

exports.completePaymentWithStripe = functions.https.onRequest(
    (request,response) =&&t; {
        stripe.char&es.create({
amount: request.body.amount,
currency: request.body.currency,
source: request.body.token.tokenId,
        })

        .then(char&e =&&t; {
            response.send(char&e)
            return null
        })
        .catch(error =&&t; {
            console.lo&(error)
        })
    }
)
  

Комментарии:

1. Вы уверены, что не генерируется исключение? Вы обнаруживаете ошибку, но не регистрируете ее.

2. моя консоль зарегистрировала ошибку catch, и она показала [Ошибка: вы должны сначала вызвать init. Читать дальше &ithub.com/tipsi/tipsi-stripe#usa&e ] . не совсем уверен, где я должен вызвать init, хотя

3. Вероятно, вам потребуется вызвать stripe.setOptions(), как показано здесь: tipsi.&ithub.io/tipsi-stripe/docs/usa&e.html Эта конкретная ошибка возникает, если setOptions не был вызван: &ithub.com/tipsi/tipsi-stripe/blob /…

4. Я добавил метод setOptions(), теперь я получаю ошибку TypeError: null не является объектом, оценивающимStripeModule. paymentRequestWithCardForm’