gpt4 book ai didi

node.js - 从本地主机遇到 CORS 错误的 Stripe Checkout 示例

转载 作者:行者123 更新时间:2023-12-04 14:53:19 24 4
gpt4 key购买 nike

我正在尝试使用此处提供的说明集成 Stripe Checkout https://stripe.com/docs/payments/accept-a-payment?integration=checkout为 Node 。
我已按照他们的说明进行了操作,并使用我帐户中的实际(测试) key 更新了示例中的 API key 。
我在前端使用 React 并在后端表达。我启用了 cors。
从 React 到后端的请求成功,并且预检请求被启动到 strip 化。来自 strip 的预检响应是 403,实际请求因 CORS 错误而被阻止 - PreflightMissingAllowOriginHeader后端代码(最少)

const express = require("express");
const app = express();
const cors = require("cors");

const stripe = require("stripe")(
process.env.STRIPE_SECRET_KEY
);

app.use(
cors({
origin: ["http://localhost:8000", "https://checkout.stripe.com"],
})
);

app.post("/create-checkout-session", async (req, res) => {
console.log('getting here 1')
const session = await stripe.checkout.sessions.create({
payment_method_types: ["card"],
line_items: [
{
price_data: {
currency: "usd",
product_data: {
name: "T-shirt",
},
unit_amount: 2000,
},
quantity: 1,
},
],
mode: "payment",
success_url: "http://localhost:4242/success.html",
cancel_url: "http://localhost:4242/cancel.html",
});

console.log('getting here 2')
res.redirect(303, session.url);
});

app.listen(4242, () => console.log(`Listening on port ${4242}!`));
前端代码
  handleClick = () => {
const res = fetch(`${process.env.BACKEND_API_URL}/create-checkout-session`, {
method: 'POST',
headers: {
"Content-Type": 'text/html'
}
})
}

最佳答案

以下是我在尝试调试时学到的一些东西。

  • Stripe checkout 使用 AWS Cloudfront 并且它不允许选项请求(根据 Stripe 的配置)
  • 当我将前端的请求类型更改为 text/plain 时,OPTIONS 请求不会发送到 Stripe . (是的,没错,在我的服务器返回带有 Stripe 网址的 303 后,Chrome 不会向 Stripe 发送 OPTIONS 请求)
  • 使用 React 时最好避免重定向

  • 这是更新的后端和前端代码,分别解决了问题
    app.post("/create-checkout-session", async (req, res) => {
    const session = await stripe.checkout.sessions.create({
    payment_method_types: ["card"],
    line_items: [
    {
    price_data: {
    currency: "usd",
    product_data: {
    name: "T-shirt",
    },
    unit_amount: 2000,
    },
    quantity: 1,
    },
    ],
    mode: "payment",
    success_url: "http://localhost:8000/success",
    cancel_url: "http://localhost:8000/cancel",
    });

    res.json({url: session.url}) // <-- this is the changed line
    });
      handleClick = async () => {
    const res = await fetch(`${process.env.BACKEND_API_URL}/create-checkout-session`, {
    method: 'POST',
    headers: {
    "Content-Type": 'application/json'
    }
    })
    const body = await res.json()
    window.location.href = body.url
    }

    关于node.js - 从本地主机遇到 CORS 错误的 Stripe Checkout 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68630229/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com