
Es wird auf einen bestimmten Punkt geachtet - dies wird ein Kryptogramm von Apple erhalten, nachdem der Käufer TouchID oder FaceID bestanden hat. Die Backend-Sprache ist PHP.
Mein Name ist Alexander, ich bin ein Junior-PHP-Programmierer bei Moguta und musste mich auf meinem Weg der Integration von Apple Pay in unser Moguta.CMS stellen. Heute werde ich Ihnen erklären, wie Sie sich über Apple Pay autorisieren können, Zahlungen zu leisten, ohne sich mit dem Material sicherer Verbindungen und Zertifikate zu befassen, da mir zu Beginn meiner Reise solches Material fehlte.
Einführung
Ich werde hier nicht das ganze Blatt malen, um Apple Pay auf meiner Website einzuführen. Anweisungen zum Registrieren eines Apple-Entwicklerkontos, zum Erstellen eines Zahlungsverarbeitungszertifikats und zum Senden der empfangenen Antwort finden Sie in RuNet. Fragen Sie einfach bei Google nach „Apple Pay Integration auf der Website“ und wählen Sie den gewünschten Zahlungsaggregator aus, in dem alle erforderlichen Schritte aufgeführt sind Aktion.
Kurzer Rückblick
Die Mindestanforderung für diese Anweisung ist das Vorhandensein von MacOS für die Arbeit mit Schlüsseln, da die Arbeit mit Zertifikaten auf anderen Betriebssystemen bereits ein separates Material ist, auf das ich hier nicht eingehen werde.
Lassen Sie uns zuerst herausfinden, wo der Ort unserer Feindseligkeiten sein wird. Der Algorithmus ist wie folgt:
- Der Benutzer beginnt den Zahlungsvorgang über Apple Pay im Online-Shop.
- Der Online-Shop sendet Zahlungsinformationen an Apple.
- Apple antwortet mit einem Link zu den Daten des Verkäufers.
- Der Online-Shop sendet Verkäuferdaten über einen Link über Two-Way TLS.
- Apple sendet Daten mit PaymentData.
- Der Online-Shop leitet PaymentData an das Zahlungsgateway weiter und verarbeitet die Antwort.
Wir interessieren uns für den 4. Punkt, da die übliche cURL-Anfrage nicht ausreicht.
Wir bekommen Zertifikate
Damit Apple glauben kann, dass es sich persönlich um uns handelt, benötigen Sie zunächst ein Händleridentifikationszertifikat (nicht zu verwechseln mit der Zahlungsabwicklung, es wird für ein Zahlungsgateway benötigt). Zu Beginn formulieren wir eine Zertifikatsanfrage gemäß den offiziellen Anweisungen . Die resultierende Datei wird an das Apple Pay Merchant Identity Certificate Ihrer Händler-ID angehängt.

Als Antwort erhalten wir Merchant_id.cer, die wir dem Haufen hinzufügen. Basierend auf dem privaten Schlüssel generieren wir eine .p12-Datei. Rufen Sie dazu das Kontextmenü des privaten Schlüssels auf und wählen Sie "Exportieren ...".

Wir ziehen den Schlüssel mit dem folgenden Befehl heraus (das Passwort, das das Terminal anfordert, ist das Passwort für den Schlüssel, wir benötigen es, wenn wir eine Verbindung zu Apple herstellen).
openssl pkcs12 -in < >.p12 -out ApplePay.key.pem -nocerts -nodes
und überholen Sie unser Zertifikat in pem
openssl x509 -inform der -in merchant_id.cer -out merchant_id.pem
Jetzt haben wir alle notwendigen Dateien, mit denen wir dem Apple Server beweisen, dass wir der sind, für den wir uns ausgeben.
Senden Sie eine Anfrage
Wir lassen den Moment des Erhalts des Links zur Validierung aus ( lesen Sie mehr in einem anderen Artikel über Habr ). Wir gehen zu dem Moment über, in dem das Skript auf JS in Safari unserem Server eine Autorisierungsanfrage in Apple gesendet hat.
Dafür verwenden wir PHP mit cURL. Codebeispiel:
$ch = curl_init(); $data = '{"merchantIdentifier":"<, Merchan ID>", "domainName":"< ->", "displayName":"< -, TouchID/FaceID>"}'; curl_setopt($ch, CURLOPT_URL, '< Apple, validationURL>'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_CERTINFO, true); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); curl_setopt($ch, CURLOPT_SSLCERT, '< >.pem'); curl_setopt($ch, CURLOPT_SSLKEY, '< >.pem'>); curl_setopt($ch, CURLOPT_SSLKEYPASSWD, '< >'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($ch); curl_close($ch); echo json_encode($res);
Wir ziehen Zahlungsdaten aus der empfangenen Antwort und senden sie an unser Zahlungsgateway. Herzlichen Glückwunsch, die Autorisierung ist bestanden, Sie können Geld rudern.
Hinweis
Das Schicksal ließ mich lange Zeit nicht über die hergestellte Verbindung freuen, und Apple gab mir die folgende Antwort:
Payment Services Exception merchantId=< > unauthorized to service on behalf of merchantId=< > reason=\"The latter is not registered for Apple Pay on the web\""
Der Text der Nachricht ist nicht offensichtlich genug, wie wir möchten. Informationen im Netzwerk, wieder nein. Wie sich herausstellte, bedeutet dies höchstwahrscheinlich, dass Sie einfach den falschen Wert in das Feld MerchantIdentifier eingegeben haben.
Zusammenfassung
Ich freue mich über Vorschläge, Tipps oder Kritik in den Kommentaren.
Ich hoffe, dass der Artikel den gleichen verlorenen Seelen zugute kommt wie ich.