Wie sicher die Zahlungsannahme im Online-Shop funktioniert

Die angegebenen Informationen gelten für jedes Zahlungssystem. Einschließlich für DSS PCI-Systeme, einfaches Erfassen (Akzeptieren von Zahlungen mit Kreditkarten), virtuelle Zahlungssysteme (Yandex.Money, WebMoney, Robokassa usw.).

Die Diskussion des Artikels "RBK Money Payer Transactions Compromised" hat das kritische Analphabetentum einiger Kommentatoren aufgedeckt. Normalerweise verursacht das Licht des Wissens in Unwissenheit Angst und Irritation, was interessant ist, aus den Kommentaren zu verfolgen. Ich habe dort in den Gesprächen nachgeklärt, wofür ich bezahlt habe.

Wie programmiere ich sichere Zahlungsannahme? Ich werde Erfahrungen teilen, ich werde erzählen und zeigen. Für Bedürftige wird am Ende des Artikels auf Beweise verwiesen.

Schauspieler


Es gibt drei von ihnen.
1. Benutzer - in der Regel eine lebende Person, die Dienste nutzt.
2. Online-Shop (IM) - Browser-basiertes CMS oder App mit Bezahlfunktion. Er muss einen Eigentümer haben, der das Recht hat, gewerbliche Tätigkeiten auszuüben (gemäß dem Zivilgesetzbuch der Russischen Föderation - geistiges Eigentum oder juristische Person - gewerbliche Organisation). Der Eigentümer des IM muss mit dem PS einen Rechtsvertrag abschließen und dessen Anforderungen für den technischen Anschluss erfüllen.
3. Payment System (PS) - ein Dienst, der die Möglichkeit bietet, Zahlungen zu leisten. Sein Eigentümer muss eine Finanzorganisation sein (eine juristische Person, die über die rechtlichen Fähigkeiten zur Durchführung solcher Aktivitäten verfügt).

Benutzeraktionen


1. Der Benutzer wählt im IM einige Waren oder Dienstleistungen aus.
2. Der Benutzer äußert den Wunsch, den Kauf im IM zu kaufen und zu bezahlen.
3. IM leitet den Benutzer an die MS weiter.
4. Der Benutzer leistet eine Zahlung im PS. Der Benutzer sieht, dass die Zahlung erfolgreich oder nicht erfolgreich ist.
5. Das PS fordert den Benutzer auf, zur IM zurückzukehren.
6. War die Zahlung erfolgreich, kann der Nutzer bezahlte Waren oder Dienstleistungen erhalten. Wenn die Zahlung nicht erfolgreich war, erhält der Benutzer eine Benachrichtigung.

IM-Aktionen


1. IM ermöglicht es dem Benutzer, eine Bestellung aufzugeben. In der Regel handelt es sich um eine oder mehrere bestellte Waren und Dienstleistungen. Bei Waren und Dienstleistungen sollten der Preis und die Bedingungen, unter denen sie verkauft werden, klar angegeben werden.
2. IM erstellt eine Rechnung zur Zahlung.
3. IM sendet den Benutzer an das PS, während die Kontodaten für die Zahlung gemeldet werden - Kennung, Betrag.
4. IM erhält vom PS eine Benachrichtigung über den Erfolg oder Misserfolg der Zahlung. Hierzu wird eine spezielle Nachricht gesendet - vom Benutzer! Der Benutzer kennt diese Nachricht nicht. Das Nachrichtenformat ist normalerweise XML oder JSON.
5. IM antwortet dem PS über den erfolgreichen Eingang der Benachrichtigung über den Status der Zahlung. Der Zahlungsdienstleister akzeptiert kein Geld, wenn die Sofortnachricht nicht funktioniert oder wenn der Erfolg der Zahlung nicht erkannt werden soll (z. B. wenn das Konto abgelaufen ist oder andere Ereignisse aufgetreten sind, aufgrund derer die Sofortnachricht diese Zahlung nicht erkennt). Ich wiederhole - in diesem Fall akzeptiert die PS keine Zahlung vom Benutzer!
6. IM begrüßt den Benutzer nach dem Besuch des PS und meldet den Status des Kontos zur Zahlung. In diesem Fall informiert der PS die Kontonummer IM - im Link oder in den von POST empfangenen Daten. Benutzer muss eingeloggt sein! Sie sollten Kontodaten nicht zur Zahlung an unbefugte Personen weitergeben (Dummheit, die in den berüchtigten Kommentaren diskutiert wurde!). Sie sollten den Autorisierungsmechanismus so programmieren, dass ein nicht autorisierter Benutzer, der zur Zahlung auf die Kontoseite gelangt, die Meldung "Zugriff verweigert" und eine Einladung zur Anmeldung erhält. Bei Erfolg sollte die Autorisierung zur aktuellen Seite der Site zurückkehren (oder nicht wegführen). Wenn der autorisierte Benutzer der Eigentümer des Kontos ist, hat er das Recht, seine Seite anzuzeigen.

