Я пытаюсь реализовать платежный портал с помощью nodejs и реагировать, используя полосу. У меня есть вопрос о том, как обрабатывать ошибки в моем процессе. Сейчас у меня есть три основных этапа:
- Обработка платежа с полосой
- Сохранение счета с оплаченной информацией и сохранение платежа в базе данных
- Отправка квитанции
Прямо сейчас у меня все это внутри блока try / catch. Например:
const paymentProcess = async (req, res) => {
const invoice = await Invoice.findOne({ _id: req._id });
if (!invoice || invoice.paid) return res.status(400).end();
try{
const charge = await stripe.charges.create({
amount: 0.50,
currency: 'usd',
description: invoice.name,
source: req.body.paymentToken
});
//Then I have code to set up saving to database here
// Then I have code to set up an email template with ejs and send it with nodemailer here
}catch(err){
res.status(500).end();
}
}
Но если платеж проходит, и дальше происходит ошибка, все это приводит к ошибке. Это нормально, но платеж на самом деле прошел, и я не хочу, чтобы клиент думал, что он просто указал неверную информацию о карте и попытался снова. Итак, как бы я справился с этим во внешнем интерфейсе, чтобы клиент узнал, что платеж прошел успешно, но при сохранении в базу данных или при отправке квитанции произошла ошибка.
Я думал о нескольких блоках try / catchили используя промежуточное программное обеспечение, но это в основном приведет к тому же самому. Я мог бы сделать проверки по пути и отправить успешный ответ клиенту с сообщением об ошибке, но мне это не кажется правильным.
Я также подумал о выполнении пошагового процесса на фронтеконец, но я думаю, что это было бы угрозой безопасности.
Любые предложения о том, как мне следует обрабатывать этот шаг за шагом процесс.