Skip to main content

نظرة عامة

محوّل Better Auth، @dodopayments/better-auth، هو إضافة Better Auth تربط مستخدميك بـ Dodo Payments. ويوفّر ما يلي:
  • إنشاء العملاء اختياريًا أو ربط العملاء باستخدام البريد الإلكتروني عند التسجيل
  • جلسات الدفع، وهي طريقة الدفع المفضلة، مع ربط product slug
  • Customer Portal للخدمة الذاتية
  • نقاط نهاية لإدخال الاستخدام وإعداد التقارير الخاصة بالفوترة القائمة على الاستخدام
  • معالجة أحداث webhook مع التحقق من التوقيع
  • أنواع TypeScript لكل نقطة نهاية
تحتاج إلى حساب Dodo Payments ومفاتيح API لاستخدام هذا التكامل.

المتطلبات المسبقة

  • Node.js 16 أو إصدار أحدث
  • الوصول إلى لوحة تحكم Dodo Payments
  • مشروع موجود يستخدم Better Auth 1.4 أو إصدارًا أحدث من سلسلة 1.x

التثبيت

1

Install Dependencies

شغّل هذا الأمر في جذر مشروعك:
تم تثبيت المحوّل وDodo Payments SDK وBetter Auth وZod.

الإعداد

1

Configure Environment Variables

أضف هذه المتغيرات إلى ملف .env. أنشئ مفتاح API ضمن Developer → API Keys في لوحة التحكم. تحصل على webhook secret عند إضافة نقطة نهاية webhook، كما هو موضّح ضمن Webhooks في هذه الصفحة. BETTER_AUTH_SECRET هو سلسلة عشوائية مكوّنة من 32 حرفًا على الأقل.
لا تُدرج مفاتيح API أو الأسرار في نظام التحكم بالإصدارات.
2

Set Up Server-Side Integration

أنشئ src/lib/auth.ts أو حدّثه:
تضيف الإضافة حقل dodoCustomerId إلى جدول Better Auth user، حيث تخزّن معرّف عميل Dodo Payments لكل مستخدم. بعد إضافة الإضافة، حدّث مخطط قاعدة البيانات باستخدام Better Auth CLI.
اضبط environment على live_mode في بيئة الإنتاج.
3

Set Up Client-Side Integration

أنشئ src/lib/auth-client.ts أو حدّثه:

أمثلة على الاستخدام

استخدم authClient.dodopayments.checkoutSession للتكاملات الجديدة. طريقة checkout القديمة مهملة وموجودة فقط للتوافق مع الإصدارات السابقة.

إنشاء جلسة دفع (الطريقة المفضلة)

أنشئ جلسة دفع من slug مُعدّ أو من سلة منتجات، ثم أعد توجيه العميل إلى عنوان URL المُعاد:
يملأ checkoutSession بعض الحقول نيابةً عنك:
  • عنوان الفوترة: ليس مطلوبًا مقدمًا، لأن صفحة الدفع تجمعه من العميل. لملئه مسبقًا، مرّر billing_address.
  • العميل: بالنسبة إلى مستخدم سجّل الدخول، تستخدم الإضافة البريد الإلكتروني والاسم من جلسة Better Auth الخاصة به وتتجاهل أي كائن customer تمرّره. من دون مستخدم سجّل الدخول، تستخدم كائن customer.
  • الحقول الأخرى: تقبل الوسيطة الحقول نفسها الموجودة في نص طلب نقطة النهاية Create Checkout Session، بالإضافة إلى slug وreferenceId.
إذا لم يكن slug مُعدًّا، أو لم تمرّر slug ولا product_cart، يفشل الطلب مع خطأ 400.
يأتي عنوان URL للعودة من successUrl المُعدّ في إضافة الخادم، بعد حله بالنسبة إلى عنوان URL لتطبيقك. تتجاهل الإضافة أي return_url في حمولة العميل.

Checkout القديم (مهمل)

طريقة authClient.dodopayments.checkout مهملة. استخدم checkoutSession بدلًا منها للتنفيذات الجديدة.
تتطلب الطريقة القديمة billing وcustomer، وتنشئ رابط دفع عبر تدفق checkout الديناميكي المهمل. تتجاوز الحقول التي تضبطها في customer البريد الإلكتروني والاسم المأخوذين من الجلسة.

الوصول إلى Customer Portal

تتطلب نقاط نهاية البوابة مستخدمًا سجّل الدخول ويملك عنوان بريد إلكتروني موثّقًا. إذا لم يكن لدى المستخدم عميل Dodo Payments بعد، تبحث الإضافة عن عميل باستخدام البريد الإلكتروني أو تنشئ واحدًا. يعيد customer.portal() عنوان URL للبوابة:

