Информация о платеже Stripe не передается на серверную часть

#reactjs #stripe-payments

#reactjs #stripe-платежи

Вопрос:

Я создал приложение и серверную часть, и у меня возникли проблемы на последнем этапе подтверждения успешной транзакции. В частности, свойство price платежа не передается. Похоже, что product.price можно определить во внешнем коде, не уверен, почему он неправильно передается на серверную часть.

Спасибо за всю вашу помощь!

Сообщение об ошибке: ошибка типа: не удается прочитать свойство ‘price’ неопределенного

Мое приложение с кодом платежа:

 import React, { useState } from 'react';
import './styles.scss';
import StripeCheckout from "react-stripe-checkout"

function Subscribe() { 

const[product, setProduct] = useState({
  name: "Ezcema Guru Services",
  price: 30,
  productBy: "EzcemaGuru"
});

const makePayment = token => {
  const middle = {
    token,
    product
  };
  const top = {
    "Content-Type": "application/json"
  };

  return fetch(`http://localhost:8282/payment`, {
    method: "POST",
    top,
    middle: JSON.stringify(middle)
  })
    .then(response => {
      console.log("RESPONSE ", response)
      const { status } = response;
      console.log("STATUS ", status)
    })
    .catch(error => console.log(error));
  

};



    return(
       
       <div>
        <h1>
          Subscription Page
        </h1>
        <StripeCheckout 
        stripeKey="pk_test_51HdglCIiJoZbD0sLYY2Yw8uryaImmNp8RURTyWZUXtv2D3ONtkIrVxtF6E5wnbtEeEJFoZm411ZglYSQRA25RDvU00Sbs3f1Ug"
        token={makePayment}
        name="Ezcema Insider"
        amount={product.price * 100}>
        </StripeCheckout>
      </div>
    )
  }
  


export default Subscribe;
  

Мой серверный код:

 const cors = require("cors");
const express = require("express");
const stripe = require("stripe")("sk_test_51HdglCIiJoZbD0sLTvXHKuQ8ovCcxM1cXxS2NTmEajZWa1F6p7XkEDbht82uaMWbIXh4tPMB5RbMLD7EpHprdty300nwUOAD2t")
const { v4: uuidv4 } = require('uuid');
const { resolve } = require("path");

const app = express();


//middleware 
app.use(express.json())
app.use(cors());



//routes
app.get("/", (req, res) => {
    res.send("IT WORKS")
});

app.post("/payment", (req, res) => {

    const {product, token} = req.body; 
    console.log("PRODUCT ", product);
    console.log("PRICE ", product.price);
    const idempontencyKey = uuid()

    return stripe.customers.create({
        email: token.email,
        source: token.id
    }).then(customer=> {
        stripe.charges.create({
            amount: product.price * 100,
            currency: 'usd',
            customer: customer.id,
            receipt_email: token.email,
            description: `purchase of ${product.name}`,
        }, {idempontencyKey})
        })
        .then(result => res. status(200).json(result))
        .catch(err => console.log(err) )
    })



//listen

app.listen(8282, () => console.log("LISTENING AT PORT 8282"));
  

Ответ №1:

Вы передаете неизвестные параметры в fetch API, top параметра or нет middle : https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch

Я думаю, вы, вероятно, хотели использовать headers and body вместо:

 return fetch(`http://localhost:8282/payment`, {
  method: "POST",
  headers: top,
  body: JSON.stringify(middle)
})
  

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

1. Большое вам спасибо, Пол, ничего себе ошибка для меня.. Это исправлено.