Webhook lokal empfangen

internet

Top Contributor
Hallo,

für eine interne Applikation, möchte ich gerne lokal (localhost) Webhooks empfangen.
D.h. ich kann den Webhook nicht an meine öffentliche URL senden...

Stripe (Payment Provider) soll mir hier Webhooks senden können.
Stripe bietet hier das an: https://stripe.com/docs/stripe-cli

1. Meine Idee ist aber sobald meine Applikation läuft, dass entsprechend etwas gestartet wird?
2. Was wird bei Stripe als URL definiert? Localhost wird ja nicht funktionieren...

Hat hier jemand Erfahrung?
 

httpdigest

Top Contributor
Naja, du brauchst einen DNS-Namen vermutlich auch mit TLS/SSL Zertifikat (keine Ahnung, ob Stripe da Aufrufe unverschlüsselt mit nur HTTP verlaubt). Und hinter dem A/AAAA Record des DNS Namens muss sich ein Server mit einer öffentlichen IP verbergen (kann auch dein Router sein mit Port-Forwarding).
 

internet

Top Contributor
also es gibt ja Webseiten, bei der man eine URL registrieren kann:
folgende scheint mir sowas zu können: ultrahook.com

Das Problem ist nun aber, dass auch hier irgendwas von der Konsole gestartet / installiert werden muss.
Ich bräuchte aber etwas, das während dem Start meiner Applikation ebenfalls gestartet wird. Also etwas in der Art wie ein "Listener".

Bpsw. gebe ich eine URL in meinem Programm an, die überwacht wird.
Kommt hier ein Webhook rein, dann reagiert eben mein Programm...

Die Frage ist aber, wie mache ich das?
 

httpdigest

Top Contributor
Ja, natürlich. Du brauchst einen HTTP/HTTPS Endpunkt auf irgendeinem per Public IP erreichbaren Server...
Was genau ist jetzt deine Frage bzw. dein Problem?
Weißt du nicht, wie man ein Java-Programm startet, so dass es einen HTTP/HTTPS Endpunkt bereitstellt, an den man Anfragen/Requests senden kann? Oder weißt du nicht, wie man einen lokalen Server (deinen Rechner) vom Internet aus erreichbar macht? Oder was?
 

internet

Top Contributor
Ja, das ist klar....
Aber wie mache ich das mit dem "Listener", der quasi gestartet wird, sobald auch mein Java Programm gestartet wird?
Ich stelle mir sowas vor, dass ich eben meinem Java Programm die URL mitteile, die überwacht wird. Und wenn hier ein Request reinkommt, mache ich eben irgendwas mit dem Request / JSON Objekt etc.
 

httpdigest

Top Contributor
Nein. Die URL (bzw. der Domänen/Authority-Anteil) ist nur die "Adresse", auf der dein Server erreichbar ist. Du brauchst hier deinem Server selbst nicht die URL mitteilen (es sei denn du willst sowas wie virtual hosting).
Die URL (bzw. der Domänenanteil der URL) muss letztlich in dem weltweiten Domain Name System (DNS) über einen Registrar verwaltet sein und auf deinen Server zeigen.
Also: Du musst dir erstmal eine Domäne registrieren/kaufen, oder ich glaube, es gibt auch DNS-Services, bei denen du einfach mal so die IP deines Servers über einen generierten DNS Namen konfigurieren kannst.
 

internet

Top Contributor
Ja, aber mein Server steht nicht im Internet, daher muss ich doch einen Umweg über einen Proxy o.ä. gehen....
Stripe -> sendet Webhook an ultrahook.com bpsw. -> wie bekomme ich nun aber den Webhook? Es gibt ja keine URL...
Die URL wäre localhost:8080/myservice... aber diese kann doch ultrahook.com nicht auflösen
 

httpdigest

Top Contributor
Ja, genau, und dieser "Umweg" ist einfach dein Router, der ja mit einer öffentlichen (durch deinen Internetprovider) generierten IP im Internet hängt.
Dein Router hat aber eben nur eine IP und keinen DNS Namen.
Diesen DNS Namen musst du dir erstmal besorgen von z.B. einem Registrar.
Und dann musst du für diesen DNS Namen einen A Record konfigurieren, der auf die IP deines Routers zeigt.
Und dann musst du in deinem Router eine Port-weiterleitung einrichten, so dass eben Pakete an deinen Router weiter an deinen lokalen Rechner in deinem lokalen Netzwerk gehen.
 

httpdigest

Top Contributor
Potenziell, ja. Anders wirst du aber eben deinen lokalen Rechner nicht aus dem Internet erreichen können.
Es gibt auch sowas wie DynamicDNS (DDNS). Hier konfiguriert der Router selbst bei einem DNS Service seine IP, wenn sie sich ändert.
 

