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

如何使用paypal rest api解决400错误请求错误?,paypal,Paypal,我目前正在使用PayPal payments pro Rest API测试信用卡支付 我不断得到以下错误: Exception in HttpConnection Execute: Invalid HTTP response The remote server returned an error: (400) Bad Request. ---> 我创建并激活了我的PayPal测试帐户,如下所示: Credit card Credit card number: ccnumber here

我目前正在使用PayPal payments pro Rest API测试信用卡支付

我不断得到以下错误:

Exception in HttpConnection Execute: Invalid HTTP response The remote server returned an error: (400) Bad Request. ---> 
我创建并激活了我的PayPal测试帐户,如下所示:

Credit card
Credit card number:
ccnumber here
Credit card type:
Visa
Expiration date:
3/2019
当我在付款单中输入上述信息并提交时,我一直收到400个错误请求

我以前用PayPAl joe购物者帐户处理过这个问题,但丢失了测试cc号

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

此错误的可能原因是什么

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

这个名字必须存在吗


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

  • 我向amount对象传递了amount详细信息,但运输税小计的总和不等于amount total
  • 我传递了金额货币值,包括一个小数点,但传递的不是两个小数点,而是一个小数点。显然RESTAPI有点敏感,只接受零或两个小数
  • 我在事务对象中传递了一个item_列表,但item对象中的价格总和不等于amount details中给出的小计
我不知道如何找到错误的实际原因(如果有)

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

编辑:

我刚刚试过:它确实是付款人信息。我传递了一个名为first和lastname的payer_信息,并获得了HTTP400(没有任何功能)。我假设payer_信息不能由我们设置,而是由PayPal在返回支付对象时设置

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

如果给定的数据出错,PayPalAPI将返回一个400错误的请求错误

当我收到错误(PHP SDK)时,我捕获了异常并返回了一个json,其中包含关于错误请求的详细信息,在我的情况下,我给出的货币代码是错误的

    try {
        $payment->create($apiContext);
    } catch (PayPal\Exception\PPConnectionException $ex) {
        var_dump(json_decode($ex->getData()));
        exit(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"=>"
然后在这里找出您的问题以获取更多信息


我也有同样的问题。在我的情况下,这是信用卡问题,这可能是过度使用。所以我从这个网站上取了一个新的信用卡号码,换成了旧的。 这是我用过的信用卡信息

 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"
                        }
注:所有的信用卡提到贝宝网站不工作,给我相同的问题。如果它对你有效,那么它是好的,否则使用新的测试信用卡号。希望这能帮助别人


谢谢大家!!享受编码

我也被这个问题所困扰,可能还有很多其他可能的根本原因导致这个失败,但在我的情况下,我所有通过的论点都是正确的,但在沙箱环境中失败了,我只是将支付选项从
贝宝余额
更改为
Visa
,然后它开始工作


就像这里的其他人所说的那样,有几种因素可能导致(HTTP 400-错误请求)

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


-祝你好运

我最近也遇到了400个错误请求。在我的案例中,我正在使用ReturnRequest处理退款,而且PayPal最近似乎更改了“原因”字段的限制条件(尽管我找不到文件),因此我对退款内容的冗长描述不再被接受。我发现这个错误只是因为我看到另一个字段,PayPal现在要求它只能是单字节字母数字字符。但真正有帮助的是,缩短了我输入的数据,以此作为简单地“返回项目”的理由

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

了解你的错误 PayPal返回每个异常的详细数据(500内部服务器错误除外),解释您看到的确切错误。您可以按如下方式检索:

更新异常处理以捕获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);
}

这是由于您提供的货币或金额错误造成的。 我在工作中面对这个问题

我是这么做的。在createOrder方法中

purchase_units: [{
                amount: {
                    currency_code: 'PHP',
                    value: totalAmount
                }
            }],
这就是问题所在。如果我给了除美元以外的任何货币,我将得到400错误。因此,我从这里删除了货币代码

我把货币申报表移到了我的成分申报表中。 像这样

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

在这里你可以给任何你想要的货币。这解决了我的400错误

如果您使用Paypal沙盒测试驱动程序,并且在第一次尝试使用错误代码时,它会向客户端显示400错误请求错误

原因:-Paypal发送了JWT auth,并将其存储在客户端的本地存储中

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


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

这非常有用!是的,非常有用。我正在测试paypal,我硬编码了一个发票号码,使其正常工作。是的。一旦哈哈哈哈,我只是花了这么多时间,什么都没有,我喜欢编程。