我正在尝试构建一个无服务器的NuxtJS应用,利用firebase进行身份验证,使用netlify进行部署(和功能),并使用stripe进行支付。
netlify上的整个付款过程和无服务器功能对我来说都是全新的,因此这可能不是一个难题。
我已遵循服务器文档和指南,并完成了具有Firebase身份验证,netlify部署和无服务器功能的应用程序,这使我能够处理条带化付款-现在我无法弄清楚下一步。我的数据条success_url
指向包含成功消息的/pages/succes/index.js
路由->尽管这里我需要来自数据条的一些数据响应,这使我能够展示购买的商品并附加产品ID作为“购买产品” “在Firebase中的用户对象上的条目(产品实质上是对用户配置文件的升级)。
点击“购买产品”功能
async buyProduct(sku, qty) {
const data = {
sku: sku,
quantity: qty,
};
const response = await fetch('/.netlify/functions/create-checkout', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
}).then((res) => res.json());
console.log(response);
const stripe = await loadStripe(response.publishableKey);
const { error } = await stripe.redirectToCheckout({
sessionId: response.sessionId,
});
if (error) {
console.error(error);
}
}
创建结帐Netlify功能
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
const inventory = require('./data/products.json');
exports.handler = async (event) => {
const { sku, quantity } = JSON.parse(event.body);
const product = inventory.find((p) => p.sku === sku);
const validatedQuantity = quantity > 0 && quantity < 11 ? quantity : 1;
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
billing_address_collection: 'auto',
shipping_address_collection: {
allowed_countries: ['US', 'CA'],
},
success_url: `${process.env.URL}/success`,
cancel_url: process.env.URL,
line_items: [
{
name: product.name,
description: product.description,
images: [product.image],
amount: product.amount,
currency: product.currency,
quantity: validatedQuantity,
},
],
});
return {
statusCode: 200,
body: JSON.stringify({
sessionId: session.id,
publishableKey: process.env.STRIPE_PUBLISHABLE_KEY,
}),
};
};
请让我知道,如果您需要更多信息,或者没有任何意义!
tldr;我已经使用Netlify功能在无服务器应用程序中处理了Stripe付款,并希望在成功页面上能够访问所购买的商品和用户信息。
[创建结帐会话并定义success_url
时,可以将session_id={CHECKOUT_SESSION_ID}
附加为模板,Stripe将在其中自动填写会话ID。参见https://stripe.com/docs/payments/checkout/accept-a-payment#create-checkout-session
根据您的情况,您会这样做:
success_url: `${process.env.URL}/success?session_id={CHECKOUT_SESION_ID}`,
然后,当您的用户被重定向到您的成功URL时,您可以使用会话ID检索会话并进行购买。