贝宝 PHP SDK 实现

Posted

技术标签:

【中文标题】贝宝 PHP SDK 实现【英文标题】:Paypal PHP SDK implementation 【发布时间】:2018-06-12 00:49:08 【问题描述】:

我的paypal sdk版本是^1.13

我在我的 paypal 实施中遇到了错误。我跟着这个教程 https://www.youtube.com/watch?v=BD1dOWIABe0

<?php
require 'vendor/autoload.php';
use PayPal\Api\Payer;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Amount;
use PayPal\Api\Transaction;
use PayPal\Api\RedirectUrls;
use PayPal\Api\Payment;
use PayPal\Api\Details;
use PayPal\Rest\ApiContext;
Use PayPal\Auth\OAuthTokenCredential;



if(!isset($_POST['product'], $_POST['price']))
die();


$clientId = 'client-id';
$clientSecret = 'client-secret';

$apiContext = new ApiContext(
new OAuthTokenCredential(
$clientId,
$clientSecret
)
);

$product = $_POST['product'];
$price = $_POST['price'];
$tax = 2.00;

$total = $price + $tax;

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

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

$itemList = new ItemList();
$itemList->setItems([$item]);

$details = new Details();
$details->setShipping($tax)
->setSubtotal($price)
->setTax(2.00);

$amount = new Amount();
$amount->setCurrency('USD')
->setTotal($total)
->setDetails($product);

$transaction = new Transaction();
$transaction->setAmount($amount)
    ->setItemList($itemList)
    ->setDescription('dsds')
    ->setInvoiceNumber(uniqid());

$baseUrl = "http://www.localhost/xc";
$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl("$baseUrl/pay.php?success=true")
->setCancelUrl("$baseUrl/pay.php?success=false");

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


try

$payment->create($apiContext);


catch(PayPal\Exception\PayPalConnectionException $ex)
echo $ex;
die($ex);


echo $approvalUral = $payment->getApprovalLink(); 

我已尝试搜索该错误,但似乎找不到答案,因此我需要一些帮助。我做错了什么?我需要降级吗?因为教程中的视频是 2 年前制作的,所以我认为我需要降级,但有可能吗?

异常 'PayPal\Exception\PayPalConnectionException' 并带有消息 'Got Http response code 400 when access https://api.sandbox.paypal.com/v1/payments/payment.'在 C:\xampp\htdocs\ladea\vendor\paypal\rest-api-sdk-php\lib\PayPal\Core\PayPalHttpConnection.php:202 堆栈跟踪: #0 C:\xampp\htdocs\ladea\vendor\paypal\rest-api-sdk-php\lib\PayPal\Transport\PayPalRestCall.php(78): PayPal\Core\PayPalHttpConnection->execute('"intent" :"销售...') #1 C:\xampp\htdocs\ladea\vendor\paypal\rest-api-sdk-php\lib\PayPal\Common\PayPalResourceModel.php(104): PayPal\Transport\PayPalRestCall->execute(Array, '/v1 /payments/pa...', 'POST', '"intent":"sale...', NULL) #2 C:\xampp\htdocs\ladea\vendor\paypal\rest-api-sdk-php\lib\PayPal\Api\Payment.php(577): PayPal\Common\PayPalResourceModel::executeCall('/v1/payments /pa...', 'POST', '"intent":"sale...', NULL, Object(PayPal\Rest\ApiContext), NULL) #3 C:\xampp\htdocs\ladea\checkout.php(78): PayPal\Api\Payment->create(Object(PayPal\Rest\ApiContext)) #4 mainexception 'PayPal\Exception\PayPalConnectionException' 带有消息'Got Http response code 400 when access https://api.sandbox.paypal.com/v1/payments/payment.'在 C:\xampp\htdocs\ladea\vendor\paypal\rest-api-sdk-php\lib\PayPal\Core\PayPalHttpConnection.php:202 堆栈跟踪:#0 C:\xampp\htdocs\ladea\vendor\paypal \rest-api-sdk-php\lib\PayPal\Transport\PayPalRestCall.php(78): PayPal\Core\PayPalHttpConnection->execute('"intent":"sale...') #1 C:\xampp \htdocs\ladea\vendor\paypal\rest-api-sdk-php\lib\PayPal\Common\PayPalResourceModel.php(104): PayPal\Transport\PayPalRestCall->execute(Array, '/v1/payments/pa.. .', 'POST', '"intent":"sale...', NULL) #2 C:\xampp\htdocs\ladea\vendor\paypal\rest-api-sdk-php\lib\PayPal\Api \Payment.php(577): PayPal\Common\PayPalResourceModel::executeCall('/v1/payments/pa...', 'POST', '"intent":"sale...', NULL, Object( PayPal\Rest\ApiContext), NULL) #3 C:\xampp\htdocs\ladea\checkout.php(78): PayPal\Api\Payment->create(Object(PayPal\Rest\ApiContext)) #4 main

谢谢你和问候。

【问题讨论】:

与其跟着一个2年前的视频教程,不如参考实际的文档? 好吧,我实际上是指它。但它仍然没有工作。我还复制了实际的示例文档代码。 【参考方案1】:

我已在您的 GitHub 问题中提供了此信息,但会在此处提供答案以提供帮助。

我使用 wiki 中的信息更新了代码示例的异常输出,该信息提供了一些附加信息,400 是格式错误的请求 https://github.com/paypal/PayPal-PHP-SDK/wiki/exception-%27PayPal%5CException%5CPayPalConnectionException%27-with-message-%27Got-Http-response-code-400-when-accessing。

$details = new Details();
$details->setShipping($tax)
->setSubtotal($price)
->setTax(2.00);

$amount = new Amount();
$amount->setCurrency('USD')
->setTotal($total)
->setDetails($product);

如果您的总计是商品的税金和价格,则不要设置运费。此外,amount->setDetails 应该是详细信息。

$details = new Details();
$details->setSubtotal($price)
->setTax(2.00);

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

【讨论】:

【参考方案2】:

删除您的 *.paypal.com cookie。 这是 PayPal 系统中的一个不幸的错误,其中 cookie 变得太大并且服务器在其上出错。 您可以通过使用两种不同的浏览器来避免该问题,例如用于 PayPal Live 的 IE 和用于 PayPal Sandbox 的 FF。 检查隐身模式。

【讨论】:

以上是关于贝宝 PHP SDK 实现的主要内容,如果未能解决你的问题,请参考以下文章

php核心贝宝sdk

是否可以使用新的 PHP SDK 将自定义“notify_url”传递给贝宝?

php : 贝宝定期付款令牌无效

php - 检查贝宝定期付款状态[关闭]

发票 PayPal-PHP-SDK 中的 Paypal notify_url

贝宝订单请求永远不会回来