У меня проблемы с REST API.Он возвращает MALFORMED_REQUEST: «Входящий JSON-запрос не сопоставляется с API-запросом», и я не могу понять, что я делаю неправильно.Перебирали код снова и снова и, похоже, не могли понять, в чем проблема.Я вывел содержимое getData в исключении, но оно не дает мне никакого представления о том, где может быть проблема.Я уверен, что это будет что-то простое, но я не могу его найти.
Я вывел содержимое getData в исключении, но это не дает мне никакого представления о том, где может быть проблема,кроме самой ошибки
object(PayPal\Api\Item)#8 (1) { ["_propMap":"PayPal\Common\PayPalModel":private]=> array(5) { ["name"]=> string(29) "5155 Tranport Request Deposit" ["currency"]=> string(3) "EUR" ["quantity"]=> int(1) ["sku"]=> string(4) "5155" ["price"]=> string(2) "10" } } object(PayPal\Api\ItemList)#9 (1) { ["_propMap":"PayPal\Common\PayPalModel":private]=> array(1) { ["items"]=> array(1) { [0]=> object(PayPal\Api\Item)#8 (1) { ["_propMap":"PayPal\Common\PayPalModel":private]=> array(5) { ["name"]=> string(29) "5155 Tranport Request Deposit" ["currency"]=> string(3) "EUR" ["quantity"]=> int(1) ["sku"]=> string(4) "5155" ["price"]=> string(2) "10" } } } } } object(stdClass)#15 (4) { ["name"]=> string(17) "MALFORMED_REQUEST" ["message"]=> string(49) "Incoming JSON request does not map to API request" ["information_link"]=> string(74) "https://developer.paypal.com/webapps/developer/docs/api/#MALFORMED_REQUEST" ["debug_id"]=> string(13) "7bd31dedb98ef" }
use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Api\RedirectUrls;
use PayPal\Api\Transaction;
require 'ppbootstrap.php';
if (empty($_POST['item_number'])) {
throw new Exception('This script should not be called directly, expected post data');
}
$currency = 'EUR';
$amountPayable = 10.00;
$payer = new Payer();
$payer->setPaymentMethod('paypal');
$desc = $_POST['item_number'].' Tranport Request Deposit';
$inv = $_POST['item_number'];
//Create the item
$item = new Item();
$item->setName($desc)
->setCurrency($currency)
->setQuantity(1)
->setSku($inv)
->setPrice($amountPayable);
$itemList = new ItemList();
$itemList->setItems(array($item));
var_dump($item);
var_dump($itemList);
$amount = new Amount();
$amount->setCurrency($currency)
->setTotal($amountPayable);
$transaction = new Transaction();
$transaction->setAmount($amountPayable)
->setItemList($itemList)
->setDescription($desc)
->setInvoiceNumber($inv);
$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl($paypalConfig['return_url'])
->setCancelUrl($paypalConfig['cancel_url']);
$payment = new Payment();
$payment->setIntent('sale')
->setPayer($payer)
->setTransactions(array($transaction))
->setRedirectUrls($redirectUrls);
$request = clone $payment;
try {
$payment->create($apiContext);
} catch (PayPal\Exception\PayPalConnectionException $e) {
var_dump(json_decode($e->getData()));
//throw new Exception($e);
//echo $e->getCode();
//echo '<br /><br />';
//echo $e->getData();
//echo '<br /><br />';
//var_dump($request);
die($e);
}
header('location:' . $payment->getApprovalLink());
exit(1);
Файл начальной загрузки
<?php
use PayPal\Rest\ApiContext;
use PayPal\Auth\OAuthTokenCredential;
require './vendor/autoload.php';
// For test payments we want to enable the sandbox mode. If you want to put live
// payments through then this setting needs changing to `false`.
$enableSandbox = true;
// PayPal settings. Change these to your account details and the relevant URLs
// for your site.
$paypalConfig = [
'client_id' => 'hidden',
'client_secret' => 'hidden',
'return_url' => 'http://hidden/success.html',
'cancel_url' => 'http://hidden/cancelled.html'
];
$apiContext = getApiContext($paypalConfig['client_id'], $paypalConfig['client_secret'], $enableSandbox);
function getApiContext($clientId, $clientSecret, $enableSandbox = false)
{
$apiContext = new ApiContext(
new OAuthTokenCredential($clientId, $clientSecret)
);
$apiContext->setConfig([
'mode' => $enableSandbox ? 'sandbox' : 'live'
]);
return $apiContext;
}