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 iOS SDK 返回一个错误并让我的应用程序崩溃
致命错误:在 sdk Paypal 中找不到类“Paypal\Api\Payer”