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,您可以通过以下publicstatic 属性访问先前请求和响应的详细信息:

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 错误请求

尝试执行 PayPal 付款请求时出现 HTTP 400 错误。 (file_get_contents)

PayPal IPN HTTP 错误 400 - PHP - 使用 PayPal GIT 代码