我试图通过rest-api-sdk-php 1.13.0将网站连接到paypal,并且在点击结帐按钮进行付款时总是会收到此错误:
400 {" name":" MALFORMED_REQUEST"," message":"传入的JSON请求未映射到API ......访问possible
由于我是paypal集成的新手,我根据paypal开发者页面的手动说明和网上的一些教程编写了我的代码。
我的密钥的PHP代码是:
require 'vendor/autoload.php';
define('SITE_URL', 'http://localhost:8888/segundo_mercado');
$paypal = new \PayPal\Rest\ApiContext(
new \PayPal\Auth\OAuthTokenCredential(
'ZDSFE7B...',
'Xcfr6bG...'
)
);
还有付款操作:
use PayPal\Api\Payer;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Details;
use PayPal\Api\Amount;
use PayPal\Api\Transaction;
use PayPal\Api\RedirectUrls;
use PayPal\Api\Payment;
require 'app/start.php';
if(!isset($_POST["price"])){
die();
}
$product = 'Produto';
$price = $_POST['price'];
$shipping = 4.00;
$total = $price + $shipping;
$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($shipping)
->setSubtotal($price);
$amount = new Amount();
$amount->setCurrency('USD')
->setTotal($price)
->setDetails($details);
$transaction = new Transaction();
$transaction->SetAmount($amount)
->setItemList($itemList)
->setDescription('Segundo Mercado pagamento')
->setInvoiceNumber(uniqid());
$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl(SITE_URL . '/success.php?success=true')
->setCancelUrl(SITE_URL . '/success.php?success=false');
$payment = new Payment();
$payment->setIntent('sale')
->setPayer($payer)
->setRedirectUrls($redirectUrls)
->setTransactions($transaction);
try{
$payment->create($paypal);
} 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);
}
$approvalUrl = $payment->getApprovalLink();
我认为问题在于它们来自HTML表单时传递的价格或运费值,但我测试了这些值,并且它们是从提交按钮发布的。
我试图连接到SANDBOX(不是直播)。
这是漫长的一天,从上午10点开始试图解决这个问题没有运气。
答案 0 :(得分:2)
刚刚解决了...... 这是一件小事。 - > setTransactions([$交易]); $ transaction必须在[...]内。