Используя Stripe в прошлом (хотя для оплаты, а не для подписки), предполагая, что процесс похож, я сделал что-то вроде ниже
app.post('/payment', async (req, res) => {
stripe.charges.create({
amount: 10000,
currency: 'gbp',
description: 'Description Here',
source: req.body.stripeToken,
receipt_email: req.body.stripeEmail,
metadata: { email: req.body.stripeEmail },
}, async (err, charge) => {
if (err && err.type === 'StripeCardError') {
res.render('payment_declined');
} else {
// Do anything else here like update DB etc and then render view
res.render('successful_payment');
}
});
});
Правильный ли это путь, или я пропустил кусочки, я не уверен, но, возможно, это продвинет вас немного дальше? Если не рады удалить этот ответ для кого-то еще, чтобы добавить что-то
Также в качестве дополнительного примечания в вашем коде вам, вероятно, не нужно объявлять переменные для следующего, просто вызовите их напрямую
let email = req.body.email;
let card = req.body.stripeToken;
let amount = req.body.plan;
let interval = req.body.interval;
// So just use req.body.email, req.body.plan where required
const stripe = require("stripe")(SK);
лучше разместить в верхней части вашего файла (вызывайте его только один раз, что происходит, если в вашем приложении несколько путей оплаты), а не в самой функции post