@dodopayments/fastify لتطبيق Fastify لديك ثلاثة معالجات مسارات: يعيد Checkout عناوين URL الخاصة بـ checkout، ويرسل CustomerPortal العميل إلى Customer Portal، ويتحقق Webhooks من طلبات webhook ويستدعي معالجات الأحداث لديك.
Checkout Handler
أنشئ payment links وcheckout sessions من تطبيق Fastify لديك.
Customer Portal
اسمح للعملاء بإدارة اشتراكاتهم وتفاصيلهم.
Webhooks
تحقّق من أحداث webhook الخاصة بـ Dodo Payments وعالجها.
التثبيت
1
Install the Package
شغّل الأمر التالي في جذر مشروعك:تتطلب الحزمة Fastify 5.4.0 أو إصدارًا أحدث.
2
Set Up Environment Variables
أنشئ ملف أنشئ API key ضمن Developer → API Keys. أضف webhook endpoint ضمن Developer → Webhooks وانسخ signing secret الخاص به إلى
.env في جذر مشروعك:DODO_PAYMENTS_WEBHOOK_KEY. أثناء التطوير، استخدم test mode API key مع DODO_PAYMENTS_ENVIRONMENT=test_mode، لأن test mode key يعمل فقط مع test mode. إنّ DODO_PAYMENTS_RETURN_URL اختياري.أمثلة على معالجات المسارات
تسجّل الأمثلة المسارات على نسخة Fastify تم إنشاؤها باستخدام
Fastify(). يحتاج مسار webhook إلى نص الطلب الخام، لذلك يضيف المثال محلل نص داخل plugin لا يحتوي إلا على مسار webhook.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
استخدم هذا المعالج لدمج checkout الخاصة بـ Dodo Payments في تطبيق Fastify لديك. وهو يدعم تدفقات الدفع static (GET) وdynamic (POST) وsession (POST). يعيد
Checkout() قيمة getHandler لتدفق static وقيمة postHandler لتدفقَي dynamic وsession. سجّل كل تدفق POST على مسار خاص به.معالج مسار Checkout
يدعم adaptor تدفقات checkout الثلاثة الخاصة بـ Dodo Payments. عيّن
type في إعدادات المعالج لاختيار التدفق الذي يقدمه المسار. يستجيب كل تدفق بصيغة JSON تحتوي على checkout_url ليفتحه العميل.- Static Payment Links:
type: "static"، GET. ينشئ payment link لمنتج واحد من query parameters، بعد التحقق من وجود المنتج. - Dynamic Payment Links:
type: "dynamic"، POST. ينشئ دفعة لمرة واحدة أو اشتراكًا باستخدام payment link، وفقًا لكون المنتج متكررًا أم لا. - Checkout Sessions:
type: "session"، POST. ينشئ checkout session من product cart وتفاصيل العميل. استخدم هذا التدفق لعمليات الدمج الجديدة.
Checkout الخيارات التالية:
يعيد
Checkout كائنًا يحتوي على معالجين. سجّل getHandler لـ GET عندما تكون قيمة type هي static، وسجّل postHandler لـ POST عندما تكون القيمة dynamic أو session.
Static Checkout (GET)
Static Checkout (GET)
Query Parameters المدعومة
string
مطلوب
معرّف المنتج، مثل
?productId=pdt_nZuwz45WAs64n3l07zpQR.integer
افتراضي:"1"
كمية المنتج.
string
الاسم الكامل للعميل. يتم تجاهله إذا تم توفير
firstName أو lastName.string
الاسم الأول للعميل.
string
اسم العائلة للعميل.
string
عنوان البريد الإلكتروني للعميل.
string
بلد العميل، وفق رمز ISO 3166-1 alpha-2.
string
عنوان الشارع الخاص بالعميل.
string
مدينة العميل.
string
ولاية العميل أو إقليمه.
string
الرمز البريدي للعميل.
boolean
عيّن القيمة
true لتعطيل حقل الاسم الكامل.boolean
عيّن القيمة
true لتعطيل حقل الاسم الأول.boolean
عيّن القيمة
true لتعطيل حقل اسم العائلة.boolean
عيّن القيمة
true لتعطيل حقل البريد الإلكتروني.boolean
عيّن القيمة
true لتعطيل حقل البلد.boolean
عيّن القيمة
true لتعطيل حقل العنوان.boolean
عيّن القيمة
true لتعطيل حقل المدينة.boolean
عيّن القيمة
true لتعطيل حقل الولاية.boolean
عيّن القيمة
true لتعطيل حقل الرمز البريدي.string
عملة الدفع، مثل
USD.boolean
افتراضي:"true"
إظهار محدد العملة أو إخفاؤه.
number
يثبّت المبلغ المطلوب تحصيله، بوحدات العملة الأساسية، مثل
12.5 مقابل $12.50. يعمل مع منتجات Pay What You Want فقط، ويتم تجاهله إذا كان أقل من الحد الأدنى لسعر المنتج.boolean
افتراضي:"true"
إظهار قسم الخصومات أو إخفاؤه.
string
يتم تمرير أي query parameter يبدأ بـ
metadata_ إلى checkout باعتباره metadata، مثل metadata_orderId=123.true ويحتوي الحقل المطابق على قيمة، مثل email مع disableEmail. يمرّر المعالج هذه المعلمات إلى static payment link.تنسيق الاستجابة
يعيد static checkout استجابة JSON تحتوي على checkout URL:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- أرسل المعلمات في JSON body ضمن طلب POST.
- يدعم الدفعات لمرة واحدة والدفعات المتكررة. يسترجع المعالج المنتج، ثم ينشئ اشتراكًا إذا كان المنتج متكررًا، ودفعة لمرة واحدة خلاف ذلك.
- يحتاج body إلى
billing(معstreetوcityوstateوcountryوzipcode) وإلىcustomer، بالإضافة إلىproduct_id(معquantityاختياري) أوproduct_cart. تحتاج الاشتراكات إلىproduct_id. - يمرّر المعالج أيضًا
metadataوallowed_payment_method_typesوbilling_currencyوdiscount_codes(أوdiscount_codeالمتوقف استخدامه) وreturn_urlوshow_saved_payment_methodsوtax_id. وبالنسبة إلى الاشتراكات، يمرّر أيضًاaddonsوon_demandوtrial_period_days. ويتجاهل الحقول الأخرى. - للاطلاع على تفاصيل الحقول، راجع:
تنسيق الاستجابة
يعيد dynamic checkout استجابة JSON تحتوي على payment link باعتباره checkout URL:Checkout Sessions (POST)
Checkout Sessions (POST)
أرسل payload الخاص بـ checkout session في JSON body. ينشئ المعالج checkout session تعالج تدفق الدفع الكامل للمشتريات لمرة واحدة والاشتراكات، ثم يعيد
checkout_url الخاص بها. مطلوب product_cart ويجب أن يحتوي على منتج واحد على الأقل.يعمل كل checkout_url مرة واحدة وينتهي بعد 24 ساعة، أو بعد 15 دقيقة عند تمرير confirm: true. لا يعيد session المُنشأ باستخدام payment_method_id أي checkout_url، لذلك يستجيب المعالج برمز 400.راجع Checkout Sessions Integration Guide لمزيد من التفاصيل والقائمة الكاملة بالحقول المدعومة.تنسيق الاستجابة
تعيد Checkout sessions استجابة JSON تحتوي على checkout URL:معالج مسار Customer Portal
ينشئ Customer Portal Route Handler جلسة Customer Portal للعميل فيcustomer_id ويعيد توجيه الطلب إلى رابط البوابة. يقبل CustomerPortal خياري bearerToken وenvironment، مثل Checkout. إذا تعذّر على Dodo Payments إنشاء الجلسة، يعيد المعالج 500.
Query Parameters
string
مطلوب
معرّف العميل لجلسة البوابة، مثل
?customer_id=cus_123.boolean
إذا عُيّنت قيمته إلى
true، يُرسل بريدًا إلكترونيًا إلى العميل يتضمن رابط البوابة.معالج مسار Webhook
يتحقق معالج webhook من كل طلب باستخدام webhook secret الخاص بك، الذي يتم تمريره باعتبارهwebhookKey، ثم يستدعي معالجات الأحداث لديك.
- Method: لا يُسمح إلا بطلبات POST. تعيد الطرق الأخرى 405.
- Signature Verification: يتحقق من headers
webhook-idوwebhook-timestampوwebhook-signatureباستخدامwebhookKey، وفق مواصفة Standard Webhooks. يعيد 401 عند فشل التحقق. - Payload Validation: يتم التحقق باستخدام Zod. يعيد 400 للـ payload غير الصالح.
- Error Handling:
- 401: توقيع غير صالح
- 400: payload غير صالح
- 500: خطأ داخلي أثناء التحقق
- Event Routing: يستدعي
onPayloadلكل حدث، ثم يستدعي المعالج الخاص بنوع الحدث، ويعيد 200 عند اكتمالهما. لا يلتقط المعالج الأخطاء التي تطرحها معالجات الأحداث لديك.