PayPal ist aus vielen Gründen eine der beliebtesten Zahlungsabwicklungsplattformen, die heute verfügbar ist. Die Benutzerfreundlichkeit und die Anbindung an die eBay-Plattform sind nur die Spitze des Eisbergs. Eine der beliebtesten Funktionen ist die Möglichkeit, sich einfach bei Ihrem PayPal-Konto anzumelden, um Zahlungen zu übermitteln. Händler, die PayPal verwenden, können auch Kreditkarten direkt akzeptieren, genau wie dies bei einer herkömmlichen Händlerkontenlösung der Fall ist.
PayPal nennt diese Lösung Payments Pro, und ich werde Ihnen genau zeigen, wie Sie Kreditkarten direkt mit der PayPal-API mithilfe der Payments Pro-Webservice-APIs verarbeiten können.
Das erste, was ich mit jedem Projekt machen möchte, ist die Schaffung einer Basisstruktur für das Projekt. In diesem Fall ist unsere Struktur sehr einfach, da unser Projekt nur aus zwei Dateien besteht:
Wie Sie vielleicht schon vermutet haben, speichern wir unsere Konfigurationsinformationen in der Datei config.php und behandeln den Verarbeitungscode in process-credit-card.php
.
Unsere /includes/config.php
Die Datei enthält unsere Werte für die von uns benötigten PayPal-API-Informationen, einschließlich der Endpunkt-URL, der API-Version und unseres API-Benutzernamens, unseres Kennworts und unserer Signatur.
// Sandbox (Testmodus) auf true / false setzen. $ Sandbox = TRUE; // Legen Sie die PayPal-API-Version und die Anmeldeinformationen fest. $ 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';
Überprüfung der config.php
Code, können Sie sehen, dass wir zuerst eine Variable für $ Sandkasten
. Für den Moment überlassen wir das WAHR
weil wir zu Entwicklungszwecken mit den Sandbox- (Test-) Servern von PayPal interagieren möchten. Sie müssen daran denken, dies zu ändern FALSCH
Wenn Sie bereit sind, Ihr Projekt auf einen Live-Server zu verschieben.
Dann basierend auf dem Wert von $ Sandkasten
Wir setzen Werte für andere Variablen für unsere API-Informationen. Sie müssen nur diese Platzhalter mit Ihren eigenen Angaben entsprechend ausfüllen. Jetzt können wir unser Skript für die Kreditkartenverarbeitung erstellen.
Jetzt können wir anfangen, unsere zu bauen process-credit-card.php
Seite. Als erstes müssen wir hier unsere Konfigurationsdatei einfügen.
// Include-Konfigurationsdatei erfordern. Request_once ('includes / config.php');
Als Nächstes müssen wir eine Zeichenfolge aus Name-Wert-Paar erstellen, die alle Daten enthält, die wir zur Abwicklung dieser Zahlung mit PayPal senden müssen. Ein Name-Value-Pair-String sieht aus wie etwas, das Sie möglicherweise sehen, wenn Sie Daten über URL-Parameter übergeben. Wir müssen nur sicherstellen, dass sich unsere Parameternamen in Großbuchstaben befinden.
PARAM1 = Wert1 & PARAM2 = Wert2 & PARAM3 = Wert3… usw.
Sie denken also vielleicht selbst: „Woher weiß ich, was ich für meine Variablennamen in meiner Zeichenfolge verwenden muss?“ Die gute Nachricht ist, dass PayPal eine sehr gute Dokumentation dazu bereitstellt. Wir sehen alle möglichen Variablen, die wir an PayPal weitergeben können, einschließlich Kundendaten, Details zu Bestellpositionen und Kreditkarteninformationen. Einige dieser Informationen sind für die Verarbeitung einer Zahlung erforderlich, viele der verfügbaren Variablen sind jedoch optional. Zu Demonstrationszwecken halten wir dies ziemlich einfach und geben einfach die erforderlichen Informationen weiter.
Wir speichern alle unsere Anforderungsparameter in einem Array, sodass wir dieses Array durchlaufen können, um auf einfache Weise unseren NVP-String zu generieren. Für alle Anforderungen sind standardmäßig folgende Parameter erforderlich:
METHODE
- Der Name des API-Aufrufs, den Sie tätigen.NUTZER
- Der API-BenutzernamePWD
- Das API-PasswortUNTERSCHRIFT
- Die API-SignaturAUSFÜHRUNG
- Die API-VersionAnschließend können Sie in der PayPal-Dokumentation für alle gewünschten API-Anforderungen nachsehen, welche anderen Parameter enthalten sein sollen. Für diese Demonstration wird unser Array wie folgt aufgebaut.
// Anforderungsparameter in einem Array speichern $ request_params = array ('METHOD' => 'DoDirectPayment', 'USER' => $ api_username, 'PWD' => $ api_password, 'SIGNATURE' => $ api_signature, 'VERSION' = > $ api_version, 'PAYMENTACTION' => 'Sale', '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');
Sie werden feststellen, dass wir unsere Konfigurationsvariablen von verwenden config.php
, und dann lade ich einfach statische Daten für die anderen Werte. In einem Standardprojekt werden diese Werte jedoch höchstwahrscheinlich mit Formulardaten, Sitzungsdaten oder einer anderen Form dynamischer Daten gefüllt.
Jetzt können wir dieses Array einfach durchlaufen, um unseren NVP-String zu generieren.
// Durchlaufen Sie das Array $ request_params, um den NVP-String zu generieren. $ nvp_string = "; foreach ($ request_params als $ var => $ val) $ nvp_string. = '&'. $ var. '='. urlencode ($ val);
Der Wert von $ nvp_string
ist jetzt:
METHOD = DoDirectPayment&USER = Sandbo ***** e.com&PWD = 12 74&SIGNATURE = AiKZ ****** 6W18v&VERSION = 85,0&PAYMENTACTION = Verkauf&IPADDRESS = 72.135.111.9&KREDITKARTENTYP = MasterCard&ACCT = 5522340006063638&EXPDATE = 022013&CVV2 = 456&FIRSTNAME = Tester&LASTNAME = Testerson&STREET = 707 + W. + Bay + Drive&STADT = Largo&STATE = FL&COUNTRYCODE = US&ZIP = 33770&AMT = 100,00&CURRENCYCODE = USD&DESC = Testing + Payments + Pro
Diese Zeichenfolge senden wir für unsere Anfrage an PayPal.
Nun, da unser NVP-String einsatzbereit ist, müssen wir ihn an den PayPal-Server senden, damit er entsprechend verarbeitet werden kann. Dazu verwenden wir die CURL-Methoden von PHP.
// NVP-String an PayPal senden und Antwort speichern $ 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 sehen Sie, dass wir CURL mit ein paar einfachen Optionen eingerichtet haben und unsere verwenden $ api_endpoint
und $ nvp_string
Variablen entsprechend.
Diese Daten werden an PayPal gesendet und wir erhalten die API-Antwort in unserem $ Ergebnis
Variable, damit wir das Ergebnis sehen und den Benutzer zu einer erfolgreichen oder fehlgeschlagenen Seite senden können, je nachdem, ob der Anruf erfolgreich war oder nicht.
Der Wert, den wir wieder bekommen $ Ergebnis
Im vorherigen Schritt wird eine NVP-Zeichenfolge verwendet, die der von uns generierten und an PayPal gesendeten entspricht. Wenn wir unser aktuelles Skript ausführen, erhalten wir eine erfolgreiche Antwort, die wie folgt aussieht:
TIMESTamp = 2012% 2d04% 2d16T07% 3a59% 3a36Z & CORRELATIONID = 9b40cd84a7d3 & ACK = Erfolg & VERSION = 85% 2e0 & BUILD = 2764190 & amp;
Eine sehr einfache Möglichkeit, dieses Ergebnis zu analysieren, ist die Verwendung von PHP parse_str ()
Funktion. Dadurch werden alle Antwortdaten in PHP-Variablen geladen, die mit den in der Antwort zurückgegebenen Namen und Werten übereinstimmen. Wenn wir zum Beispiel Folgendes tun:
// Analyse der API-Antwort $ nvp_response_array = parse_str ($ result);
Am Ende haben wir Zugriff auf die folgenden PHP-Variablen:
$ TIMESTAMP
$ CORRELATIONID
$ ACK
$ VERSION
$ BUILD
$ AMT
$ CURRENCYCODE
$ AVSCODE
$ CVV2MATCH
$ TRANSACTIONID
Wir können diese Variablen dann verwenden, um Informationen an unseren Kunden weiterzugeben, Werte in E-Mail-Quittungen, die wir generieren möchten, aufzufüllen, Datenbankinformationen zu aktualisieren oder alles andere, was wir tun müssen, wenn eine Bestellung abgeschlossen ist.
Das $ ACK
Der Wert gibt an, ob der API-Aufruf erfolgreich war oder nicht. Werte für $ ACK
kann sein:
Erfolg
SuccessWithWarning
Fehler
FailureWithWarning
Sie können Ihren Benutzer einfach dorthin umleiten, wohin er gehen muss, und ihm basierend auf diesem Wert Informationen anzeigen.
Ein fehlgeschlagener API-Aufruf führt zu zusätzlichen Parametern, die Informationen darüber enthalten, warum die Transaktion fehlgeschlagen ist. Wenn ich diesen Test beispielsweise erneut mit einer ungültigen Kreditkartennummer durchführe, erhalte ich folgende Antwort von PayPal:
Timestamp = 2012% 2d04% 2d16T08% 3a08% 3a52Z & CorrelationId = 590d41dbb31e0 & ACK = Failure & VERSION = 85% 2E0 & BUILD = 2764190 & L_ERRORCODE0 = 10527 & L_SHORTMESSAGE0 = Ungültige% 20Data & L_LONGMESSAGE0 = Dieses% 20transaction% 20cannot% 20be% 20processed% 2e% 20Please% 20enter% 20a% 20valid% 20credit% 20card% 20 number% 20and% 20type% 2e & L_SEVERITYCODE0 = Fehler & AMT = 100% 2e00 & CURRENCYCODE = USD
Nun, wenn wir verwenden parse_str ()
Am Ende stehen uns folgende PHP-Variablen zur Verfügung:
$ TIMESTAMP
$ CORRELATIONID
$ ACK
$ VERSION
$ BUILD
$ L_ERRORCODE0
$ L_SHORTMESSAGE0
$ L_LONGMESSAGE0
$ L_SEVERITYCODE0
$ AMT
$ CURRENCYCODE
In diesem Fall, $ ACK
zeigt einen Fehler an, daher wissen wir, dass der Anruf nicht erfolgreich war, und wir können die Fehlerparameter auf weitere Details überprüfen, was schiefgegangen ist.
Während die vorherige Methode zum Analysieren der Antwort gut funktioniert, arbeite ich persönlich lieber mit Datenarrays. Daher verwende ich die folgende Funktion, um die PayPal-Antwort in ein Array umzuwandeln.
// Funktion zum Konvertieren einer NTP-Zeichenfolge in eine Array-Funktion NVPToArray ($ NVPString) $ proArray = array (); while (strlen ($ NVPString)) // name $ keypos = strpos ($ NVPString, '='); $ keyval = substr ($ NVPString, 0, $ keypos); // Wert $ valuepos = strpos ($ NVPString, '&')? strpos ($ NVPString, '&'): strlen ($ NVPString); $ valval = substr ($ NVPString, $ keypos + 1, $ valuepos- $ keypos-1); // Dekodierung des jeweiligen $ proArray [$ keyval] = urldecode ($ valval); $ NVPString = substr ($ NVPString, $ valuepos + 1, strlen ($ NVPString)); return $ proArray;
Dadurch kann ich alle verfügbaren Antwortdaten anzeigen, indem ich einfach den Inhalt des Arrays durchsehe:
Wenn ich mein Skript jetzt erneut starte, bekomme ich folgendes Ergebnis auf dem Bildschirm:
Array ([TIMESTAMP] => 2012-04-16T08: 15: 41Z [CORRELATIONID] => 9a652cbabfdd9 [ACK] => Erfolg [VERSION] => 85.0 [BUILD] => 2764190 [AMT] => 100.00 [CURRENCYCODE] = > USD [AVSCODE] => X [CVV2MATCH] => M [TRANSACTIONID] => 6VR832690S591564M)
Und wenn ich erneut einen Fehler verursachen würde, bekomme ich Folgendes:
Array ([TIMESTAMP] => 2012-04-16T08: 18: 46Z [CORRELATIONID] => 2db182b912a9 [ACK] => Fehler [VERSION] => 85.0 [BUILD] = 2764190 [L_ERRORCODE0] => 10527 [L_SHORTMESSAGE0] = > Ungültige Daten [L_LONGMESSAGE0] => Diese Transaktion kann nicht verarbeitet werden. Geben Sie eine gültige Kreditkartennummer und den Typ ein. [L_SEVERITYCODE0] => Fehler [AMT] => 100.00 [CURRENCYCODE] => USD)
Sie sehen, dass dies ein schönes, einfach zu navigierendes Ergebnis-Array ist, das alles enthält, was wir möglicherweise benötigen, um den Benutzer durch unsere Anwendung zu bewegen und Datenquellen bei Bedarf zu aktualisieren.
Wie Sie sehen, ist die Verarbeitung von Kreditkarten mit PayPal Payments Pro ein sehr einfaches Verfahren. Es sind lediglich einige Standardschritte für die Arbeit mit API-Webdiensten erforderlich. Grundkenntnisse in der Arbeit mit Array-Daten können ebenfalls hilfreich sein.
Viel Glück und viel Spaß beim Codieren!