إدراج بيانات العميل

أدرج اشتراكات العميل الذي سجّل الدخول ودفعاته. يبدأ page من 1، وتعمل status على تصفية النتائج:

تتبّع الاستخدام القائم على القياس

فعّل إضافة usage() على الخادم لتسجيل أحداث الاستخدام الخاصة بالفوترة القائمة على الاستخدام، والسماح للعملاء برؤية استخدامهم. تتطلب كلتا الطريقتين مستخدمًا سجّل الدخول ويملك عنوان بريد إلكتروني موثّقًا.
  • يسجّل authClient.dodopayments.usage.ingest حدثًا للمستخدم الذي سجّل الدخول.
  • يسرد authClient.dodopayments.usage.meters.list أحداث استخدام العميل الذي سجّل الدخول. ويقبل معاملات query التالية: page_number وpage_size وevent_name وmeter_id وstart وend.
ترفض Dodo Payments الأحداث التي تكون طوابعها الزمنية أقدم من ساعة واحدة أو أحدث من خمس دقائق في المستقبل.
إذا حذفت meter_id، فستتضمن القائمة جميع أحداث استخدام العميل. ومع meter_id، ستتضمن فقط الأحداث المطابقة لذلك meter.

Webhooks

تتحقق إضافة webhooks من توقيع كل حدث من Dodo Payments وتستدعي المعالجات الخاصة بك. نقطة النهاية الافتراضية هي /api/auth/dodopayments/webhooks.
1

Generate and Set Webhook Secret

في لوحة التحكم، انتقل إلى Developer → Webhooks وأضف عنوان URL لنقطة النهاية، مثل https://<your-domain>/api/auth/dodopayments/webhooks. انسخ signing secret لنقطة النهاية إلى ملف .env:
2

Handle Webhook Events

مرّر معالجًا لكل حدث تريد معالجته. يعمل onPayload مع كل حدث:
إذا فشل التحقق من التوقيع أو ألقى أحد المعالجات خطأً، تستجيب نقطة النهاية بالرمز 400. بعد انتهاء المعالجات، تعيد { received: true }.

معالجات أحداث Webhook المدعومة

يتلقى كل معالج الحمولة التي تم التحقق منها لنوع الحدث الخاص به:

مرجع الإعدادات

  • client (مطلوب): مثيل عميل DodoPayments
  • createCustomerOnSignUp (اختياري): أنشئ عميل Dodo Payments عند تسجيل مستخدم، أو اربط عميلًا موجودًا بالبريد الإلكتروني نفسه. تحدّث الإضافة العميل أيضًا عند تغيّر تفاصيل المستخدم.
  • use (مطلوب): مصفوفة الإضافات المطلوب تفعيلها (checkout وportal وusage وwebhooks)
  • getCustomerParams (اختياري): دالة تستقبل User الخاص بـ Better Auth وتعيد حقولًا إضافية لإرفاقها بعميل Dodo Payments عند الإنشاء والتحديث (مثل metadata وphone_number). ويمكن أن تكون async.
  • products: مصفوفة من كائنات { productId, slug }، أو دالة async تعيد واحدًا منها
  • successUrl: عنوان URL لإعادة التوجيه إليه بعد نجاح الدفع
  • authenticatedUsersOnly: يتطلب مصادقة المستخدم (الافتراضي: false)

استكشاف الأخطاء وإصلاحها والنصائح

  • مفتاح API غير صالح: تحقّق من DODO_PAYMENTS_API_KEY في .env، وتحقّق من أن وضع المفتاح يطابق environment.
  • عدم تطابق توقيع webhook: تحقّق من أن webhook secret يطابق السر المحدد في لوحة تحكم Dodo Payments.
  • لم يتم إنشاء العميل: تحقّق من ضبط createCustomerOnSignUp على true.
  • تعيد طلبات البوابة أو الاستخدام 401: لم يتم التحقق من عنوان البريد الإلكتروني للمستخدم.
  • استخدم متغيرات البيئة لجميع الأسرار والمفاتيح.
  • اختبر في test_mode قبل التبديل إلى live_mode.
  • سجّل أحداث webhook لأغراض تصحيح الأخطاء والتدقيق.

مطالبة لنماذج LLM

انسخ هذه المطالبة إلى مساعد البرمجة بالذكاء الاصطناعي لديك ليضيف المحوّل إلى مشروعك. ولتزويد وكيلك أيضًا بوثائق Dodo Payments والمهارات، ثبّت Agent Plugin.
آخر تعديل في ٢٦ سبتمبر ٢٠٢٦