2014-11-16 1 views
0

Я пытаюсь настроить вызов Stripe через C# и их API. Я использую следующий код, чтобы добавить новую карту через пост в их API и использовать ответ JSON, чтобы определить следующий шагКак проигнорировать/пропустить/обработать ошибку HttpWebResponse и вернуть 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"; 
    } 
    } 
} 

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

I used Stripes "card_declined" test card number 4000000000000002

В результате 402 Ошибка со следующей структурой JSON

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

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

System.Net.WebException: The remote server returned an error: (402) Payment Required. at System.Net.WebClient.UploadDataInternal(Uri address, String method, Byte[] data, WebRequest& request) at System.Net.WebClient.UploadString(Uri address, String method, String data) at System.Net.WebClient.UploadString(String address, String data) at ASP.StripeGlobalHelpers.stripeAPIcall(String url, String parameters, String stripeApiKey, Boolean post)

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

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

ответ

3

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

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

Замечательный Микко! :) Это отлично работает. Огромное спасибо. –

Смежные вопросы