تبدأ فكرتي من هنا:
Ko-Fi هي منصة تبرع. لديهم واجهة برمجة تطبيقات (API) يمكنها إرسال طلبات HTTP POST إلى نقطة نهاية (webhook).
https://ko-fi.com/manage/webhooks (الصفحة تتطلب تسجيل الدخول، ولكنها مجرد وثائق، لذا سأنسخ وألصق:
وثائق Ko-Fi Webhooks
عنوان URL لنقطة النهاية (Webhook URL)
سنرسل طلب HTTP POST إلى عنوان URL الذي تحدده عند اكتمال الدفع. يجب أن يبدأ عنوان URL الخاص بك بـ https://
رمز التحقق (Verification Token)
سيتم تضمين رمز التحقق أدناه مع كل طلب إلى نقطة النهاية الخاصة بك. إنها طريقة خفيفة الوزن لزيادة ثقتك في أن خوادم Ko-fi هي مصدر الطلبات إلى نقطة النهاية الخاصة بك. تأكد من أن مستوى الثقة هذا مناسب لتطبيقك. على سبيل المثال، لاحظ أن رمز التحقق يتم إرساله كنص عادي.
XXXXXXXXXXXXXXXXXXXXX
استقبال والاستجابة
يتم إرسال البيانات (نشرها) بنوع محتوى application/x-www-form-urlencoded. يحتوي حقل يسمى ‘data’ على معلومات الدفع كسلسلة JSON.
يجب أن تُرجع المستمعة رمز حالة 200. إذا لم نتلق هذا الرمز، فسنحاول مرة أخرى عددًا معقولًا من المرات بنفس message_id.
سيكون الحقل type هو Donation أو Subscription أو Commission أو Shop Order.
ستكون مدفوعات الاشتراك الشهرية تحتوي على is_subscription_payment مضبوطة على true.
في المرة الأولى التي يشترك فيها شخص ما، سيكون is_first_subscription_payment مضبوطًا على true.
إذا كان الاشتراك خاصًا بمستوى عضوية، فسوف يحتوي tier_name على الاسم الذي قمت بتعيينه للمستوى.
بالنسبة لطلب متجر، سيحتوي shop_items على مصفوفة من كائنات عناصر المتجر، كل منها يحتوي على خاصية واحدة، وهي direct_link_code.
هام: إذا كنت تستخدم Webhooks لعرض المدفوعات علنًا، فيجب عليك احترام الحقل is_public، وإخفاء الرسالة إذا كانت القيمة false
إذا لم يكن لديك خادم مُعد لاستقبال نقاط النهاية (webhooks) ولكنك ترغب في اختبار الأمثلة أدناه، فنحن نقترح استخدام خدمة مثل 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
}
(إلخ)
أود إضافة شريط تقدم للتبرعات على منتدى Discourse الخاص بي، والذي سيتم تحديثه عندما يتلقى Discourse مثل هذا الطلب.
هل يمكن لمكون سمة (theme component) استقبال هذه الطلبات، أم أنه سيحتاج إلى إضافة (plugin)؟
من أين أبدأ إذا كان هذا ممكنًا باستخدام مكون سمة (أو إضافة إذا لزم الأمر)؟ مجرد تلميحات أو إرشادات قليلة ستكون رائعة ![]()