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 ![]()