Cum să procesați cardurile de credit cu PayPal Payments Pro folosind PHP

PayPal este una dintre cele mai populare platforme de procesare a plăților disponibile astăzi din mai multe motive. Ușurința în utilizare și conectarea sa la platforma eBay sunt doar vârful aisbergului. În timp ce una dintre caracteristicile sale cele mai populare este abilitatea de a vă conecta pur și simplu la contul dvs. PayPal pentru a trimite plăți, comercianții care utilizează PayPal pot accepta și carduri de credit în mod direct, la fel ca o soluție tradițională a contului de comerciant,. 

PayPal numește această soluție Payments Pro și vă voi arăta exact cum puteți procesa cardurile de credit direct cu API-ul PayPal folosind API-urile serviciului de plăți Pro Pro.


Pasul 1: Configurați structura directorului

Primul lucru care îmi place să fac cu orice proiect este de a crea o structură de bază organizată pentru proiect. În acest caz, structura noastră este foarte simplă, deoarece proiectul nostru va consta doar din două fișiere:

 După cum probabil ați ghicit, vom stoca informațiile noastre de configurare în config.php și de fapt vom gestiona codul de procesare în proces-credit-card.php.


Pasul 2: Configurați fișierul Config

Al nostru /includes/config.php fișierul va găzdui valorile noastre pentru informațiile API PayPal de care avem nevoie, inclusiv URL-ul punctului final, versiunea API și numele de utilizator API, parola și semnătura pe care o vom folosi. 

 // Setați nisipul (modul test) la true / false. $ sandbox = TRUE; // Setați versiunea și acreditările API-ului 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';

Revizuirea config.php cod, puteți vedea că mai întâi setăm o variabilă pentru $ Sandbox.  Pentru moment, vom lăsa asta ADEVĂRAT deoarece dorim să interacționăm cu serverele de testare (test) ale PayPal pentru dezvoltare. Va trebui să vă amintiți să schimbați acest lucru FALS când sunteți gata să vă mutați proiectul pe un server live.

Apoi, pe baza valorii $ Sandbox setăm valori pentru alte variabile pentru informațiile API. Veți dori doar să completați aceste poziționări cu propriile dvs. detalii în consecință. Acum suntem pregătiți să construim scriptul de procesare a cardurilor de credit.


Pasul 3: Creați o solicitare API

Acum putem începe să ne construim proces-credit-card.php pagină. Primul lucru pe care trebuie să-l facem aici este includerea fișierului nostru de configurare.

 // Includeți fișierul de configurare requ_once ('include / config.php');

Apoi, trebuie să construim un șir de nume-valoare pereche care include toate datele necesare pentru a trimite PayPal pentru a procesa această plată. Un șir de nume-valoare-pereche arată exact ca ceva pe care l-ați putea vedea când transmiteți date prin parametrii URL. Trebuie doar să ne asigurăm că numele parametrilor sunt în toate limitele.

PARAM1 = valoare1 & PARAM2 = valoare2 & PARAM3 = valoare3 ... etc.

Deci, s-ar putea sa te gandesti la tine "Cum stiu ce sa folosesc pentru nume de variabile in sirul meu?" Vestea buna este PayPal ofera o documentatie foarte buna in acest sens. Putem vedea toate variabilele posibile pe care le putem transmite PayPal, inclusiv detalii despre clienți, detalii despre comenzi și informații despre cărțile de credit. Unele dintre aceste informații sunt necesare pentru a procesa o plată, însă multe dintre variabilele disponibile sunt opționale. În scopuri demonstrative, vom păstra acest lucru destul de simplu și doar treci informațiile necesare.

Vom stoca toți parametrii solicitării într-o matrice, astfel încât să putem trece prin această matrice pentru a genera cu ușurință șirul NVP. Toate solicitările necesită implicit următorii parametri:

  • METODĂ - Numele apelului API pe care îl faci.
  • UTILIZATOR - Numele de utilizator API
  • PWD - Parola API
  • SEMNĂTURĂ - Semnătura API
  • VERSIUNE - Versiunea API

