如何使用paypal rest api解决400错误请求错误

时间:2014-03-13 23:35:49

标签: paypal

我目前正在使用PayPal payment pro Rest API测试信用卡付款。

我一直收到以下错误:

HttpConnection中的异常执行:无效的HTTP响应远程服务器返回错误:(400)错误的请求。 --->

我创建并激活了我的PayPal测试帐户,如下所示:

信用卡 信用卡号: 在这里 信用卡类型: 签证 截止日期: 二千〇一十九分之三

当我在付款表格中输入上述信息并提交时,我会收到400错误请求错误。

我之前使用PayPAl joe购物者帐户工作但是丢失了测试cc编号。

我100%确定我已使用oauth2凭据进行身份验证

出现此错误的可能原因是什么?:

我输入随机付款人的名字和姓氏。

该名称是否必须存在?

可能导致错误的原因

10 个答案:

答案 0 :(得分:12)

如果给出的数据出现任何问题,paypal api将返回400 - 错误的请求错误。

当我收到错误(PHP SDK)时,我发现了异常并且$ex->getData()返回了一个json,其中包含有关错误请求的详细信息,在我的情况下,我给出的货币代码是错误的。

    try {
        $payment->create($apiContext);
    } catch (PayPal\Exception\PPConnectionException $ex) {
        var_dump(json_decode($ex->getData()));
        exit(1);
    }

答案 1 :(得分:1)

我遇到了同样的问题(HTTP 400 - 错误请求)。原因是带有“错误”的REST API请求。就我而言,我有两个原因:

  • 我将金额详细信息传递给Amount对象,但是小计的总和,运费税额不等于总金额。
  • 我通过了包括骨折在内的金额货币值,但是并没有通过两位小数而只是一位小数。显然,REST API有点敏感,只接受无或两位小数。
  • 我在Transaction对象中传递了item_list,但Item对象中的价格总和不等于金额详细信息中给出的小计。

我不知道找出错误的实际原因的方法(如果有的话)。

在您的情况下,它可能是您添加的付款人的名称。试试没有。

修改

我刚尝试过:这确实是付款人信息。我通过一个带有名字和姓氏的payer_info获得了HTTP 400(没有一切正常)。我假设payer_info不能由我们设置,但在返回Payment对象时由PayPal设置。

Payer payer = new Payer { payment_method = "paypal", payer_info = new PayerInfo {
   first_name = "Zaphod", last_name = "Beeblebrox"}  }; // => HTTP 400 - Bad Request

答案 2 :(得分:1)

首先找出你的错误到底是什么

payment = PayPal::SDK::REST::DataTypes::Payment.new(...)
payment.create 
# got Response[400]: Bad Request here
payment.error
# got {"name"=>"VALIDATION_ERROR", "details"=>[{"field"=>"transactions", "issue"=>"

然后在这里找出你的问题以获得更多信息

https://developer.paypal.com/webapps/developer/docs/api/#validation-issues

答案 3 :(得分:1)

像其他人所说的那样,有几件事可能导致(HTTP 400 - 错误请求)。

在我的情况下,这是由于使用相同的发票号码。对于临时测试,我只使用了使用guid生成的ShoppingCartID。您也可以使用随机数生成器。最终,您需要为客户规格生成发票编号。

- 祝你好运

答案 4 :(得分:0)

我有同样的问题。就我而言,信用卡问题可能会被过度使用。所以我从这个网站Testing Credit card获取了新的信用卡号码,并用旧的信用卡号码替换。 这是我用过的信用卡信息

 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网站中提到的所有信用卡都不起作用,给我同样的问题。如果它适合你,那么它会很好,否则使用新的测试信用卡号码。希望这会对某人有所帮助。

谢谢!享受编码!

答案 5 :(得分:0)

我也对此问题感到震惊,可能还有许多其他可能的根本原因导致此失败,但在我的情况下,我的所有传递参数都是正确的,但是在沙箱环境中失败了,我刚刚从{{更改了付款选项1}}到PayPal Balance然后它开始工作。

enter image description here

enter image description here

答案 6 :(得分:0)

我最近也遇到了400错误的请求错误。在我的情况下,我正在使用RefundRequest处理退款,而且PayPal最近更改了“原因”字段的约束(尽管没有找到我可以找到的记录),因此我对返回的内容的冗长描述没有更长的时间可以接受。我发现错误的原因仅在于,我看到另一个字段,贝宝现在要求该字段只能是单字节字母数字字符。不过,实际上有所帮助的是缩短了我输入的数据,以作为简单地“退回物品”的原因。

显然这是一个旧线程,并且我确定原来的问题早已解决,但是如果使用上述某些方法来确定有关错误的更多信息,则不会产生结果,我建议使用以下方法提交请求最少的信息,直到您可以通过它。然后,开始添加其他字段/信息,以查看是否可以确定哪个字段包含导致错误请求的信息。至少对我的问题而言,这是可行的。

答案 7 :(得分:0)

了解您的错误 贝宝(PayPal)返回有关每个异常的详细数据(500 INTERNAL_SERVER_ERROR除外),解释您所看到的确切错误。您可以按以下方式进行检索:

更新您的异常处理以捕获PayPalConnectionException并打印$ ex-> getData(),如下所示:

try {
    $payment->create($apiContext);
} catch (PayPal\Exception\PayPalConnectionException $ex) {
    echo $ex->getCode(); // Prints the Error Code
    echo $ex->getData(); // Prints the detailed error message 
    die($ex);
} catch (Exception $ex) {
    die($ex);
}

答案 8 :(得分:0)

这是由于您输入的货币或金额不正确。 我在React JS中遇到了这个问题

我正在这样做。在 createOrder 方法中。

purchase_units: [{
                amount: {
                    currency_code: 'PHP',
                    value: totalAmount
                }
            }],

这就是问题所在。如果我给了除美元以外的任何货币,我将得到400错误。所以我从这里删除了 currency_code

然后我将货币声明移到了组件声明中。 这样。

 options={{
            clientId: " Your_ID " ,
            currency: "PHP"
          }}

您可以在此处输入所需的任何货币。这解决了我的400错误

答案 9 :(得分:0)

如果您使用 Paypal Sandbox 测试驱动程序,并且在第一次尝试使用有问题的代码时,它会向客户端显示 400 Bad request 错误。

原因:- Paypal 发送了 JWT 身份验证并将其存储在客户端的本地存储中。

建议:- 尝试清除客户端的本地存储缓存(您只需要清除Paypal Token)。

这对我有用,我希望它对你有用:)