@dodopayments/express لتطبيق Express ثلاثة معالجات للمسارات: يعيد checkoutHandler عناوين URL لـ checkout، ويرسل CustomerPortal العميل إلى Customer Portal، ويتحقق Webhooks من طلبات webhook ويستدعي معالجات الأحداث لديك.
Checkout Handler
أنشئ payment links وcheckout sessions من تطبيق Express لديك.
Customer Portal
اسمح للعملاء بإدارة اشتراكاتهم وتفاصيلهم.
Webhooks
تحقّق من أحداث webhook الخاصة بـ Dodo Payments وعالجها.
التثبيت
1
Install the Package
شغّل الأمر التالي في جذر مشروعك:
2
Set Up Environment Variables
أنشئ ملف أنشئ مفتاح API ضمن Developer → API Keys. أضف نقطة نهاية webhook ضمن Developer → Webhooks وانسخ سر التوقيع الخاص بها إلى
.env في جذر مشروعك:DODO_PAYMENTS_WEBHOOK_KEY. أثناء التطوير، استخدم مفتاح API في وضع الاختبار مع DODO_PAYMENTS_ENVIRONMENT=test_mode، لأن مفتاح وضع الاختبار يعمل فقط مع وضع الاختبار. DODO_PAYMENTS_RETURN_URL اختياري.أمثلة على معالجات المسارات
تسجّل الأمثلة المسارات في تطبيق Express أُنشئ باستخدام
express(). تقرأ معالجات checkout التي تستخدم POST ومعالج webhook القيمة req.body، لذلك يسجّل كل مثال express.json() قبل مساراته.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
استخدم هذا المعالج لدمج checkout الخاص بـ Dodo Payments في تطبيق Express لديك. وهو يدعم تدفقات الدفع الثابتة (GET) والديناميكية (POST) وتدفقات الجلسات (POST). سجّل كل تدفق POST في مسار مستقل، لأن أول معالج يُسجّل لمسار ما يستجيب لكل طلب يُرسل إليه.
معالج مسار Checkout
يدعم المهايئ تدفقات checkout الثلاثة في Dodo Payments. اضبط
type في إعدادات المعالج لاختيار التدفق الذي يقدمه المسار. يستجيب كل تدفق ببيانات JSON تحتوي على checkout_url ليفتحه العميل.- Payment Links الثابتة:
type: "static"، GET. ينشئ payment link لمنتج واحد من معلمات الاستعلام بعد التحقق من وجود المنتج. - Payment Links الديناميكية:
type: "dynamic"، POST. ينشئ دفعة لمرة واحدة أو اشتراكًا باستخدام payment link، وفقًا لما إذا كان المنتج متكررًا. - Checkout Sessions:
type: "session"، POST. ينشئ checkout session من سلة منتجات وتفاصيل العميل. استخدم هذا التدفق للتكاملات الجديدة.
checkoutHandler الخيارات التالية:
سجّل المعالج لـ GET عندما تكون قيمة
type هي static، ولـ POST عندما تكون type هي dynamic أو session. يعيد المعالج الحالة 405 للطرق الأخرى.
Static Checkout (GET)
Static Checkout (GET)
معلمات الاستعلام المدعومة
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
تُمرَّر أي معلمة استعلام تبدأ بـ
metadata_ إلى checkout كبيانات وصفية، مثل metadata_orderId=123.true ويحتوي الحقل المطابق على قيمة، مثل email مع disableEmail. يمرّر المعالج هذه المعلمات إلى static payment link.تنسيق الاستجابة
يعيد checkout الثابت استجابة JSON تحتوي على عنوان URL لـ checkout:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- أرسل المعلمات كنص JSON في طلب POST.
- يدعم الدفعات لمرة واحدة والدفعات المتكررة. يسترجع المعالج المنتج، ثم ينشئ اشتراكًا إذا كان المنتج متكررًا، ودفعة لمرة واحدة خلاف ذلك.
- يحتاج النص إلى
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. ويتجاهل الحقول الأخرى. - للحصول على تفاصيل الحقول، راجع:
تنسيق الاستجابة
يعيد checkout الديناميكي استجابة JSON تحتوي على payment link بوصفه عنوان URL لـ checkout:Checkout Sessions (POST)
Checkout Sessions (POST)
أرسل حمولة checkout session كنص JSON. ينشئ المعالج checkout session يعالج تدفق الدفع الكامل للمشتريات لمرة واحدة والاشتراكات، ثم يعيد
checkout_url. الحقل product_cart مطلوب ويجب أن يحتوي على منتج واحد على الأقل.يعمل كل checkout_url مرة واحدة وينتهي بعد 24 ساعة، أو بعد 15 دقيقة عند تمرير confirm: true. لا يعيد session المنشأ باستخدام payment_method_id أي checkout_url، لذلك يستجيب المعالج بالحالة 400.راجع دليل تكامل Checkout Sessions لمزيد من التفاصيل والقائمة الكاملة للحقول المدعومة.تنسيق الاستجابة
تعيد Checkout sessions استجابة JSON تحتوي على عنوان URL لـ checkout:معالج مسار Customer Portal
ينشئ معالج مسار Customer Portal جلسة Customer Portal للعميل الموجود فيcustomer_id ويعيد توجيه الطلب إلى رابط البوابة. يأخذ CustomerPortal خياري bearerToken وenvironment، مثل checkoutHandler. إذا تعذّر على Dodo Payments إنشاء الجلسة، يعيد المعالج الحالة 500.
معلمات الاستعلام
string
مطلوب
معرّف العميل لجلسة البوابة، مثل
?customer_id=cus_123.boolean
إذا تم ضبطه على
true، يُرسل بريدًا إلكترونيًا إلى العميل يحتوي على رابط البوابة.معالج مسار Webhook
يتحقق معالج webhook من كل طلب باستخدام سر webhook الخاص بك، الممرّر كـwebhookKey، ثم يستدعي معالجات الأحداث لديك.
- الطريقة: لا تُدعم إلا طلبات POST. تعيد الطرق الأخرى الحالة 405.
- التحقق من التوقيع: يتحقق من رؤوس
webhook-idوwebhook-timestampوwebhook-signatureباستخدامwebhookKey، وفق مواصفة Standard Webhooks. يعيد 401 عند فشل التحقق. - التحقق من الحمولة: يتم التحقق باستخدام Zod. يعيد 400 للحمولات غير الصالحة.
- معالجة الأخطاء:
- 401: توقيع غير صالح
- 400: حمولة غير صالحة
- 500: خطأ داخلي أثناء التحقق
- توجيه الأحداث: يستدعي
onPayloadلكل حدث، ثم يستدعي المعالج الخاص بنوع الحدث، ويعيد 200 عند اكتمالهما. لا يلتقط المعالج الأخطاء التي تطرحها معالجات الأحداث لديك.