# Kundenguthaben per API



## Codem@ster (15. Sep. 2017)

Ich bastel im Augenblick an einer Lösung, um Kunden Guthaben zuweisen und verbuchen zu können.
Der Ansatz ist folgender: Ich habe eine externe Schnittstelle zur Domainabfrage. Kunden sollen die Möglichkeit haben über eine Gatewayseite Domains registrieren zu können, welche dann dem entsprechenden Kunden im ISPConfig zugebucht wird. Gleichzeitig soll DNS bereits eingerichtet sein.

Soweit so gut. Klappt auch problemlos über die API. Nun war der Gedankengang, die Domains auch sofort abzurechnen, indem man die Kunden (meist Reseller) vorher ein Guthabenkonto aufladen lässt. So lange es Guthaben aufweist, bzw. ein voreingestelltes Kreditlimit nicht erreicht ist, kann munter registriert werden. Die API bucht den entsprechenden Betrag dann vom Kundenguthaben runter und vermerkt dies in einem separaten Log (Kontoauszug).

Nun, der Spaß hat noch keine Frontend-Funktionen, aber das ist für meine Zwecke und die API erstmal nebensächlich. Viel wichtiger ist denke ich die Funktion an sich. Wer also ebenfalls daran Interesse hat, hier der Code (welcher in die Datei /usr/local/ispconfig/interface/lib/classes/remote.d/balance.inc.php gehört).

Wie immer: Use it at your very own Risk  - ich übernehme keine Haftung. Nicht für den Code, nicht für Schäden, nicht für alternative Fakten.

PS: Weitere Info's zu den anzulegenden Tabellen, etc. findet ihr in der Datei.


----------



## Codem@ster (21. Sep. 2017)

GUI in Progress...
Ich arbeite im Augenblick an einem passenden Webinterface. Es wird sicher noch einige Tage dauern, bis es betafähig ist, aber hier schon mal ein paar Screenshots. Zum Funktionsumfang sage ich was, sobald die erste arbeitsfähige Version fertig ist.


----------



## Codem@ster (3. Okt. 2017)

Aktueller Stand!

Wie es beim Basteln halt immer so ist... man nimmt sich vor Papierflieger zu falten und plötzlich merkt man am Geschrei der Frau, dass man am Triebwerk einer Boing im Garten schraubt...

Die schlechten Nachrichten vorab:
- aufgrund der Tatsache, dass ich diversen Gründen Traits verwendet habe, läuft das Ganze nur ab PHP Version 5.4.0 !!
- die Struktur aus der balance.inc.php (erster Post) ist DEPRECATED und für die neue Fassung nicht mehr zu gebrauchen.
- es gibt kein Migrationstool von der vorgenannten Fassung zur aktuellen Version. Manuelles migrieren sollte aber gehen.

The good News:
Die GUI ist fertig, allerdings teste ich noch das ein oder andere, um letzte Release Fehler noch beheben zu können.
Der ganze Spaß kommt mit einem Installer daher, der die vollständige Grundeinrichtung und Anpassung der ISPConfig Dateien übernimmt. Dieser benötigt Root-Zugriff auf die Datenbank, um das Schema anpassen zu können. Außerdem habe ich der GUI eine PayPal und eine Skrill Schnittstelle spendiert.

