【问题标题】:Javascript - Response to preflight request doesn't pass access control checkJavascript - 对预检请求的响应未通过访问控制检查
【发布时间】:2021-03-08 12:13:56
【问题描述】:

我正在尝试像文档说的那样为条带创建一个结帐会话,但是我收到了这个错误:

CORS 策略已阻止从源“https://main-domain”获取“https://subdomain”的访问权限:对预检请求的响应未通过访问控制检查:没有“访问控制-请求的资源上存在 Allow-Origin' 标头。

我应该在哪里以及如何添加指定的标题?

这是点击结帐按钮时发送的请求:

<script type="text/javascript">
   var stripe = Stripe('api key');
   var checkoutButton = document.getElementById('checkout-button');
   
   checkoutButton.addEventListener('click', function() {
     fetch('https://subdomain/create-session', {
       method: 'POST',
       headers: new Headers({
       'Authorization': 'Basic',
       'Access-Control-Allow-Origin': '*'
       })
     })
     .then(function(response) {
       return response.json();
     })
     .then(function(session) {
       return stripe.redirectToCheckout({ sessionId: session.id });
     })
     .then(function(result) {
       if (result.error) {
         alert(result.error.message);
       }
     })
     .catch(function(error) {
       console.error('Error:', error);
     });
   });
</script>

这是我的特快路线:

app.post("/create-checkout-session", async (req, res) => {
    const session = await stripe.checkout.sessions.create({
        payment_method_types: ['card'],
        line_items: [
            { price: 'stripe product id', quantity: 1 },
            { price: 'stripe product id', quantity: 1 }
        ],
        mode: 'payment',
        success_url: 'https://site/success.html',
        cancel_url: 'https://site/cancel.html',
    });
    res.json({ id: session.id });
});

【问题讨论】:

  • 这是服务器端问题,无法在客户端解决。我们需要查看您的服务器端代码的相关部分才能提出具体建议。

标签: javascript express cors stripe-payments


【解决方案1】:

标头应该包含在服务器响应中,而不是客户端请求中。使用 express 时,您可以使用 CORS middleware

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-06-05
  • 2017-03-25
  • 2019-09-09
相关资源
最近更新 更多