نظرة عامة
محوّل 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 حرفًا على الأقل.2
Set Up Server-Side Integration
أنشئ تضيف الإضافة حقل
src/lib/auth.ts أو حدّثه:dodoCustomerId إلى جدول Better Auth user، حيث تخزّن معرّف عميل Dodo Payments لكل مستخدم. بعد إضافة الإضافة، حدّث مخطط قاعدة البيانات باستخدام Better Auth CLI.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 ولا product_cart، يفشل الطلب مع خطأ 400.
يأتي عنوان URL للعودة من
successUrl المُعدّ في إضافة الخادم،
بعد حله بالنسبة إلى عنوان URL لتطبيقك. تتجاهل الإضافة أي return_url في
حمولة العميل.Checkout القديم (مهمل)
تتطلب الطريقة القديمة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.
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 مع كل حدث:{ received: true }.
معالجات أحداث Webhook المدعومة
يتلقى كل معالج الحمولة التي تم التحقق منها لنوع الحدث الخاص به:مرجع الإعدادات
Plugin Options
Plugin Options
- client (مطلوب): مثيل عميل DodoPayments
- createCustomerOnSignUp (اختياري): أنشئ عميل Dodo Payments عند تسجيل مستخدم، أو اربط عميلًا موجودًا بالبريد الإلكتروني نفسه. تحدّث الإضافة العميل أيضًا عند تغيّر تفاصيل المستخدم.
- use (مطلوب): مصفوفة الإضافات المطلوب تفعيلها (checkout وportal وusage وwebhooks)
- getCustomerParams (اختياري): دالة تستقبل
Userالخاص بـ Better Auth وتعيد حقولًا إضافية لإرفاقها بعميل Dodo Payments عند الإنشاء والتحديث (مثلmetadataوphone_number). ويمكن أن تكون async.
Checkout Plugin Options
Checkout Plugin Options
- products: مصفوفة من كائنات
{ productId, slug }، أو دالة async تعيد واحدًا منها - successUrl: عنوان URL لإعادة التوجيه إليه بعد نجاح الدفع
- authenticatedUsersOnly: يتطلب مصادقة المستخدم (الافتراضي:
false)
استكشاف الأخطاء وإصلاحها والنصائح
Common Issues
Common Issues
- مفتاح API غير صالح: تحقّق من
DODO_PAYMENTS_API_KEYفي.env، وتحقّق من أن وضع المفتاح يطابقenvironment. - عدم تطابق توقيع webhook: تحقّق من أن webhook secret يطابق السر المحدد في لوحة تحكم Dodo Payments.
- لم يتم إنشاء العميل: تحقّق من ضبط
createCustomerOnSignUpعلىtrue. - تعيد طلبات البوابة أو الاستخدام 401: لم يتم التحقق من عنوان البريد الإلكتروني للمستخدم.
Best Practices
Best Practices
- استخدم متغيرات البيئة لجميع الأسرار والمفاتيح.
- اختبر في
test_modeقبل التبديل إلىlive_mode. - سجّل أحداث webhook لأغراض تصحيح الأخطاء والتدقيق.