Come elaborare carte di credito con PayPal Payments Pro utilizzando PHP

PayPal è una delle piattaforme di elaborazione dei pagamenti più popolari oggi disponibili per molte ragioni. La sua facilità d'uso e la sua connessione alla piattaforma di eBay sono solo la punta dell'iceberg. Mentre una delle sue caratteristiche più popolari è la possibilità di accedere semplicemente al tuo account PayPal per inviare i pagamenti, i commercianti che utilizzano PayPal possono anche accettare carte di credito direttamente come una soluzione tradizionale di conto commerciale fornirebbe. 

PayPal chiama questa soluzione Payments Pro e ti mostrerò esattamente come puoi elaborare le carte di credito direttamente con l'API di PayPal utilizzando le API del servizio web Payments Pro.


Passaggio 1: installazione della struttura della directory

La prima cosa che mi piace fare con qualsiasi progetto è creare una struttura di base organizzata per il progetto. In questo caso, la nostra struttura è molto semplice in quanto il nostro progetto consisterà in soli 2 file:

 Come avrai intuito, memorizzeremo le informazioni di configurazione in config.php e in realtà gestiremo il codice di elaborazione processo-credit-card.php.


Passaggio 2: installazione del file di configurazione

Nostro /includes/config.php il file ospiterà i nostri valori per le informazioni sull'API di PayPal di cui abbiamo bisogno, inclusi l'URL del punto finale, la versione dell'API e il nome utente, la password e la firma dell'API che utilizzeremo. 

 // Imposta sandbox (modalità test) su true / false. $ sandbox = TRUE; // Imposta la versione e le credenziali dell'API PayPal. $ api_version = '85 .0 '; $ api_endpoint = $ sandbox? 'https://api-3t.sandbox.paypal.com/nvp': 'https://api-3t.paypal.com/nvp'; $ api_username = $ sandbox? "SANDBOX_USERNAME_GOES_HERE": "LIVE_USERNAME_GOES_HERE"; $ api_password = $ sandbox? "SANDBOX_PASSWORD_GOES_HERE": "LIVE_PASSWORD_GOES_HERE"; $ api_signature = $ sandbox? "SANDBOX_SIGNATURE_GOES_HERE": "LIVE_SIGNATURE_GOES_HERE";

Rivedere il config.php codice, puoi vedere che prima impostiamo una variabile per $ sandbox.  Per ora, lasceremo questo a VERO perché vogliamo interagire con i server sandbox (test) di PayPal a fini di sviluppo. Dovrai ricordarti di cambiarlo FALSE quando sei pronto per spostare il tuo progetto su un server live.

Quindi, in base al valore di $ sandbox stiamo impostando valori su altre variabili per le nostre informazioni API. Dovrai semplicemente riempire quei segnaposto con i tuoi dettagli di conseguenza. Ora siamo pronti per creare il nostro script di elaborazione delle carte di credito.


Passaggio 3: creare una richiesta API

Ora possiamo iniziare a costruire il nostro processo-credit-card.php pagina. La prima cosa che dobbiamo fare qui è includere il nostro file di configurazione.

 // Include il file di configurazione require_once ('includes / config.php');

Successivamente, abbiamo bisogno di costruire una stringa nome-valore-coppia che includa tutti i dati di cui abbiamo bisogno per inviare PayPal al fine di elaborare questo pagamento. Una stringa nome-valore-coppia appare come qualcosa che potresti vedere quando passi dati attraverso i parametri URL. Dobbiamo solo assicurarci che i nostri nomi dei parametri siano tutti maiuscoli.

PARAM1 = valore1 e PARAM2 = valore2 e PARAM3 = valore3 ... ecc.

Quindi, potresti pensare a te stesso "Come faccio a sapere cosa usare per i miei nomi variabili nella mia stringa?" La buona notizia è che PayPal fornisce un'ottima documentazione su questo. Possiamo vedere tutte le variabili possibili che possiamo passare a PayPal, inclusi i dettagli del cliente, i dettagli degli articoli dell'ordine e le informazioni sulla carta di credito. Alcune di queste informazioni sono necessarie per elaborare un pagamento, ma molte delle variabili disponibili sono facoltative. A scopo dimostrativo, manterremo questo piuttosto semplice e semplicemente passeremo le informazioni richieste.

Memorizzeremo tutti i nostri parametri di richiesta in una matrice in modo che possiamo scorrere attraverso questa matrice per generare facilmente la nostra stringa NVP. Tutte le richieste richiedono i seguenti parametri per impostazione predefinita:

  • METODO - Il nome della chiamata API che stai creando.
  • UTENTE - Il nome utente dell'API
  • PWD - La password dell'API
  • FIRMA - La firma dell'API
  • VERSIONE - La versione dell'API