Apoi, puteți să consultați documentația PayPal pentru orice solicitare API pe care doriți să o faceți pentru a vedea ce alți parametri ar trebui să fie inclusi. De dragul acestei demonstrații, matricea noastră va fi construită după cum urmează.

 // Salvează paramurile cererii într-o matrice $ request_params = array ('METHOD' => 'DoDirectPayment', 'USER' => $ api_username, 'PWD' => $ api_password, 'SIGNATURE' => $ api_signature, 'VERSION' = > $ api_version, 'PAYMENTACTION' => 'Vânzare', 'IPADDRESS' => $ _SERVER ['REMOTE_ADDR'], 'CREDITCARDTYPE' => 'MasterCard', 'ACCT' => '5522340006063638', 'EXPDATE' 022013 ',' CVV2 '=>' 456 ',' FIRSTNAME '=>' Tester ',' LASTNAME '=>' Testerson ',' STREET '=> ',' STATE '=>' FL ',' COUNTRYCODE '=>' US ',' ZIP '=>' 33770 ',' AMT '=>' 100.00 ',' CURRENCYCODE ' => 'Testarea plăților Pro');

Veți observa că folosim variabilele noastre config config.php, și apoi încărc doar datele statice pentru celelalte valori. Într-un proiect standard, cu toate acestea, probabil veți fi populat de aceste valori cu date de formă, date de sesiune sau cu altă formă de date dinamice.

Acum, putem pur și simplu prin această matrice să generăm șirul NVP.

 // Faceți buclă prin matricea $ request_params pentru a genera șirul NVP. $ nvp_string = "; foreach ($ request_params ca $ var => $ val) $ nvp_string. = '&'. $ var. '=' urlencode ($ val);

Valoarea a $ nvp_string este acum:

METODA = DoDirectPayment&USER = sandbo ***** e.com&PWD = 12 *** 74&SEMNĂTURĂ = AiKZ ****** 6W18v&VERSION = 85,0&PAYMENTACTION = Vânzare&IPADDRESS = 72.135.111.9&CREDITCARDTYPE = MasterCard&ACCT = 5522340006063638&EXPDATE = 022013&CVV2 = 456&FIRSTNAME = Tester&LASTNAME = Testerson&STREET = 707 + W + Bay + Unitate&CITY = Largo&STAT = FL&COUNTRYCODE = SUA&ZIP = 33770&AMT = 100.00&CURRENCYCODE = USD&DESC = Testare + Plăți + Pro

Acest șir este ceea ce vom trimite PayPal pentru solicitarea noastră.


Pasul 4: Trimiteți solicitarea HTTP către PayPal

Acum, dacă șirul nostru NVP este gata de plecare, trebuie să trimitem acest lucru serverului PayPal pentru a fi procesat corespunzător. Pentru a face acest lucru, vom folosi metodele PHP CURL.

 // Trimiteți șirul NVP către PayPal și stocați răspunsul $ 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); $ rezultat = curl_exec ($ curl); curl_close ($ curl);

Aici puteți vedea că am configurat CURL cu câteva opțiuni simple și ne folosim $ api_endpoint și $ nvp_string variabile în consecință.

Aceste date vor fi trimise către PayPal și vom primi răspunsul API înapoi în contul nostru $ rezultat astfel încât să vedem rezultatul și să trimitem utilizatorului o pagină de succes sau de eșec pe baza faptului dacă apelul a fost sau nu reușit sau nu.


Pasul 5: Parsează răspunsul API

Valoarea la care ne întoarcem $ rezultat din pasul anterior va fi un șir NVP exact ca cel pe care l-am generat și trimis la PayPal. Atunci când executăm scriptul nostru actual, primim un răspuns de succes care arată în felul următor:

TIMESTAMP = 2012% 2d04% 2d16T07% 3a59% 3a36Z & CORRELATIONID = 9eb40cd84a7d3 & ACK = Succes & VERSION = 85% 2e0 & CONSTRUI = 2764190 & AMT = 100% 2e00 & CURRENCYCODE = USD & AVSCODE = X & CVV2MATCH = M & transactionId = 160896645A8111040

O modalitate foarte simplă de a analiza acest rezultat este utilizarea PHP parse_str () funcţie. Aceasta va încărca toate datele de răspuns în variabilele PHP care se potrivesc cu numele și valorile returnate în răspuns. De exemplu, dacă facem următoarele:

 // Parsează răspunsul API $ nvp_response_array = parse_str ($ result);

Vom ajunge la urmatoarele variabile PHP:

  • $ TIMESTAMP
  • $ CORRELATIONID
  • $ ACK
  • $ VERSION
  • $ BUILD
  • $ AMT
  • $ CURRENCYCODE
  • $ AVSCODE
  • $ CVV2MATCH
  • $ transactionId

