PayPal REST PHP SDK 给我一个 400 错误(Laravel库)


Paypal REST PHP SDK giving me a 400 error (laravel library)

我正在使用适用于PHP的PayPal REST SDK,使用laravel包装器,它给了我一个400错误(据我所知输入错误) 我主要从以下位置找到的示例复制: 在此处输入链接描述 然而,我收到一个 400 错误发回。我不知道我做错了什么:这是代码。

    $payer = Paypalpayment::Payer();
    $payer->setPayment_method("paypal");
    $item1 = Paypalpayment::Item();
    $item1->setName('Lavender 6 oz')
        ->setCurrency('USD')
        ->setQuantity(1)
        ->setPrice('7.50');
    $itemList = Paypalpayment::ItemLIst();
    $itemList->setItems(array($item1));

    $amount = Paypalpayment::Amount();
    $amount->setCurrency("USD")
        ->setTotal("20.00");

    $transaction = Paypalpayment::Transaction();
    $transaction->setAmount($amount)
        ->setItemList($itemList)
        ->setDescription("Buying from ButterflyOils.com");
    $redirectUrls = Paypalpayment::RedirectUrls();
    $baseUrl = Paypalpayment::getBaseUrl();
    $redirectUrls->setReturnUrl($baseUrl +  "/ExecutePayment.php?success=true&message='PayPal+Worked!'")
        ->setCancelUrl($baseUrl + "/ExecutePayment.php?success=false&message='PayPal+Cancel'");
    $payment = Paypalpayment:: Payment();
    $payment->setIntent("sale");
    $payment->setPayer($payer);
    $payment->setRedirectUrls($redirectUrls);
    $payment->setTransactions(array($transaction));
    try {
        $payment->create($this->_apiContext);
    } catch ('PPConnectionException $ex) {
        return "Exception: " . $ex->getMessage() . PHP_EOL;
        var_dump($ex->getData());
        exit(1);
    }
    foreach($payment->getLinks() as $link) {
        if($link->getRel() == 'approval_url') {
            $redirectUrl = $link->getHref();
            break;
        }
    }
    // yeah I know this is a bad idea
    $_SESSION['paymentId'] = $payment->getId();
    if(isset($redirectUrl)) {
        header("Location: $redirectUrl");
        exit;
    }

API 使用 HTTP 400 响应返回验证错误的详细说明,您应该能够检查异常对象以确定返回的内容。

在这种情况下,看起来您的项目总额与交易的总付款金额不匹配,但 API 错误消息应该肯定会告诉您

错误是我有一个值为"0"的 returnURL 和 CancelURL,因为我试图连接到具有 +(Javascript 习惯)的字符串,但由于 Laravel 的路由,baseUrl()返回了一个无效的地址。

看看PayPal.log很有帮助

更改此内容

$item1 = Paypalpayment::Item();
    $item1->setName('Lavender 6 oz')
        ->setCurrency('USD')
        ->setQuantity(1)
        ->setPrice('7.50');
    $itemList = Paypalpayment::ItemLIst();
    $itemList->setItems(array($item1));

    $amount = Paypalpayment::Amount();
    $amount->setCurrency("USD")
        ->setTotal("7.50");

就是这样