【发布时间】:2021-06-28 21:21:47
【问题描述】:
编辑:更新我如何让它在底部工作。 我有一个云函数,它在从我的 React 应用程序调用时创建一个条带结帐会话。 当它被调用时,我在调试器中收到以下错误:加载资源失败:net::ERR_FAILED
这里是云功能:
const functions = require('firebase-functions');
const express = require('express');
const app = express();
const cors = require('cors');
const stripe = require('stripe')((private key removed for this question))
app.use(cors());
exports.createCheckoutSession = functions.https.onRequest(async (req, res) => {
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: [
{
price_data: {
currency: 'usd',
product_data: {
name: 'T-shirt',
},
unit_amount: 2000,
},
quantity: 1,
},
],
mode: 'payment',
success_url: 'https://example.com/success.html',
cancel_url: 'https://example.com/cancel.html',
});
res.json({id: session.id});
});
app.listen(4242, () => console.log(`Listening on port ${4242}!`));
我相信云功能在我运行时正常工作:
curl -X POST -is "https://us-central1-project-name.cloudfunctions.net/createCheckoutSession" -d ""
我收到一条成功消息。
这是在前端调用它的地方:
const response = await fetch("https://us-central1-project-name.cloudfunctions.net/createCheckoutSession", {
method: "POST",
});
const session = await response.json();
// When the customer clicks on the button, redirect them to Checkout.
const result = await stripe.redirectToCheckout({
sessionId: session.id,
});
if (result.error) {
// If `redirectToCheckout` fails due to a browser or network
// error, display the localized error message to your customer
// using `result.error.message`.
alert(result.error.message);
}
};
我在获取调用时遇到错误。
任何帮助将不胜感激。
更新: 我通过参考这篇文章设法让它工作: Access-Control-Allow-Origin not working Google Cloud Functions GCF
问题在于 CORS。我需要将这些标头添加到函数方法中:
res.set('Access-Control-Allow-Origin', '*');
res.set('Access-Control-Allow-Methods', 'GET, POST');
res.set('Access-Control-Allow-Headers', 'Content-Type');
res.set('Access-Control-Max-Age', '3600');
【问题讨论】:
-
您是否在 Firebase 日志中看到任何内容?您是否检查过您的 Stripe 仪表板并确保这些请求成功?
-
我刚刚检查了 firebase 和 stripe,请求都成功了。
标签: node.js reactjs firebase google-cloud-functions stripe-payments