Ist es möglich, eine Anfrage von einem Drittanbieterdienst in einer Themenkomponente abzufangen?

Meine Idee beginnt hier:

Ko-Fi ist eine Spendenplattform. Sie verfügt über eine API, die HTTP POST-Anfragen an einen Webhook senden kann.
https://ko-fi.com/manage/webhooks (die Seite erfordert eine Anmeldung, obwohl es sich nur um Dokumentation handelt, daher werde ich kopieren und einfügen:

Ko-Fi Webhooks Dokumentation

Webhook-URL

Wir senden eine HTTP POST-Anfrage an Ihre angegebene URL, wenn eine Zahlung abgeschlossen ist. Ihre URL muss mit https:// beginnen.


Verifizierungstoken

Das unten stehende Verifizierungstoken wird bei jeder Anfrage an Ihren Webhook mitgesendet. Es ist ein leichter Ansatz, um Ihre Zuversicht zu erhöhen, dass Ko-fi-Server die Quelle der Anfragen an Ihren Webhook sind. Stellen Sie sicher, dass dieses Vertrauensniveau für Ihre Anwendung geeignet ist. Beachten Sie beispielsweise, dass das Verifizierungstoken als Klartext gesendet wird.
XXXXXXXXXXXXXXXXXXXXX

Empfangen und Antworten

Die Daten werden mit einem Content-Type von application/x-www-form-urlencoded gesendet (gepostet). Ein Feld namens ‘data’ enthält die Zahlungsinformationen als JSON-String.

Ihr Listener sollte einen Statuscode von 200 zurückgeben. Wenn wir diesen Statuscode nicht erhalten, werden wir eine angemessene Anzahl von Malen mit derselben message_id wiederholen.

Das Feld type wird Donation, Subscription, Commission oder Shop Order sein.

Monatliche Abonnementzahlungen haben is_subscription_payment auf true gesetzt.

Beim ersten Abonnieren ist is_first_subscription_payment auf true gesetzt.

Wenn das Abonnement für eine Mitgliedschaftsstufe gilt, enthält tier_name den von Ihnen zugewiesenen Namen der Stufe.

Bei einer Shop-Bestellung enthält shop_items ein Array von Shop-Artikelobjekten, die jeweils eine einzige Eigenschaft haben, den direct_link_code.

Wichtig: Wenn Sie Webhooks verwenden, um Zahlungen öffentlich anzuzeigen, müssen Sie das Feld is_public beachten und die Nachricht ausblenden, wenn der Wert false ist.

Wenn Sie keinen Server eingerichtet haben, um Webhooks zu empfangen, aber die unten stehenden Beispiele testen möchten, empfehlen wir die Verwendung eines Dienstes wie https://webhook.site/, um die von uns gesendeten Anfragen zu inspizieren.

Beispiel: Einzelne Spende

Hier ist ein Beispiel für die Daten, die für eine einzelne Spende gesendet werden:

data = {
  "verification_token": "d8546b84-c698-4df5-9812-39d35813e2ff",
  "message_id": "78b207f2-9e6c-4ea7-b47f-5454709824aa",
  "timestamp": "2023-02-13T22:39:12Z",
  "type": "Donation",
  "is_public": true,
  "from_name": "Jo Example",
  "message": "Good luck with the integration!",
  "amount": "3.00",
  "url": "https://ko-fi.com/Home/CoffeeShop?txid=00000000-1111-2222-3333-444444444444",
  "email": "jo.example@example.com",
  "currency": "USD",
  "is_subscription_payment": false,
  "is_first_subscription_payment": false,
  "kofi_transaction_id": "00000000-1111-2222-3333-444444444444",
  "shop_items": null,
  "tier_name": null,
  "shipping": null
}

(etc)


Ich möchte eine Spenden-Fortschrittsleiste auf meinem Discourse-Forum hinzufügen, die aktualisiert wird, wenn Discourse eine solche Anfrage erhält.

Kann eine Theme-Komponente diese Anfragen empfangen, oder wäre ein Plugin erforderlich?

Wo soll ich anfangen, wenn dies mit einer Theme-Komponente (oder einem Plugin, falls erforderlich) möglich ist? Ein paar Hinweise oder Anregungen wären toll :slight_smile:

2 „Gefällt mir“

Ich glaube, Sie bräuchten ein Plugin, um eine Route zur Verarbeitung der Anfrage einzurichten, aber es wäre gut, wenn jemand anderes das bestätigen könnte.

Die ideale Lösung wäre vielleicht, wenn Ko-fi ein Spenden-Tracker-Widget bereitstellen würde, das Sie als iFrame auf Discourse einbetten könnten. Es sieht so aus, als ob Ko-fi ein Widget (iFrame) bereitstellt, das zum Annehmen von Spenden verwendet werden kann, aber ich sehe keines, das zur Anzeige des Fortschritts bei einem Spenden-Ziel verwendet werden kann: https://help.ko-fi.com/hc/en-us/articles/360018381678-Ko-fi-Donation-Widget.

4 „Gefällt mir“

Ja, Sie benötigen ein Plugin. Die Alternative besteht darin, ein IFRAME oder möglicherweise ein IMG-Tag für den Drittanbieterdienst zu hosten.

3 „Gefällt mir“

Ich habe in der Vergangenheit etwas Ähnliches gemacht, aber es benutzte ein dediziertes Skript, das auf einem separaten Host lief und einige benutzerdefinierte Felder in der Datenbank aktualisierte. Wir haben jedoch Spenden über PayPal, Square, Stripe, Ko-Fi und einige andere Optionen angenommen, so dass die Abwicklung über ein dediziertes Plugin zu dieser Zeit keine wirkliche Option für uns war.

2 „Gefällt mir“