Я пытаюсь настроить вызов 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 в мое приложение? Я хочу сказать пользователю "Ваша карта была отклонена" или любое другое сообщение об ошибке, которое я могу получить из полосы.
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Вы можете использовать следующий обработчик исключений
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"
}
}