Skip to main content
يمنح TypeScript SDK كود TypeScript وJavaScript من جهة الخادم وصولًا مقيّدًا بالأنواع إلى REST API الخاص بـ Dodo Payments. ويتضمن تعريفات الأنواع لكل طلب واستجابة، وأخطاء مقيّدة بالأنواع، وإعادة المحاولة التلقائية، والمهلات الزمنية، والترقيم التلقائي للصفحات.

Installation

ثبّت حزمة dodopayments باستخدام مدير الحزم لديك:

البدء السريع

أنشئ عميلًا، ثم أنشئ جلسة دفع:
إذا حذفت bearerToken، فسيقرأ العميل متغير البيئة DODO_PAYMENTS_API_KEY. وإذا حذفت environment، فسيتصل العميل بالوضع المباشر. يعمل مفتاح API الخاص بوضع الاختبار فقط مع environment: 'test_mode'.
احتفظ بمفاتيح API في متغيرات البيئة أو في مدير أسرار. لا تُضمّنها أبدًا في نظام التحكم بالإصدارات أو تكشفها في كود جهة العميل.

الميزات الأساسية

TypeScript First

تعريفات الأنواع لكل مَعلمة طلب وحقل استجابة، تظهر في المحرر لديك.

Auto-Pagination

تجلب أساليب القوائم الصفحة التالية تلقائيًا عند التكرار باستخدام for await...of.

Error Handling

فئة أخطاء مقيّدة بالأنواع لكل حالة خطأ HTTP، مع الحالة والترويسات ونص الاستجابة.

Smart Retries

محاولتا إعادة محاولة افتراضيًا، مع تأخير أُسّي، لأخطاء الاتصال ورموز الحالة القابلة لإعادة المحاولة.

الإعدادات

متغيرات البيئة

خزّن مفتاح API في متغير بيئة:
.env
يقرأ العميل هذه المتغيرات عندما لا تمرّر الخيار المطابق: إذا تم تعيين عنوان URL أساسي ومرّرت أيضًا environment، فسيطرح المُنشئ خطأ “Ambiguous URL”. لاستخدام environment في هذه الحالة، مرّر baseURL: null. للتحقق من webhook، مرّر نص الطلب الخام والترويسات إلى client.webhooks.unwrap(rawBody, { headers }). يتحقق هذا من التوقيع باستخدام مفتاح webhook الخاص بك ويعيد الحدث المحلّل. أما client.webhooks.unsafeUnwrap(rawBody) فيحلّل النص دون التحقق منه، لذا استخدمه للاختبار فقط. راجع Webhooks.

إعداد المهلة الزمنية

تنتهي مهلة الطلبات بعد دقيقة واحدة افتراضيًا. عيّن timeout، بالمللي ثانية، على العميل أو على طلب واحد:
عند انتهاء مهلة الطلب، يطرح SDK الخطأ APIConnectionTimeoutError. تتم إعادة محاولة الطلبات التي انتهت مهلتها، لذلك قد يستغرق الاستدعاء وقتًا أطول من timeout قبل فشله.

إعداد إعادة المحاولة

عيّن maxRetries على العميل أو على طلب واحد:
يعيد SDK المحاولة عند أخطاء الاتصال والاستجابات ذات الحالات 408 أو 409 أو 429 أو 500 وما فوق. ويعيد المحاولة مرتين افتراضيًا، مع تأخير أُسّي.
عندما يفشل الطلب مجددًا، يطرح SDK فئة فرعية من DodoPayments.APIError. يحتوي كل خطأ على خصائص status وheaders وerror (نص الاستجابة). تحقّق من فئة محددة باستخدام instanceof، مثل err instanceof DodoPayments.RateLimitError:

العمليات الشائعة

تستخدم الأمثلة في هذا القسم client من البدء السريع.

إنشاء جلسة دفع

أنشئ جلسة دفع، ثم أعد توجيه العميل إلى checkout_url المُعاد:
يعمل كل checkout_url مرة واحدة وينتهي بعد 24 ساعة. للاطلاع على كل خيار من خيارات الجلسة، راجع جلسات الدفع.

إدارة العملاء

أنشئ عميلًا باستخدام عنوان بريد إلكتروني واسم، ثم استرجعه بواسطة المعرّف:

التعامل مع الاشتراكات

أنشئ اشتراكًا، وافرض رسومًا على اشتراك عند الطلب، واقرأ سجل استخدام الاشتراك.
POST /subscriptions (أسلوب subscriptions.create في SDK) مهجور. لا يزال يعمل مع عمليات الدمج الحالية، لكن ينبغي لعمليات الدمج الجديدة إنشاء الاشتراكات من خلال جلسة دفع.
يتطلب billing فقط country، وهو رمز بلد ISO مكوّن من حرفين. يأخذ customer { customer_id } لإرفاق عميل موجود، أو { email, name? } لإنشاء عميل. يُستخدم charge مع الاشتراكات عند الطلب، ويكون product_price بأصغر وحدة للعملة. يعيد retrieveUsageHistory قائمة مقسّمة إلى صفحات، ويمكنك التكرار عليها كما هو موضح في الترقيم التلقائي للصفحات.

