Integrazione di Adaptive Payments SDK PHP di Paypal

Adaptive Payments è prodotto Paypal che consente di creare dei pagamenti complessi, come inviare denaro contemporaneamente a più destinatari diversi

Pubblicato da ,
Ultima modifica

I "pagamenti adattivi" gestiscono i pagamenti tra un mittente di un pagamento e uno o più destinatari del pagamento, questa è la pagina della documentazione ufficiale:

mentre questo è il pacchetto sdk php da scaricare per usare Adaptive Payments.

Come si evince dalla documentazione di questo prodotto Paypal:

 "Importante: Adaptive Payments è ora un prodotto a rilascio limitato. È limitato a selezionare partner per casi d'uso approvati e non deve essere utilizzato per nuove integrazioni senza la guida di PayPal."

pertanto per utilizzare questo prodotto è necessaria l'approvazione da parte di Paypal.

Quindi supponendo di aver tutte le carte in regola per poter utilizzare questo prodotto, vediamo come integrarlo in un progetto in modalità sandbox.

Assicuriamoci di aver installato sulla nostra macchina di sviluppo Composer il gestore delle dipendenze per PHP.

Scarichiamo il file zip adaptivepayments-sdk-php disponibile su GitHub, decomprimiamolo e copiamo tutti i file in una cartella del nostro progetto.

Adesso usando il Prompt dei comandi andiamo a posizionarci in questa cartella, il comando è questo:

 cd <percorso cartella>

usando il proprio percorso della cartella, e poi lanciare il comando:

  composer update

se non si sono verificati errori durante il processo di download, possiamo adesso utilizzare il pacchetto sdk php per i pagamenti adattivi.

Creo due file all'interno della cartella del pacchetto sdk, index.php e response.php, il primo mi servirà per generare la chiave di pagamento mentre il secondo mi darà il risultato della transazione.

index.php

 <?php
namespace PayPal\Service;

define('__ROOT__', dirname(__FILE__));
require __ROOT__ . '/vendor/autoload.php';

use PayPal\Types\AP\PayRequest;
use PayPal\Types\AP\Receiver;
use PayPal\Types\AP\ReceiverList;
use PayPal\Types\Common\RequestEnvelope;

$payRequest = new PayRequest();
$receiver   = array();

$receiver[0]         = new Receiver();
$receiver[0]->amount = "0.10";
$receiver[0]->email  = "< email n°1 ricevitore pagamento >";

$receiver[1]          = new Receiver();
$receiver[1]->amount  = "2.00";
$receiver[1]->email   = "< email n°2 ricevitore pagamento >";
$receiver[1]->primary = "true";

$receiverList             = new ReceiverList($receiver);
$payRequest->receiverList = $receiverList;
$payRequest->memo         = "Descrizione Acquisto";
$payRequest->feesPayer    = "EACHRECEIVER";

$requestEnvelope             = new RequestEnvelope("en_US");
$payRequest->requestEnvelope = $requestEnvelope;

$payRequest->actionType   = "PAY";
$payRequest->cancelUrl    = "http://localhost/test/adaptivepayments/cancelUrl.php";
$payRequest->returnUrl    = "http://localhost/test/adaptivepayments/response.php";
$payRequest->currencyCode = "EUR";
$payRequest->ipAddress    = $_SERVER['REMOTE_ADDR']; // ip andress navigator

$sdkConfig = array(
    "mode" => "sandbox", //change mode 'live'
    "acct1.UserName" => "< UserName >",
    "acct1.Password" => "< Password >",
    "acct1.Signature" => "< Signature >",
    "acct1.AppId" => "APP-80W284485P519543T" // ID APP modalità Sandbox
);

$adaptivePaymentsService = new AdaptivePaymentsService($sdkConfig);
$payResponse             = $adaptivePaymentsService->Pay($payRequest);
$payKey                  = $payResponse->payKey;

header("Location: https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey=" . $payKey);
?>

questo file include il file vendor/autoload.php per il caricamento automatico di tutte le classi, in questo esempio ci sono due ricevitori del pagamenti di cui uno è impostato su "ricevitore primario" ( $receiver[1]->primary = "true"; ), essi sono due account Paypal Sandbox, UserName, Password e Signature sono le Credenziali API dell'account Sandbox proprietario dell'applicazione, è possibile crearne uno nella Dashboard del sito Developer Paypal alla sezione Sandbox > Accounts, cancelUrlreturnUrl sono rispettivamente l'url se il pagamento viene annullato e l'url della response del pagamento, $payKey è la chiave di pagamento.

response.php

 <?php

namespace PayPal;

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

use PayPal\Types\Common\RequestEnvelope;
use PayPal\Types\AP\PaymentDetailsRequest;
use PayPal\Service\AdaptivePaymentsService;

$requestEnvelope               = new RequestEnvelope("en_US");
$paymentDetailsRequest         = new PaymentDetailsRequest($requestEnvelope);
$paymentDetailsRequest->payKey = $payKey; // <== chiave di pagamento

$sdkConfig = array(
    "mode" => "sandbox", //change mode 'live'
    "acct1.UserName" => "< UserName >",
    "acct1.Password" => "< Password >",
    "acct1.Signature" => "< Signature >",
    "acct1.AppId" => "APP-80W284485P519543T" // ID APP modalità Sandbox
);


$adaptivePaymentsService = new AdaptivePaymentsService($sdkConfig);
$paymentDetailsResponse  = $adaptivePaymentsService->PaymentDetails($paymentDetailsRequest);

echo "<pre>";
print_r($paymentDetailsResponse);

?>

$payKey è la chiave di pagamento che abbiamo generato prima, UserName, Password e Signature sono le Credenziali API dell'account Sandbox proprietario dell'applicazione, $paymentDetailsResponse è il dettaglio del pagamento.