Grundsätzliche Features:
- Installer für Datenbank-Schema und Dateien
- Umfangreiche Erweiterung der Remote-API
- Kontenmanagement zu 100% über die Remote-API steuerbar
- Zentrale Trait-Klasse auf welche die Remote-API und die GUI zurückgreifen
- Integriertes Database Reset Tool, um Konten und Transaktionen zurückzusetzen (nachdem man zu Ende gespielt hat)
- Accounting-Logbuch unter /var/log/ispconfig/client_account.log mit 5 Logleveln und Debugfunktion
- Für Kunden konfigurierbare Einzahlungswege: Überweisung, PayPal, Skrill (Kreditkarten, Sofortüberweisung, etc.)
- Separate Transaktionslogs für alle Konten (Umsätze pro Konto), auch für Kunden einsehbar, mit Statusanzeige und Saldo
- Grundsätzliche Buchungsfeatures: Einzahlen, Zahlen an Kunden/Reseller/Systemkonto, Auszahlen, optional mit Verwendungszweck
- Zentrales Systemkonto nimmt Zahlungen von Kunden oder Resellern entgegen, kann Zahlungen senden und empfängt Transaktionsgebühren
- Automatische Buchungsjobs für alle Konten (Einzahlen,Auszahlen,Bezahlen), einmalig oder dauerhaft ausführbar über die ISPConfig Cron API
- Kunden- und Resellerkonten per Default im Debitmodus, wahlweise Kreditlimit einstellbar
- Bei Nichtausgleich von überzogenen Konten wird Konto automatisch eingefroren
- Einfrieren auch manuell möglich (nur Einzahlungen durchführbar, keine Auszahlungen, keine Abbuchungen)
- Möglichkeit Überziehung von Debitkonten oder ausgeschöpftem Kreditlimit über die Remote-API zu erzwingen
- Konten einzeln sperrbar oder über Kundenverwaltung
- Umfangreiche Kontenzeitstempel-Auswertung (letzte Buchung, letzte Fehlbuchung, letzter Zugriff, letztes Einhorn.........)
- Kunden von Resellern nehmen Zahlungen direkt an den Reseller vor, PayPal / Skrill Gebühren gehen auf das Systemkonto
- Reseller sehen nur ihre Kunden und nehmen Zahlungen an das Systemkonto vor, können aber ihren Kunden auch Gutschriften erteilen
- Umfangreiche Einstellmöglichkeiten für PayPal und Skrill, inkl. hinzufügen von Bearbeitungsgebühren, die dem Systemkonto gutgeschrieben werden.
- IPN Schnittstelle für PayPal und Skrill, mit Logausgabe über die Client_Account Trait-Schnittstelle
- Bei vorhandenem Kundenkonto sieht der Kunde/Reseller neben dem Abmelden-Button einen Button mit seinem Kontostand und bekommt mit einem Klick seine Kontoübersicht und kann bei Bedarf sein Konto über die freigeschalteten Zahlungsprovider aufladen.

Das Ding hat so viele Möglichkeiten, dass ich vermutlich die Hälfte vergessen habe zu erwähnen. Also, auf meiner TODO Liste steht noch Testen, testen, testen und außerdem fehlt noch ein Twin-Transaction-Check bei den Zahlungsprovidern, der doppelte Transaktionen verhindern soll. Also gebt mir bitte noch zwei Tage, dann sollte alles so weit sein, dass ihr es hier herunterladen könnt.

Im Großen und Ganzen ist damit ein vollständiges System für Prepaid-Hosting entstanden, welches auch automatisch buchen kann. Wenn es irgendwann fester Bestandteil von ISPConfig werden könnte, wäre das ein Traum, da man dann auch tiefer ins Interface eingreifen könnte. Mir schwebt da vor, Preisschilder an einzelne Services oder Templates zu heften, welche dann automatisch pro Kunde und pro gebuchter Leistung berechnet werden können und bei Nichtzahlung die Lichter aus macht. Technisch kaum ein Problem, ich habe das hier auf einem Testsystem schon so laufen, aber die Eingriffe ins ISPConfig sind enorm. Daher gibt's hier nur eine "Community-Fassung", welche mit sehr sehr wenigen Eingriffen auskommt.

SPOILER: Ein Domainmanagement System mit Verfügbarkeitsabfrage und Schnittstelle zum Buchungssystem steht schon in den Startlöchern.


----------



## Codem@ster (9. Okt. 2017)

Here we go! Introducing -> Clientaccounting for ISPConfig
Was lange währt...funktioniert hoffentlich 
Anbei die erste Beta für euch zum Testen!

Ich empfehle die Datenbank dbispconfig und das Verzeichnis /usr/local/ispconfig (sofern es bei euch dort liegt) zu sichern. Das Paket enthält einen Installer, der die notwendigen Anpassungen an der Datenbank und an einigen Dateien der ISPConfig Installation vornimmt. Durch das Auspacken werden keine Dateien der regulären ISPConfig Installation überschrieben. Das Paket ist für das Default Theme geschrieben. Getestet wurde das ganze auf einem Debian 9 Server mit Apache2, ISPConfig 3.1.6 und PHP 7.1 (es ist mindestens PHP 5.4 erforderlich, mit SSL und CURL Unterstützung).

