Как я игнорирую / пропускаю / обрабатываю ошибку HttpWebResponse и все еще возвращаю JSON в мой код?

1

Я пытаюсь настроить вызов Stripe через С# и их API. Я использую следующий код, чтобы добавить новую карточку через сообщение в свой API и использовать ответ JSON для определения следующего шага

(Я пытался вычеркнуть все ненужное)

public static string stripeAPIcall(string customerId, string parameters, string stripeApiKey) {
    using (var stripeAPI = new System.Net.WebClient())
    {
      try
      {
        // set credentials
        stripeAPI.Credentials = new System.Net.NetworkCredential(stripeApiKey, "");

        //Set Headers
        stripeAPI.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)");
        stripeAPI.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";

        return stripeAPI.UploadString("https://api.stripe.com/v1/customers/" + customerId + "/cards, parameters);
    }
    catch (WebException ex)
    {   
        return "error";
    }
  }
}

И это отлично работает, чтобы создать карту, когда есть успех. Однако, если есть ошибка, например

Я использовал Stripes "card_declined" номер тестовой карты 4000000000000002

Результатом является ошибка 402 со следующей структурой JSON

{
  "error": {
    "message": "Your card was declined.",
    "type": "card_error",
    "code": "card_declined"
  }
}

Что взрывает мой код С#, потому что ошибка 402 возвращается

System.Net.WebException: на удаленном сервере была отправлена ошибка: (402) Требуется оплата. в System.Net.WebClient.UploadDataInternal (адрес Uri, метод String, данные Byte [], запрос WebRequest & request) в System.Net.WebClient.UploadString (адрес Uri, метод String, данные String) в System.Net.WebClient.UploadString( String address, String data) в ASP.StripeGlobalHelpers.stripeAPIcall(String url, String parameters, String stripeApiKey, Boolean post)

Итак, как мне игнорировать/пропускать/обрабатывать ошибку 402 и возвращать JSON в мое приложение? Я хочу сказать пользователю "Ваша карта была отклонена" или любое другое сообщение об ошибке, которое я могу получить из полосы.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Теги:
httpwebresponse

1 ответ

4
Лучший ответ

Вы можете использовать следующий обработчик исключений

catch (WebException ex)
{
    var response = ex.Response.GetResponseStream();
    return response == null ? null : new StreamReader(response).ReadToEnd();
}

Это вернет, например

{
  "error": {
    "type": "invalid_request_error",
    "message": "Invalid API Key provided: ftw?!1"
  }
}
  • 2
    Чудесный Микко! :) Это прекрасно работает. Огромное спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню