تخطَّ إلى المحتوى

الـ Webhooks

الدرس 10 من 38

الهدف

بعد هالدرس تقدر تبني Stripe webhook endpoint يتحقق من التوقيع، يعالج ثلاثة أحداث رئيسية، ويحدّث الـ DB تلقائيا بعد كل تغيير في الاشتراك.

ليش هذا الحين؟

الدرس اللي فات ربطنا Stripe Checkout — بس الـ DB ما تدري بعد إذا المستخدم دفع أو ألغى. الـ success URL تقدر تزوّرها، بس الـ webhook ما تقدر تزوّره — جاي مباشرة من Stripe مع توقيع مشفّر. هذا هو مصدر الحقيقة.

الفكرة

الـ webhook هو HTTP POST يرسله Stripe لـ endpoint عندك كل ما يصير حدث: دفعة، إلغاء اشتراك، تجديد. أنت ما تطلبه — Stripe يرسله.

التوقيع (Signature): Stripe يضيف header اسمه stripe-signature — فيه hash مبني على الـ body والـ secret. لو الـ body اتغير بأي شكل، الـ hash يختلف والتحقق يفشل. هذا يحمي من أي شخص يحاول يرسل request مزيّف.

الأحداث الثلاثة المهمة:

  • checkout.session.completed — المستخدم دفع لأول مرة، حدّث الـ plan لـ "pro"
  • customer.subscription.deleted — ألغى الاشتراك، رجّع الـ plan لـ "free"
  • invoice.paid — تجديد ناجح، تقدر تسجّله للـ audit

Idempotency: Stripe يقدر يرسل نفس الحدث أكثر من مرة (retry). الـ handler المفروض يكون آمن — لو شغّلته مرتين النتيجة نفسها.

محليا: Stripe CLI تسوي لك tunnel للـ webhook من Stripe لـ localhost.

محتاج مساعدة؟ راسلنا على mj@shakesbeard.net