Попробуйте / поймайте с Stripe.Net MVC Contoller
Документация stripe.net говорит, что вы должны обрабатывать ошибки следующим образом:
Любые ошибки, возникающие в любой из служб, вызовут исключение StripeException с сообщением, возвращенным Stripe. Хорошей идеей будет запускать вызовы сервисов в попытке поймать исключение StripeException.
Как вы справляетесь с отловом ошибок и возвращением представления.
Если chargeService.Create завершается с ошибкой, как вернуть объект, stripeCharge, обратно в View: return View(stripeCharge);
public ActionResult Create(StripeCharge stripeCharge)
{
if (ModelState.IsValid)
{
var myPlan = new StripeChargeCreateOptions();
myPlan.Amount = stripeCharge.Amount;
try
{
var chargeService = new StripeChargeService();
StripeCharge response = chargeService.Create(myPlan);
}
catch (Exception e)
{
errorMessage = e.Message;
}
return RedirectToAction("Index");
}
return View(stripeCharge);
}
Обновите после дальнейших исследований, это может быть решением
public ActionResult Create(StripeCharge stripeCharge)
{
if (ModelState.IsValid)
{
var myPlan = new StripeChargeCreateOptions();
myPlan.Amount = stripeCharge.Amount;
try
{
var chargeService = new StripeChargeService();
StripeCharge response = chargeService.Create(myPlan);
return RedirectToAction("Index");
}
catch (Exception e)
{
errorMessage = e.Message;
return View(stripeCharge);
}
}
return View(stripeCharge);
}
2 ответа
Сейчас я имею дело с тем же фрагментом кода. Я полагаю, что вы захотите обрабатывать ошибки по-разному, наиболее вероятно, что это "card_error", а наиболее вероятные из них - "отклоненные" или "invalid_cvc".
Фрагмент кода ниже должен быть основным программным потоком для некоторых из различных ошибок, перечисленных на их странице документации:
try
{
var stripeCharge = chargeService.Create(myPlan);
return stripeCharge.Id;
}
catch (StripeException e)
{
switch (e.StripeError.ErrorType)
{
case "card_error":
switch (e.StripeError.Code)
{
case "incorrect_cvc":
// example error logger
ErrorLog.Enter(e.Message);
ErrorLog.Enter(e.HttpStatusCode);
ErrorLog.Enter(e.StripeError.ChargeId);
return "Incorrect CVC code";
case "card_declined":
// todo
return "";
case "processing_error":
// todo
return "";
}
return "Other Card Error";
case "api_error":
// todo
return "";
case "invalid_request_error":
// todo
return "";
}
return "Unknown Error";
}
Попробуйте использовать StripeException во внутренней ловушке
Таким образом, вы сможете определить, какое действие STRIPE следует предпринять вместо исключения низкого уровня.