Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-对飞行前请求的响应不';无法通过访问控制检查_Javascript_Express_Cors_Stripe Payments - Fatal编程技术网

Javascript-对飞行前请求的响应不';无法通过访问控制检查

Javascript-对飞行前请求的响应不';无法通过访问控制检查,javascript,express,cors,stripe-payments,Javascript,Express,Cors,Stripe Payments,我正试图像文档所说的那样为stripe创建一个签出会话,但我遇到了以下错误: 在'https://subdomain“起源”https://main-domain'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access control Allow Origin'标头 我应该在哪里以及如何添加指定的标题 这是单击“签出”按钮时发送的请求: <script type="text/javascript"> var stripe

我正试图像文档所说的那样为stripe创建一个签出会话,但我遇到了以下错误:

在'https://subdomain“起源”https://main-domain'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access control 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>

头应该包含在服务器响应中,而不是客户端请求中。对于express,您可以使用进行此操作。

注意,为了允许多个显式原点(而不是使用
*
),您需要实现动态原点处理。请参阅:这是一个服务器端问题,无法在客户端解决。我们需要查看服务器端代码的相关部分,以便提出具体建议。
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 });
});