jeudi 27 avril 2017

Paypal REST API - Error: JSON Parse error: Unexpected EOF

I am using following API code to make advanced paypal integration:

<?php

// # Create Payment using PayPal as payment method
// This sample code demonstrates how you can process a
// PayPal Account based Payment.
// API used: /v1/payments/payment

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;

// ### Payer
// A resource representing a Payer that funds a payment
// For paypal account payments, set payment method
// to 'paypal'.
$payer = new Payer();
$payer->setPaymentMethod("paypal");

// ### Itemized information
// (Optional) Lets you specify item wise
// information
$item1 = new Item();
$item1->setName('Ground Coffee 40 oz')
    ->setCurrency('USD')
    ->setQuantity(1)
    ->setSku("123123") // Similar to `item_number` in Classic API
    ->setPrice(7.5);
$item2 = new Item();
$item2->setName('Granola bars')
    ->setCurrency('USD')
    ->setQuantity(5)
    ->setSku("321321") // Similar to `item_number` in Classic API
    ->setPrice(2);

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

// ### Additional payment details
// Use this optional field to set additional
// payment information such as tax, shipping
// charges etc.
$details = new Details();
$details->setShipping(1.2)
    ->setTax(1.3)
    ->setSubtotal(17.50);

// ### Amount
// Lets you specify a payment amount.
// You can also specify additional details
// such as shipping, tax.
$amount = new Amount();
$amount->setCurrency("USD")
    ->setTotal(20)
    ->setDetails($details);

// ### Transaction
// A transaction defines the contract of a
// payment - what is the payment for and who
// is fulfilling it.
$transaction = new Transaction();
$transaction->setAmount($amount)
    ->setItemList($itemList)
    ->setDescription("Payment description")
    ->setInvoiceNumber(uniqid());

// ### Redirect urls
// Set the urls that the buyer must be redirected to after
// payment approval/ cancellation.
$baseUrl = getBaseUrl();
$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl("$baseUrl/ExecutePayment.php?success=true")
    ->setCancelUrl("$baseUrl/ExecutePayment.php?success=false");

// ### Payment
// A Payment Resource; create one using
// the above types and intent set to 'sale'
$payment = new Payment();
$payment->setIntent("sale")
    ->setPayer($payer)
    ->setRedirectUrls($redirectUrls)
    ->setTransactions(array($transaction));


// For Sample Purposes Only.
$request = clone $payment;

// ### Create Payment
// Create a payment by calling the 'create' method
// passing it a valid apiContext.
// (See bootstrap.php for more on `ApiContext`)
// The return object contains the state and the
// url to which the buyer must be redirected to
// for payment approval
try {
    $payment->create($apiContext);
} catch (Exception $ex) {
    exit(1);
}

// ### Get redirect url
// The API response provides the url that you must redirect
// the buyer to. Retrieve the url from the $payment->getApprovalLink()
// method
$approvalUrl = $payment->getApprovalLink();

return $payment;

My html file with checkouts.js:

<html>
<head>
  <script src="http://ift.tt/2aJUIDS"></script>
 <script> 
    paypal.Button.render({

        env: 'sandbox',

        payment: function(resolve, reject) {

            var CREATE_PAYMENT_URL = '/paypal/CreatePaymentUsingPayPal.php';

            return paypal.request.post(CREATE_PAYMENT_URL)
                .then(function(data) { resolve(data.paymentID); })
                .catch(function(err) { reject(err); });
        },

        onAuthorize: function(data) {

            var EXECUTE_PAYMENT_URL = '/paypal/ExecutePayment.php';

            return paypal.request.post(EXECUTE_PAYMENT_URL,
                    { paymentID: data.paymentID, payerID: data.payerID })

                .then(function(data) { /* Go to a success page */ })
                .catch(function(err) { /* Go to an error page  */ });
        }

    }, '#paypal-button-server');
</script>
</head>
<body>
  <p>Paypal:</p>
  <div id="paypal-button-server"></div>
</body>
</html>

and when I try to make express checkout by clicking on paypal button I get:

Error: JSON Parse error: Unexpected EOF

what can be wrong with json if I use Paypal API? (My scripts based on Paypal API samples.)

$apiContext and getBaseUrl() method are defined in bootsrap.php.

Logs:

04-2017 03:26:31] PayPal\Core\PayPalHttpConnection : INFO: Response  Status     : 201
[27-04-2017 03:26:31] PayPal\Core\PayPalHttpConnection : DEBUG: Response Headers    : HTTP/1.1 201 Created, Date: Thu, 27 Apr 2017 15:26:31 GMT, Server: Apache, paypal-debug-id: a201c7bc10e43, Content-Language: *, Paypal-Debug-Id: a201c7bc10e43, Set-Cookie: X-PP-SILOVER=name%3DSANDBOX3.API.1%26silo_version%3D1880%26app%3Dplatformapiserv%26TIME%3D2802647641%26HTTP_X_PP_AZ_LOCATOR%3D; Expires=Thu, 27 Apr 2017 15:56:31 GMT; domain=.paypal.com; path=/; Secure; HttpOnly, Set-Cookie: X-PP-SILOVER=; Expires=Thu, 01 Jan 1970 00:00:01 GMT, Vary: Authorization, Content-Length: 967, Connection: close, Content-Type: application/json, , 
[27-04-2017 03:26:31] PayPal\Core\PayPalHttpConnection : DEBUG: Response Data   : {"id":"PAY-1KU75701VG630150ALEBA3JY","intent":"sale","state":"created","payer":{"payment_method":"paypal"},"transactions":[{"amount":{"total":"20.00","currency":"USD","details":{"subtotal":"17.50","tax":"1.30","shipping":"1.20"}},"description":"Payment description","invoice_number":"59020da6c110b","item_list":{"items":[{"name":"Ground Coffee 40 oz","sku":"123123","price":"7.50","currency":"USD","quantity":1},{"name":"Granola bars","sku":"321321","price":"2.00","currency":"USD","quantity":5}]},"related_resources":[]}],"create_time":"2017-04-27T15:26:31Z","links":[{"href":"http://ift.tt/2pqHk0S","rel":"self","method":"GET"},{"href":"http://ift.tt/2qjGzUo","rel":"approval_url","method":"REDIRECT"},{"href":"http://ift.tt/2pqAYyB","rel":"execute","method":"POST"}]}




Aucun commentaire:

Enregistrer un commentaire