¿Es posible capturar una solicitud de un servicio de terceros en un componente de tema?

Mi idea empieza aquí:

Ko-Fi es una plataforma de donaciones. Tienen una API que puede enviar solicitudes HTTP POST a un webhook.
https://ko-fi.com/manage/webhooks (la página requiere inicio de sesión, aunque es solo documentación, así que copiaré y pegaré:

Documentación de Webhooks de Ko-Fi

URL del Webhook

Enviaremos una solicitud HTTP POST a la URL que especifiques cuando un pago se complete. Tu URL debe empezar con https://


Token de Verificación

El token de verificación a continuación se incluirá en cada solicitud a tu webhook. Es un enfoque ligero para aumentar tu confianza de que los servidores de Ko-fi son la fuente de las solicitudes a tu webhook. Asegúrate de que este nivel de confianza sea adecuado para tu aplicación. Por ejemplo, ten en cuenta que el token de verificación se envía como texto plano.
XXXXXXXXXXXXXXXXXXXXX

Recepción y Respuesta

Los datos se envían (publican) con un tipo de contenido de application/x-www-form-urlencoded. Un campo llamado ‘data’ contiene la información del pago como una cadena JSON.

Tu listener debe devolver un código de estado de 200. Si no recibimos este código de estado, reintentaremos un número razonable de veces con el mismo message_id.

El campo type será Donation, Subscription, Commission o Shop Order.

Los pagos de suscripción mensuales tendrán is_subscription_payment establecido en true.

La primera vez que alguien se suscribe, is_first_subscription_payment será true.

Si la suscripción es para un nivel de membresía, entonces tier_name contendrá el nombre que le has asignado al nivel.

Para un pedido de tienda, shop_items contendrá una matriz de objetos de artículos de tienda, cada uno con una sola propiedad, el direct_link_code.

Importante: Si estás utilizando Webhooks para mostrar pagos públicamente, debes respetar el campo is_public y ocultar el mensaje si el valor es false.

Si no tienes un servidor configurado para recibir webhooks pero quieres probar los ejemplos a continuación, te sugerimos usar un servicio como https://webhook.site/ para inspeccionar las solicitudes que enviamos.

Ejemplo: Donación Única

Aquí tienes un ejemplo de los datos que se enviarán para una donación única:

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)


Me gustaría añadir una barra de progreso de donaciones en mi foro de Discourse, que se actualizaría cuando Discourse reciba dicha solicitud.

¿Puede un componente de tema recibir estas solicitudes, o necesitaría un plugin?

¿Por dónde empiezo si esto es posible con un componente de tema (o un plugin si es necesario)? Solo unas pocas pistas o indicaciones serían geniales :slight_smile:

2 Me gusta

Creo que necesitarías un plugin para configurar una ruta que procese la solicitud, pero sería bueno que alguien más lo confirmara.

La solución ideal podría ser que Ko-fi proporcione un widget de seguimiento de donaciones que puedas incrustar como un iframe en Discourse. Parece que Ko-fi proporciona un widget (iframe) que se puede usar para aceptar donaciones, pero no veo uno que se pueda usar para mostrar el progreso hacia un objetivo de donación: https://help.ko-fi.com/hc/en-us/articles/360018381678-Ko-fi-Donation-Widget.

4 Me gusta

Sí, necesitarás un plugin. La alternativa es alojar un IFRAME o posiblemente una etiqueta IMG en el servicio de terceros.

3 Me gusta

Hice algo similar en el pasado, pero utilizaba un script dedicado que se ejecutaba en un host separado y que actualizaba algunos campos personalizados en la base de datos, pero aceptábamos donaciones a través de PayPal, Square, Stripe, Ko-Fi y algunas otras opciones, por lo que hacerlo a través de un plugin dedicado realmente no era una opción para nosotros en ese momento.

2 Me gusta