带REST PHP的PayPal返回错误400

带REST PHP的PayPal返回错误400,php,rest,paypal,Php,Rest,Paypal,我正在使用PHP中的RESTAPI尝试创建PayPal购买,但每次运行它时,我只会收到一个普通的400错误。显然,这意味着要求不好,但几乎没有给出任何细节。以下是我代码的主要部分: define("PP_CONFIG_PATH", "../vendor/"); $apiContext = new ApiContext(new OAuthTokenCredential('-redacted-', '-redacted-')); // id, secret $addr = new Address

我正在使用PHP中的RESTAPI尝试创建PayPal购买,但每次运行它时,我只会收到一个普通的400错误。显然,这意味着要求不好,但几乎没有给出任何细节。以下是我代码的主要部分:

define("PP_CONFIG_PATH", "../vendor/");

$apiContext = new ApiContext(new OAuthTokenCredential('-redacted-', '-redacted-')); // id, secret

$addr = new Address();
$addr->setLine1($_POST['addr1']);
if(isset($_POST['addr2']) && !empty($_POST['addr2'])) $addr->setLine2($_POST['addr2']);
$addr->setCity($_POST['city']);
$addr->setCountry_code($_POST['country']);
$addr->setPostal_code($_POST['zip']);
$addr->setState($_POST['state']);
$addr->setPhone('9179261285'); // TODO put in actual phone

$card = new CreditCard();
$card->setNumber($_POST['card_num']);
$card->setExpire_month($_POST['expire_mon']);
$card->setExpire_year($_POST['expire_yr']);
$card->setCvv2($_POST['cvv2']);
$card->setFirst_name($_GET['fname']);
$card->setLast_name($_GET['lname']);
$card->setBilling_address($addr);

$fi = new FundingInstrument();
$fi->setCredit_card($card);

$payer = new Payer();
$payer->setPayment_method('credit_card');
$payer->setFunding_instruments(array($fi));

$cost = $_POST['plan'] == 1 ? '19.95' : '29.95';

$amountDetails = new AmountDetails();
$amountDetails->setSubtotal($cost);
$amountDetails->setTax('0.00');
$amountDetails->setShipping('0.00');

$amount = new Amount();
$amount->setCurrency('USD');
$amount->setTotal($cost);
$amount->setDetails($amountDetails);

$transaction = new Transaction();
$transaction->setAmount($amount);
$transaction->setDescription('MyTrustCo membership subscription.');

$payment = new Payment();
$payment->setIntent('sale');
$payment->setPayer($payer);
$payment->setTransactions(array($transaction));

try {
    $response = $payment->create($apiContext);
} catch (PPConnectionException $e) {
    echo "<br />exception:<br />" . $e->getMessage() . "<br />";
}

echo "response: " . $response;
die();

我不知道是什么导致了这个错误。我遵循了本教程:

我也遇到了同样的问题,但最终通过捕获异常而不是PPConnectionException(根据愚弄我们两人的SDK示例代码)发现了根本原因。一旦我这样做了,我就能够转储异常详细信息,显示PayPal正在抱怨我的交易金额格式不正确-小数点后只有一个位数。查看上面的代码,情况可能不是这样,但是更改异常处理程序应该可以很快发现真正的问题

您也可能会在将来遇到其他值的格式问题,您可以通过以下方法解决此问题:

money_format('%!i', $amount)

当然,如果你能告诉我什么是示例转储以及如何获得示例转储,他确实在输出中提供了一个转储。我有同样的错误,但它是404,这是唯一返回的东西。目前我自己也有同样的问题(得到400个响应)。有人发现了原因吗?我的最终解决方案是切换到Braintree()。费率与Paypal类似,您可以控制支付过程的每个部分。此外,作为一名开发人员,设置它是一件轻而易举的事。我极力推荐。祝你好运!碰巧,我下一步将致力于集成!我在一个涉及多个支付提供商集成的系统上工作。从目前为止我所看到的情况来看,它们显然比PayPal更容易处理。另外看看Stripe,我认为它在API方面与Braintree非常相似。
money_format('%!i', $amount)