无服务器CORS预检请求失败 - AWS API条带

问题描述 投票:1回答:1

我花了大约2个星期试图调试这个,但没有运气。

我用python创建了一个lambda函数来创建一个电荷。这适用于Stripe Checkout的简单脚本。它调用它并返回响应而没有任何问题(Python)。

  try:

  stripe.api_key = "*******PRIVATE KEY***********"
  Tokenstring = event.get('body')
  Stripe_List = Tokenstring.split('=')
  Token = Stripe_List[1].split('&')[0]
  Email = Stripe_List[-1]
  Email = Email.replace('%40', '@')
  charge = stripe.Charge.create(
     amount=100,
     currency="gbp",
     description="Example charge",
     source=Token,
     receipt_email=Email
  )
  print('Full SUCCESSFUL Transaxn Info ==== {}'.format(event))
  return {
      "statusCode": 302,
      "headers": {
          "Location": "https://example.com/#success"
      }
  }

使用<form action="https://XXXXXXX.execute-api.eu-central-1.amazonaws.com/beta" method="POST">在html主体中非常简单地调用它

现在,当我尝试使用自定义条带结帐代码时,我得到:

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

我的javascript代码是:

var handler = StripeCheckout.configure({
   key: '*****PRIVATE KEY*****',
   image: 'logo.png',
   locale: 'auto',
   token: function(token) {    
      var xhr = new XMLHttpRequest();
      xhr.open("POST","https://XXXXXXX.execute-api.eu-central-1.amazonaws.com/beta", true);
      xhr.setRequestHeader('Content-Type','application/json'); 
      xhr.setRequestHeader('Access-Control-Allow-Origin','*');
      xhr.onreadystatechange = handler;
      xhr.send(JSON.stringify({
           body : token
      }));
   }
 });

我在亚马逊的API网关中设置了OPTIONS来响应并在亚马逊API网关上启用了CORS。

enter image description here

enter image description here

如何通过飞行前请求并让lambda执行该功能?

javascript python amazon-web-services
1个回答
0
投票

除了在API网关控制台上启用CORS之外,您的Lambda函数本身必须返回这些CORS标头。

return {
    "statusCode": 302,
    "headers": {
        "Location": "https://example.com/#success",
        "Access-Control-Allow-Origin": "*",
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.