I am trying to setup a call to Stripe via C# and their API. I am using the following code to add a new card via a post to their API and use the JSON response to determine next step
(I tried to strip out everything unnecessary)
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";
}
}
}
And this works fine to create a card when there is a success. However, if there is an error, for example
I used Stripes "card_declined" test card number 4000000000000002
The result is a 402 Error with the following JSON structure
{
"error": {
"message": "Your card was declined.",
"type": "card_error",
"code": "card_declined"
}
}
Which blows up my C# code because the 402 error returns
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)
So, how do I ignore/skip/process the 402 error and still return the JSON to my app? I want to be able to tell the user "Your Card was Declined" or whatever other error message I may get from stripe.
If you need any more info, please let me know.
You could use the following exception handler
This would return e.g.