httpdigest

Top Contributor
Andere Frage wäre, ob du nicht einfach einen virtual Host (Server) bei einem Hosting-Anbieter oder Cloud-Dienstleister mit einer fixen statischen öffentlichen IP reservieren möchtest. Dann hast du das Problem mit dynamischer IP nicht. Hast dafür aber ganz andere Probleme.
 

internet

Top Contributor
nein, das ist aber nicht was ich brauche :)

Wie gesagt ich stelle mir sowas eher vor wie ein Listener
  • Java Programm starten
  • Unique ID von einem Webhook Provider wird überwacht ultrahook.com
-> Stripe sendet Webhook an: ultrahook.com/123456789
-> Mein Java Programm bekommt den Webhook
 

httpdigest

Top Contributor
Du verstehst anscheinend nicht, wie das Internet und wie Webhooks überhaupt funktionieren.
Ein Webhook ist einfach nur eine URL, die man irgendwo registriert, und diese wird von jemand anderem aufgerufen.
Damit dann etwas auf DEINEM Rechner passiert, muss natürlich dieser Aufruf des Webhooks (also ein einfacher HTTP Aufruf) auch auf DEINEN Rechner ZEIGEN!
Du kannst hier nicht einfach einen Webhook auf irgendeiner URL überwachen.
 

internet

Top Contributor
also das mit virtueller Host. etc. ist leider keine Lösung...

Also ich bräuchte irgendwie etwas, das mir beim Starten meiner Java Applikation mich "registriert" und damit meine IP Adresse weiß...
also ähnlich wie das auch Ultrahook im Hintergrund macht?
1662735045311.png
 

LimDul

Top Contributor
Dafür brauchst du immer irgendeinen, ständig erreichbaren Server im Internet.

Grundsätzlich kannst ja auch ultrahook nehmen und versuchen es entweder auf java zu portieren oder einen Ruby-Wrapper schreiben.

Allerdings würde ich sowas nur zum spielen nehmen, nicht wenn irgendeine Anwendung da zwingend drauf angewiesen ist, da du auf die Verfügbarkeit des Dienestes angewiesen ist - und was nix kostet garantiert auch nix
 

Neumi5694

Top Contributor
also das mit virtueller Host. etc. ist leider keine Lösung...

Also ich bräuchte irgendwie etwas, das mir beim Starten meiner Java Applikation mich "registriert" und damit meine IP Adresse weiß...
also ähnlich wie das auch Ultrahook im Hintergrund macht?
Wenn du localhost verwendest, wird dein Rechner nur von deinem Rechner aus erreichbar sein. Wo ist da der Nutzen? Ich nehme mal an, dass das nur ein Beispiel ist.

Lass deine Java-Application einfach eine Seite wie whatsmyip ansprechen, die liefert dir deine öffentliche IP. Ich glaub, Amazon bietet da auch eine Seite an.

Ich denke, du machst es dir zu kompliziert. Du solltest vielleicht das Problem/die Aufgabe erklären, ohne dich auf eine Vorgehensweise einzuschießen. Welcher Rechner steht wo und wann soll er was machen. Ich nehme an, es geht dir um die öffentliche IP (was localhost nochmal seltsamer erscheinen lässt).

