Die Verarbeitung von Kreditkarten ist leider viel schwieriger als wir als Entwickler hoffen könnten. Ist es angesichts der Tatsache, dass es sich um eine solche gewöhnliche Aufgabe handelt, wirklich notwendig, dass wir unzählige Reifen (natürlich umgeben von Feuer) nur für die Verarbeitung einer Zahlung durchgehen? Kaufleute? Gateways? SSL? Sicherheit? Eine scheinbar einfache Operation kann sehr schnell zu einer überaus verwirrenden und vor allem gefährlichen Aufgabe werden. Jedes Mal, wenn Sie die sensiblen Daten eines Benutzers handhaben, sollten Sie besser auf der Zehenspitze sein.
Stripe übersetzt einen komplizierten, verwirrenden und gefährlichen Vorgang in einen einfachen API-Aufruf.Wäre es nicht erstaunlich, wenn es einen Service gibt, der diesen Prozess so einfach wie möglich macht? Ein von Entwicklern für Entwickler entwickelter Dienst. Was für ein Gedanke! Stripe eingeben; keine Handelskonten, keine Gateways. Ein API-Aufruf sowie einige Sicherheitsrichtlinien sind alles, was Sie benötigen, um heute mit Kreditkartenzahlungen zu beginnen.
Obwohl Stripe nicht kostenlos ist, werden nur 2,9% der Gebühren verlangt (plus .30 Cent). Das ist es. Keine Einrichtungsgebühren, Lagergebühren, versteckte Kosten - nichts davon. Nur 2,9%. Nicht schlecht!
Verkauft? Ich war auch. Lassen Sie uns unsere erste Testzahlung abwickeln. Natürlich, bevor Sie anfangen, besuchen Sie stripe.com
, Erstellen Sie ein neues Konto (kostenlos) und füllen Sie die verschiedenen Formulare aus, z. B. die Beschreibungsbeschreibung und Ihre Bankdaten.
Das Aufladen eines Benutzers erfordert zwei Hauptschritte:
Der erste Schritt ist natürlich, ein Zahlungsformular für Ihr Produkt zu erstellen. Sie haben zwei Möglichkeiten: Verwenden Sie Stripe's Auschecken Skript, das das Formular automatisch erstellt, die Eingaben des Benutzers überprüft und das eindeutige Token für die Kreditkartendaten des Benutzers generiert. In Situationen, in denen Konfiguration und Styling flexibel sind, ist dies ein hervorragender Weg. Fügen Sie ein Skript-Tag zusammen mit einer Handvoll benutzerdefinierter HTML5-Attribute ein und fertig!
Stripe bietet ein einbettbares Formular, das die Akzeptanz von Zahlungen weiter beschleunigt.
In den meisten Situationen benötigen Sie jedoch volle Kontrolle. Für die Zwecke dieses Artikels verwenden wir ein benutzerdefiniertes Formular. In diesem Abschnitt werden wir drei Dinge erreichen:
Ein Basis-Zahlungsformular könnte folgendermaßen aussehen:
Beachten Sie, dass wir zur Verarbeitung einer Kreditkarte nicht viele Informationen benötigen. Technisch gesehen sind Stripe lediglich Informationen zu Kreditkartennummer und Ablaufdatum. Als Faustregel gilt: Je mehr Informationen Sie vom Benutzer abrufen, desto besser. Sollte die Gebühr angefochten werden, sind diese zusätzlichen Informationen hilfreich. Oder mit anderen Worten: Je mehr Informationen Sie anfordern, desto wahrscheinlicher ist es, dass der wahre Inhaber der Kreditkarte die Transaktion platziert. Der Schlüssel ist, die Linie zwischen zu finden genug und so sehr, dass der Benutzer das Formular nicht ausfüllen muss. Fordern Sie mindestens den Namen des Benutzers, die E-Mail-Adresse, die Kreditkartennummer, das Ablaufdatum und die CVC-Nummer an.
Lassen Sie niemals zu, dass sensible Kreditkartendaten Ihren Server berühren, um weiter in Ihren Kopf zu bohren. Dies kann dazu führen, dass eine Welt der Verletzung entsteht, wenn sie falsch ausgeführt wird. Nehmen Sie stattdessen die einfache Straße: Stellen Sie sicher, dass die Eingang
s für die Kreditkartendaten des Benutzers enthalten nicht Name
Attribute. Wenn Sie dieses Attribut weglassen, können die Daten nicht an Ihren Server gesendet werden.
Achten Sie besonders auf die benutzerdefinierten Attribute der Eingaben, z. B. data-stripe = "number"
. Stripe bietet ein Plugin an, stripe.js
, Dies hilft beim Kompilieren der vom Benutzer bereitgestellten Daten und beim Generieren des Tokens. Stripe sucht nach diesen Attributen und ruft die entsprechenden Werte ab.
Gebrauch machen von stripe.js
, Verweisen Sie auf das Skript in Ihrem Projekt, und legen Sie Ihren veröffentlichbaren Schlüssel fest, der bei der Anmeldung bei Stripe bereitgestellt wird. Wir werden in diesem Artikel auch jQuery verwenden, obwohl dies sicherlich nicht erforderlich ist.
Denk an setPublishableKey
Zur Identifikation Ihrer Website bei der Kommunikation mit Stripe. Bei der Anmeldung werden Ihnen zwei verschiedene Versionen dieses Schlüssels zum Testen und für die Produktion angezeigt.
Als Nächstes müssen Sie das eindeutige, einmalige Token für die Kreditkartendaten des Benutzers erstellen. Wir können die verwenden Streifen
Objekt, das von dem importierten Skript für diesen Zweck bereitgestellt wird. Noch besser, wir müssen uns keine Sorgen machen, die Daten des Zahlungsformulars zu serialisieren. Durchlaufen Sie einfach das Formular jQuery-Objekt. Stripe übernimmt den Rest.
// Event Listeners $ ('# payment-form'). On ('submit', generateToken); var generateToken = Funktion (e) var form = $ (this); // Kein Drücken der Schaltfläche "Jetzt kaufen" mehr als einmal form.find ('button'). Prop ('disabled', true); // Das Token basierend auf dem Formularobjekt erstellen Stripe.create (form, stripeResponseHandler); // Verhindern, dass das Formular gesendet wird e.preventDefault (); ; var stripeResponseHandler = Funktion (Status, Antwort) ;
Wenn Sie mit diesem JavaScript-Code das Zahlungsformular absenden, versucht Stripe, ein Token zur einmaligen Verwendung zu generieren, und zwar unter Verwendung der zugehörigen Daten aus den zugehörigen Eingaben Streifen-
spezifische benutzerdefinierte Attribute. Das zweite Argument zum erstellen
Methode ist ein Rückruf, der das Token erhält (antwort.id
) vom Stripe-Server aus und verfahren Sie entsprechend.
Innerhalb dieses Callbacks ist es wichtig, das Ergebnis zu überprüfen (wurden alle Informationen korrekt angegeben), das Token in ein verborgenes einzufügen Eingang
, und senden Sie das Formular an Ihren Server. Beachten Sie auch hier, dass die Kreditkarteninformationen nicht Ihren Server treffen sollen - nur das Token und nicht sensible Daten. Dies ist wichtig, daher sollten Sie zur Bestätigung Schreib- oder Funktionstests durchführen.
Ihr Rückruf könnte so aussehen:
var stripeResponseHandler = Funktion (Status, Antwort) var form = $ ('# payment-form'); // Irgendwelche Validierungsfehler? if (response.error) // Zeigt dem Benutzer, was er falsch gemacht hat form.find ('. payment-errors'). text (response.error.message); // Das Senden erneut anklickbar machen form.find ('button'). Prop ('disabled', false); else // Ansonsten können wir loslegen! Senden Sie das Formular. // Einfügen des eindeutigen Tokens in das Formular $ ('', ' type ':' hidden ',' name ':' stripeToken ',' value ': response.id). appendTo (form); // Rufe die native Submit-Methode im Formular // auf, um zu verhindern, dass die Übermittlung abgebrochen wird form.get (0) .submit (); ;
Es ist wirklich ganz einfach! Senden Sie eine AJAX-Anforderung an die Stripe-API (mithilfe des hilfreichen JavaScript-Plugins), rufen Sie das generierte Token ab, fügen Sie es in das Formular ein und senden Sie es an Ihren Server!
In diesem Fall haben Sie an diesem Punkt erfolgreich ein Single-Use-Token generiert und das Zahlungsformular gesendet. Jetzt ist es Zeit für Ihre serverseitige Sprache, die Gebühr physisch zu erstellen. Denken Sie daran, dass im vorherigen Abschnitt keine Gebühren erhoben wurden. Wir haben nur ein Token generiert, das die Kreditkartendaten darstellt.
Stripe bietet eine Reihe serverseitiger Bibliotheken zur Registrierung neuer Gebühren oder sogar zum Abonnieren von Abonnements. Die Wahrscheinlichkeit, dass Ihre bevorzugte Sprache dargestellt wird, ist hoch (PHP, Ruby, Python usw.)..
Ähnlich wie im vorherigen Abschnitt kann das Einreichen einer neuen Gebühr in wenigen Schritten erfolgen:
Installationsanweisungen finden Sie auf der Library-Seite von Stripe. Wenn Sie PHP verwenden, wie in diesem Artikel beschrieben, wird empfohlen, Composer zum Herunterladen des Stripe-Pakets zu verwenden.
"required": "stripe / stripe-php": "dev-master"
Composer ist die Zukunft des PHP-Abhängigkeitsmanagements. Machen Sie jetzt mit, wenn Sie dies noch nicht getan haben. Eine einfache Stripe-Gebühr könnte folgende Form haben:
// Setze deinen API-Schlüssel Stripe :: setApiKey ("YOUR API KEY"); try Stripe_Charge :: create (['Betrag' => 2000, // ist in Cent: $ 20 'Währung' => 'usd', 'card' => $ _POST ['stripeToken'], 'description' => 'Beschreiben Sie Ihr Produkt']); catch (Stripe_CardError $ e) // Abgelehnt. Verarbeiten Sie ihren Einkauf nicht. // Gehe zurück und weise den Benutzer an, eine neue Karte auszuprobieren.
Das ist es! Der API-Schlüssel authentifiziert Sie als gültigen Stripe-Benutzer. Ähnlich wie beim veröffentlichbaren Schlüssel bietet Stripe Ihnen zwei verschiedene Versionen dieses Schlüssels an: eine für Testzwecke bzw. für die Produktion.
Bitte beachten Sie, dass alle Gebühren für Stripe in Cent angegeben werden müssen (basierend auf der Währung natürlich). Wenn in Ihrer Datenbank Preise in US-Dollar, US-Dollar oder Pfund gespeichert sind, sollten Sie dies bei der Berechnung entsprechend berechnen.
Wenn keine Ausnahme ausgelöst wird, können Sie sicher sein, dass die Gebühr erfolgreich verarbeitet wurde. Fahren Sie fort, indem Sie dem Benutzer seinen digitalen Download anbieten oder den Kauf bei Ihrem System registrieren.
Ob Sie es glauben oder nicht, die Arbeit von Stripe ist beendet. Es gibt sicherlich noch mehr Möglichkeiten, z. B. das Erstellen von Kunden und das Verwalten von Abonnements. Wenn Sie jedoch nur eine einzelne Zahlung abwickeln möchten, sind Sie fertig!… Nur Sie nicht.
Ja, die Arbeit von Stripe ist zwar erledigt, Ihre hingegen nicht. Unabhängig vom Zahlungsanbieter sollte die Sicherheit bei der Arbeit mit Kreditkarteninformationen ein Hauptanliegen sein. Wir haben bereits die ersten Schritte unternommen, indem wir sicherstellen, dass die Kreditkartendaten niemals den Server berühren, aber es gibt noch mehr zu tun. Als nächstes müssen wir die Verbindung des Benutzers zu Ihrem Server sichern. Sie benötigen also ein SSL-Zertifikat. Auf keinen Fall sollten Sie diesen Schritt überspringen!
„SSL (Secure Sockets Layer) ist die Standardsicherheitstechnologie zum Herstellen einer verschlüsselten Verbindung zwischen einem Webserver und einem Browser. Dieser Link stellt sicher, dass alle Daten, die zwischen dem Webserver und den Browsern übertragen werden, privat und integriert bleiben. ”- info.ssl.com
Wenn ein Benutzer einer Website seine Kreditkarteninformationen anbietet, erwartet er dies https
innerhalb der Adressleiste. Glücklicherweise ist der Kauf eines SSL-Zertifikats weitaus einfacher als früher. Tatsächlich bieten die meisten Hosts ein SSL-Add-On, das den gesamten Prozess in einen einzigen Klick umwandelt. Gleiches gilt für verschiedene SaaS-Optionen wie Pagoda Box oder Heroku.
Spitze: Wenn Sie SSL aktiviert haben, können Images und Assets möglicherweise beschädigt werden. Um dies zu beheben, stellen Sie sicher, dass alle URLs verwendet werden
https
, eher, alshttp
. Oder verwenden Sie als bessere Lösung protokollrelevante URLs.
Bei dieser von Paul Irish verbreiteten Technik, wenn die aktuelle Seite HTTPS verwendet, wird das Asset auch mit HTTPS angefordert.
Angenommen, Ihr Host bietet ein SSL-Add-On mit einem Klick, weisen Sie Ihren Benutzer einfach auf das https: //
Version der Bestellseite, und Sie können loslegen!
Die Beispiele in diesem Artikel sind einfach und meistens prozedural. Die Chancen stehen jedoch hoch, dass Sie mit einem Framework arbeiten, das mehrere Umgebungen, Routing- und Testfunktionen unterstützt. Verwenden Sie die folgenden Tipps, um Stripe in Ihr Framework Ihrer Wahl zu integrieren.
Natürlich möchten Sie keine echten Kreditkartennummern verwenden, um Ihre Zahlungsformulare zu testen! Zum Glück hat Stripe bereits daran gedacht; Dazu gehören eine Reihe von Kreditkartennummern, die bestimmte Antworten simulieren, z. B. eine erfolgreiche Belastung, eine ungültige Nummer, ein falscher CVC-Code und vieles mehr.
Hier sind ein paar Kartennummern, auf die Sie häufig verweisen:
Wenn Sie mit Stripe arbeiten, haben Sie zwei eindeutige Schlüssel, die die API und die veröffentlichbaren Schlüssel darstellen. Darüber hinaus gibt es Test- und Produktionsvarianten für jede davon. Die meisten Frameworks bieten die Möglichkeit, mehrere Umgebungen zu verwalten. Auf diese Weise verwendet Ihre Anwendung die Testschlüssel für die Entwicklung korrekt, während nach der Bereitstellung auf die Produktionsversionen verwiesen wird.
Unten ist ein Laravel-spezifisches Projekt. Laravel bietet ein einfaches Umweltsystem. Fügen Sie in einem Ordner eine Konfigurationsdatei hinzu, die dem Umgebungsnamen entspricht. Diese Werte haben Vorrang vor den Standardwerten.
Zuerst legen wir die Produktionsschlüssel fest:
'PRODUCTION API KEY', 'publishableKey' => 'PRODUCTION PUBLISHABLE KEY'];
Und für die Entwicklung überschreiben wir die Produktionsschlüssel mit ihren Testgegenstücken:
'TEST API KEY', 'publishableKey' => 'TEST PUBLISHABLE KEY'];
Nun, wenn die Anwendung den API-Schlüssel benötigt, verwenden Sie Config :: get ('stripe.apiKey')
, Der zurückgegebene Wert wird von der Umgebung bestimmt. Erfolg!
Ein häufiger Fehler, den Entwickler am Anfang machen, liegt darin, dass sie ihre Anwendungen mit verschiedenen Anbietern wie Stripe verknüpfen. Ihre Anwendung sollte sich nicht darum kümmern, welcher Rechnungsanbieter verwendet wird. Es geht nur darum, dass einer verfügbar ist. Durch das Festcodieren von Verweisen auf Stripe in Ihren Klassen stellen Sie eine direkte Verbindung zwischen den beiden her - eine, die wahrscheinlich schwer zu ändern ist.
Fragen Sie sich: „Wenn ich Stripe in Zukunft mit einem anderen Anbieter austauschen muss, wie schwierig wird das sein?“ Hinweis: etwas Größeres als „Einen Augenblick”Ist ein Code-Geruch.
Stattdessen Code für eine Schnittstelle - vielleicht BillingProvider
oder BillingGateway
. Auf diese Weise können Sie verschiedene Implementierungen der Schnittstelle erstellen: eine für Stripe oder eine für einen anderen Dienst, falls dies erforderlich sein sollte. Diese verschiedenen Implementierungen enthalten die dienstspezifische Funktionalität. Wenn Sie irgendwann einen günstigeren Abrechnungsanbieter als Stripe finden, tauschen Sie die Stripe-Implementierung von aus BillingProvider
mit einer ServiceX
Die Version dauert nur einen Moment - das heißt, sobald Sie die neue Implementierung erstellt haben, die den Server abfragt ServiceX
Abrechnungs-API.
Hier ist ein Skelett, wie das aussehen könnte:
// Definiere die Schnittstelle Schnittstelle BillingProvider public function charge ($ creditInfo); // Eine Stripe-Implementierungsklasse erstellen StripeBilling public function charge ($ creditInfo) // Stripe_Charge :: charge (…); // Eine ServiceX-Implementierungsklasse erstellen ServiceXBilling Gebühr für öffentliche Funktionen ($ creditInfo) // Benutzer mit ServiceX berechnen
Nun, da wir zwei Implementierungen haben, können wir auf unseren aktuellen bevorzugten Abrechnungsservice verweisen, indem wir Abhängigkeitseinspritzung verwenden.
Klasse PaymentController protected $ billing; öffentliche Funktion __construct (BillingProvider $ billing) $ this-> billing = $ billing;
Bei dieser Art der Entwicklung muss der Controller nicht berührt werden, wenn Sie sich von Stripe entfernen müssen. Da Stripe nicht hartcodiert ist, kennt es den Unterschied nicht!
Fragen Sie sich beim Verkauf digitaler Waren: „Was sollte der Käufer tun, wenn bei mir ein Problem auftritt?“ Geben Sie dem Käufer immer die Möglichkeit, mit Ihnen oder Ihrem Unternehmen Kontakt aufzunehmen. Was passiert, wenn die Bestätigungs-E-Mail mit einem Link zum Herunterladen der digitalen Datei niemals im Posteingang des Käufers ankommt? Was sollten Sie tun?
Eine Support-Site oder sogar eine einfache E-Mail-Adresse auf der Homepage sollte in diesen unvermeidlichen Situationen hilfreich sein.
Wenn Sie ein SSL-Zertifikat manuell erwerben müssen, stehen Ihnen mehrere Dienste zur Auswahl. Basierend auf früheren Erfahrungen können Sie davon ausgehen, dass Sie 30 Minuten bis eine Stunde damit verbringen, die Dinge einzustellen. Beachten Sie, dass die meisten Zertifikate nicht kostenlos sind und je nach Anbieter zwischen 10 und 500 US-Dollar liegen können.
Das Stripe-Team empfiehlt DigiCert und Namecheap. Wenn Sie möchten, können Sie eine kostenlose Lösung wie StartSSL in Betracht ziehen.
Ein häufiger Fehler besteht darin, dass Formulardaten verwendet werden, um den Preis des gekauften Produkts einzuschränken, möglicherweise über eine versteckte Eingabe. Da ein Benutzer den Wert dieser Eingabe problemlos bearbeiten kann, ist es unklug, davon abzuhängen. Holen Sie immer den Preis des Produkts von der Serverseite. Verlassen Sie sich niemals auf das Formular, um es Ihnen zu sagen. Eine einfache Datenbankabfrage ist die bevorzugte Option.
Das Asset, das Sie verkaufen, sollte niemals für die Öffentlichkeit zugänglich sein, auch wenn die URL Ihrer Meinung nach lang und verwirrend genug ist, so dass die meisten es niemals erfahren würden. Dies ist aus verschiedenen Gründen eine schlechte Praxis.
Erstellen Sie stattdessen eine Downloads
Tabelle, die eindeutige Kaufcodes sowie die zugehörigen Produkt-IDs enthält. Auf diese Weise, wenn eine URI, wie z / downloads / 23gsfga831g
, beantragt wird, wird Ihre Bewerbung:
Um weitere Schritte zu unternehmen, können Sie auch ein Downloadlimit erzwingen. Wenn man dies zulassen würde, müsste einfach ein download_count
Feld hinzugefügt werden Einkäufe
Tabelle. Bei jeder Anforderung sollte diese Nummer um eins erhöht werden. Sobald diese Anzahl Ihren festgelegten Schwellenwert erreicht, sollte der Download nicht mehr bereitgestellt werden. Dies kann in Fällen hilfreich sein, in denen Sie sicherstellen möchten, dass Download-Links nicht freigegeben werden.
Das Wunderbare an Stripe ist, dass eine komplizierte, verwirrende und gefährliche Operation in einen einzigen einfachen API-Aufruf umgesetzt wird. Keine Händlerkonten, keine Gateways, keine versteckten Gebühren. Es gibt einen Grund, warum sie sagen, dass Stripe lächerlich einfach zu bedienen ist. Es ist!