Hoe Creditcards verwerken met PayPal Payments Pro met behulp van PHP

PayPal is om vele redenen een van de populairste betalingsverwerkingsplatforms die tegenwoordig beschikbaar zijn. Het gebruiksgemak en de verbinding met het eBay-platform vormen slechts het topje van de ijsberg. Hoewel een van de meest populaire functies de mogelijkheid is om eenvoudigweg in te loggen op uw PayPal-rekening om betalingen in te dienen, kunnen verkopers die PayPal gebruiken ook creditcards accepteren, net zoals een traditionele merchant account-oplossing zou bieden. 

PayPal noemt deze oplossing Payments Pro en ik zal u precies laten zien hoe u creditcards direct kunt verwerken met de API van PayPal met behulp van hun Payments Pro webservice API's.


Stap 1: Stel de directorystructuur in

Het eerste dat ik met elk project wil doen, is het creëren van een basisstructuur die voor het project is georganiseerd. In dit geval is onze structuur heel eenvoudig, omdat ons project uit slechts twee bestanden bestaat:

 Zoals je misschien al hebt geraden, slaan we onze configuratie-informatie op in config.php en verwerken we de verwerkingscode daadwerkelijk proces-credit-card.php.


Stap 2: Stel het configuratiebestand in

Onze /includes/config.php bestand bevat onze waarden voor de PayPal API-informatie die we nodig hebben, inclusief de eindpunt-URL, API-versie en onze API-gebruikersnaam, -wachtwoord en -handtekening die we zullen gebruiken. 

 // Stel sandbox (testmodus) in op true / false. $ sandbox = TRUE; // Stel de PayPal API-versie en -referenties in. $ 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';

Herziening van de config.php code, kunt u zien dat we eerst een variabele instellen $ zandbak.  Voorlopig laten we dit over aan TRUE omdat we willen communiceren met de sandbox (test) servers van PayPal voor ontwikkelingsdoeleinden. Je moet onthouden om dit te wijzigen in VALSE wanneer u klaar bent om uw project naar een live server te verplaatsen.

Dan, op basis van de waarde van $ zandbak we stellen waarden in voor andere variabelen voor onze API-informatie. U wilt die tijdelijke aanduidingen gewoon invullen met uw eigen gegevens. Nu zijn we klaar om ons script voor het verwerken van creditcards te bouwen.


Stap 3: Maak een API-aanvraag

Nu kunnen we beginnen met het bouwen van onze proces-credit-card.php pagina. Het eerste dat we hier moeten doen, is ons configuratiebestand.

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

Vervolgens moeten we een reeks naam-waarde-paar maken die alle gegevens bevat die we nodig hebben om PayPal te verzenden om deze betaling te verwerken. Een tekenreeks met naam / waarde-koppeling lijkt op iets dat u mogelijk ziet wanneer u gegevens via URL-parameters doorgeeft. We moeten er alleen voor zorgen dat onze parameternamen in hoofdletters zijn.

PARAM1 = waarde1 & PARAM2 = waarde2 & PARAM3 = waarde3 ... enz.

Misschien denk je dan bij jezelf: "Hoe weet ik wat ik moet gebruiken voor mijn variabele namen in mijn string?" Het goede nieuws is dat PayPal hier zeer goede documentatie over geeft. We kunnen alle mogelijke variabelen zien die we via PayPal kunnen doorgeven, waaronder klantgegevens, bestelitemgegevens en creditcardinformatie. Een deel van deze informatie is vereist om een ​​betaling te verwerken, maar veel van de beschikbare variabelen zijn optioneel. Voor demonstratiedoeleinden houden we dit vrij eenvoudig en geven we gewoon de vereiste informatie door.

We zullen al onze verzoekparameters in een array opslaan, zodat we door deze array heen kunnen lopen om eenvoudig onze NVP-reeks te genereren. Voor alle verzoeken zijn standaard de volgende parameters vereist:

  • METHODE - De naam van de API-aanroep die u aan het maken bent.
  • GEBRUIKER - De API-gebruikersnaam
  • PWD - Het API-wachtwoord
  • HANDTEKENING - De API-handtekening
  • VERSIE - De API-versie