Für die Nutzung von PayPal und Skrill wird ein zusätzlicher VirtualHost benötigt, da die IPN (Instant Payment Notification) nur am Standard-SSL Port 443 funktioniert und eben nicht am Port 8080. Wie das genau geht, wird gleich noch beschrieben.

Und so funktioniert's:
- Als ROOT Benutzer am Server anmelden
- die Datei im Anhang herunterladen nach /tmp
- in das /usr/local Verzeichnis wechseln und das Paket auspacken
- root Zugangsdaten für die Datenbank bereithalten
- in das Library Verzeichnis des ISPConfig Interfaces wechseln
- Installer ausführen und Anweisungen befolgen

Step by step:
# cd /tmp
# unzip ispconfig-clientaccounting.zip
# cd /usr/local
# tar -xzf /tmp/ispconfig-clientaccounting.tgz
# cd /usr/local/ispconfig/interface/lib
# php client_account.install.php

Clientaccounting ist nun betriebsbereit. Die Einstellung erfolgt über die Anmeldung als admin am Webinterface, im Kundenmenü. Die client_account.install.php sollte auch nach jedem Update von ISPConfig ausgeführt werden, um die Integrität der Installation sicherzustellen.

Alle Aktionen werden in der Datei /var/log/ispconfig/client_account.log protokolliert. Das Loglevel kann über die Datei /usr/local/ispconfig/interface/lib/traits/client_account.trait.php angepasst werden, in welcher auch alle relevanten Funktionen zu finden sind. Diese sind auch über die Remote-API steuerbar und lauten bis Dato:

client_account_get
client_account_get_logs
client_account_set
client_account_set_credit
client_account_unset_credit
client_account_disable
client_account_enable
client_account_freeze
client_account_unfreeze
client_account_register
client_account_get_log_level
client_account_log_to_file
client_account_ipn_transaction_get
client_account_ipn_transaction_set
client_account_find_config
client_account_get_config_value
client_account_set_config_value
client_account_delete_config
client_account_delete
client_account_get_all_active
client_account_get_view
client_account_get_job
client_account_get_jobs
client_account_get_executable_jobs
client_account_set_job_exec_infinite
client_account_set_job_exec_once
client_account_set_job_enable
client_account_set_job_disable
client_account_delete_job
client_account_add_job
client_account_get_by_id
client_account_get_view_by_id

Wenn ihr mit dem Testen/Spielen fertig seid, könnt ihr die Datenbank wieder auf den Installationszeitpunkt zurücksetzen (leeren), mit dem Tool:

# php /usr/local/ispconfig/interface/web/client/client_accounting_cleansweeper.php

In der Datei findet ihr die zwei notwendigen Argumente, um das Löschen zu bestätigen.

Um IPN Zahlungsbestätigungen zu empfangen, muss ein VirtualHost mit ReverseProxy angelegt werden. Hierzu in ISPConfig eine neue Webseite oder Subdomain (vHost) anlegen, SSL aktivieren und vertrauenswürdiges Zertifikat hinterlegen (z.B. mit Letsencrypt). Dann auf die Registrierkarte Optionen wechseln und unter Apache Direktiven folgendes hinterlegen (subdomain.beispiel.host gegen die entsprechende Domain austauschen, evtl. Port 8080 anpassen, falls notwendig):

SSLProxyEngine On
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
ProxyPass /ipn/ https://subdomain.beispiel.host:8080/ipn/ retry=0 timeout=900
ProxyPassReverse /ipn/ https://subdomain.beispiel.host:8080/ipn/

In den Kontoeinstellungen für Clientaccounting dann unter PayPal als Callback-URL https://subdomain.beispiel.host/ipn/paypal.php und unter Skrill https://subdomain.beispiel.host/ipn/skrill.php eintragen.

Ich hoffe ich habe für den Anfang nichts vergessen, wenn doch, nachfragen.
Und nun viel Spass beim Testen.

Wie immer: keine Garantie, keine Gewährleistung, keine Rücknahme - und keine Haftung bei Schäden aller Art - Nutzung auf eigene Gefahr.


----------



## HSorgYves (9. Okt. 2017)

Was wenn ISPConfig bereits unter Port 443 läuft? Funktionniert PayPal dann out of the Box?


