Отклонение кредитной карты не является ошибкой проверки, а является результатом попытки обработки платежа.Например, предположим, что у вас есть служба платежного шлюза, которая возвращает класс PaymentProcessingResult, который может иметь статус одобренного или отклоненного с возможной причиной отклонения:
class PaymentProcessingResult {
bool IsApproved { get; set; }
string DeclineReason { get; set; }
}
interface IPaymentGateway {
PaymentProcessingResult ProcessPayment(PaymentInfo p);
}
Затем в контроллере, который вызываетС помощью этого платежного шлюза вы можете предоставить правильный ответ:
class CheckoutController : Controller {
IPaymentGayeway paymentGateway;
[HttpPost]
public ActionResult ProcessPayment() {
var paymentInfo = /* get payment info, from a shopping cart or the like */;
var paymentResponse = this.paymentGateway.ProcessPayment(paymentInfo);
if (paymentResponse.IsApproved) return View("PaymentReceipt");
else return View("PaymentDeclined", paymentRespone);
}
}
В целях безопасности не предоставляйте слишком много информации о причине отклонения.Отклоненный платеж может быть передан многими способами.Вместо отображения вида отклонения платежа вы можете перенаправить обратно на страницу, где вводится информация о платеже, выделить и отобразить там сообщение, возможно, используя словарь TempData для сохранения сообщения для следующего запроса.