[英]Serverless CORS preflight request failed - AWS API Stripe
我花了大约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
}));
}
});
我已经在Amazon的API网关中设置了OPTIONS来响应并在Amazon API网关上启用了CORS。
如何传递飞行前请求并让lambda执行功能?
除了在API网关控制台上启用CORS之外,您的Lambda函数本身还必须返回这些CORS标头。
return {
"statusCode": 302,
"headers": {
"Location": "https://example.com/#success",
"Access-Control-Allow-Origin": "*",
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.