É possível capturar uma requisição de um serviço de terceiros em um componente de tema?

Minha ideia começa aqui:

Ko-Fi é uma plataforma de doação. Eles têm uma API que pode enviar requisições HTTP POST para um webhook.
https://ko-fi.com/manage/webhooks (a página precisa estar logada, embora seja apenas documentação, então vou copiar e colar:

Documentação de Webhooks do Ko-Fi

URL do Webhook

Enviaremos um HTTP POST para o seu URL especificado quando um pagamento for concluído. Seu URL deve começar com https://


Token de Verificação

O token de verificação abaixo será incluído em todas as requisições para o seu webhook. É uma abordagem leve para aumentar sua confiança de que os servidores do Ko-fi são a origem das requisições para o seu webhook. Certifique-se de que este nível de confiança seja adequado para sua aplicação. Por exemplo, observe que o token de verificação é enviado como texto simples.
XXXXXXXXXXXXXXXXXXXXX

Recebendo e Respondendo

Os dados são enviados (postados) com um tipo de conteúdo de application/x-www-form-urlencoded. Um campo chamado ‘data’ contém as informações de pagamento como uma string JSON.

Seu listener deve retornar um código de status de 200. Se não recebermos este código de status, tentaremos novamente um número razoável de vezes com o mesmo message_id.

O campo type será Donation, Subscription, Commission ou Shop Order.

Pagamentos de assinatura mensal terão is_subscription_payment definido como true.

Na primeira vez que alguém se inscrever, is_first_subscription_payment será true.

Se a assinatura for para um nível de associação, então tier_name conterá o nome que você atribuiu ao nível.

Para um pedido de loja, shop_items conterá um array de objetos de item de loja, cada um com uma única propriedade, o direct_link_code.

Importante: Se você estiver usando Webhooks para mostrar pagamentos publicamente, você deve respeitar o campo is_public e ocultar a mensagem se o valor for false.

Se você não tiver um servidor configurado para receber webhooks, mas quiser testar os exemplos abaixo, sugerimos usar um serviço como https://webhook.site/ para inspecionar as requisições que enviamos.

Exemplo: Doação Única

Aqui está um exemplo dos dados que serão enviados para uma doação ú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)


Eu gostaria de adicionar uma barra de progresso de doação no meu fórum Discourse, que seria atualizada quando o Discourse recebesse tal requisição.

Um componente de tema pode receber essas requisições, ou seria necessário um plugin?

Por onde devo começar se isso for possível com um componente de tema (ou um plugin, se necessário)? Apenas algumas dicas ou ponteiros seriam ótimos :slight_smile:

2 curtidas

Eu acho que você precisaria de um plugin para configurar uma rota para processar a solicitação, mas seria bom que outra pessoa confirmasse isso.

A solução ideal pode ser o Ko-fi fornecer um widget de rastreamento de doações que você poderia incorporar como um iframe no Discourse. Parece que o Ko-fi fornece um widget (iframe) que pode ser usado para aceitar doações, mas não vejo um que possa ser usado para exibir o progresso em direção a uma meta de doação: https://help.ko-fi.com/hc/en-us/articles/360018381678-Ko-fi-Donation-Widget.

4 curtidas

Sim, você precisará de um plugin. A alternativa é hospedar um IFRAME ou possivelmente uma tag IMG para o serviço de terceiros.

3 curtidas

Eu fiz algo semelhante no passado, mas usava um script dedicado rodando em um host separado que atualizava alguns campos personalizados no banco de dados, mas estávamos aceitando doações via PayPal, Square, Stripe, Ko-Fi e algumas outras opções, então fazer isso via um plugin dedicado realmente não era uma opção para nós na época.

2 curtidas