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.