Est-il possible de capturer une requête d'un service tiers dans un composant de thème ?

Mon idée commence ici :

Ko-Fi est une plateforme de dons. Ils ont une API qui peut envoyer des requêtes HTTP POST à un webhook.
https://ko-fi.com/manage/webhooks (la page nécessite une connexion, mais il s’agit uniquement de la documentation, je vais donc copier-coller :

Documentation des webhooks Ko-Fi

URL du webhook

Nous enverrons une requête HTTP POST à votre URL spécifiée lorsqu’un paiement sera complété. Votre URL doit commencer par https://


Jeton de vérification

Le jeton de vérification ci-dessous sera inclus dans chaque requête envoyée à votre webhook. C’est une approche légère pour augmenter votre confiance quant à l’origine des requêtes envoyées à votre webhook par les serveurs Ko-fi. Assurez-vous que ce niveau de confiance convient à votre application. Par exemple, notez que le jeton de vérification est envoyé en texte brut.
XXXXXXXXXXXXXXXXXXXXX

Réception et réponse

Les données sont envoyées (postées) avec un type de contenu application/x-www-form-urlencoded. Un champ nommé ‘data’ contient les informations de paiement sous forme de chaîne JSON.

Votre écouteur doit renvoyer un code d’état 200. Si nous ne recevons pas ce code d’état, nous réessayerons un nombre raisonnable de fois avec le même message_id.

Le champ type sera Donation, Subscription, Commission, ou Shop Order.

Les paiements d’abonnement mensuels auront is_subscription_payment défini sur true.

La première fois que quelqu’un s’abonne, is_first_subscription_payment sera true.

Si l’abonnement concerne un niveau d’adhésion, alors tier_name contiendra le nom que vous avez attribué à ce niveau.

Pour une commande de boutique, shop_items contiendra un tableau d’objets d’articles de boutique, chacun avec une seule propriété, le direct_link_code.

Important : Si vous utilisez les Webhooks pour afficher publiquement les paiements, vous devez respecter le champ is_public et masquer le message si la valeur est false.

Si vous n’avez pas de serveur configuré pour recevoir les webhooks mais que vous souhaitez tester les exemples ci-dessous, nous vous suggérons d’utiliser un service tel que https://webhook.site/ pour inspecter les requêtes que nous envoyons.

Exemple : Don unique

Voici un exemple des données qui seront envoyées pour un don unique :

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": "Bonne chance pour l'intégration !",
  "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)


J’aimerais ajouter une barre de progression des dons sur mon forum Discourse, qui serait mise à jour lorsque Discourse reçoit une telle requête.

Un composant de thème peut-il recevoir ces requêtes, ou faudrait-il un plugin ?

Par où commencer si cela est possible avec un composant de thème (ou un plugin si nécessaire) ? Juste quelques indices ou pistes seraient les bienvenus :slight_smile:

2 « J'aime »

Je pense qu’il faudrait un plugin pour configurer une route afin de traiter la requête, mais il serait bon que quelqu’un d’autre confirme cela.

La solution idéale serait que Ko-fi fournisse un widget de suivi des dons que vous pourriez intégrer en tant qu’iframe sur Discourse. Il semble que Ko-fi fournisse un widget (iframe) qui peut être utilisé pour accepter les dons, mais je n’en vois pas qui puisse être utilisé pour afficher la progression vers un objectif de don : https://help.ko-fi.com/hc/en-us/articles/360018381678-Ko-fi-Donation-Widget.

4 « J'aime »

Oui, vous aurez besoin d’un plugin. L’alternative est d’héberger un IFRAME ou éventuellement une balise IMG vers le service tiers.

3 « J'aime »

J’ai fait quelque chose de similaire par le passé, mais cela utilisait un script dédié fonctionnant sur un hôte séparé qui mettait à jour certains champs personnalisés dans la base de données, mais nous acceptions des dons via PayPal, Square, Stripe, Ko-Fi et quelques autres options, donc le faire via un plugin dédié n’était vraiment pas une option pour nous à l’époque.

2 « J'aime »