Putem apoi să folosim aceste variabile pentru a prezenta informații clienților noștri, pentru a popula valori în chitanțele de e-mail pe care dorim să le generăm, pentru a actualiza informațiile bazei de date sau pentru orice altceva ce trebuie să facem după finalizarea unei comenzi.

$ ACK este ceea ce ne va spune dacă apelul API a fost sau nu de succes. Valorile pentru $ ACK poate fi:

  • Succes
  • SuccessWithWarning
  • eșec
  • FailureWithWarning
  • Puteți pur și simplu să vă redirecționați utilizatorul în cazul în care trebuie să meargă și să îi arate informații bazate pe această valoare.

    Un apel API eșuat va avea ca rezultat parametrii suplimentari care oferă informații despre motivul pentru care tranzacția a eșuat. Dacă am rula din nou acest test cu un număr de card de credit nevalid, de exemplu, primesc următorul răspuns din PayPal:

TIMESTAMP = 2012% 2d04% 2d16T08% 3a08% 3a52Z & CORRELATIONID = 590d41dbb31e0 & ACK = Failure & VERSION = 85% 2e0 & CONSTRUI = 2764190 & L_ERRORCODE0 = 10527 & L_SHORTMESSAGE0 = invalid% 20Data & L_LONGMESSAGE0 = Acest% 20transaction% 20cannot% 20be% 20processed% 2e% 20Please% 20enter% 20a% 20valid% 20credit% 20card% 20number% 20and% 20type% 2e & L_SEVERITYCODE0 = Eroare & AMT = 100% 2e00 & CURRENCYCODE = USD

Acum, când o folosim parse_str () sfarsim cu urmatoarele variabile PHP disponibile:

  • $ TIMESTAMP
  • $ CORRELATIONID
  • $ ACK
  • $ VERSION
  • $ BUILD
  • $ L_ERRORCODE0
  • $ L_SHORTMESSAGE0
  • $ L_LONGMESSAGE0
  • $ L_SEVERITYCODE0
  • $ AMT
  • $ CURRENCYCODE

În acest caz, $ ACK arată o eroare, astfel încât știm că apelul nu a reușit și putem verifica parametrii de eroare pentru mai multe detalii despre ceea ce nu a mers bine.

Opțiunea de parsare suplimentară a datelor

În timp ce metoda anterioară de parsare a răspunsului funcționează foarte bine, personal prefer să lucrez cu matrice de date. Ca atare, folosesc următoarea funcție pentru a converti răspunsul PayPal într-o matrice.

 // Funcție pentru a converti șirul NTP la o funcție de matrice NVPToArray ($ NVPString) $ proArray = array (); în timp ce (strlen ($ NVPString)) // nume $ keypos = strpos ($ NVPString, '='); $ keyval = substr ($ NVPString, 0, $ keypos); // valoarea $ valuepos = strpos ($ NVPString, '&')? strpos ($ NVPString, '&'): strlen ($ NVPString); $ valval = substr ($ NVPString, $ keypos + 1, $ valuepos- $ keypos-1); // decodare $ proArray [$ keyval] = urldecode ($ valval); $ NVPString = substr ($ NVPString, $ valoarepos + 1, strlen ($ NVPString));  return $ proArray; 

Acest lucru îmi permite să văd toate datele de răspuns disponibile accesând pur și simplu conținutul matricei:

Dacă mi-am rula script-ul din nou acum am următorul rezultat pe ecran:

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

Și dacă aș face din nou o eroare, obțin următoarele:

 Array ([TIMESTAMP] => 2012-04-16T08: 18: 46Z [CORRELATIONID] => 2db182b912a9 [ACK] => Eșec [VERSION] => 10527 [L_SHORTMESSAGE0] => 2764190 [L_ERRORCODE0] > Date nevalide [L_LONGMESSAGE0] => Această tranzacție nu poate fi procesată Introduceți un număr și un tip de card de credit valabil. [L_SEVERITYCODE0] => Eroare [AMT] => 100.00 [CURRENCYCODE]

Puteți vedea că aceasta este o matrice de rezultate drăguță și ușor de navigat care conține tot ceea ce am putea avea nevoie pentru a muta utilizatorul prin aplicația noastră și actualizarea surselor de date după cum este necesar.


Concluzie

După cum puteți vedea, procesarea cardurilor de credit folosind PayPal Payments Pro este de fapt o procedură foarte simplă. Acesta implică doar câțiva pași standardi pentru a lucra cu serviciile web API, iar o cunoaștere de bază a lucrului cu datele din matrice poate ajuta și ele.

Noroc și codificare fericită!

Cod