PayPal er en av de mest populære betalingsbehandling plattformene tilgjengelig i dag av mange grunner. Dens brukervennlighet og tilkobling til eBay-plattformen er bare toppen av isfjellet. Mens en av sine mest populære funksjoner er muligheten til å bare logge på PayPal-kontoen din for å sende inn betalinger, kan selgere som bruker PayPal også akseptere kredittkort direkte som en tradisjonell selgerkonto-løsning ville gi.
PayPal kaller denne løsningen Betalinger Pro, og jeg skal vise deg nøyaktig hvordan du kan behandle kredittkort direkte med PayPals API ved hjelp av deres Payments Pro webservice APIs.
Det første jeg liker å gjøre med et prosjekt er å skape en grunnleggende struktur organisert for prosjektet. I så fall er strukturen vår veldig enkel da prosjektet vårt vil bestå av kun 2 filer:
Som du kanskje har gjettet, lagrer vi konfigurasjonsinformasjonen i config.php, og vi vil faktisk håndtere behandlingskoden i prosess kreditt-card.php
.
Våre /includes/config.php
filen vil huse våre verdier for PayPal API-informasjonen vi trenger, inkludert sluttpunktsadressen, API-versjonen og brukernavnet vårt, brukernavn, passord og signatur som vi skal bruke.
// Sett sandkasse (testmodus) til ekte / falsk. $ sandbox = SANT; // Sett PayPal API versjon og legitimasjon. $ api_version = '85 .0 '; $ api_endpoint = $ sandkasse? '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';
Gjennomgang av config.php
kode, kan du se det først satt vi en variabel for $ sandkasse
. For nå vil vi la dette til EKTE
fordi vi ønsker å samhandle med PayPals sandkasse (test) servere for utviklingsformål. Du må huske å endre dette til FALSK
når du er klar til å flytte prosjektet til en live server.
Deretter, basert på verdien av $ sandkasse
Vi setter verdier til andre variabler for API-informasjonen vår. Du vil bare fylle ut disse plassholderne med dine egne detaljer tilsvarende. Nå er vi klare til å bygge vårt kredittkortbehandlingsskript.
Nå kan vi begynne å bygge vår prosess kreditt-card.php
side. Det første vi trenger å gjøre her er å ta med vår config-fil.
// Inkluder config-filen require_once ('includes / config.php');
Deretter må vi bygge en streng med navn-verdi-par som inneholder alle dataene vi trenger for å sende PayPal for å behandle denne betalingen. Et navn-verdi-par-streng ser akkurat ut som noe du kanskje ser når du overfører data via nettadresseparametere. Vi må bare sørge for at parameternavnene våre er i alle kapsler.
PARAM1 = verdi1 og PARAM2 = verdi2 og PARAM3 = verdi3 ... osv.
Så, kanskje du tenker på deg selv "Hvordan vet jeg hva jeg skal bruke for mine variable navn i min streng?" Den gode nyheten er at PayPal gir svært god dokumentasjon på dette. Vi kan se alle de mulige variablene vi kan sende PayPal, inkludert kundedetaljer, bestillingsdetaljer og kredittkortinformasjon. Noen av disse opplysningene kreves for å behandle en betaling, men mange av variablene er tilgjengelige. For demonstrasjonsformål holder vi dette ganske enkelt og bare sender den nødvendige informasjonen.
Vi lagrer alle våre forespørselsparametere i en matrise slik at vi kan gå gjennom denne gruppen for å enkelt generere vår NVP-streng. Alle forespørsler krever som standard følgende parametere:
METODE
- Navnet på API-samtalen du lager.BRUKER
- API-brukernavnetPWD
- API-passordetSIGNATUR
- API-signaturenVERSJON
- API-versjonenDeretter kan du se på PayPal-dokumentasjonen for alle API-forespørsler du vil gjøre for å se hvilke andre parametere som skal inkluderes. For denne demonstrasjonens skyld vil vårt utvalg bli bygget som følger.
// Lagre forespørselsparameter i en gruppe $ request_params = array ('METHOD' => 'DoDirectPayment', 'USER' => $ api_username, 'PWD' => $ api_password, 'SIGNATURE' => $ api_signatur, 'VERSION' = > $ API_version, 'PAYMENTACTION' => 'Salg', '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 ' => 'Tester Betalinger Pro');
Du merker at vi bruker våre config-variabler fra config.php
, og så laster jeg bare opp statiske data for de andre verdiene. I et standardprosjekt vil du trolig fylle disse verdiene med formdata, øktdata eller annen form for dynamisk data.
Nå kan vi bare gå gjennom denne gruppen for å generere vår NVP-streng.
// Loop gjennom $ request_params array for å generere NVP-strengen. $ nvp_string = "; foreach ($ request_params som $ var => $ val) $ nvp_string. = '&'. $ var. '='. urlencode ($ val);
Verdien av $ nvp_string
er nå:
METODE = DoDirectPayment&USER = Sandbo ***** e.com&PWD = 12 *** 74&SIGNATUR = AiKZ ****** 6W18v&VERSION = 85,0&PAYMENTACTION = Sale&IPADDRESS = 72.135.111.9&CREDIT = MasterCard&ACCT = 5522340006063638&EXPDATE = 022013&CVV2 = 456&Fornavn = Tester&NAME = Testerson&STREET = 707 + W. + Bay + Drive&CITY = Largo&STATE = FL&COUNTRY = USA&ZIP = 33770&AMT = 100,00&CurrencyCode = USD&DESC = Testing + Betalinger + Pro
Denne strengen er hva vi sender til PayPal for vår forespørsel.
Nå som vår NVP-streng er klar til å gå, må vi sende denne til PayPal-serveren som skal behandles tilsvarende. For å gjøre dette bruker vi PHPs CURL-metoder.
// Send NVP-streng til PayPal og lagre svar $ 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);
Her kan du se at vi har setup CURL med noen få enkle alternativer, og vi bruker vår $ api_endpoint
og $ nvp_string
variabler tilsvarende.
Disse dataene blir sendt til PayPal, og vi mottar API-responsen tilbake i vår $ resultat
variabel slik at vi kan se resultatet og sende brukeren til en vellykket eller feil side basert på om samtalen lykkes eller ikke.
Verdien som vi kommer tilbake i $ resultat
fra forrige trinn vil det være en NVP-streng som den vi genererte og sendte til PayPal. Når vi kjører vårt nåværende skript, får vi et vellykket svar tilbake som ser slik ut:
TIMESTAMP = 2012% 2d04% 2d16T07% 3a59% 3a36Z & CORRELATIONID = 9eb40cd84a7d3 & ACK = suksess og VERSION = 85% 2E0 & BUILD = 2764190 & AMT = 100% 2e00 & CurrencyCode = USD & AVSCODE = X & CVV2MATCH = M & transactionId = 160896645A8111040
En veldig enkel måte å analysere dette resultatet på er å bruke PHP parse_str ()
funksjon. Dette vil laste inn alle svardataene i PHP-variabler som samsvarer med navnene og verdiene som returneres i svaret. For eksempel, hvis vi gjør følgende:
// Parser API-responsen $ nvp_response_array = parse_str ($ resultat);
Vi vil ende opp med tilgang til følgende PHP-variabler:
$ TIMESTAMP
$ CORRELATIONID
$ ACK
$ VERSJON
$ BUILD
$ AMT
$ CurrencyCode
$ AVSCODE
$ CVV2MATCH
$ transactionId
Vi kan deretter fortsette å bruke disse variablene til å presentere informasjon tilbake til vår kunde, fylle verdier i e-kvitteringer vi ønsker å generere, oppdatere databaseinformasjon eller alt annet vi trenger å gjøre når en ordre er fullført.
De $ ACK
verdien er hva som forteller oss om API-anropet var vellykket eller ikke. Verdier for $ ACK
kan være:
Suksess
SuccessWithWarning
Failure
FailureWithWarning
Du kan enkelt omdirigere brukeren din hvor de trenger å gå og vise dem informasjon basert på denne verdien.
Et sviktende API-anrop vil resultere i flere parametere som gir informasjon om hvorfor transaksjonen mislyktes. Hvis jeg kjører denne testen igjen med et ugyldig kredittkortnummer, får jeg for eksempel følgende svar tilbake fra PayPal:
TIMESTAMP = 2012% 2d04% 2d16T08% 3a08% 3a52Z & CORRELATIONID = 590d41dbb31e0 & ACK = Failure & VERSION = 85% 2E0 & BUILD = 2764190 & L_ERRORCODE0 = 10527 & L_SHORTMESSAGE0 = Ugyldig% 20Data & L_LONGMESSAGE0 = Denne% 20transaction% 20cannot% 20be% 20processed% 2e% 20Please% 20enter% 20a% 20valid% 20credit% 20card% 20number% 20og% 20type% 2e & L_SEVERITYCODE0 = Feil & AMT = 100% 2e00 & CurrencyCode = USD
Nå, når vi bruker parse_str ()
vi ender opp med følgende PHP-variabler som er tilgjengelige for oss:
$ TIMESTAMP
$ CORRELATIONID
$ ACK
$ VERSJON
$ BUILD
$ L_ERRORCODE0
$ L_SHORTMESSAGE0
$ L_LONGMESSAGE0
$ L_SEVERITYCODE0
$ AMT
$ CurrencyCode
I dette tilfellet, $ ACK
viser feil, så vi vet at samtalen ikke lyktes, og vi kan sjekke feilparametrene for mer informasjon om hva som gikk galt.
Mens den forrige metoden for analysering av svaret fungerer fint, foretrekker jeg personlig å jobbe med datarammer. Som sådan bruker jeg følgende funksjon for å konvertere PayPal-responsen til en matrise.
// Funksjon for å konvertere NTP-streng til en array-funksjon NVPToArray ($ NVPString) $ proArray = array (); mens (strlen ($ NVPString)) // navn $ keypos = strpos ($ NVPString, '='); $ keyval = substr ($ NVPString, 0, $ keypos); // verdi $ valuepos = strpos ($ NVPString, '&')? strpos ($ NVPString, '&'): strlen ($ NVPString); $ valval = substr ($ NVPString, $ keypos + 1, $ valuepos- $ keypos-1); // dekoding respos $ proArray [$ keyval] = urldecode ($ valval); $ NVPString = substr ($ NVPString, $ valuepos + 1, strlen ($ NVPString)); returnere $ proArray;
Dette tillater meg å se alle svardataene som er tilgjengelige ved bare å se på innholdet i arrayet:
Hvis jeg kjører skriptet igjen, får jeg følgende resultat på skjermen:
Array ([TIMESTAMP] => 2012-04-16T08: 15: 41Z [CORRELATIONID] => 9a652cbabfdd9 [ACK] => Suksess [VERSION] => 85.0 [BUILD] => 2764190 [AMT] => 100,00 [CURRENCYCODE] = > USD [AVSCODE] => X [CVV2MATCH] => M [TRANSACTIONID] => 6VR832690S591564M)
Og hvis jeg skulle få en feil igjen, får jeg følgende:
Array ([TIMESTAMP] => 2012-04-16T08: 18: 46Z [CORRELATIONID] => 2db182b912a9 [ACK] => Feil [VERSION] => 85.0 [BUILD] => 2764190 [L_ERRORCODE0] => 10527 [L_SHORTMESSAGE0] = > Ugyldige data [L_LONGMESSAGE0] => Denne transaksjonen kan ikke behandles. Vennligst skriv inn et gyldig kredittkortnummer og skriv. [L_SEVERITYCODE0] => Feil [AMT] => 100,00 [CURRENCYCODE] => USD)
Du kan se at dette er en fin, lett å navigere resultatmatrise som inneholder alt vi kan trenge for å flytte brukeren gjennom programmet vårt og oppdatere datakilder etter behov.
Som du kan se, er behandling av kredittkort ved hjelp av PayPal Payments Pro faktisk en veldig enkel prosedyre. Det innebærer bare noen få vanlige trinn for å jobbe med API-webtjenester, og en grunnleggende kunnskap om å arbeide med array data kan også hjelpe.
Lykke til, og lykkelig koding!