Creare un pagamento rapido con PayPal SDK PHP

Express Checkout PayPal è un metodo di pagamento rapido, che consente agli utenti di effettuare pagamenti in pochi click.

Pubblicato da ,
Ultima modifica

In questo articolo vedremo come integrare un pagamento rapido (Express Checkout) PayPal in un sito web, usando l'apposito SDK PHP, la pagina di riferimento è la seguente:

La prima cosa da fare per poter creare un pagamento rapido è quello di scaricare PayPal PHP Merchant SDK disponibile su GitHub, poichè si tratta di una cartella compressa, estraiamo tutti i file e copiamoli in una cartella qualsiasi del nostro progetto.

Per poter funzionare correttamente bisogna generare un file di autoload usando composer, per fare ciò apriamo il Prompt dei comandi e posizioniamoci all'interno della cartella in cui abbiamo salvato i file della repository PayPal PHP Merchant SDK usando il seguente comando

cd //percorso cartella

e poi il lanciamo il comando

composer update

alla fine del processo verrà creata una cartella vendor contenente il file autoload.php.

A questo punto possiamo sviluppare l'applicazione PHP per effettuare un pagamento rapito in modalità sandbox

index.php

<?php
define('__ROOT__', dirname(__FILE__));
require_once (__ROOT__ . '/vendor/autoload.php');

use PayPal\Service\PayPalAPIInterfaceServiceService;
use PayPal\EBLBaseComponents\PaymentDetailsType;
use PayPal\EBLBaseComponents\PaymentDetailsItemType;
use PayPal\CoreComponentTypes\BasicAmountType;
use PayPal\EBLBaseComponents\SetExpressCheckoutRequestDetailsType;
use PayPal\PayPalAPI\SetExpressCheckoutRequestType;
use PayPal\PayPalAPI\SetExpressCheckoutReq;

$config = array(
    'mode' => 'sandbox', //'mode'=>'live' per modalità non sandbox
    'acct1.UserName' => '<Username>',
    'acct1.Password' => '<Password>',
    'acct1.Signature' => '<Signature>'
);
$paypalService = new PayPalAPIInterfaceServiceService($config);
$paymentDetails = new PaymentDetailsType();

$itemDetails = new PaymentDetailsItemType();
$itemDetails->Name = 'item';
$itemAmount = '1.00';
$itemDetails->Amount = $itemAmount;
$itemQuantity = '1';
$itemDetails->Quantity = $itemQuantity;

$paymentDetails->PaymentDetailsItem[0] = $itemDetails;

$orderTotal = new BasicAmountType();
$orderTotal->currencyID = 'USD';
$orderTotal->value = $itemAmount * $itemQuantity;

$paymentDetails->OrderTotal = $orderTotal;
$paymentDetails->PaymentAction = 'Sale';

$setECReqDetails = new SetExpressCheckoutRequestDetailsType();
$setECReqDetails->PaymentDetails[0] = $paymentDetails;
$setECReqDetails->CancelURL = 'http://localhost/cancelUrl.php';
$setECReqDetails->ReturnURL = 'http://localhost/returnUrl.php';

$setECReqType = new SetExpressCheckoutRequestType();
$setECReqType->Version = '104.0';
$setECReqType->SetExpressCheckoutRequestDetails = $setECReqDetails;

$setECReq = new SetExpressCheckoutReq();
$setECReq->SetExpressCheckoutRequest = $setECReqType;

$setECResponse = $paypalService->SetExpressCheckout($setECReq);

if (strtoupper($setECResponse->Ack) == 'SUCCESS')
{
    $token = $setECResponse->Token;
    header("Location: https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=" . $token);
}

Username, Password e Signature sono le Credenziali API dell'account Sandbox, è possibile crearne uno nella Dashboard del sito Developer Paypal alla sezione Sandbox > Accounts, CancellUrl e ReturnUrl sono rispettivamente l'url se il pagamento viene annullato e l'url di ritorno quando l'utente completa il pagamento, le variabili

  • $itemDetails->Name
  • $itemDetails->Amount
  • $itemDetails->Quantity
  • $orderTotal->currencyID

sono valori dinamici e sono rispettivamente il nome, il totale del pagamento, la quantità e la valuta, $setECResponse->Token è il token che viene generato per poter creare l'url di pagamento.

Per recuperare i dati del pagamento completato si usa il token generato in precedenza, usandolo come parametro per la classe PayPal\PayPalAPI\GetExpressCheckoutDetailsRequestType

returnUrl.php

<?php
define('__ROOT__', dirname(__FILE__));
require_once (__ROOT__ . '/vendor/autoload.php');

use PayPal\PayPalAPI\GetExpressCheckoutDetailsReq;
use PayPal\PayPalAPI\GetExpressCheckoutDetailsRequestType;
use PayPal\Service\PayPalAPIInterfaceServiceService;

$config = array(
    'mode' => 'sandbox', //'mode'=>'live' per modalità non sandbox
    'acct1.UserName' => '<Username>',
    'acct1.Password' => '<Password>',
    'acct1.Signature' => '<Signature>'
);

$getExpressCheckoutDetailsRequest = new GetExpressCheckoutDetailsRequestType($token); //<< token
$getExpressCheckoutReq = new GetExpressCheckoutDetailsReq();
$getExpressCheckoutReq->GetExpressCheckoutDetailsRequest = $getExpressCheckoutDetailsRequest;
$paypalService = new PayPalAPIInterfaceServiceService($config);

try
{

    $getECResponse = $paypalService->GetExpressCheckoutDetails($getExpressCheckoutReq);
    echo '<pre>';
    print_r($getECResponse );
    echo '</pre>';

}
catch(Exception $ex)
{
    exit;
}

$getECResponse è l'oggetto con i dati del pagamento effettuato.