Die bloße Erwähnung der „PCI -Konformität“ liefert normalerweise eine Kombination aus verwirrten Aussehen und verschwitzten Palmen von Geschäftsinhabern, die online Kreditkartenzahlungen akzeptieren. Aber was bedeutet es wirklich?
Es ist ein kompliziertes Thema, aber die Kurzversion ist, dass die großen Kreditkartenunternehmen 2006 einen Rat namens Payment Card Industry Security Standards Council (PCI SSC) gründeten, um eine Reihe von Regeln zu erstellen, die die Sicherheitsrichtlinien und -verfahren standardisieren, dass Händler bei der Bearbeitung und Speicherung sensibler Kreditkarteninformationen (PCI DSS) folgen sollten. Um festzustellen, ob Ihre Systeme konform sind, wählen Sie normalerweise den entsprechenden Fragebogen (Self Assessment "(SAQ) aus einer von acht Optionen aus und beantworten dann eine Reihe von Fragen, um festzustellen, ob Sie tatsächlich konform waren. Große Unternehmen setzen häufig die Dienste eines qualifizierten Sicherheitsbeurteilers (QSA) ein, um SAQ D (die am stärksten involvierten SAQs) auszufüllen, die Hunderttausende von Dollar kosten können. Und um die Sache noch schlimmer zu machen: Wenn Ihre Systeme kompromittiert sind und festgestellt wird, dass sie bei der Verletzung nicht konform waren, können Sie für Geldbußen von bis zu 500.000 US -Dollar pro Vorfall haftbar sein.
Was soll ein Kleinunternehmer tun? Hier kommt Braintree -Zahlungslösungen ins Spiel. Sie bieten zwei Lösungen an, um Ihre PCI -Compliance -Belastung zu minimieren: transparente Umleitung und Braintree.js. Ich sollte erwähnen, dass weder Braintree noch ein anderer PCI -DSS -konformer Dienstanbieter Ihnen mitteilen können, welches SAQ Sie ausfüllen sollen oder ob Ihre Systeme konform sind. Sie haben sich jedoch mit Sicherheitsmetriken, einer branchenführenden QSA, zusammengetan, um eine kostenlose Lösung zu bieten, mit der alle Kunden die PCI-Konformität erreichen und aufrechterhalten können. Und in ihrer Erfahrung konnten Kunden, die entweder transparente Umleitung oder Braintree.js verwenden, in der Regel SAQ A ausfüllen, was viel weniger (und daher teuer) ist als SAQ D, Sie können hier mehr lesen.
Aber genug Hintergrund; Schreiben wir einen Code.
Dieser Artikel konzentriert sich auf die transparente Umleitungsmethode. Das erste, was wir tun müssen, ist zu Braintree zu gehen, um unsere serverseitigen API-Schlüssel zu erhalten. Für diejenigen unter Ihnen ohne Produktionskonto richten Sie Ihren Browser auf die Braintree -Sandbox und melden Sie sich für ein Testkonto an. Melden Sie sich an und klicken Sie auf "Konto -> API -Schlüssel." Klicken Sie dann auf die Schaltfläche "Neue neue" und klicken Sie schließlich unter der Spalte "Private Schlüssel" der neu generierten API -Taste. Sie werden auf den folgenden Bildschirm gebracht, der alle Informationen enthält, die Sie für die Konfiguration der Braintree -Client -Bibliothek benötigen.
Sie können sogar ein Tool sehen, das den Konfigurationscode für Sie in einer Vielzahl von Sprachen generiert.
Jetzt ist es Zeit, die tatsächliche Braintree -PHP -Client -Bibliothek zu installieren. Wir können das mit Composer tun, indem wir den folgenden Befehl ausführen:
composer require braintree/braintree:*
Einer der Hauptfaktoren, mit denen Sie feststellen können, ob Sie SAQ D oder SAQ A ausfüllen müssen, ist, ob Kreditkartendaten über Ihr System übertragen werden. Und zu Beginn des typischen Server -zu -Server -Modells (S2S) sendet Ihr Webserver ein Zahlungsformular an den Browser des Kunden. Nach dem Ausfüllen des Formulars drückte der Kunde die Subjekte, die die Daten auf Ihren Webserver zurückversetzen würde, was wiederum einige dieser Daten zur Validierung und Verarbeitung an Braintree weiterleiten würde. Das würde ungefähr so aussehen:
Bei transparenter Umleitung wird jedoch die Formularaktion so festgelegt, dass das Formular direkt auf die Server von Braintree postet und die Antwort an den Client -Browser zurückgesandt wird. Der Browser wird dann mit einer HTTP 303 -Umleitung in ein Skript auf dem Webserver umgeleitet. Schließlich bestätigt das Webserver -Skript die Transaktion mit Braintree und präsentiert die Ergebnisse dem Client -Browser. Das Modell sieht also eher so aus:
Jetzt, da wir die Theorie unter unserem Gürtel haben, schreiben wir einen Code. Diejenigen von Ihnen, die die komplette Version sehen möchten, können sie auf GitHub finden.
Das erste, was wir tun werden, ist, ein sehr grundlegendes HTML -Formular zu erstellen, damit wir einige Daten eingeben können, die für die Verarbeitung an Braintree gesendet werden können. Ich werde dies so einfach wie möglich machen, damit wir uns auf Funktionen konzentrieren können.
composer require braintree/braintree:*
hier ist nichts kompliziertes. Das einzige, was Sie bemerken werden, ist, dass sich die Eingabefeldnamen im Array -Format befinden. Hier sehen Sie eine vollständige Liste gültiger Feldnamen. Die andere Sache, auf die ich auf dieser Seite hinweisen werde, ist, dass Sie, wenn Sie ein Framework verwenden, das Probleme für die Verwendung von Arrays für Eingabennamen hat (ich sehe Sie an, Zend Framework!), Dann können Sie einen alternativen Doppelunterdrücker verwenden Syntax. Ihr Ablaufdatumeingabe würde also so aussehen:
<span><span><!doctype html></span> </span> <span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> id<span>="wrap"</span>></span> </span> <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span> </span> <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span> </span> <span><span><span></form</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span> <span><span><span></html</span>></span></span>
Die einzige andere Sache, die Sie vielleicht bemerken, ist, dass ich meinem Formular ein "automatisch vollständiger" Attribut hinzugefügt habe und seinen Wert auf OFF eingestellt habe. Braintree empfiehlt dies, und ich hoffe, der Grund dafür ist offensichtlich…
Es gibt einige andere Dinge, die wir tun müssen, um die Magie der transparenten Umleitung in unserer Form zu nutzen. Bevor wir das tun, müssen wir unser Skript so konfigurieren, dass sie mit der API von Braintree arbeiten.
Bevor ich Ihnen sage, wie das geht, werde ich nur erwähnen, dass ich im Hinblick auf Klarheit alle PHP und HTML in die gleiche Datei in meinen Beispielcode eingebaut habe. Ich hoffe, es versteht sich von selbst, dass in einem Produktionsprojekt, dass der Setup -Code in die Bootstrap -Datei meines Projekts eingehen würde und dass der Formularverarbeitungscode in eine Controller -Aktion oder eine andere separate Datei eingeht. Ok, genug Entschuldigung - lass uns dieses Ding einrichten!
<span><span><span><input</span> type<span>="text"</span> name<span>="transaction__credit_card__expiration_date"</span>></span></span>
Die erste Zeile ermöglicht es uns lediglich, den Autoloader des Komponisten zu nutzen und die Bibliothek von Braintree zu verwenden, ohne explizit zusätzliche Dateien einzubeziehen. Hoffentlich sehen die nächsten vier Zeilen vertraut aus, da sie wörtlich aus dem Sandbox Control Panel API -Schlüsselwerkzeug kopiert wurden, mit dem ich Sie im vorherigen Abschnitt vorgestellt habe. Offensichtlich ersetzen Sie dies durch den Code aus Ihrem eigenen Bedienfeldkonto.
Das nächste, was ich tun möchte, ist die Formularaktion so festzulegen, dass unser Kunde seine sensiblen Daten direkt an Braintree sendet, was der springende Punkt der Verwendung von TR ist. Glücklicherweise macht die Braintree -Bibliothek dies sehr einfach, indem sie ein Helferobjekt/eine Helfer -Methode bereitstellt. Ändern Sie also einfach Ihren Formularcode wie SO:
composer require braintree/braintree:*
Das einzige andere, was wir tun müssen, ist eine versteckte Eingabe zu erstellen, die eine Hashed -Darstellung der URL enthält, die Braintree nach dem Einreichen des Formulars sowie alle Informationen, die Sie nicht wollen sie, um angeben zu können. Hier können Sie beispielsweise die Transaktionsmenge einfügen. Insgesamt möchte ich die Rücksendungs -URL auf das Zahlungsformular selbst einstellen, damit ich den Benutzer Fehler anzeigen und ihnen die Möglichkeit geben kann, erneut zu sein. So würde das also aussehen:
<span><span><!doctype html></span> </span> <span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> id<span>="wrap"</span>></span> </span> <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span> </span> <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span> </span> <span><span><span></form</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span> <span><span><span></html</span>></span></span>
Offensichtlich kodieren ich die Menge hier hart, aber in einer Produktions-App würden Sie diese entweder mit einer serverseitigen Logik generieren, oder im Fall eines Spendenformulars mit nicht spezifiziertem Summe würden Sie ein Formularfeld erstellen und erlauben Sie dem Benutzer, einen bereitzustellen. Normalerweise legte ich die Option „Senden für die Abrechnung“ auf true fest. Andernfalls wird diese Transaktion einfach
Jetzt muss ich dies nur als verstecktes Feld zu meiner Form hinzufügen wie so:
<span><span><span><input</span> type<span>="text"</span> name<span>="transaction__credit_card__expiration_date"</span>></span></span>
Jetzt, da wir unsere Daten an Braintree senden, müssen wir einen Code hinzufügen, um die tatsächliche transparente Umleitungsantwort zu verarbeiten.
<span><span><?php </span></span><span> <span>require('vendor/autoload.php'); </span></span><span> </span><span> <span>Braintree_Configuration<span>::</span>environment('sandbox'); </span></span><span> <span>Braintree_Configuration<span>::</span>merchantId('YOUR_MERCHANT_ID'); </span></span><span> <span>Braintree_Configuration<span>::</span>publicKey('YOUR_PUBLIC_KEY'); </span></span><span> <span>Braintree_Configuration<span>::</span>privateKey('YOUR_PRIVATE_KEY'); </span></span><span> </span><span> <span>?></span></span>
Lassen Sie uns jetzt herausfinden, was wir gerade getan haben. Wenn der Benutzer die Taste Sendene drückt, wird das Formular direkt an Braintree veröffentlicht, und alle sensiblen Informationen des Kunden werden sicher auf ihren PCI -CSS -konformen Servern gespeichert. Anschließend wird ein HTTP 303 -Umleitung an den Browser gesendet, der den Benutzer an die URL sendet, die Sie beim Generieren der Variablen $ tr_data angegeben haben, und an die Abfragezeichenfolge der URL angehängt.
Wenn die Daten erfolgreich eingereicht werden, ist einer dieser Parameter http_status. Wenn alles reibungslos mit den Servern von Braintree läuft, wird sie auf 200 festgelegt. Offensichtlich möchten Sie auch Nicht-200-Reaktionscodes in der Produktion bewältigen. Aber im Moment stellen wir nur sicher, dass wir den Code nur in dieser Aussage ausführen, wenn wir unsere Zahlungsinformationen erfolgreich an sein System übermittelt haben.
Das nächste, was passiert, ist, dass wir die Abfragezeichenfolge von unserem transparenten Umleitungsumleitungen nehmen und an Braintree zurückschicken müssen, um die Transaktion abzuschließen. Deshalb führen wir eine andere Bibliotheksfunktion aus (Braintree_TransparentRedirect :: bestätigen) und geben sie mit unserer URL -Abfrage -Zeichenfolge an, um Braintree zu sagen, dass er unsere Zahlung verarbeiten soll. Sobald dies geschieht, sendet Braintree unser Skript ein Ergebnisobjekt zurück. Innen kann dieses Objekt entweder ein Braintree_Result_error oder eine braintree_result_successful sein, aber beide Objekte haben eine Boolesche Erfolgseigenschaft, damit Sie sehen können, ob die Transaktion erfolgreich ist oder nicht.
Sie haben wahrscheinlich auch bemerkt, dass ich die gesamte Bestätigung in einen Try/Catch -Block eingewickelt habe. Der einzige Nachteil der Verwendung derselben Seite, um das Formular anzuzeigen und die Ergebnisse zu verarbeiten, ist, dass Sie nur einmal einen TR -Abfragezeichenfolge bestätigen können. Das heißt, wenn jemand nach einer fehlgeschlagenen Transaktion die Taste Reload trifft, versucht Ihr Code, eine abgelaufene Abfragezeichenfolge neu zu bestätigen, und Braintree wird eine Ausnahme auswerfen.
Jetzt, da wir alles haben, was wir brauchen, können wir einige Testtransaktionen durchführen. Vollständige Dokumentation zur Verwendung der Sandbox finden Sie hier. Wenn Sie jedoch wirklich aufgeregt sind und sofort eine erfolgreiche Transaktion ausführen möchten, geben Sie Ihren Namen in den „Namen auf der Karte“, 411111111111111 (4 gefolgt von fünfzehn), ein. Als „Kartennummer“, 123 in der CVV -Box und in Zukunft in der Zukunft als Ablaufdatum. Wenn alles gut läuft, sollten Sie in der Lage sein, in die Sandbox zurückzukehren, auf "Transaktionen" unter "Erweiterte Suche" zu klicken und nach dem Klicken auf die Schaltfläche "Suche" zu Ihrer ersten erfolgreichen Transaktion.
transparente Umleitung ist eine großartige Möglichkeit, um Ihre PCI -Compliance -Belastung zu minimieren. Es gibt jedoch einige Macken, an die Sie sich gewöhnen müssen. Wenn Sie Daten in Ihr Zahlungsformular aufnehmen möchten, die einem der Transaktionen, Kunden oder Kreditkartenobjekte von Braintree nicht entsprechen, müssen Sie die Funktion „benutzerdefiniertes Feld“ verwenden. Nehmen wir an, ich wollte die Lieblingsfarbe eines Benutzers erfassen. Das erste, was ich tun würde, ist, zum Bedienfeld zu gehen und auf "Einstellungen -> Verarbeitung" zu klicken. Scrollen Sie in den Abschnitt "benutzerdefinierte Felder" und klicken Sie auf "Neu". Sie finden sich auf dem folgenden Bildschirm:
Der API -Name ist das, was Sie im Namensattribut der Formulareingabe verweisen. Der Anzeigenname steht für Ihre Referenz und Sie können angeben, ob Sie den Wert Ihres benutzerdefinierten Feldes mit Ihrer Transaktion auf Braintree speichern oder einfach an Ihren Server weitergeben möchten.
sammeln Sie es dann einfach das Hinzufügen des folgenden Feldes zu Ihrem Formular.
composer require braintree/braintree:*
Wenn Sie dies versucht haben, ohne das benutzerdefinierte Feld im Braintree -Bedienfeld hinzuzufügen, würden Sie einen Validierungsfehler auslösen.
Apropos Validierung und kann die serverseitige Validierung Ihres Zahlungsformulars komplizieren. Nehmen wir an, ich wollte die E -Mail -Adresse meines Kunden verlangen. Ich würde nicht wissen, dass der Benutzer es leer gelassen hatte, bis die Transaktion bereits bestätigt worden war. Die Lösung, die ich gefunden habe, besteht darin, meine Validierung im Erfolgsblock meines TR -Skripts auszuführen und dann die Transaktion zu ungültig, wenn meine Validierungen nicht bestehen. Das würde unseren Code so ändern:
<span><span><!doctype html></span> </span> <span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> id<span>="wrap"</span>></span> </span> <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span> </span> <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span> </span> <span><span><span></form</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span> <span><span><span></html</span>></span></span>
Wie Sie sehen können, verwende ich, wenn meine lokalen Validierungen nicht bestehen, die Client -Bibliothek, um die Transaktion mit der Transaktions -ID von meinem Braintree_Result_Success -Objekt zu ungültig zu machen.
Schließlich habe ich in unserem grundlegenden Beispiel keine Mühe gemacht, die Formulierungsfelder für den Benutzer neu zu bevölkern, da alle unsere Felder sensible Kreditkartendaten enthalten, die Braintree von unserem Server versteckt. Nachdem wir einige Kundendaten hinzugefügt haben, kann ich diese weniger sensiblen Felder mit Daten aus dem Braintree-Ergebnisobjekt vorab füllen. Sie können den vollständigen Code in meinem GitHub-Beispiel sehen, aber der Trick, zu verstehen, was vor sich geht, besteht darin, zu wissen, dass das Objekt Braintree_Result_Success die vom Benutzer abgelagerten Formulardaten in seiner Transaktionseigenschaft speichert, während das Braintree_Result_error ihn in einer Params-Eigenschaft speichert. Zum Beispiel würde die Vorname-Variable in $ result-> transaktion-> customer ['FirstName'] gefunden, wenn die Transaktion erfolgreich war, während eine fehlgeschlagene Transaktion sie in $ result-> params ['Transaktion'] ['speichern würde, [' Kunde '] [' FirstName '].
Braintree's transparenter Umleitung ist eine Möglichkeit, die Bekämpfung der sensiblen Kundendaten Ihrer Anwendung zu minimieren, wodurch die Belastung Ihrer PCI -Konformität verringert wird, und ihre PHP -Client -Bibliothek vereinfacht den Integrationsprozess erheblich, aber es macht es schwieriger, nicht nicht zu sammeln und nicht zu validieren Zahlungsbezogene Informationen zum gleichen Formular wie die Kreditkarteninformationen Ihres Kunden.
Das nächste Mal werfen wir einen Blick auf ihre andere clevere Lösung: Braintree.js.
Was passiert, wenn eine transparente Umleitung fehlschlägt? verarbeitet werden. Die genaue Antwort hängt von der API des Zahlungsgateways ab. In den meisten Fällen sendet das Gateway eine Fehlermeldung an die Website des Händlers, die dann dem Benutzer angezeigt werden kann. Es ist wichtig, diese Fehler anmutig zu behandeln, um eine gute Benutzererfahrung zu gewährleisten.
Das obige ist der detaillierte Inhalt vonTransparente Weiterleitungen mit Braintree. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!