2014-02-12 5 views
0

Я пытаюсь получить «Pay with PayPal account», работающий с PHP, и я продолжаю получать ответ «Входящий запрос JSON не отображается на запрос API». Я проверил JSON, который я отправляю с jsonlint, и это действительно JSON. Он также, похоже, соответствует тому, что отправляется в образец для данного типа оплаты.PayPal REST API Malformed JSON error

require __DIR__ . '/../bootstrap.php'; 
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; 
session_start(); 

// ### Payer 
$payer = new Payer(); 
$payer->setPaymentMethod("paypal"); 

// ### Itemized information 
$item1 = new Item(); 
$item1->setName($item1Name) 
    ->setCurrency($currency) 
    ->setQuantity($item1Quantity) 
    ->setPrice($item1Price); 
$item2 = new Item(); 
$item2->setName($item2Name) 
    ->setCurrency($currency) 
    ->setQuantity($item2Quantity) 
    ->setPrice($item2Price); 

$itemList = new ItemList(); 
$itemList->setItems(array($item1, $item2)); 

// ### Additional payment details 
$details = new Details(); 
$details->setShipping($shipping) 
    ->setTax($tax) 
    ->setSubtotal($subtotal); 

// ### Amount 
$amount = new Amount(); 
$amount->setCurrency($currency) 
    ->setTotal(number_format(($subtotal + ($shipping + $tax)), 2)) 
    ->setDetails($subtotal); 

// ### Transaction 
$transaction = new Transaction(); 
$transaction->setAmount($amount) 
    ->setItemList($itemList) 
    ->setDescription("Payment description"); 

// ### Redirect urls 
$baseUrl = getBaseUrl(); 
$redirectUrls = new RedirectUrls(); 
$redirectUrls->setReturnUrl("$baseUrl/ExecutePayment.php?success=true") 
    ->setCancelUrl("$baseUrl/ExecutePayment.php?success=false"); 

// ### Payment 
$payment = new Payment(); 
$payment->setIntent("sale") 
    ->setPayer($payer) 
    ->setRedirectUrls($redirectUrls) 
    ->setTransactions(array($transaction)); 

// ### Create Payment 
$payment->create($apiContext); 
} catch (PayPal\Exception\PPConnectionException $ex) { 
    echo "Exception: " . $ex->getMessage() . PHP_EOL; 
    var_dump($ex->getData()); 
    exit(1); 
} 

// ### Get redirect url 
foreach($payment->getLinks() as $link) { 
    if($link->getRel() == 'approval_url') { 
     $redirectUrl = $link->getHref(); 
     break; 
    } 
} 

// ### Redirect buyer to PayPal website 
$_SESSION['paymentId'] = $payment->getId(); 
if(isset($redirectUrl)) { 
    header("Location: $redirectUrl"); 
    exit; 
} 

PayPal.log содержит следующее:

PayPal\Core\PPHttpConnection: Connecting to https://api.sandbox.paypal.com/v1/oauth2/token 
PayPal\Core\PPHttpConnection: Payload grant_type=client_credentials 
PayPal\Core\PPHttpConnection: Adding header User-Agent: PayPalSDK/rest-sdk-php 0.6.0 (lang=PHP;v=5.3.3;bit=64;os=********************;machine=x86_64;openssl=**********;curl=7.15.5) 
PayPal\Core\PPHttpConnection: Adding header Authorization: Basic *********************************** 
PayPal\Core\PPHttpConnection: Adding header Accept: */* 
PayPal\Core\PPHttpConnection: Connecting to https://api.sandbox.paypal.com/v1/payments/payment 
PayPal\Core\PPHttpConnection: Payload {"intent":"sale","payer":{"payment_method":"paypal"},"redirect_urls":{"return_url":"http:\/\/www.mysite.com\/paypal-test\/sample\/payments\/ExecutePayment.php?success=true","cancel_url":"http:\/\/www.mysite.com\/paypal-test\/sample\/payments\/ExecutePayment.php?success=false"},"transactions":[{"amount":{"currency":"EUR","total":"554.00","details":"550.00"},"item_list":{"items":[{"name":"Item 1 Name","currency":"EUR","quantity":50,"price":"7.00"},{"name":"Item 2 Name","currency":"EUR","quantity":20,"price":"10.00"}]},"description":"Payment description"}]} 
PayPal\Core\PPHttpConnection: Adding header Content-Type: application/json 
PayPal\Core\PPHttpConnection: Adding header User-Agent: PayPalSDK/rest-sdk-php 0.6.0 (lang=PHP;v=5.3.3;bit=64;os=*******************;machine=x86_64;openssl=************;curl=7.15.5) 
PayPal\Core\PPHttpConnection: Adding header Authorization: Bearer gSJ0P0foNQcWg3V76VjvSietNLejlF4-kfSFNkTcyCk 
PayPal\Core\PPHttpConnection: Adding header PayPal-Request-Id: 773226502471885139220716063968 

Любая помощь очень высоко ценится.

Заранее спасибо.

+0

Я понял это. Я передавал число в Amount-> SetDetails, а не в объект, который требовался. // ### Сумма $ amount = new Amount(); $ amount-> setCurrency ($ currency) -> setTotal (number_format (($ subtotal + ($ shipping + $ tax)), 2)) -> setDetails ($ subtotal); Одна вещь, которая помогла мне разобраться в этом, заключалась в сравнении журналов образца PayPal (/sample/PayPal.log) с журналом моей собственной попытки. Авария предотвращена! –

ответ

1

Я понял. Я передавал число в Amount-> SetDetails, а не в объект, который требовался.

// ### Amount 
$amount = new Amount(); 
$amount->setCurrency($currency) 
->setTotal(number_format(($subtotal + ($shipping + $tax)), 2)) 
->setDetails($subtotal); 

Одна вещь, которая помогла мне понять это сравнивал журналы образца PayPal (/sample/PayPal.log) с бревном моей собственной попытки.

Авария предотвращена!