PS Aktionen


1. Akzeptieren Sie den Benutzer von IM zusammen mit den Kontodaten für die Zahlung.
2. Akzeptieren Sie die Zahlung des Benutzers gemäß den Kontodaten für die Zahlung (Betrag, gültig bis, Währung).
3. Melden Sie dem IM den Erfolg oder Misserfolg der Zahlung (diese Nachricht ist für den IM, nicht für den Benutzer!).
4. Erhalten Sie eine Nachricht von IM, dass IM eine Nachricht über den Erfolg der Zahlung erfolgreich empfangen und bestätigt hat! Wenn der IM nicht antwortet, akzeptiert der Abonnent keine Zahlung vom Benutzer (er gibt das Geld zurück und informiert, dass die Zahlung abgelehnt wurde).
5. Informieren Sie den Benutzer über den Erfolg oder Misserfolg der Zahlung (diese Nachricht ist für den Benutzer, nicht für IM!).
6. Senden Sie den Benutzer durch Übermitteln der Kontonummer an den IM zurück (damit der Benutzer zur gewünschten Seite auf der IM-Site gelangen kann).



Rechnung zahlbar


Fügen Sie diese Entität zu Ihrem CMS hinzu, falls dies noch nicht geschehen ist.

Die Rechnung muss die folgenden Eigenschaften aufweisen:
1. Kennung. Dies ist normalerweise eine positive ganze Zahl. IM muss seine PS informieren, wenn Zahlungsaktion angefordert wird!
2. Erstellungsdatum des Kontos
3. Gültigkeitsdauer des Kontos. Dies ist eine optionale Funktion, die jedoch viele dumme Situationen vermeidet.
4. Betrag
5. Benutzer-ID. Wessen Konto ist das? Dies sind wichtige Informationen, die auch der Sicherheit dienen.
6. Ein Zeichen für die Gültigkeit des Kontos.
7. Andere Daten.

In IM gibt es neben dem Konto weitere Entitäten: eine Bestellung, Bestellstatus (manchmal handelt es sich nicht um eine separate Entität, sondern lediglich um denormalisierte Daten), Waren und Dienstleistungen in einer Bestellung.
Es ist nicht erforderlich, eine Bestellung und eine Rechnung für die Zahlung durch ein Unternehmen aufzugeben. Hierfür gibt es technologische Gründe, Benutzerfälle:
- Der Benutzer kann mehrere Zahlungsversuche durchführen;
- Die Gültigkeitsdauer (ich meine die relevante Zeit) der Bestellung kann von der Gültigkeitsdauer des Kontos abweichen, und dies ist normal.
- Die Ergebnisse von Störungen (einschließlich nicht technischer Probleme) und Einbrüchen sind gut dokumentiert. Protokolle speichern keine Benutzerdaten (Benutzerdaten). Und in dieser Essenz sind sie;
- andere den Entwicklern bekannte Gründe.