----------



## Codem@ster (9. Okt. 2017)

Kurze Antwort, Ja.


----------



## Till (9. Okt. 2017)

Ich bin derzeit dabei den ISPConfig Extension installer für ISPConfig 3.2 komplett neu zu schreiben und zu vereinfachen. Ziel ist es dass man Erweiterungen in ISPConfig in Zukuft so einfach wie z.B. in Wordpress installieren kann und dass auch einige Core Funktionen die nicht so häufg vrwendet werden als Extensions ausgelagert werden um den Kern von ISPConfig scmal zu halten. Ich denke mal Deine Erweiterung würde da super rein passen. Ich werde mir dann auch noch einmal Mechanismen ansehen wie man bestehende Formulare einfacher und updatesicher per Extension erweitern kann, um z.B. zusätzliche Client Limits per Extension zu implementieren.


----------



## teycom (29. Nov. 2017)

Hallo Till, ich setze ebenfalls das ISPConfig ein. dein Projekt hat ganz bestimmt den einen oder anderen Vorteil, daher bin ich sehr daran interessiert dein Projekt näher kennen zu lernen. Gerade weil ich eine Onlne Banking API entwickelt habe, frage ich mich wie wir durch die Kombination deiner API und API das Modul zu einem Alseitz Nutzbarem ISPConig E-Walled Ausbauen könnten. Bei Interesse melde dich doch einfach bei mir , würde dich auch gerne Persöhnlich sprechen. Wenn Du mehr über meine API erfahren möchtes, hier der Link zu meiner FinTech API payjinn[dot]com  dort findest Du unter API-Docs eine Umfangreich beschreibung zum Funktionsumfang. Grüsse aus Hamburg, Teyhan


----------



## teycom (29. Nov. 2017)

Habe nochmals über deine E-Walled gegrübelt, ich bin total fasziniert von der Idee: deine Lösung und mein Clearinghaus von Payjinn in kombination in ISPC nutzbar zu machen.

1. in Payjinn können auf wunsch über 350 Paymentmittel nutzbar gemacht werden
2. Alle gängigen Payment Mittel für deutschland wie PayPal, Sofortüberweiseung, Giropay, Kreditkarten, Telecash, Wirecard usw sind heute schon nutzbar.
3. Wie haben ein eigenes Direküberweisungszahlungsmittel entwickelt, funzt so änlich wie die Sofortüberweisung. Da es unser eigenes ist kann es aber auch besonders gut angepasst werden.
4. Alle Zahlungseigänge der Paymentmittel können in einer Ansicht angezigt werden.
5. Alle Zahlungseingänge auf deiner Hausbank können mittels eines HBCI Zugangs erwarteten Zahlungen zugeordnet werden.

Mit diesem Funktionsumfang unterstütze ich dein Vision im vollem Umfang, könnte die Perfekt E-Walled in ISPConfig werden.

Hier nochmal ein par Screen von meinem PayJinn Clearinghaus und den Möglichen Zahlungsabgleich. Bis dann, Teyhan. alias Payjinn


----------



## chris_krefeld (9. Feb. 2018)

Hallo zusammen,

ich bin weiß Gott kein experte und lese hier in eurem Bereich einfach nur mal mit, aber ich habe einen Managed rServer mit ISPConfig und interessiere mich für diese beiden Erweiterungen brennend. 

Gibt es dazu einen aktuellen Stand?

Lieben Gruß

Christian


----------



## thommy (24. Sep. 2018)

Zitat von Codem@ster:


> Here we go! Introducing -> Clientaccounting for ISPConfig
> 
> 
> [...]
> ...


Nachdem das ja schon was älter ist: Funktioniert das auch mit dem aktuellen ispconfig?

Frage dazu: 
Eingehende Domainbestellungen landen beim Admin per Mail?! Oder kann eine API zu z.B. InternetX AutoDNS genutzt werden?
Die mtl. Kosten des Hostingpaketes werden ebenfalls von diesem Guthaben verrechnet?
Was passiert, wenn Kunde kein Guthaben mehr hat?


----------



## Falconbase (25. Nov. 2019)

hi Codem@ster,

wie schaut es mit deinem Projekt aus, hätte da interresse.


----------

