
Anfang 2017 haben wir, das Softwareentwicklungsteam für QIWI-Terminals, die Wünsche der Unternehmensabteilungen gesammelt - wir haben gelernt, welche globalen Aufgaben unsere Kollegen mit unserer Hilfe lösen möchten, damit das Leben einfacher wird.
Ich war sehr zufrieden mit der Anfrage des Kundendienstes, der mit Anrufen und Ansprüchen von Zahlern arbeitet:
„Es gibt ein Problem: Der Kunde leistet eine Zahlung am Terminal, erreicht die Verarbeitung jedoch immer noch nicht - entweder konnte das Terminal einfrieren oder das über das GSM-Modem funktionierende Internet fiel aus. Und es stellt sich heraus, dass der Kunde einen Scheck hat, aber keine Zahlung im System erfolgt. In solchen Fällen wäre es schön zu lernen, wie man Zahlungen an QIWI liefert.
Es gibt auch eine Gruppe ängstlicher Kunden, die unmittelbar nach der Zahlung eine Callcenter-Nummer wählen, um sicherzustellen, dass alles in Ordnung mit ihm ist. Es wäre großartig, die Knochen für solche Anrufe zu schneiden. “Wir hatten also eine komplexe Aufgabe: zu lernen, wie man bei einem Kommunikationsfehler mit dem Terminal eine Zahlung erstellt und die Anzahl der eingehenden Anrufe von Kunden reduziert, indem ein Self-Service-Tool zur Überprüfung des Zahlungsstatus erfunden wurde. Der Fall ist klar. Sie suchten nach einer Lösung, die für den Kunden bequem und ohne Sicherheitsrisiken ist.
Der Kunde bot traditionell die Möglichkeit an, auf die Quittung eine Folge von Zeichen zu drucken, die der Zahler dem Betreiber mitteilen konnte, und er wiederum zu verstehen, ob es sich um unsere Zahlung handelt oder nicht, den Betrug zu filtern oder den Vorgang manuell auszuführen.
Das Konzept der Idee war klar, aber nicht realisierbar, und so gingen wir noch einen Schritt weiter: Wir beschlossen, die Zahlungsdaten in den QR-Code einzubetten, sie auf die Quittung zu drucken und das QIWI-Terminal aus Gründen der Genauigkeit auf dem Bildschirm zu duplizieren. Durch Scannen des QR-Codes mit der Kamera seines Geräts kann der Client den Status des Vorgangs ermitteln. Und im Falle einer Nichtzahlung in QIWI erstellt das System diese automatisch. So findet der Kunde nicht nur heraus, ob das Geld angekommen ist, sondern führt es auch unabhängig vom Zustand des Terminals unabhängig durch.
Auf den ersten Blick war die Lösung offensichtlich: Nehmen Sie eine vorhandene Anfrage mit Zahlung, wickeln Sie sie in einen QR-Code ein, schreiben Sie eine Webseite mit Transaktionsinformationen und einem Microservice, der Anfragen zwischen dem Terminal, der Verarbeitung und dem Web überträgt. Es wurde angenommen, dass das Projekt an vorhandenen Methoden zur Terminalauthentifizierung arbeiten und vorhandene Zahlungsmethoden bei der Verarbeitung verwenden wird.
Die Idee kam sofort und enthüllte das kreative Potenzial des Teams. Wir haben angefangen, zusätzliche Optionen zu bieten, bis wir zusätzlich zu den Zahlungsdaten ein Logo, einen Slogan und sogar Werbung in einen QR-Code eingefügt haben:
Ein Projekt für ein paar Sprints, nicht mehr. Da war es.
Erste Frustration
Wir haben eine bestehende Zahlung angenommen und einen QR-Code darauf gebildet:
Infolgedessen konnte selbst das letzte iPhone7 zu diesem Zeitpunkt es nicht lesen. Auf dem Scheck passt der QR-Code, der nur aus Zahlungs- und Signaturdaten besteht, kaum auf die Hälfte des A4-Blattes. Die Zahlungsanforderungszeile war zu lang. Dies war die erste Traurigkeit.
Es war notwendig, zwei Hauptprobleme zu lösen:
- Reduzieren Sie die Anzahl der Zeichen in einer Zahlungsanforderung, d. h. eine Lösung finden, mit der wir von der bestehenden XML-Anfrage zu einer kompakteren übergehen können;
- Wählen Sie einen Verschlüsselungsalgorithmus und eine Schlüssellänge, die eine hohe kryptografische Stärke und Zuverlässigkeit bei einer kleineren Signaturgröße bieten.
Das Kriterium für die Bewertung der optimalen Anzahl von Zeichen für den QR-Code war eines - es sollte von Kameras der meisten Mobiltelefone gelesen werden.
In einigen Arbeitstreffen wurde dennoch eine Lösung gefunden:
- Anstelle der XML-Anfrage haben wir uns entschieden, eine Get-Anfrage mit Zahlungsparametern und Trennzeichen dazwischen zu verwenden.
- baute eine Signatur auf elliptischen Kurven, um die Länge zu verkürzen.
Der Vorteil der Verwendung der Get-Anfrage bestand darin, dass die Kameras von Mobiltelefonen oder speziellen Programmen, die den Link im QR-Code sehen, ihn sofort im Browser öffnen, wodurch eine Zahlung in einer Aktion möglich wurde. Um die Größe der get-Anfrage zu reduzieren, mussten wir den Parameternamen durch Trennzeichen ersetzen.
Infolge der Reihe von Aktionen wurde die Zahlungsaufforderung von ungefähr 1.100 auf 200 Zeichen reduziert. Außerdem musste ich die niedrigste Fehlerkorrekturstufe des QR-Codes anwenden - L.
Für die Implementierung mussten Komponenten im System entwickelt werden:
- Erstellen Sie eine neue API für Zahlungen über einen QR-Code.
- Einführung eines neuen Mechanismus für die Arbeit mit kryptografischen Schlüsseln zwischen Terminal und Verarbeitung;
- Implementieren eines Mikrodienstes, an dem die Funktionalität des Proxys von Anforderungen, das Überprüfen der Integrität empfangener Daten sowie die Funktion des Blockierens verdächtiger Anforderungen und des Sammelns von Betriebsstatistiken hängen bleiben;
- Entwicklung einer Webseite zur Anzeige von Zahlungsinformationen;
- Entwickeln Sie ein System von Limits und Checks für einen neuen Zahlungskanal.
Zum bestehenden Arbeitsschema:

