Спросите обработчика платежей, могут ли они обнаружить дубликаты транзакций на основе предоставленного вами идентификатора заказа.Затем, если вы не можете сохранить ответ из-за сбоя базы данных, вы можете безопасно повторно отправить запрос, не опасаясь двойной зарядки (по крайней мере один PSP, который я использовал, возвратил тот же код ответа / аутентификации в этом сценарии вместе сотметка о том, что это дубликат).
В качестве альтернативы, просто установите флажок в вашем заказе непосредственно перед попыткой платежа и не пытайтесь выполнить платеж, если флаг уже установлен.Если во время оплаты возникает ошибка, вы можете исследовать и исправить данные на досуге.
Я не хотел бы идти по пути, пытаясь автоматически отменить заказ и повторно отправить его, поскольку это только сбивает с толку(например, что если отмена не удалась - повторить или нет?).Лучше всего придерживаться простой логики, чтобы, когда что-то пошло не так, вы точно знали, где стоите.