Der normale Aufbau, wenn man dynamische IPs hat, ist eben der, dass der Router bei Verbindung sich beim Service wie Ultrahook registriert, damit ist unter dem Namen die öffentliche IP bekannt (geht auch von einem Computer aus, aber vom Router aus find ich's praktischer). Dem Router wiederum ist bekannt, and welche IP im Netz er welchen Port weiterleiten soll.
Und das ist wirklich der ganze Zauber eines öffentlich zugänglichen Servers im heimischen Netz.

Wenn du einen Server haben willst, der von einer anderen Applikation angesprochen wird, dann kriegt er die IP Informationen des Clients eh bei der Verbindung. Ansonsten schick sie ihm als Info.
Die eigene IP im lokalen Netz rauszukriegen ist jetzt nicht die große Kunst.
 

internet

Top Contributor
Ok, für die Aufklärung:
  • es geht um ein mobiles Gerät, in dem ein LTE Router / Modem und ein PC (=Server) verbaut ist. Demnach habe ich auch keine feste IP.
  • Auf dem PC läuft ein entsprechendes Java Program (Web App)
  • Andere Leute können sich nun in das WLAN vom LTE Router connecten, haben aber lediglich Zugriff auf die WebApp
  • Der Server hat aber Zugriff auf das WAN, die Clients nicht.

Um nun Dinge zu machen, dass die User wie ein Webshop Produkte aus der WebApp kaufen können, möchte ich einen Zahlungsanbieter nutzen (bspw. Stripe). (Ggf. müsste ich dann den Usern noch die Stripe URL in den Router Settings freigeben, damit der Zahlungsprozess funktioniert.)

Das Problem das ich nun sehe ist das Abschließen des Zahlungsprozess. Stripe schickt während dem Zahlungsprozess entsprechende Webhooks. Diese müssten entsprechend an mein Server gesendet werden.

Ich nehme auch gerne andere Ansätze entgegen, wie man das lösen kann. Es sollte aber mit so wenig wie möglich Config Aufwand verbunden sein.
 

KonradN

Super-Moderator
Mitarbeiter
Also gerade bei einem Zahlungsanbieter ist das hoch kritisch. Es ist nicht gesagt, dass der LTE Router überhaupt von außen erreichbar ist (Ich habe schon Provider gesehen, die selbst NAT nutzen, da also einfach ein 10.0.0.0/8 verwendet haben für die mobilen Geräte). Und daher wäre es hier wichtig, dass man einen zentralen Server hat, der das übernimmt. Diese mobilen Clients wenden sich dann für sowas an euren zentralen Server und der kümmert sich dann darum. Da kannst Du dann auch alles mögliche machen, z.B. bei der Verbindung einen Websocket verwenden oder so um einen Rückkanal zu haben.

Oder man nutzt einen Dienstleister für Zahlungen, der eben nicht auf diese Webhooks angewiesen ist.
 

internet

Top Contributor
Naja, ich bekomme einen Return Wert ja auch über die Success - URL, aber wenn ein User bspw. die Internetverbindung während dem Bezahlvorgang verliert, ist das auch nicht so 100%... Webhooks wäre daher die bessere Lösung
 

LimDul

Top Contributor
Die Lösung ist eigentlich ganz einfach (und nichts anderes macht ultrahook).

Server im Netz mit einer Anwendung, die die Webhooks entgegen nimmt.
Java Client connected sich zu diesem Server und fragt nach Responses für ihn.
 

internet

Top Contributor
Die Lösung ist eigentlich ganz einfach (und nichts anderes macht ultrahook).

Server im Netz mit einer Anwendung, die die Webhooks entgegen nimmt.
Java Client connected sich zu diesem Server und fragt nach Responses für ihn.
Und wie geht dann das mit den Java Client?
Wie fragt er nach Responses?
Per Push alle x Sekunden / Minuten?
 

LimDul

Top Contributor
Wie du möchtest.

Polling seitens des Client (über Rest z.b.)
Websocket Verbindung seitens des Client
TCP-Verbindung seitens des Clients.

Es hängt davon ab, was du brauchst, was für Resourcen du im Netz bereitstellen willst, wie schnell der Client was mitbekommen soll, wie stabil eine stehende Verbindung ist etc.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
A ArrayListe ist nur lokal vorhanden Java Basics - Anfänger-Themen 5
T Erkennen ob ein Pfad lokal oder im Netzwerk ist Java Basics - Anfänger-Themen 13
B Mit Java-Programm Daten aus MySQL-Datenbank auslesen, lokal und nicht lokal. Java Basics - Anfänger-Themen 10
B FTP Zugriff nur lokal Java Basics - Anfänger-Themen 3
G Sessionüberprüfung funktioniert lokal aber nicht auf dem Server! Java Basics - Anfänger-Themen 12
Y Applet lokal executable machen, externe Files inkludieren Java Basics - Anfänger-Themen 8
B JDBC Treiber lokal installieren ? Java Basics - Anfänger-Themen 2
M Java 3D lokal ausführen? Webstart lokal ausführen? Java Basics - Anfänger-Themen 2
A Googel Lokal abfragen Java Basics - Anfänger-Themen 7
G Datei lokal öffnen Java Basics - Anfänger-Themen 5
S Bild vom Internet lokal abspeichern Java Basics - Anfänger-Themen 4
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
I Java Mail (IMAP -> Empfangen) und Google Mail Java Basics - Anfänger-Themen 1
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
F Mail empfangen mit JAVA Java Basics - Anfänger-Themen 3
N Client soll mehrere Antworten von Servern gleichzeitig empfangen Java Basics - Anfänger-Themen 8
L Datei empfangen Java Basics - Anfänger-Themen 17
M String senden/empfangen mit PHP funktioniert nicht Java Basics - Anfänger-Themen 2
W RS232: Daten empfangen,bearbeiten,ausgeben Java Basics - Anfänger-Themen 2
H UDP Empfangen----> Ausgeben im TextField Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben