NodeJS stripe payment在reactjs中不按预期工作

tmb3ates  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(133)

我试图使用Stripe向信用卡收费,但出现错误。下面是我使用的代码:

import StripeCheckout from "react-stripe-checkout"
// import confirmPayment from 'stripe-element';
import { useState,useEffect } from "react";
import axios  from "axios";
const key="pk_test_51MOn0RSCoZWqhGLghNbZGJNElj6EoHYkt03rWcPYTUpa1EUlMas5Rd2RY8Ta70ubtXaFVmchCdlqOPaXhkpYAQcO00i4y02duY";
export const Pay = () => {
  const [stripeToken,setStripeToken]=useState(null);
  const onToken=(token)=>{
setStripeToken(token)
  }
  useEffect(() => {
    const makeRequest = async () => {
      try {
        const res = await axios.post("http://localhost:8080/api/checkout/payment", {
          tokenId: stripeToken,
          amount: 3000,
        }
        );
        console.log(res.data)
        
        console.log(res.status)
        console.log(res.data)
        } catch (err) {
        console.log(err);
      }
    };

    if (stripeToken) {
      makeRequest();
    }
  }, [stripeToken]);
  return (
    <>
      <div className="container-fluid">
        <StripeCheckout
          name="shop"
          image="text"
          billingAddress
          shippingAddress
          description="Your total is $2000"
          amount={20000}
          token={onToken}
          stripeKey={key}
 
        >
          <button className="btn btn-success">Pay</button>
        </StripeCheckout>
      </div>
    </>
  );
}

const stripe=require("stripe")(process.env.SECRET_KEY_PAY)
exports.stripePayment=async(req,res,next)=>{
let error,status;
try{
const customer=await stripe.customers.create({
    email:req.body.email,
    source:req.body.token,
    payment_method: ['card', 'ach_credit_transfer'],}
    )
  const charge=await stripe.paymentIntents.create({
    amount:req.body.amount,
    currency:"inr",
    customer:customer.id,
    description:req.body.description,

  })
console.log("charge:",{charge});
status="success"
}catch(err){
console.log(err)
}

}

我尝试过的:

我尝试了以下方法来修复错误:

  • 我已经检查了信用卡号码和有效期,以确保它们是正确的。
  • 我试过使用不同的信用卡。
  • 我已经尝试清除浏览器的缓存和cookie。
    我期待的是:

我期待着信用卡成功充值。

我看到的是:

我看到以下错误消息:

StripeInvalidRequestError: Invalid string: {:"0"=>"card"}
    at Function.generate (F:\React\e-commerce site\Api\node_modules\stripe\cjs\Error.js:10:20)
    at res.toJSON.then.Error_js_1.StripeAPIError.message (F:\React\e-commerce site\Api\node_modules\stripe\cjs\RequestSender.js:105:54)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
2fjabf4q

2fjabf4q1#

在创建Customer时,您试图将字符串数组传递给payment_method参数。此参数需要一个字符串,更具体地说,是现有Payment Method对象的ID。因此,API会抛出一个无效的请求错误。
我建议研究一下API参考,以确保参数正确,并且发送的值有效。

相关问题