React Native Stripe Firebase — тестовый токен работает, но тестовая карта не определена

#firebase #react-native #google-cloud-functions #stripe-payments #payment

#firebase #react-native #google-cloud-функции #stripe-платежи #оплата

Вопрос:

Я пытаюсь отправить свои платежи в stripe через облачные функции firebase, когда я отправляю тестовый токен, такой как «tok_mastercard», все работает нормально. Как только я заменяю свой токен, созданный tipsi, stripe firebase отображает всю отправленную информацию как неопределенную. Я зарегистрировал свой токен на консоли в облачных функциях, и все выглядит нормально.

Я чувствую, что упускаю что-то очевидное. Заранее спасибо за любую помощь.

ОБЛАЧНАЯ ФУНКЦИЯ FIREBASE

 const functions = require("firebase-functions");
const stripe = require("stripe")(MY SECRET KEY);

exports.payWithStripe = functions.https.onRequest(async (request, response) => {
  stripe.charges
    .create({
      amount: request.body.amount,
      currency: request.body.currency,
      source: request.body.token,
    })
    .then((charge) => response.send(charge))
    .catch((err) => {
      console.log(err);
    });
});
  

КОНСОЛЬ ЗАРЕГИСТРИРОВАЛА ТОКЕН

 {"card": {"addressCity": "Macon", "addressCountry": "Estonia", "addressLine1": "Canary Place", "addressLine2": "3", "addressState": "", "addressZip": "31217", "brand": "Visa", "cardId": "card_1HdFN7C7qEwniOSJWxN2Tbs6", "country": "US", "expMonth": 1, "expYear": 2022, "funding": "credit", "isApplePayCard": false, "last4": "4242", "name": "Enappd Store"}, "created": 1602940977, "livemode": false, "tokenId": "tok_1HdFN7C7qEwniOSJc1nUQcqH"}
  

СГЕНЕРИРУЙТЕ ТОКЕН С ПОМОЩЬЮ TIPSI STRIPE

 
  stripe.setOptions({
    publishableKey:"MY TEST KEY",});

  const [token, setToken] = useState(null);


  const handleCardPayPress = async () => {
    try {
      setLoading(true);
      setToken(null);
      const token = await stripe.paymentRequestWithCardForm({
        smsAutofillDisabled: true,
        requiredBillingAddressFields: "full",
        prefilledInformation: {
          billingAddress: {
            name: "Enappd Store",
            line1: "Canary Place",
            line2: "3",
            city: "Macon",
            state: "",
            country: "Estonia",
            postalCode: "31217",
            email: "admin@enappd.com",
          },
        },
      });
      setToken(token);
      console.log(token);
      setLoading(false);
      Alert.alert("Your card information has been entered!");
    } catch (error) {
      console.log(error);
      setLoading(false);
    }
  };

  

ОБРАБОТАЙТЕ ПРОВЕРКУ

     fetch("MY CLOUD FUNCTIONS URL", {
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        amount: cartTotalAmount,
        currency: "usd",
        token: token,
      }),
    })
      .then((response) => response.json())
      .then((responseJson) => {
        console.log(responseJson);
      })
      .catch((error) => {
        console.error(error);
      });
  

ЖУРНАЛ FIREBASE

 9:43:09.377 AM
payWithStripe
statusCode: 400,
9:43:09.377 AM
payWithStripe
charge: undefined,
9:43:09.377 AM
payWithStripe
decline_code: undefined,
9:43:09.377 AM
payWithStripe
payment_intent: undefined,
9:43:09.377 AM
payWithStripe
payment_method: undefined,
9:43:09.377 AM
payWithStripe
setup_intent: undefined,
9:43:09.377 AM
payWithStripe
source: undefined }
9:44:08.752 AM
payWithStripe
Function execution took 60008 ms, finished with status: 'timeout'
  

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

1. Я ответил на свои собственные вопросы, установив для параметра setToken(токен) значение setToken(токен. tokenId)

2. ПРИВЕТ, я добавил ответ в качестве вики сообщества, не могли бы вы принять его? Кроме того, когда вы найдете ответ, вы можете опубликовать его как ответ и принять его, таким образом, другие участники сообщества могут легко найти решение вопроса.

Ответ №1:

Решение состояло в том, чтобы изменить:

 setToken(token)
  

Для

 setToken(token.tokenId)