我花了大约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。
如何通过飞行前请求并让lambda执行该功能?
除了在API网关控制台上启用CORS之外,您的Lambda函数本身必须返回这些CORS标头。
return {
"statusCode": 302,
"headers": {
"Location": "https://example.com/#success",
"Access-Control-Allow-Origin": "*",
}
}