Ein Fremdsystem anbinden¶
Nur in den Editionen Pro und Enterprise
Eine Warenwirtschaft, ein CRM, ein Formular auf einer anderen Website soll Abonnenten eintragen. Diese Anleitung geht den Weg über die REST-Schnittstelle — für eine neue Anbindung ist sie die richtige Wahl.
Sie brauchen dafür jemanden, der programmieren kann. Die Schnittstelle ist kein Knopf, sondern eine Schnittstelle.
1. Das Modul einschalten¶
Newsletter → Konfiguration → Module → REST-Schnittstelle → Modul aktiviert: Ja, dann speichern.
Beim Einschalten entsteht ein Schlüssel: 64 Hexziffern, sichtbar auf der Modulseite. Er ist ein eigener — nicht der der SOAP-Schnittstelle.
Über http gehen die Inhalte im Klartext
Die Unterschrift schützt den Schlüssel, nicht die Mailadressen im Aufruf.
Richten Sie ein Zertifikat ein, bevor Sie anbinden. Das Modul weist im
Backend darauf hin, wenn Ihre Installation nicht über https läuft.
2. Die Adresse bestimmen¶
Auf der Modulseite steht die Basisadresse. Sie hat eine von zwei Formen:
mit sprechenden Permalinks https://ihre-domain.test/wp-json/wpng/v1/
ohne https://ihre-domain.test/?rest_route=/wpng/v1/
Geben Sie an Ihre Entwickler die Adresse von der Modulseite weiter, nicht eine selbst gebaute.
3. Den Schlüssel übergeben¶
Nicht per E-Mail und nicht in einem Ticketsystem. Nehmen Sie den Weg, den Ihr Haus für Zugangsdaten vorsieht.
Was der Schlüssel kann und was nicht
Er erlaubt genau vier Dinge: Gruppen lesen, Gruppen anlegen, Abonnenten anlegen und Abonnenten Gruppen zuordnen. Er gibt keinen Zugriff auf Newsletter, keinen Zugriff auf das Backend und keinen auf bestehende Abonnenten.
Das ist der Unterschied zur SOAP-Schnittstelle, deren Schlüssel auch die Abmeldelinks aus alten Mails unterschreibt.
4. Die Gegenstelle prüft sich an /status¶
Der erste Aufruf, den Ihre Entwickler machen sollten:
GET /wpng/v1/status
Er legt nichts an und ändert nichts. Kommt
{ "plugin": "wpNewsletterGermany", "version": "2.0.0", "zeit": 1789936431 }
zurück, stimmen Adresse, Schlüssel und Unterschrift — und die Anbindung kann loslegen, ohne einen Testabonnenten in Ihrer Liste zu hinterlassen.
zeit ist die Uhrzeit Ihrer Installation
Das Zeitfenster für einen Aufruf ist 15 Minuten. Läuft die Uhr der
Gegenstelle anders, schlagen alle Aufrufe mit
wpng_rest_zeit_abgelaufen fehl — und /status sagt, um wie viel.
5. Die Gruppen abholen¶
GET /wpng/v1/groups
[ { "id": 1, "name": "Interessenten" }, { "id": 2, "name": "Kundennewsletter" } ]
Lassen Sie die Gegenstelle die Nummern holen, nicht fest eintragen. Wer eine Gruppe umbenennt oder neu anlegt, bricht sonst die Anbindung.
6. Einen Abonnenten anlegen¶
POST /wpng/v1/subscribers
{ "email": "neu@beispiel.test", "vname": "Anke", "name": "Brandt", "sendOptIn": 1 }
Klären Sie status und sendOptIn, bevor der erste Aufruf läuft
| Wahl | Folge |
|---|---|
"sendOptIn": 1 |
Die Bestätigungsmail geht von hier aus hinaus. Der Abonnent wird erst mit dem Klick aktiv |
"status": 2 |
Der Abonnent ist sofort aktiv, ohne Bestätigung |
Der erste Weg ist fast immer der richtige: Dann ist die Einwilligung hier nachweisbar.
Der zweite setzt voraus, dass das Fremdsystem die Einwilligung selbst eingeholt und dokumentiert hat. Fragen Sie nach, wo dieser Nachweis liegt, bevor Sie ihn zulassen — das Plugin schreibt für über die Schnittstelle angelegte Abonnenten kein Einwilligungsprotokoll.
Kennt das System die Adresse schon, kommt 409 zurück, mit der Kennung des
vorhandenen Abonnenten. Das ist kein Fehler, sondern genug, um
weiterzuarbeiten.
7. Einer Gruppe zuordnen¶
POST /wpng/v1/groups/2/subscribers
{ "abo": [ 70, 71 ] }
{ "group_id": 2, "zugeordnet": [ 70 ], "unbekannt": [ 71 ] }
Zugeordnet wird zusätzlich — bisherige Gruppen bleiben. Ein Abonnent, den es nicht gibt, lässt den Aufruf nicht scheitern; die Antwort nennt beide Listen.
Die Unterschrift¶
Jeder Aufruf trägt zwei Kopfzeilen:
X-WPNG-Timestamp |
Unixzeit |
X-WPNG-Signature |
HMAC-SHA256 über Verfahren, Route, Abfrageteil, Zeit und Rumpf |
Das vollständige Beispiel steht unter REST-Schnittstelle.
Die häufigsten drei Fehler beim Anbinden:
| Fehler | Ursache |
|---|---|
wpng_rest_zeit_abgelaufen |
Die Uhren laufen auseinander. NTP auf beiden Seiten prüfen |
wpng_rest_signatur_falsch |
Meistens der Rumpf: Er muss Zeichen für Zeichen so unterschrieben werden, wie er über die Leitung geht. Wer nach dem Unterschreiben noch einmal json_encode() aufruft, bekommt einen anderen Rumpf |
| Die leere Zeile fehlt | Ohne Abfrageparameter ist die dritte Zeile der Unterschrift leer — der Zeilenumbruch bleibt trotzdem stehen |
Was Sie ausserdem regeln sollten¶
Wer bekommt Abonnentendaten zu sehen? Das Fremdsystem ist damit ein Empfänger im Sinne Ihrer Datenschutzerklärung. Wer das ist, wissen nur Sie — und es gehört hinein.
Was passiert bei einem Abgleich in die andere Richtung? Die Schnittstelle kann nicht lesen, wer sich abgemeldet hat. Wenn Ihr Fremdsystem das wissen muss, brauchen Sie dafür einen anderen Weg — etwa den CSV-Export.
Wer erneuert den Schlüssel, wenn es nötig wird? Neuen Schlüssel erzeugen weist jede Gegenstelle ab, die noch den alten benutzt. Stimmen Sie es vorher ab.
Und wenn es SOAP sein muss¶
Wenn Ihr Fremdsystem nur SOAP kann, geht das weiter — siehe SOAP-Schnittstelle.
Zwei Unterschiede, die Ihre Entwickler kennen müssen:
addToGroupersetzt die Gruppen des Abonnenten, statt zu ergänzen.getGroupsantwortet untermessage, nicht unterdata.
Und: Es braucht die PHP-Erweiterung soap auf Ihrem Server.