Vervolgens kunt u de PayPal-documentatie raadplegen voor elk API-verzoek dat u wilt doen om te zien welke andere parameters moeten worden opgenomen. Voor deze demonstratie zal onze array als volgt worden gebouwd.

 // Params opslaan in een array $ request_params = array ('METHOD' => 'DoDirectPayment', 'USER' => $ api_username, 'PWD' => $ api_password, 'SIGNATURE' => $ api_signature, 'VERSION' = > $ api_version, 'PAYMENTACTION' => 'Uitverkoop', '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 ' => 'Testen van betalingen Pro');

U zult merken dat we onze configuratie variabelen gebruiken config.php, en dan laad ik eenvoudig statische gegevens voor de andere waarden. In een standaardproject zult u deze waarden waarschijnlijk echter vullen met formuliergegevens, sessiegegevens of een andere vorm van dynamische gegevens.

Nu kunnen we gewoon door deze array lopen om onze NVP-reeks te genereren.

 // Loop door array $ request_params om de NVP-reeks te genereren. $ nvp_string = "; foreach ($ request_params als $ var => $ val) $ nvp_string. = '&'. $ var. '='. urlencode ($ val);

De waarde van $ nvp_string is nu:

METHOD = DoDirectPayment&USER = sandbo ***** e.com&PWD = 12 *** 74&HANDTEKENING = AiKZ ****** 6W18v&VERSION = 85,0&PAYMENTACTION = Sale&IPADDRESS = 72.135.111.9&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 + betalingen + Pro

Deze tekenreeks is wat we naar PayPal sturen voor ons verzoek.


Stap 4: Verzend het HTTP-verzoek naar PayPal

Nu onze NVP-reeks klaar is om af te gaan, moeten we dit naar de PayPal-server sturen om dienovereenkomstig te worden verwerkt. Hiervoor gebruiken we de CURL-methoden van PHP.

 // Stuur NVP-string naar PayPal en sla respons op $ 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 ($ curl);

Hier kun je zien dat we CURL hebben ingesteld met een paar eenvoudige opties en we gebruiken onze $ api_endpoint en $ nvp_string variabelen dienovereenkomstig.

Deze gegevens worden verzonden naar PayPal en we zullen het API-antwoord terug ontvangen in onze $ result variabele zodat we het resultaat kunnen zien en de gebruiker naar een succesvolle of mislukte pagina kunnen sturen op basis van het al dan niet slagen van de oproep.


Stap 5: analyseer de API-reactie

De waarde die we terugkrijgen $ result van de vorige stap zal een NVP-reeks zijn zoals die die we hebben gegenereerd en naar PayPal hebben verzonden. Wanneer we ons huidige script uitvoeren, krijgen we een succesvol antwoord terug dat er als volgt uitziet:

TIMESTAMP = 2012% 2d04% 2d16T07% 3a59% 3a36Z & CorrelationId = 9eb40cd84a7d3 & ACK = Succes & VERSION = 85% 2E0 & BUILD = 2764190 & AMT = 100% 2e00 & CurrencyCode = USD & AVSCODE = X & CVV2MATCH = M & transactionId = 160896645A8111040

Een heel eenvoudige manier om dit resultaat te analyseren is om PHP's te gebruiken parse_str () functie. Hierdoor worden alle responsgegevens geladen in PHP-variabelen die overeenkomen met de namen en waarden die in het antwoord worden geretourneerd. Als we bijvoorbeeld het volgende doen:

 // Parse the API response $ nvp_response_array = parse_str ($ result);

We zouden eindigen met toegang tot de volgende PHP-variabelen:

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

Vervolgens kunnen we deze variabelen gebruiken om informatie terug te geven aan onze klant, waarden te vullen in e-mailontvangsten die we willen genereren, database-informatie bij te werken of iets anders dat we moeten doen zodra een bestelling is voltooid..

