Попробуйте / поймайте с 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 следует предпринять вместо исключения низкого уровня.

Другие вопросы по тегам