PayPal 400 错误请求,更具体?
Posted
技术标签:
【中文标题】PayPal 400 错误请求,更具体?【英文标题】:PayPal 400 Bad Request, more specific? 【发布时间】:2015-08-12 23:39:49 【问题描述】:有什么方法可以得到比 400 bad request 更具体的 PayPal 错误?我看到有人在做这样的事情:
if (ex.InnerException is ConnectionException)
Response.Write(((ConnectionException) ex.InnerException).Response);
else
Response.Write(ex.Message);
但这对我来说似乎没有什么不同,所有错误都是: “远程服务器返回错误:(400) Bad Request。”
我读到它可能与某种验证错误有关,但我尝试更改要发送到 PayPal 的数据,但到目前为止都没有成功。
希望你能帮帮我,谢谢!
编辑:
感谢 Aydin,我设法在 Fiddler 的一个 HTTP 请求中找到了这个错误消息:
"name":"VALIDATION_ERROR","details":["field":"payer.funding_instruments[0].credit_card.number","issue":"Value is invalid"],"message":"Invalid request - see details","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#VALIDATION_ERROR","debug_id":"dd5f11f6e9c98"
【问题讨论】:
您的代码此时是否已通过身份验证?出于安全原因,PayPal 可能不会为您提供更详细的错误消息。 感谢您的快速评论!嗯...似乎付款创建时发生异常。如果如果是连接异常,当我使用上面的代码时它不会显示更多信息吗? 【参考方案1】:您可以通过安装 Fiddler 来节省自己的时间,这样您就可以看到您发送的确切 HTTP Web 请求,以及您在应用程序开始处理之前收到的响应。
这是我浏览到example.com
的示例。您可以在右上半部分看到从我的浏览器发送的请求,在右下半部分看到包括所有标头和所有内容的响应...尝试仅使用异常管理来调试 HTTP 流量会让您发疯。
Direct Link
【讨论】:
非常感谢您的回答,Fiddler 确实帮助了我,我设法在 HTTP 请求之间找到了这个错误:"name":"VALIDATION_ERROR","details":["field ":"payer.funding_instruments[0].credit_card.number","issue":"价值无效"],"message":"无效请求 - 查看详情","information_link":"developer.paypal.com/webapps/developer/docs/api/…" 如这解决了我与非特定错误的主要问题,我会将其标记为答案,谢谢!【参考方案2】:除了使用 Fiddler(我强烈建议您使用它,因为它是一个很棒的工具),您还可以将您的 catch 逻辑更改为以下内容以获取响应正文的详细信息:
try
var payment = Payment.Create(...);
catch(PayPalException ex)
if(ex is ConnectionException)
// ex.Response contains the response body details.
else
// ...
...或...
try
var payment = Payment.Create(...);
catch(ConnectionException ex)
// ex.Response contains the response body details.
catch(PayPalException ex)
// ...
此外,如果您使用的是 1.4.3 版(或更高版本)的 PayPal .NET SDK,您可以通过以下public
static
属性访问先前请求和响应的详细信息:
PayPalResource.LastRequestDetails.Value
PayPalResource.LastResponseDetails.Value
每当 SDK 对 API 进行新调用时,都会设置这些属性中的每一个。
【讨论】:
太好了,非常感谢,如果我遇到任何 PayPal 问题,我会记住这一点,感谢您的帮助!【参考方案3】:我也遇到过同样的问题。就我而言,这是信用卡问题,可能被过度使用。因此,我从该站点测试信用卡中获取了新的信用卡号并替换为旧的。这是我使用的信用卡信息
credit_card = new CreditCard()
billing_address = new Address()
city = "Johnstown",
country_code = "US",
line1 = "52 N Main ST",
postal_code = "43210",
state = "OH"
,
cvv2 = "874",
expire_month = 11,
expire_year = 2018,
first_name = "Joe",
last_name = "Shopper",
number = "4024007185826731", //New Credit card Number, Only Card type should match other details does not matter
type = "visa"
注意:PayPal 网站中提到的所有信用卡都不起作用,给我同样的问题。如果它对您有用,那么最好使用新的测试信用卡号。希望这对某人有所帮助。
享受编码!
【讨论】:
【参考方案4】:我很欣赏@JasonZ 使用PayPalResource.LastResponseDetails.Value
的建议,但发现响应正文总是空的。我发现在没有 fiddler 的情况下获得错误解释的唯一方法是:
catch (PayPal.PaymentsException ex)
context.Response.Write(ex.Response);
结果:
"name":"VALIDATION_ERROR","details":["field":"start_date","issue":"Agreement start date is required, should be valid and greater than the current date. Should be consistent with ISO 8601 Format"],"message":"Invalid request. See details.","information_link":"https://developer.paypal.com/docs/api/payments.billing-agreements#errors","debug_id":"8c56c13fccd49"
【讨论】:
以上是关于PayPal 400 错误请求,更具体?的主要内容,如果未能解决你的问题,请参考以下文章
发送 Paypal 支付调用返回 400 格式错误的请求错误
Paypal sdk asp.net 返回 (400) 错误请求
paypal express checkout - 400 错误请求
Laravel Paypal IPN 与 localtunnel 随机 400 错误请求