Ein kleines offtopic.

Wenn wir nur über das Programmieren von Sofortnachrichten sprechen würden, lohnt es sich, Folgendes in Erinnerung zu rufen.
1. Die Preise sind im Wesentlichen als "Waren und Dienstleistungen in Ordnung" zu verstehen. Die Preise ändern sich und das ist normal. Gleichzeitig sollten alte Daten nicht darunter leiden - Preise, die zum Zeitpunkt der Auftragserteilung früher in Kraft waren.
2. Sie können im IM keine echte Entfernung von Waren und Dienstleistungen vornehmen. Sie sollten als verbundene Daten angezeigt werden - für die korrekte Anzeige von alten Aufträgen, wenn sie verfügbar waren, in Katalogen usw.

Sofortnachrichtenaktionen mit Zahlungskonto


1. Schöpfung. Zu diesem Zeitpunkt muss die Bestellung vollständig abgeschlossen sein, da eine Datenbearbeitung während des Zahlungsvorgangs nicht zulässig ist.
2. Die Rechnung zur Zahlung sollte während des Zahlungsvorgangs nicht bearbeitet werden. Wenn der Inhalt der Bestellung geändert und noch nicht bezahlt wurde, muss eine neue Rechnung zur Zahlung erstellt werden, und die alte Rechnung wird für ungültig erklärt.
3. Ändern Sie den Status des Kontos für die Zahlung entsprechend dem vom PS empfangenen Signal. Die Rechnung für die Zahlung muss gültig sein (das Datum der Rechnungserstellung und der Gültigkeitszeitraum oder das Gültigkeitsdatum der Rechnung werden überprüft - dies kann so und so geschehen). In diesem Fall empfängt die IM eine Nachricht vom PS im JSON-, XML-Format oder einem POST-Datenpaket. Diese Nachricht ist von der Seite nicht betroffen (bestehend aus HTML, DOC, PDF, RTF). Darüber hinaus ist es überhaupt nicht für Menschen gedacht.
4. Kontoseite für den Benutzer. Muss durch Benutzersitzung geschützt werden. Auf dieser Seite kann der Benutzer des Kontos (oder der IM-Mitarbeiter) Informationen zum Status des Kontos anzeigen: bezahlt, nicht bezahlt, fehlgeschlagene Zahlung, abgelaufen usw.
Wenn Sie den Status eines Kontos ändern, sollte ein Trigger ausgelöst werden, der den Status der Bestellung ändert. Dies ermöglicht die Bearbeitung eines Online-Shops und zugehöriger Module: CRM, Lager usw.

Sicherheit


1. Der Benutzer muss vor der Zahlung im IM autorisiert sein.
2. Es ist gut, wenn die Aktionen des Benutzers in der IM durch SSL vor neugierigen Blicken verborgen sind.
3. Nachrichten, die zwischen PS und IM ausgetauscht werden, werden von Hashes begleitet, die mit geheimen Codes versehen sind und für jeden IM-Partner der MS exklusiv einzigartig sind. Hashes werden aus Kontodaten generiert. Ein Versuch, die Daten des ursprünglichen IM-Kontos zu verfälschen, führt daher zu einem Zahlungsfehler.
4. Alle persönlichen Daten, einschließlich Informationen über den Status und andere Details der Konten, müssen von der Benutzersitzung geschützt werden! Es reicht nicht aus, sie mit einem einzigen Hash zu schützen, wie in den berüchtigten Kommentaren erläutert. Aber die Gründe werden gerade dort aufgedeckt.

Quellen


Hier sind die versprochenen Bars.
Yandex.Money api.yandex.ru/money/doc/dg/concepts/About.xml
PayPal developer.paypal.com/webapps/developer/docs/classic/products
WebMoney wiki.webmoney.ru/projects/webmoney/wiki/Web_Merchant_Interface
Robokassa www.robokassa.ru/ru/Doc/Ru/Interface.aspx

Jetzt auch beliebt: