Das Zinn Digital®-Modul verwandelt die WHMCS-eigenen Schaltflächen in echte Aktionen auf unserer Plattform. Eine Bestellung richtet das Hosting Ihres Kunden ein. Die WHMCS-Automatisierung für überfällige Rechnungen sperrt es. Wird die Rechnung als bezahlt markiert, wird es wieder freigegeben. Eine Kündigung plant die Löschung. Und Ihr Kunde erhält in seinem Kundenbereich eine Schaltfläche Log in to hosting panel, die ihn direkt anmeldet.
Es ist kostenlos, unter GPL-2.0-or-later lizenziert und verfügt über keinen privilegierten Zugriff auf unsere Plattform: Jeder Aufruf, den es tätigt, ist ein dokumentierter Endpunkt, den Sie mit Ihrem eigenen API-Schlüssel auch selbst aufrufen könnten.
Bevor Sie beginnen
Sie benötigen zwei Dinge, und das zweite wird häufig übersehen.
- Ein Zinn®-Reseller-Konto mit einem aktiven Programm. Registrieren Sie sich unter
zinndigital.com und aktivieren Sie das Reselling.
- Einen Reseller-Tarif mit Website-Kontingent. Websites, die Ihre Kunden bestellen, werden auf Ihren
Tarif angerechnet; Sie benötigen also einen Tarif mit freiem Kontingent.
⚠️ Test Connection kann Ihnen nicht mitteilen, ob eine Bestellung erfolgreich sein wird. Es liest Ihr Programm aus und richtet nichts ein; daher meldet es ein ordnungsgemäßes active Konto, das jedoch noch nichts verkaufen kann. Wenn Ihre erste Bestellung mit „This organization has no hosting plan, so it cannot host a site yet“ fehlschlägt, ist genau das passiert — kaufen oder erweitern Sie Ihren Reseller-Tarif und geben Sie die Bestellung erneut auf. Mit dem Modul ist alles in Ordnung.
1. API-Schlüssel erstellen
Öffnen Sie in Ihrem Zinn®-Dashboard API keys und erstellen Sie einen Schlüssel mit genau diesen elf Berechtigungen:
| Berechtigung | Warum sie benötigt wird |
|---|
org.create | Erstellt das Zinn®-Konto Ihres Kunden bei dessen erster Bestellung. |
org.read | Liest Ihre Kundenkonten aus. |
sites.create | Richtet die Website ein. |
sites.view | Liest einen Dienst und dessen Nutzung aus. |
sites.delete | Kündigt/löscht den Dienst. |
reseller.view | Listet Ihre Verkäufe auf und liest Speicherplatz und Bandbreite aus. |
reseller.provision | Sperren, freigeben, Kunden anmelden, Tarif festlegen und Paket ändern. |
billing.view | Prüft vor der Durchführung, was ein Upgrade kosten würde. |
sites.manage | Cache leeren und Backups über die Schaltflächen erstellen. |
sites.panel_access | Ändert das Passwort des WordPress-Administrators. |
hosting.php.manage | Wechselt die PHP-Version bei einem Upgrade oder Downgrade. |
⛔ Gewähren Sie nicht reseller.manage. Ein Schlüssel, der in einem Abrechnungspanel hinterlegt ist, sollte in der Lage sein, einen Kunden wegen Nichtzahlung zu sperren und ihn anzumelden. Er sollte jedoch nicht Ihre eigenen Zugangsdaten für das Payment-Gateway auslesen und überschreiben können. reseller.provision existiert, damit Sie nicht die umfangreichere Berechtigung vergeben müssen. ⛔ org.create ist nicht optional. Ohne diese Berechtigung kann das Modul Ihre Konten zwar lesen, aber keines anlegen. Dadurch ist Test Connection erfolgreich, die erste Bestellung antwortet jedoch mit 403. ⛔⛔ Gewähren Sie alle Berechtigungen der Tabelle und beachten Sie, dass Test Connection Ihnen nicht mitteilen kann, wenn Sie dies nicht getan haben. Es liest Ihr Reseller-Programm aus und richtet nichts ein; daher wird es auch bei einem Schlüssel grün angezeigt, dem eine dieser Berechtigungen fehlt. Stattdessen erhalten Sie Monate später von einem Kunden einen 403-Fehler bei genau der Operation, die durch die fehlende Berechtigung abgedeckt wird.
2. Modul installieren
- Laden Sie das Modul herunter und entpacken Sie es.
- Laden Sie das Verzeichnis
zinn in Ihre WHMCS-Installation hoch, sodass die Moduldatei unter
modules/servers/zinn/zinn.php liegt.
⛔ Das Verzeichnis muss zinn heißen. WHMCS leitet die Funktionsnamen eines Bereitstellungsmoduls von dessen Verzeichnisnamen ab. Wenn Sie es in zinn-whmcs oder zinndigital umbenennen, wird das Modul zwar von WHMCS aufgeführt und lässt sich auswählen, wird danach jedoch nie aufgerufen — und zwar ohne jegliche Fehlermeldung. Die ZIP-Datei entpackt sich bereits mit dem richtigen Namen; benennen Sie es einfach nicht um.
3. Server hinzufügen
In WHMCS: Configuration → System Settings → Servers → Add New Server.
- Name: beliebig, z. B.
Zinn Digital®
- Hostname:
api.zinndigital.com
- Type:
Zinn Digital®
- Password: Ihr API-Schlüssel aus Schritt 1
⛔ Der Schlüssel gehört in das Feld Password, welches von WHMCS verschlüsselt gespeichert wird. Tragen Sie ihn nicht in eine Produktkonfigurationsoption ein — diese werden im Klartext in der Datenbank gespeichert und sind für jeden Administrator sichtbar, und diese Zugangsdaten können das Hosting Ihrer Kunden erstellen und löschen.
Klicken Sie auf Test Connection. Es wird ein echter Aufruf durchgeführt und die Rückmeldung unserer Plattform ausgegeben, anstatt lediglich zu prüfen, ob die Felder ausgefüllt sind.
4. Produkt erstellen
Configuration → System Settings → Products/Services, und setzen Sie dann die Module Settings auf den Server, den Sie gerade hinzugefügt haben. Die Felder lauten:
| Feld | Erforderlich | Was es ist |
|---|
| Product line | ja | Die Zinn®-Produktlinie, die Sie verkaufen — mainstream (Managed WordPress), footprint_free, wordpress, linux, cloud, agency, app_hosting, ai_hosting, lms_hosting, managed_database, vector_hosting, zinn_compute, fleet_linux, fleet_enterprise, mail oder reseller. |
| Stack | ja | Was eingerichtet wird: wordpress (Standard), woocommerce, php, static, node, one_click, headless_cms, nextcloud oder owncloud. |
| Application | nein | Nur für die Stacks one_click und headless_cms — welche Anwendung installiert werden soll. Die Angabe bei einem anderen Stack wird abgelehnt, da dieser Stack bereits festlegt, was installiert wird. |
| PHP version | nein | z. B. 8.3. Für den Standardwert der Produktlinie leer lassen. Eine Version, die von der Produktlinie nicht angeboten wird, wird unter Angabe der verfügbaren Versionen abgelehnt. |
| Plan code | ja | Der Zinn®-Tarif, den dieses Produkt verkauft. GET /v1/reseller/prices listet Ihre Tarife auf. Eine Bestellung ohne diesen Code wird abgelehnt — siehe Warnung unten. |
| Billing interval | nein | monthly (Standard) oder annual — das Intervall, in dem Ihre Wholesale-Abrechnungsposition für diesen Kunden erstellt wird. Was Sie Ihrem eigenen Kunden in Rechnung stellen, wird im WHMCS-Produkt festgelegt und bleibt davon unberührt. |
⛔⛔ Plan code ist erforderlich, und eine Bestellung ohne einen solchen Code wird absichtlich abgelehnt. Bis zum 01.09.2026 diente das Feld nur der Dekoration und wurde nicht ausgelesen; das Modul bestellte daher Hosting, das überhaupt keinen Tarif zugewiesen hatte — und jede Konsequenz daraus blieb unbemerkt. Ihre Wholesale-Abrechnung wird aus den aktiven Abonnements Ihrer Kunden erstellt, sodass es keinen Posten für den Dienst gab und Ihnen für die gesamte Laufzeit nichts in Rechnung gestellt wurde; Ihr Kunde erbte keine Kontingente, sodass für dessen Website keine Speicherplatz- oder Dateikontingente galten; und Change Package hatte nichts zu ändern, sodass ein von Ihnen verkauftes Upgrade nicht durchgeführt werden konnte. Die Website wurde durchgehend fehlerfrei bereitgestellt und ausgeliefert.
Das Modul lehnt die Bestellung nun stattdessen ab, da es keinen sicheren Standardtarif gibt, den es erraten könnte: Ein Erraten würde Hosting in einem Tarif einrichten, den Sie nicht gewählt und möglicherweise nicht kalkuliert haben, und — anders als eine Ablehnung, die Sie sofort sehen — würde dies, wenn überhaupt, erst beim Eingang einer Abrechnung auffallen.
Stellen Sie Auto Setup nach Ihren Wünschen ein — das Modul verhält sich bezüglich der WHMCS-Dienst-ID idempotent, sodass eine wiederholte Bereitstellung dieselbe Website zurückgibt, anstatt Ihnen eine zweite in Rechnung zu stellen.
Was die einzelnen WHMCS-Aktionen bewirken
| WHMCS-Aktion | Was auf unserer Seite geschieht |
|---|
| Create | Erstellt das Zinn®-Konto des Kunden (oder verwendet das bestehende) und richtet dessen Website ein. |
| Suspend | Belegt die Website mit einer Sperre wegen Zahlungsrückstands. Inhalte bleiben erhalten; nichts wird gelöscht. |
| Unsuspend | Hebt Ihre Sperre auf. |
| Terminate | Plant die Löschung der Website mit einer Nachfrist. Das Datum wird im Kundenbereich angezeigt. |
| Usage update | Aktualisiert Speicherplatz und Bandbreite für jeden Dienst einmal täglich. |
| Log in to hosting panel | Öffnet einen einmaligen Anmeldelink direkt in das Panel Ihres Kunden. |
| Change Package | Führt ein Upgrade oder Downgrade des Dienstes durch. Wechselt das Paket sowie die PHP-Version, falls das neue Produkt eine angibt. |
| Change Password | Legt das Passwort des WordPress-Administrators fest. Das Eingabefeld wird bei Stacks ohne ein solches Konto ausgeblendet. |
| Renew | Bestätigt, dass der Dienst noch existiert. Zinn®-Hosting läuft kontinuierlich, daher gibt es keine externe Laufzeit zu verlängern. |
| Sync Usage / Purge Cache / Take Backup | Schaltflächen auf der Dienstseite des Administrators. Ihr Kunde erhält Purge Cache und Take Backup in seinem Kundenbereich. |
| Service tab | Status, Tarif, Speicherplatz, Bandbreite, etwaige geplante Löschungen und wer eine Sperre verhängt hat. |
| Import | ListAccounts liest jede Seite aus, sodass ein Import nicht unbemerkt nach der ersten Seite abbricht. |
Upgrades: Wer wem was berechnet
Ihrem Kunden wird von Zinn® niemals etwas in Rechnung gestellt, weder bei einer Bestellung noch bei einem Upgrade. Sie stellen ihm die Rechnung über WHMCS; wir stellen Ihnen die Rechnung über Ihre Wholesale-Abrechnung. Ein Change Package ändert also die Berechtigungen Ihres Kunden sowie den Posten auf Ihrer nächsten Abrechnung und erfordert keine Kartenzahlung — WHMCS hat das Geld Ihres Kunden bereits eingezogen und seine eigene anteilige Berechnung durchgeführt.
Ein zweiter Dienst eines Kunden. Im selben Tarif handelt es sich um eine weitere Website im Rahmen des Website-Kontingents dieses Tarifs, und es wird nichts weiter gewährt. Bei einem anderen Tarif wird dies abgelehnt: Das Ersetzen des aktiven Tarifs würde dazu führen, dass einer der beiden Dienste nicht abgerechnet wird. Verkaufen Sie entweder beide im selben Tarif oder legen Sie den Kunden als separaten Kundendatensatz in WHMCS an.
Change Password existiert nur für WordPress. Zinn®-Hosting besitzt kein einheitliches „Dienstpasswort“ — Ihr Kunde erreicht sein Panel über die Anmeldeschaltfläche — und eine php- oder static-Website besitzt kein Anwendungskonto, das geändert werden könnte. WHMCS blendet das Feld vollständig aus, anstatt ein Feld anzuzeigen, das nicht funktionieren kann.
Drei Antworten, die Sie nicht zu zweien zusammenfassen dürfen
- Unsuspend kann mit einer Ablehnung antworten. Das bedeutet, dass die Website von unserem Abuse-Team gesperrt wurde,
nicht von Ihnen, und kein Abrechnungspanel darf sie freigeben. Die Meldung weist darauf hin; leiten Sie diese an Ihren Administrator weiter, anstatt es erneut zu versuchen.
- Terminate plant eine Löschung, führt sie jedoch nicht sofort aus. Das Datum wird als
pending_deletion_at
zurückgegeben und im Kundenbereich angezeigt. Einem Kunden mitzuteilen, seine Daten seien bereits gelöscht, wenn dies nicht der Fall ist, ist schlimmer, als ihm gar nichts mitzuteilen.
- Speicherplatz und Bandbreite können unbekannt sein, und unbekannt ist nicht gleich null. Wenn wir keine Messung
durchführen konnten, lässt das Modul den Wert unverändert, anstatt 0 einzutragen — andernfalls würde WHMCS Ihrem Kunden einen beruhigenden, leeren Nutzungsbalken für eine Website anzeigen, von der uns gar keine Messwerte vorliegen.
Fehlerbehebung
Test Connection ist erfolgreich und die erste Bestellung schlägt mit einem Berechtigungsfehler fehl. Dem API-Schlüssel fehlt org.create. Das Modul muss das Konto des Kunden anlegen, bevor es dessen Website erstellen kann.
Eine Bestellung schlägt mit dem Hinweis fehl, dass die Organisation über keinen Hosting-Tarif verfügt. Ihr Reseller-Tarif hat kein Website-Kontingent mehr übrig, oder Sie besitzen noch keinen. Siehe Bevor Sie beginnen oben.
Eine Bestellung schlägt unter Erwähnung eines Stacks fehl. Das Feld Stack beim Produkt ist leer oder benennt etwas, das wir nicht bereitstellen. Setzen Sie es auf wordpress, sofern Sie nicht etwas anderes verkaufen.
Kündigungen schlagen fehl. Stellen Sie sicher, dass Sie Modulversion 1.0.0 oder höher verwenden. Frühere Versionen sendeten keine Löschbestätigung und jede Beendigung wurde abgelehnt, wodurch der Dienst weiterlief und abgerechnet wurde.
Eine Ablehnung, die ein Feld benennt. Unsere Validierungsfehler nennen das Feld und den Grund in Klammern hinter der Meldung, z. B. (php_version: 7.2 is not offered on this product line). Das ist der relevante Teil, anhand dessen Sie handeln können — der vorangestellte Satz ist bewusst allgemein gehalten.
Download überprüfen
Jedes Archiv wird über TLS von unserem eigenen Hostnamen ausgeliefert und niemals auf den Host eines Drittanbieters umgeleitet. Die SHA-256-Prüfsumme ist neben dem Download-Link auf der Download-Seite angegeben. Vergleichen Sie diese nach dem Herunterladen:
- macOS oder Linux:
shasum -a 256 zinn-whmcs-1.0.0.zip
- Windows:
certutil -hashfile zinn-whmcs-1.0.0.zip SHA256
Sie nutzen kein WHMCS?
Es gibt ein HostBill-Modul und einen PHP-Client in einer einzelnen Datei für alle anderen Systeme, beide kostenlos und beide auf derselben Download-Seite. Jeder Endpunkt, den die Module verwenden, ist in der API-Referenz dokumentiert.