الفوترة المستندة إلى الاستخدام

إدخال أحداث الاستخدام

أرسل أحداث الاستخدام إلى عميل:
يُعد event_id مفتاح عدم التكرار، لذا امنح كل حدث قيمة فريدة. إذا ظهر event_id نفسه مرتين في طلب واحد، فسيتم رفض الطلب بالكامل. وإذا كان قد تم إدخال event_id من قبل، فسيتم تجاهل الحدث الجديد. يقبل الطلب ما يصل إلى 1,000 حدث. تكون قيمة timestamp افتراضيًا هي الوقت الحالي، ويُرفض الحدث إذا كان قبل الوقت الحالي بأكثر من ساعة أو بعده بأكثر من 5 دقائق.

استرجاع أحداث الاستخدام

استرجع حدثًا واحدًا بواسطة event_id، أو اعرض قائمة بالأحداث المصفّاة حسب العميل واسم الحدث والنطاق الزمني:
يقبل usageEvents.list أيضًا meter_id، ويعيد قائمة مقسّمة إلى صفحات.

إعداد الوكيل الوسيط

لإرسال الطلبات عبر وكيل وسيط، مرّر إعدادات الوكيل الوسيط الخاصة ببيئة التشغيل لديك في fetchOptions.

Node.js (باستخدام Undici)

مرّر ProxyAgent من undici باعتباره dispatcher:

Bun

عيّن الخيار proxy:

Deno

أنشئ عميل HTTP باستخدام Deno.createHttpClient ومرّره باعتباره client:

التسجيل

عيّن مستوى السجل باستخدام خيار العميل logLevel أو متغير البيئة DODO_PAYMENTS_LOG. يتجاوز خيار العميل متغير البيئة.
على مستوى debug، يسجّل SDK كل طلب واستجابة HTTP، بما في ذلك الترويسات والنصوص. تُحجب بعض ترويسات المصادقة، لكن قد تظل البيانات الحساسة في النصوص ظاهرة.
مستويات السجل، من الأكثر إسهابًا إلى الأقل، هي:
  • 'debug': رسائل التصحيح والمعلومات والتحذيرات والأخطاء.
  • 'info': رسائل المعلومات والتحذيرات والأخطاء.
  • 'warn': التحذيرات والأخطاء. وهذا هو الإعداد الافتراضي.
  • 'error': الأخطاء فقط.
  • 'off': لا توجد تسجيلات.
يسجّل SDK إلى console افتراضيًا. لاستخدام pino أو winston أو مكتبة تسجيل أخرى، مرّر أداة التسجيل الخاصة بك باعتبارها خيار logger؛ ويظل logLevel متحكمًا في الرسائل التي تصل إليها. رسائل السجل مخصصة لتصحيح الأخطاء فقط، وقد يتغير تنسيقها بين الإصدارات.

الترحيل من Node.js SDK

إذا كنت تستخدم Node.js SDK القديم، فاتبع دليل الترحيل للترقية. يستخدم SDK الحالي API المضمّن fetch بدلًا من node-fetch، ويتطلب Node.js 20 وTypeScript 4.9 وJest 28 أو الإصدارات الأحدث، ويتضمن أداة ترحيل تحدّث معظم كودك.

View Migration Guide

تعرّف على كيفية الترحيل من Node.js SDK إلى TypeScript SDK

الترقيم التلقائي للصفحات

تعيد أساليب القوائم نتائج مقسّمة إلى صفحات. كرّر باستخدام for await...of للحصول على العناصر من كل صفحة. يطلب SDK الصفحة التالية عند الحاجة إليها:
للعمل مع صفحة واحدة في كل مرة، اقرأ page.items واستدعِ hasNextPage() وgetNextPage():
لتعيين حجم الصفحة، مرّر page_size إلى أسلوب القائمة، مثل client.payments.list({ page_size: 50 }).

المتطلبات

يدعم SDK TypeScript 4.9 أو الإصدارات الأحدث وبيئات التشغيل التالية:
  • متصفحات الويب (Chrome وFirefox وSafari وEdge وغيرها، بأحدث الإصدارات)
  • Node.js 20 LTS أو الإصدارات الأحدث (غير المنتهية الصلاحية)
  • Deno 1.28.0 أو الإصدارات الأحدث
  • Bun 1.0 أو الإصدارات الأحدث
  • Cloudflare Workers
  • Vercel Edge Runtime
  • Jest 28 أو الإصدارات الأحدث مع بيئة "node" (بيئة "jsdom" غير مدعومة)
  • Nitro 2.6 أو الإصدارات الأحدث
لا يتوفر دعم لـ React Native.

الموارد

GitHub Repository

الكود المصدري والإصدارات والقائمة الكاملة للأساليب.

API Reference

كل نقطة نهاية ومَعلمة واستجابة.

Discord Community

اطرح الأسئلة وتحدث مع المطورين الآخرين.

Report Issues

أبلغ عن الأخطاء أو اطلب ميزات جديدة.

الدعم

للحصول على مساعدة بشأن TypeScript SDK:

المساهمة

للمساهمة، اقرأ إرشادات المساهمة.
آخر تعديل في ٢٦ سبتمبر ٢٠٢٦