Quindi puoi fare riferimento alla documentazione di PayPal per qualsiasi richiesta API che desideri fare per vedere quali altri parametri dovrebbero essere inclusi. Per il bene di questa dimostrazione, il nostro array sarà costruito come segue.

 // Memorizza i parametri di richiesta in una matrice $ request_params = array ('METHOD' => 'DoDirectPayment', 'USER' => $ api_username, 'PWD' => $ api_password, 'SIGNATURE' => $ api_signature, 'VERSION' = > $ api_version, 'PAYMENTACTION' => 'Vendita', 'IPADDRESS' => $ _SERVER ['REMOTE_ADDR'], 'CREDITCARDTYPE' => 'MasterCard', 'ACCT' => '5522340006063638', 'EXPDATE' => ' 022013 ',' CVV2 '=>' 456 ',' FIRSTNAME '=>' Tester ',' LASTNAME '=>' Testerson ',' STREET '=>' 707 W. Bay Drive ',' CITY '=>' Largo ',' STATE '=>' FL ',' COUNTRYCODE '=>' US ',' ZIP '=>' 33770 ',' AMT '=>' 100.00 ',' CURRENCYCODE '=>' USD ',' DESC ' => 'Testing Payments Pro');

Noterai che stiamo usando le nostre variabili di configurazione da config.php, e quindi sto semplicemente caricando i dati statici per gli altri valori. In un progetto standard, tuttavia, è probabile che vengano popolati questi valori con dati di moduli, dati di sessione o altre forme di dati dinamici.

Ora possiamo semplicemente scorrere questo array per generare la nostra stringa NVP.

 // Passa attraverso l'array $ request_params per generare la stringa NVP. $ nvp_string = "; foreach ($ request_params as $ var => $ val) $ nvp_string. = '&'. $ var. '='. urlencode ($ val);

Il valore di $ nvp_string è ora:

METODO = DoDirectPayment&USER = sandbo ***** e.com&PWD = 12 *** 74&FIRMA = AiKZ ****** 6W18v&VERSION = 85,0&Paymentaction = Vendita&IPADDRESS = 72.135.111.9&CREDITCARDTYPE = MasterCard&ACCT = 5522340006063638&EXPDATE = 022.013&CVV2 = 456&FIRSTNAME = Tester&LASTNAME = Testerson&STREET = 707 + W + Bay + Unità&CITTA '= Largo&STATE = FL&COUNTRYCODE = US&ZIP = 33770&AMT = 100.00&CurrencyCode = USD&DESC = Test + Pagamenti + Pro

Questa stringa è ciò che invieremo a PayPal per la nostra richiesta.


Passaggio 4: inviare la richiesta HTTP a PayPal

Ora che la nostra stringa NVP è pronta, è necessario inviare questo al server PayPal per essere elaborato di conseguenza. Per fare ciò, utilizzeremo i metodi CURL di PHP.

 // Invia la stringa NVP a PayPal e salva la risposta $ curl = curl_init (); curl_setopt ($ curl, CURLOPT_VERBOSE, 1); curl_setopt ($ curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ curl, CURLOPT_TIMEOUT, 30); curl_setopt ($ curl, CURLOPT_URL, $ api_endpoint); curl_setopt ($ curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ curl, CURLOPT_POSTFIELDS, $ nvp_string); $ result = curl_exec ($ curl); curl_close ($ ricciolo);

Qui puoi vedere che abbiamo configurato CURL con alcune semplici opzioni e stiamo usando il nostro $ api_endpoint e $ nvp_string variabili di conseguenza.

Questi dati verranno inviati a PayPal e riceveremo la risposta API nel nostro $ result variabile in modo che possiamo vedere il risultato e inviare l'utente a una pagina di successo o di errore in base al fatto che la chiamata sia riuscita o meno.


Passaggio 5: analisi della risposta dell'API

Il valore in cui torniamo $ result dal passaggio precedente sarà una stringa NVP proprio come quella che abbiamo generato e inviata a PayPal. Quando eseguiamo il nostro script corrente otteniamo una risposta di successo che assomiglia a questo:

TIMESTAMP = 2.012% 2d04% 2d16T07% 3a59% 3a36Z & CorrelationId = 9eb40cd84a7d3 & ACK = Successo & VERSION = 85% 2E0 & Build = 2.764.190 & AMT = 100% 2e00 & CurrencyCode = USD & AVSCODE = X & CVV2MATCH = M & transactionID = 160896645A8111040

Un modo molto semplice per analizzare questo risultato è usare PHP parse_str () funzione. Questo caricherà tutti i dati di risposta in variabili PHP corrispondenti ai nomi e ai valori restituiti nella risposta. Ad esempio, se facciamo quanto segue:

 // Analizza la risposta API $ nvp_response_array = parse_str ($ result);

Avremmo accesso alle seguenti variabili PHP:

  • $ TIMESTAMP
  • $ CorrelationId
  • $ ACK
  • $ VERSION
  • $ BUILD
  • $ AMT
  • $ CurrencyCode
  • $ AVSCODE
  • $ CVV2MATCH
  • $ transactionID

