PayPal SDK 产品数组返回错误

Posted

技术标签:

【中文标题】PayPal SDK 产品数组返回错误【英文标题】:PayPal SDK Array of products return an error 【发布时间】:2016-01-05 10:07:09 【问题描述】:

我正在学习 PayPal SDK,当我第一次使用一种产品时,它运行良好。现在我必须使用一系列产品。这是密码

$paypal = new ApiContext(
        new OAuthTokenCredential(
            '...',
            '...'
        )
    );

    $payer = new Payer();
    $payer->setPaymentMethod('paypal');

    $shipping = 2;
    $totalPriceWithShipping = 0;
    $totalPriceWithoutShipping = 0;


    $items = [];

    foreach(Controller::getData('productsInCart') as $product)
    
        $totalPriceWithShipping += ($product->price + $shipping);
        $totalPriceWithoutShipping += $product->price;

        $item = new Item();

        $item->setName($product->name)
            ->setPrice($product->price)
            ->setCurrency('USD')
            ->setQuantity(1);

        $items[] = $item;
    

    $itemList = new ItemList();
    $itemList->setItems($items);

    $details = new Details();
    $details->setShipping($shipping)
            ->setSubtotal($totalPriceWithoutShipping);


    $amount = new Amount();
    $amount->setCurrency('USD')
        ->setTotal($totalPriceWithShipping)
        ->setDetails($details);



    $transaction = new Transaction();
    $transaction->setItemList($itemList)
                ->setAmount($amount)
                ->setDescription('Your Order from Online Shop')
                ->setInvoiceNumber(uniqid());

    $redirectUrls = new RedirectUrls();
    $redirectUrls->setReturnUrl('...')
                ->setCancelUrl('...');

    $payment = new Payment();
    $payment->setIntent('sale')
            ->setPayer($payer)
            ->setRedirectUrls($redirectUrls)
            ->setTransactions([$transaction]);

    try 
        $payment->create($paypal);
    
    catch(Exception $e) 
        die($e->getTrace());
    

   die($payment->getApprovalLink());

但我不知何故得到了这个错误:

致命错误:未捕获异常 'PayPal\Exception\PayPalConnectionException' 并带有消息“访问 https://api.sandbox.paypal.com/v1/payments/payment 时获得 Http 响应代码 400。”在 C:\dev\htdocs\Shop\vendor\paypal\rest-api-sdk-php\lib\PayPal\Core\PayPalHttpConnection.php:180 堆栈跟踪:#0 C:\dev\htdocs\Shop\vendor\paypal \rest-api-sdk-php\lib\PayPal\Transport\PayPalRestCall.php(74): PayPal\Core\PayPalHttpConnection->execute('"intent":"sale...') #1 C:\dev \htdocs\Shop\vendor\paypal\rest-api-sdk-php\lib\PayPal\Common\PayPalResourceModel.php(102): PayPal\Transport\PayPalRestCall->execute(Array, '/v1/payments/pa.. .', 'POST', '"intent":"sale...', NULL) #2 C:\dev\htdocs\Shop\vendor\paypal\rest-api-sdk-php\lib\PayPal\Api \Payment.php(422): PayPal\Common\PayPalResourceModel::executeCall('/v1/payments/pa...', 'POST', '"intent":"sale...', NULL, Object( PayPal\Rest\ApiContext), NULL) #3 C:\dev\htdocs\Shop\app\controllers\CartController.php(183): PayPal\Api\Payment->create(Object(PayPal\Rest\ApiContext)) # 4 [第 180 行 C:\dev\htdocs\Shop\vendor\paypal\rest-api-sdk-php\lib\PayPal\Core\PayPalHttpConnection.php 中的内部函数

你可以看看 $items 数组

$items array

【问题讨论】:

所以运输有问题。如果运费等于 0,它可以工作。 【参考方案1】:

得到 400 异常意味着,贝宝正在返回一些异常。获取有关该异常的更多详细信息。您需要捕获未捕获的异常PayPal\Exception\PayPalConnectionException 以获取更多详细信息。

This page should 帮你出主意。以下是捕获该异常的示例代码:

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);

【讨论】:

我已经试过了,并评论说运输有问题。它显示如下:"name":"VALIDATION_ERROR","details":["field":"transactions[0].amount","issue":"交易金额详细信息(小计、税金、运费)总和必须达到指定金额"],"message":"无效请求 - 查看详情","information_link":"developer.paypal.com/webapps/developer/docs/api/…" 这解释了您在获取 priceWithShipping 和 withoutShipping 的逻辑中的缺陷。在您的情况下,您正在添加每件商品的运费。但是,您只向贝宝添加运费(2 美元)。这会导致不匹配。 谢谢。现在工作正常:)

以上是关于PayPal SDK 产品数组返回错误的主要内容,如果未能解决你的问题,请参考以下文章

PayPal SDK 沙​​盒模式返回带有错误链接的响应

Paypal iOS SDK 返回一个错误并让我的应用程序崩溃

致命错误:在 sdk Paypal 中找不到类“Paypal\Api\Payer”

PayPal SDK:PayPal 错误:找不到 live.dyson 的端点

付款创建错误 paypal sdk android

使用 PayPal 移动 SDK 的 iOS 构建错误