我正在尝试通过C#及其API设置对Stripe的调用。我使用以下代码通过帖子将新卡添加到他们的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
结果是带有以下JSON结构的402错误
{
"error": {
"message": "Your card was declined.",
"type": "card_error",
"code": "card_declined"
}
}
这会破坏我的C#代码,因为402错误返回
System.Net.WebException:远程服务器返回错误:(402)需要付款。 System.Net.WebClient.UploadString上的System.Net.WebClient.UploadString(Uri地址,字符串方法,字符串数据)处的System.Net.WebClient.UploadDataInternal(Uri地址,字符串方法,字节[]数据,WebRequest和请求) (字符串地址,字符串数据)ASP.StripeGlobalHelpers.stripeAPIcall(String url,String parameters,String stripeApiKey,Boolean post)
那么,我如何忽略/跳过/处理402错误并仍然将JSON返回到我的应用程序? 我希望能够告诉用户"您的卡已被拒绝"或者我可以从条带获得的任何其他错误消息。
如果您需要更多信息,请告诉我们。
答案 0 :(得分: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"
}
}