主题组件是否可以捕获来自第三方服务的请求?

我的想法从这里开始:

Ko-Fi 是一个捐赠平台。他们有一个 API,可以向 webhook 发送 HTTP POST 请求。
https://ko-fi.com/manage/webhooks(该页面需要登录,但它只是文档,所以我将复制粘贴:

Ko-Fi Webhooks 文档

Webhook URL

当付款完成后,我们将向您指定的 URL 发送一个 HTTP POST 请求。您的 URL 必须以 https:// 开头。


Verification Token

下面的验证令牌将包含在发送到您的 webhook 的每个请求中。这是一种轻量级的方法,可以增加您对 Ko-fi 服务器是您的 webhook 请求来源的信心。请确保此置信度级别适合您的应用程序。例如,请注意,验证令牌以纯文本形式发送。
XXXXXXXXXXXXXXXXXXXXX

接收和响应

数据以 application/x-www-form-urlencoded 的内容类型发送(发布)。名为“data”的字段包含作为 JSON 字符串的付款信息。

您的监听器应返回状态码 200。如果我们未收到此状态码,我们将使用相同的 message_id 重试合理次数。

type 字段将是 DonationSubscriptionCommissionShop Order

每月订阅付款将设置 is_subscription_paymenttrue

当有人首次订阅时,is_first_subscription_payment 将为 true

如果订阅是针对会员等级的,则 tier_name 将包含您为该等级指定的名称。

对于商店订单,shop_items 将包含一个商店项目对象的数组,每个对象只有一个属性,即 direct_link_code

重要提示:如果您使用 Webhooks 公开显示付款,则必须遵守 is_public 字段,如果值为 false,则隐藏消息。

如果您没有设置服务器来接收 webhook,但想测试下面的示例,我们建议使用 https://webhook.site/ 等服务来检查我们发送的请求。

示例:单笔捐赠

以下是单笔捐赠将发送的数据示例:

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)


我想在我的 Discourse 论坛上添加一个捐赠进度条,当 Discourse 收到此类请求时,该进度条会更新。

主题组件可以接收这些请求吗,还是需要插件?

如果使用主题组件(或需要的插件)可以实现,我应该从哪里开始?只需要一些线索或提示即可 :slight_smile:

2 个赞

认为 你需要一个插件来设置一个处理请求的路由,但最好由其他人来确认这一点。

理想的解决方案可能是让 Ko-fi 提供一个捐赠跟踪器小部件,你可以将其作为 iframe 嵌入到 Discourse 中。看起来 Ko-fi 提供了一个可以用来接受捐赠的小部件(iframe),但我没有看到一个可以用来显示捐赠目标进度的:https://help.ko-fi.com/hc/en-us/articles/360018381678-Ko-fi-Donation-Widget。

4 个赞

是的,您需要一个插件。另一种方法是将 IFRAME 或可能的 IMG 标签托管到第三方服务。

3 个赞

我过去做过类似的事情,但它使用了一个运行在单独主机上的专用脚本,该脚本会更新数据库中的一些自定义字段,但我们通过 PayPal、Square、Stripe、Ko-Fi 和其他一些选项接受捐赠,所以当时通过专用插件来实现并不是一个真正的选择。

2 个赞