Wir wollten eine Alternative hinzufügen:

Im Verlauf des Projekts scheint es klein zu sein, erfordert jedoch das Lösen von Problemen, was in der Tat viel Zeit in Anspruch nahm und den Starttermin verschob.
UX-Forschung oder Arbeit kamen von dort, wo sie nicht gewartet haben
Ich wollte alles so machen wie die Leute, deshalb haben sie UX-Spezialisten hinzugezogen, um das Projekt zur Lösung von Problemen umzusetzen:
- In welchem Teil des QIWI-Terminal-Bildschirms soll der QR-Code platziert werden und wie kann er dem Kunden seine Nützlichkeit erklären?
- Wo soll der QR-Code auf dem Scheck platziert werden und wie werden ähnliche Erklärungen abgegeben?
- Wie erstelle ich ein Layout einer Webseite mit Zahlungsstatus, damit es in den Unternehmensleitfäden klar ist?
Für den fortgeschrittenen Teil der Kunden sind natürlich keine zusätzlichen Erläuterungen zum QR-Code erforderlich, sie müssen lediglich das Ergebnis angeben. Wir wollten jedoch den Teil der Kunden abdecken, für den der QR-Code eine magische Abkürzung oder nur ein „schwarzes Quadrat“ ist. Tatsächlich brechen sie die Call-Center-Leitung ab.
Um es schön und verständlich zu machen, wurde innerhalb der für uns interessanten Fokusgruppe ein Interview mit unerwarteten Ergebnissen geführt ...
Kürze ist vergleichbar mit Sparen
Es stellte sich als beängstigend heraus - das Publikum, das wir brauchten, verstand die Bedeutung des Wortes „Scan“ und seiner Ableitungen nicht immer. Daher musste der ursprüngliche Wortlaut „Scannen und den Status herausfinden“ aufgegeben werden. Die Lösung war die technische Möglichkeit, ein Foto des QR-Codes per E-Mail zu senden. Und das musste auch kurz und deutlich gesagt werden, denn das Scheckband ist das Verbrauchsmaterial der Terminalbesitzer und unsere Sorge um das Geschäft dieser Leute ist seine Wirtschaft. Infolgedessen sieht die Prüfung jetzt folgendermaßen aus:
Die Anzeige des QR-Codes auf dem Terminalbildschirm wurde auf der letzten Seite der Zahlung platziert - der neuesten im Zahlungsszenario. Es wird zum Zeitpunkt des Drucks des Schecks angezeigt und ist im Wesentlichen ein elektronisches Duplikat des gedruckten QR-Codes.
E-Mail ist allgegenwärtig
Im Zusammenhang mit der Entstehung eines neuen Kanals zur Verarbeitung von QR-Codes in Form von E-Mails wurde es notwendig, Mechaniken zu entwickeln, die in Buchstaben eingebettete QR-Codes erkennen und eine Antwort mit dem Zahlungsstatus generieren.
Die Funktion zum Erkennen von QR-Codes wurde im Microservice übernommen. Bei der ersten Implementierung lag die Erkennungsrate in der vorgestellten Stichprobe von Fotografien bei etwa 65%. Wir haben versucht, mit Verfärbungen und erhöhtem Kontrast zu spielen - dies ergab eine erfolgreiche Erkennung von ca. + 20%.
Die Kirsche auf dem Kuchen bei der Erkennung von Fotos des QR-Codes war die Einführung von „natürlicher Intelligenz“ für schwierige, schlecht erkannte Fälle - die Erstellung von Anwendungen und deren Verarbeitung begann im manuellen Modus:
Technisch ist keine Kleinigkeit
Die Hauptentwicklungen bei diesem Projekt betrafen natürlich den Microservice selbst und die Terminalsoftware.
QIWI wechselt aktiv zu einer Microservice-Architektur, um die massive Engine nicht zu berühren. Mit Microservice können Sie schnell Änderungen an Projekten vornehmen, Tests durchführen und Releases freigeben. Deshalb haben wir in ein paar Monaten unsere eigenen geschrieben. Wir haben an allen wichtigen Neuentwicklungen festgehalten, die nur möglich waren:
- Proxy-Anfragen durch Parsen und Analysieren eingehender Get-Anfragen, Konvertieren in XML zur Verarbeitung,
- Funktionalität zur Begrenzung eingehender Anfragen von Terminals,
- QR-Code-Erkennungsfunktionalität,
- Statistiksammlung zur weiteren Analyse.
Neben der Implementierung eines neuen Mechanismus für die Arbeit mit kryptografischen Schlüsseln betrafen Terminalverbesserungen die Anwendung einer neuen Technologie zum Drucken von Belegen.
Die Funktionalität für ihre Bildung wurde aus dem Hauptkern des Programms im Plugin herausgenommen. Jetzt konnten wir Änderungen an der Prüfung umgehend vornehmen, ohne die Funktionsfähigkeit des gesamten Terminals zu beeinträchtigen. Die Aufgabe, einen QR-Code zu drucken, der auf den ersten Blick recht einfach erscheint und darauf hinausläuft, ein Bild auf einen Scheck zu drucken, ist nicht wirklich so.
Dies liegt daran, dass das Netzwerk unserer Terminalbesitzer über etwa 20 Modelle einer Vielzahl von Druckern verfügt und wir etwa 40 Arten von Belegen drucken. Als sie mit der Implementierung begannen, kamen viele Nuancen heraus: Entweder begannen die Linien und die Position der Objekte in der Prüfvorlage zu schweben, als das Bild hinzugefügt wurde, und einige Befehle erwiesen sich als empfindlich für die Position, und dann wurde der Zeilenumbruch zu einer Registerkarte.
Wir haben mit dem Testen begonnen und festgestellt, dass ein Kompromiss erforderlich ist. Einige Druckermodelle mussten ausgeschlossen werden, da beim Testen aller Konfigurationen eine immense Anzahl von Fällen herauskam.
Für Tests haben wir uns für 6 Hauptmodelle entschieden, die 91% des Agentennetzwerks abdecken. Und natürlich stellte sich zum Zeitpunkt der Durchführung von Zufallstests in einer Kampfumgebung heraus, dass auf alten Druckern, die etwa 5% des Agentennetzwerks abdeckten, Probleme mit dem Drucken von Belegen entdeckt wurden. Die Modelle waren so alt, dass sie selbst auf dem Markt nicht mehr gekauft werden konnten. Ich musste mit Partnern suchen. Jetzt deckt das Projekt 96% des Netzwerks ab. Schon etwas näher am Ideal :)
Kein einziger Scheck
Parallel zur Platzierung von Informationen über den QR-Code auf dem Scheck und der letzten Seite der Zahlung wurde eine weitere Aufgabe angesprochen: Diese Seite erhält ein universelles Erscheinungsbild für alle Terminalprojekte:
„In Bezug auf die Zahlungsabschlussseiten in QIWI-Terminals war alles ziemlich archaisch: Werbung, Banner und das Versenden elektronischer Quittungen. Auf fünf Seiten haben die Jungs eine erstellt, die für alle Zahlungen universell ist. “ - Führender Programmierer des Teams.
Jetzt wird diese universelle Seite in verschiedenen Interpretationen verwendet, ohne die Regel des Erstellens eines Skripts zu verletzen und die karmische Schuld des Entwicklungsteams zu schließen.
Damit war das Problem von vor zehn Jahren gelöst, zu dem die Hände nicht jedes Mal reichten. Es gab mehrere solche langwierigen Aufgaben.
"Wo ist das Geld, Zin?" oder was steht unter dem Strich
Das für einige Sprints konzipierte Projekt dauerte sechs Monate und wirkte sich auf die Ressourcen von 10 Mitarbeitern und den Rand der Outsourcing-Agentur aus.
Nachdem wir das Projekt in 85% des Terminalnetzwerks umgesetzt hatten, überraschten wir uns selbst und den Kunden - Kundenservice. Am dritten Tag des QR-Codes glaubten Kollegen, dass sich ein Systemfehler eingeschlichen hatte - Statistiken über die Anzahl der Anrufe beim Call Center mit der Frage „Wo ist meine Zahlung?“. bereits um 20% gefallen. Kunden begannen, den QR-Code zu scannen und Fotoquittungen per E-Mail zu senden, um den Status herauszufinden und selbst zu bezahlen. Und so für den zweiten Monat. Ich muss sagen, dass die Kunden begannen zu verstehen, was das "schwarze Quadrat" ist und wie es nützlich ist.
Das Projekt mit einem QR-Code wurde von allen gemocht, denen davon erzählt wurde - es war eine Synergie von Interessen: Einerseits vereinfachten sie das Leben des Kunden und andererseits lösten sie ein nicht standardmäßiges technisches Problem. Es ist etwas Neues, den Status einer Zahlung zu überprüfen und sie in einem Stück Papier zu verarbeiten, indem einfach ein QR-Code nach QIWI gescannt wird. Es war großartig, bekannte und einfache Technologien zu verwenden, um ein nützliches Projekt zu erstellen. Im Allgemeinen hat das Projekt nicht nur Fähigkeiten gefördert, sondern auch die Kommunikation innerhalb des Teams selbst verbessert. Und das ist fast das Hauptplus im Karma.