De $ ACK waarde is wat ons zal vertellen of de API-aanroep al dan niet succesvol was. Waarden voor $ ACK kan zijn:

  • Succes
  • SuccessWithWarning
  • Mislukking
  • FailureWithWarning
  • U kunt uw gebruiker eenvoudig doorverwijzen waar ze naartoe moeten gaan en informatie tonen op basis van deze waarde.

    Een falende API-aanroep resulteert in extra parameters die informatie bevatten over waarom de transactie is mislukt. Als ik deze test opnieuw uitvoer met een ongeldig creditcardnummer, krijg ik bijvoorbeeld het volgende antwoord van PayPal:

TIMESTAMP = 2012% 2d04% 2d16T08% 3a08% 3a52Z & CorrelationId = 590d41dbb31e0 & ACK = Failure & VERSION = 85% 2E0 & BUILD = 2764190 & L_ERRORCODE0 = 10527 & L_SHORTMESSAGE0 = Ongeldige% 20Data & L_LONGMESSAGE0 = Deze% 20transaction% 20cannot% 20be% 20processed% 2e% 20Stuur% 20enter% 20a% 20valid% 20credit% 20card% 20number% 20en% 20type% 2e & L_SEVERITYCODE0 = Fout & AMT = 100% 2e00 & CurrencyCode = USD

Nu, wanneer we gebruiken parse_str () we eindigen met de volgende PHP variabelen die voor ons beschikbaar zijn:

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

In dit geval, $ ACK laat een fout zien, dus we weten dat de oproep niet is geslaagd en we kunnen de foutparameters controleren voor meer informatie over wat er mis ging.

Extra optie voor het parseren van gegevens

Hoewel de vorige methode om het antwoord te ontleden prima werkt, werk ik persoonlijk het liefst met gegevensreeksen. Als zodanig gebruik ik de volgende functie om de PayPal-reactie om te zetten in een array.

 // Functie voor het converteren van de NTP-reeks naar een arrayfunctie NVPToArray ($ NVPString) $ proArray = array (); while (strlen ($ NVPString)) // name $ keypos = strpos ($ NVPString, '='); $ keyval = substr ($ NVPString, 0, $ keypos); // waarde $ valuepos = strpos ($ NVPString, '&')? strpos ($ NVPString, '&'): strlen ($ NVPString); $ valval = substr ($ NVPString, $ keypos + 1, $ valuepos- $ keypos-1); // decoding the respose $ proArray [$ keyval] = urldecode ($ valval); $ NVPString = substr ($ NVPString, $ valuepos + 1, strlen ($ NVPString));  return $ proArray; 

Hierdoor kan ik alle beschikbare responsgegevens bekijken door eenvoudigweg naar de inhoud van de array te kijken:

Als ik mijn script nu opnieuw uitvoer, krijg ik het volgende resultaat op het scherm:

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

En als ik opnieuw een fout zou veroorzaken, krijg ik het volgende:

 Array ([TIMESTAMP] => 2012-04-16T08: 18: 46Z [CORRELATIONID] => 2db182b912a9 [ACK] => Fout [VERSION] => 85.0 [BUILD] => 2764190 [L_ERRORCODE0] => 10527 [L_SHORTMESSAGE0] = > Ongeldige gegevens [L_LONGMESSAGE0] => Deze transactie kan niet worden verwerkt. Voer een geldig creditcardnummer en type in. [L_SEVERITYCODE0] => Fout [AMT] => 100.00 [CURRENCYCODE] => USD)

U ziet dat dit een mooie, gemakkelijk te navigeren resultaatarray is die alles bevat wat we nodig hebben om de gebruiker door onze applicatie te leiden en gegevensbronnen zo nodig bij te werken.


Conclusie

Zoals u ziet, is het verwerken van creditcards met PayPal Payments Pro eigenlijk een heel eenvoudige procedure. Het gaat om een ​​paar standaardstappen voor het werken met API-webservices en een basiskennis van het werken met array-gegevens kan ook helpen.

Veel geluk en fijne codering!