Полоса обработана, что теперь?
Я пытаюсь создать бессерверное приложение NuxtJS, используя firebase для аутентификации, netlify для развертывания (и функций) и полосу для оплаты.
Весь процесс оплаты и бессерверные функции на netlify для меня в новинку, так что это может быть непонятный вопрос.
Я следил за несколькими документами и руководствами и выполнил приложение с аутентификацией firebase, развертыванием netlify и бессерверными функциями, что позволило мне обрабатывать полосовой платеж - теперь я просто не могу понять, что делать дальше. Моя полосаsuccess_url
приводит к /pages/succes/index.js
маршрут, содержащий сообщение об успешном завершении -> хотя здесь мне понадобится ответ с данными от Stripe, чтобы я мог представить купленный элемент, а также прикрепить идентификатор продукта как запись "купленный продукт" к объекту пользователя в 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);
}
}
Create-checkout функция 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; Я обработал платеж Stripe в бессерверном приложении с помощью функции Netlify и хотел бы, чтобы на странице успеха имелся доступ к купленному элементу и информации о пользователе.
1 ответ
Когда вы создаете сеанс оформления заказа и определяете свой success_url
, вы можете добавить session_id={CHECKOUT_SESSION_ID}
в качестве шаблона, в котором Stripe автоматически заполнит идентификатор сеанса. См. https://stripe.com/docs/payments/checkout/accept-a-payment.
В вашем случае вы бы сделали:
success_url: `${process.env.URL}/success?session_id={CHECKOUT_SESION_ID}`,
Затем, когда ваш пользователь будет перенаправлен на ваш успешный URL-адрес, вы можете получить сеанс с идентификатором сеанса и выполнить любую покупку.