Possiamo quindi continuare a utilizzare queste variabili per presentare le informazioni ai nostri clienti, compilare i valori nelle ricevute di posta elettronica che desideriamo generare, aggiornare le informazioni del database o qualsiasi altra cosa che dobbiamo fare una volta completato un ordine.

Il $ ACK valore è ciò che ci dirà se la chiamata API ha avuto successo o meno. Valori per $ ACK può essere:

  • Successo
  • SuccessWithWarning
  • Fallimento
  • FailureWithWarning
  • Puoi semplicemente reindirizzare il tuo utente dove devono andare e mostrare loro informazioni basate su questo valore.

    Una chiamata API non riuscita comporterà parametri aggiuntivi che forniscono informazioni sul motivo per cui la transazione ha avuto esito negativo. Se eseguo nuovamente questo test con un numero di carta di credito non valido, ad esempio, ricevo la seguente risposta da PayPal:

TIMESTAMP = 2.012% 2d04% 2d16T08% 3a08% 3a52Z & CorrelationId = 590d41dbb31e0 & ACK = Failure & VERSION = 85% 2E0 & Build = 2.764.190 & L_ERRORCODE0 = 10527 & L_SHORTMESSAGE0 = non valido% 20Data & L_LONGMESSAGE0 = Questa% 20transaction% 20cannot% 20be% 20processed% 2e% 20Please% 20enter% 20a% 20valid% 20credit% 20card% 20number% 20and% 20type% 2e & L_SEVERITYCODE0 = Errore & AMT = 100% 2e00 & CurrencyCode = USD

Ora, quando usiamo parse_str () finiamo con le seguenti variabili PHP a nostra disposizione:

  • $ TIMESTAMP
  • $ CorrelationId
  • $ ACK
  • $ VERSION
  • $ BUILD
  • $ L_ERRORCODE0
  • $ L_SHORTMESSAGE0
  • $ L_LONGMESSAGE0
  • $ L_SEVERITYCODE0
  • $ AMT
  • $ CurrencyCode

In questo caso, $ ACK mostra un errore, quindi sappiamo che la chiamata non ha avuto esito positivo e possiamo controllare i parametri di errore per maggiori dettagli su cosa è andato storto.

Opzione di analisi dei dati aggiuntiva

Mentre il precedente metodo di analisi della risposta funziona bene, personalmente preferisco lavorare con gli array di dati. Come tale, utilizzo la seguente funzione per convertire la risposta di PayPal in un array.

 // Funzione per convertire una stringa NTP in una funzione array NVPToArray ($ NVPString) $ proArray = array (); while (strlen ($ NVPString)) // nome $ keypos = strpos ($ NVPString, '='); $ keyval = substr ($ NVPString, 0, $ keypos); // valore $ valuepos = strpos ($ NVPString, '&')? strpos ($ NVPString, '&'): strlen ($ NVPString); $ valval = substr ($ NVPString, $ keypos + 1, $ valuepos- $ keypos-1); // decodifica del respose $ proArray [$ keyval] = urldecode ($ valval); $ NVPString = substr ($ NVPString, $ valuepos + 1, strlen ($ NVPString));  return $ proArray; 

Questo mi permette di vedere tutti i dati di risposta disponibili semplicemente guardando il contenuto dell'array:

Se eseguo di nuovo il mio script ora ottengo il seguente risultato sullo schermo:

 Array ([TIMESTAMP] => 2012-04-16T08: 15: 41Z [CORRELATIONID] => 9a652cbabfdd9 [ACK] => Successo [VERSION] => 85.0 [BUILD] => 2764190 [AMT] => 100.00 [CURRENCYCODE] = > USD [AVSCODE] => X [CVV2MATCH] => M [TRANSACTIONID] => 6VR832690S591564M)

E se dovessi causare nuovamente un errore ottengo il seguente:

 Array ([TIMESTAMP] => 2012-04-16T08: 18: 46Z [CORRELATIONID] => 2db182b912a9 [ACK] => Errore [VERSION] => 85.0 [BUILD] => 2764190 [L_ERRORCODE0] => 10527 [L_SHORTMESSAGE0] = > Dati non validi [L_LONGMESSAGE0] => Questa transazione non può essere elaborata. Inserisci un numero e un tipo di carta di credito validi. [L_SEVERITYCODE0] => Errore [AMT] => 100.00 [CURRENCYCODE] => USD)

Si può vedere che questo è un array di risultati piacevole, facile da navigare che contiene tutto ciò di cui potremmo aver bisogno per spostare l'utente attraverso la nostra applicazione e aggiornare le fonti di dati come necessario.


Conclusione

Come puoi vedere, l'elaborazione delle carte di credito tramite PayPal Payments Pro è in realtà una procedura molto semplice. Richiede solo alcuni passaggi standard per lavorare con i servizi web API e una conoscenza di base del lavoro con i dati dell'array può essere d'aiuto.

Buona fortuna e buona programmazione!