الانتقال إلى المحتوى الرئيسي
صلاحية الجلسة: جلسات الدفع صالحة لمدة 24 ساعة بشكل افتراضي. إذا قمت بتمرير confirm=true في طلبك، ستكون الجلسة صالحة لمدة 15 دقيقة فقط.

المتطلبات الأساسية

1

حساب دودي للدفع

ستحتاج إلى حساب تاجر نشط في دودي للدفع مع وصول إلى API.
2

بيانات اعتماد API

قم بإنشاء بيانات اعتماد API الخاصة بك من لوحة معلومات دودي للدفع:
3

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

قم بإنشاء منتجاتك في لوحة معلومات دودي للدفع قبل تنفيذ جلسات الدفع.

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

import DodoPayments from 'dodopayments';

// Initialize the Dodo Payments client
const client = new DodoPayments({
  bearerToken: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode', // defaults to 'live_mode'
});

async function createCheckoutSession() {
  try {
    const session = await client.checkoutSessions.create({
      // Products to sell - use IDs from your Dodo Payments dashboard
      product_cart: [
        {
          product_id: 'prod_123', // Replace with your actual product ID
          quantity: 1
        }
      ],
      
      // Pre-fill customer information to reduce friction
      customer: {
        email: '[email protected]',
        name: 'John Doe',
        phone_number: '+1234567890'
      },
      
      // Billing address for tax calculation and compliance
      billing_address: {
        street: '123 Main St',
        city: 'San Francisco',
        state: 'CA',
        country: 'US', // Required: ISO 3166-1 alpha-2 country code
        zipcode: '94102'
      },
      
      // Where to redirect after successful payment
      return_url: 'https://yoursite.com/checkout/success',
      
      // Custom data for your internal tracking
      metadata: {
        order_id: 'order_123',
        source: 'web_app'
      }
    });

    // Redirect your customer to this URL to complete payment
    console.log('Checkout URL:', session.checkout_url);
    console.log('Session ID:', session.session_id);
    
    return session;
    
  } catch (error) {
    console.error('Failed to create checkout session:', error);
    throw error;
  }
}

// Example usage in an Express.js route
app.post('/create-checkout', async (req, res) => {
  try {
    const session = await createCheckoutSession();
    res.json({ checkout_url: session.checkout_url });
  } catch (error) {
    res.status(500).json({ error: 'Failed to create checkout session' });
  }
});

استجابة API

جميع الطرق المذكورة أعلاه تعيد نفس هيكل الاستجابة:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
1

احصل على عنوان URL للدفع

استخرج checkout_url من استجابة API.
2

إعادة توجيه عميلك

وجه عميلك إلى عنوان URL للدفع لإكمال عملية الشراء.
// Redirect immediately
window.location.href = session.checkout_url;

// Or open in new window
window.open(session.checkout_url, '_blank');
خيارات التكامل البديلة: بدلاً من إعادة التوجيه، يمكنك تضمين عملية الدفع مباشرة في صفحتك باستخدام Overlay Checkout (تراكب نافذة منبثقة) أو Inline Checkout (مضمن بالكامل). كلا الخيارين يستخدمان نفس عنوان URL لجلسة الدفع.
3

التعامل مع العودة

بعد الدفع، يتم إعادة توجيه العملاء إلى return_url الخاص بك مع معلمات استعلام إضافية لحالة الدفع.

جسم الطلب

الحقول المطلوبة

الحقول الأساسية المطلوبة لكل جلسة دفع

الحقول الاختيارية

تكوين إضافي لتخصيص تجربة الدفع الخاصة بك

الحقول المطلوبة

product_cart
array
مطلوب
مصفوفة من المنتجات التي يجب تضمينها في جلسة الدفع. يجب أن تحتوي كل منتج على product_id صالح من لوحة معلومات دودي للدفع.
الدفع المختلط: يمكنك دمج منتجات الدفع لمرة واحدة ومنتجات الاشتراك في نفس جلسة الدفع. يتيح ذلك حالات استخدام قوية مثل رسوم الإعداد مع الاشتراكات، وحزم الأجهزة مع SaaS، والمزيد.
ابحث عن معرفات منتجاتك: يمكنك العثور على معرفات المنتجات في لوحة معلومات دودي للدفع تحت المنتجات → عرض التفاصيل، أو باستخدام API قائمة المنتجات.

الحقول الاختيارية

قم بتكوين هذه الحقول لتخصيص تجربة الدفع وإضافة منطق الأعمال إلى تدفق الدفع الخاص بك.
customer
object
معلومات العميل. يمكنك إما إرفاق عميل موجود باستخدام معرفه أو إنشاء سجل عميل جديد أثناء الدفع.
إرفاق عميل موجود بجلسة الدفع باستخدام معرفه.
billing_address
object
معلومات عنوان الفواتير لحساب الضرائب بدقة، ومنع الاحتيال، والامتثال التنظيمي.
عندما يتم تعيين confirm إلى true، تصبح جميع حقول عنوان الفواتير مطلوبة لإنشاء جلسة ناجحة.
allowed_payment_method_types
array
تحكم في طرق الدفع المتاحة للعملاء أثناء الدفع. يساعد ذلك في تحسين الأسواق أو متطلبات الأعمال المحددة.الخيارات المتاحة: credit، debit، upi_collect، upi_intent، apple_pay، google_pay، amazon_pay، klarna، affirm، afterpay_clearpay، sepa، ach، cashapp، multibanco، bancontact_card، eps، ideal، przelewy24، paypal
حرج: تأكد دائمًا من تضمين credit و debit كخيارات احتياطية لمنع فشل الدفع عند عدم توفر طرق الدفع المفضلة.
مثال:
["apple_pay", "google_pay", "credit", "debit"]
billing_currency
string
تجاوز اختيار العملة الافتراضية مع عملة فواتير ثابتة. يستخدم رموز العملة ISO 4217.العملات المدعومة: USD، EUR، GBP، CAD، AUD، INR، والمزيدمثال: "USD" للدولار الأمريكي، "EUR" لليورو
هذا الحقل فعال فقط عند تمكين التسعير التكيفي. إذا تم تعطيل التسعير التكيفي، سيتم استخدام العملة الافتراضية للمنتج.
show_saved_payment_methods
boolean
افتراضي:"false"
عرض طرق الدفع المحفوظة مسبقًا للعملاء العائدين، مما يحسن سرعة الدفع وتجربة المستخدم.
return_url
string
عنوان URL لإعادة توجيه العملاء بعد الدفع الناجح أو الإلغاء.
confirm
boolean
افتراضي:"false"
إذا كانت صحيحة، يتم إنهاء جميع تفاصيل الجلسة على الفور. ستقوم API بإلقاء خطأ إذا كانت البيانات المطلوبة مفقودة.
discount_code
string
تطبيق رمز خصم على جلسة الدفع.
metadata
object
أزواج مفاتيح وقيم مخصصة لتخزين معلومات إضافية حول الجلسة.
force_3ds
boolean
تجاوز سلوك 3DS الافتراضي للتاجر لهذه الجلسة.
minimal_address
boolean
افتراضي:"false"
تمكين وضع جمع العنوان الحد الأدنى. عند التمكين، يجمع الدفع فقط:
  • الدولة: مطلوب دائمًا لتحديد الضرائب
  • الرمز البريدي: فقط في المناطق التي يكون فيها ضروريًا لحساب ضريبة المبيعات أو VAT أو GST
هذا يقلل بشكل كبير من احتكاك الدفع عن طريق إزالة حقول النموذج غير الضرورية.
قم بتمكين العنوان الحد الأدنى لإكمال الدفع بشكل أسرع. تظل جمع العنوان الكامل متاحة للأعمال التي تتطلب تفاصيل فواتير كاملة.
customization
object
تخصيص مظهر وسلوك واجهة الدفع.
feature_flags
object
تكوين ميزات وسلوكيات محددة لجلسة الدفع.
subscription_data
object
تكوين إضافي لجلسات الدفع التي تحتوي على منتجات اشتراك.

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

إليك 10 أمثلة شاملة تعرض تكوينات مختلفة لجلسات الدفع لمختلف سيناريوهات الأعمال:

1. دفع منتج واحد بسيط

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_ebook_guide',
      quantity: 1
    }
  ],
  customer: {
    email: '[email protected]',
    name: 'John Doe'
  },
  return_url: 'https://yoursite.com/success'
});

2. عربة متعددة المنتجات

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_laptop',
      quantity: 1
    },
    {
      product_id: 'prod_mouse',
      quantity: 2
    },
    {
      product_id: 'prod_warranty',
      quantity: 1
    }
  ],
  customer: {
    email: '[email protected]',
    name: 'John Doe',
    phone_number: '+1234567890'
  },
  billing_address: {
    street: '123 Tech Street',
    city: 'San Francisco',
    state: 'CA',
    country: 'US',
    zipcode: '94102'
  },
  return_url: 'https://electronics-store.com/order-confirmation'
});

3. اشتراك مع فترة تجريبية

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_monthly_plan',
      quantity: 1
    }
  ],
  subscription_data: {
    trial_period_days: 14
  },
  customer: {
    email: '[email protected]',
    name: 'Jane Smith'
  },
  return_url: 'https://saas-app.com/onboarding',
  metadata: {
    plan_type: 'professional',
    referral_source: 'google_ads'
  }
});

4. دفع مؤكد مسبقًا

عندما يتم تعيين confirm إلى true، سيتم أخذ العميل مباشرة إلى صفحة الدفع، متجاوزًا أي خطوات تأكيد.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_premium_course',
      quantity: 1
    }
  ],
  customer: {
    email: '[email protected]',
    name: 'Alex Johnson',
    phone_number: '+1555123456'
  },
  billing_address: {
    street: '456 University Ave',
    city: 'Boston',
    state: 'MA',
    country: 'US',
    zipcode: '02134'
  },
  confirm: true,
  return_url: 'https://learning-platform.com/course-access',
  metadata: {
    course_category: 'programming',
    enrollment_date: '2024-01-15'
  }
});

5. دفع مع تجاوز العملة

تجاوز billing_currency ساري المفعول فقط عند تمكين العملة التكيفية في إعدادات حسابك. إذا تم تعطيل العملة التكيفية، فلن يكون لهذا المعامل أي تأثير.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_consulting_service',
      quantity: 1
    }
  ],
  customer: {
    email: '[email protected]',
    name: 'Oliver Williams'
  },
  billing_address: {
    street: '789 Business Park',
    city: 'London',
    state: 'England',
    country: 'GB',
    zipcode: 'SW1A 1AA'
  },
  billing_currency: 'GBP',
  feature_flags: {
    allow_currency_selection: true,
    allow_tax_id: true
  },
  return_url: 'https://consulting-firm.com/service-confirmation'
});

6. طرق الدفع المحفوظة للعملاء العائدين

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_monthly_subscription',
      quantity: 1
    }
  ],
  customer: {
    email: '[email protected]',
    name: 'Robert Johnson',
    phone_number: '+1555987654'
  },
  show_saved_payment_methods: true,
  feature_flags: {
    allow_phone_number_collection: true,
    always_create_new_customer: false
  },
  return_url: 'https://subscription-service.com/welcome-back',
  metadata: {
    customer_tier: 'premium',
    account_age: 'returning'
  }
});

7. دفع B2B مع جمع رقم التعريف الضريبي

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_enterprise_license',
      quantity: 5
    }
  ],
  customer: {
    email: '[email protected]',
    name: 'Sarah Davis',
    phone_number: '+1800555000'
  },
  billing_address: {
    street: '1000 Corporate Blvd',
    city: 'New York',
    state: 'NY',
    country: 'US',
    zipcode: '10001'
  },
  feature_flags: {
    allow_tax_id: true,
    allow_phone_number_collection: true,
    always_create_new_customer: false
  },
  return_url: 'https://enterprise-software.com/license-delivery',
  metadata: {
    customer_type: 'enterprise',
    contract_id: 'ENT-2024-001',
    sales_rep: '[email protected]'
  }
});

8. دفع بموضوع داكن مع رمز خصم

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_gaming_chair',
      quantity: 1
    }
  ],
  discount_code: 'BLACKFRIDAY2024',
  customization: {
    theme: 'dark',
    show_order_details: true,
    show_on_demand_tag: false
  },
  feature_flags: {
    allow_discount_code: true
  },
  customer: {
    email: '[email protected]',
    name: 'Mike Chen'
  },
  return_url: 'https://gaming-store.com/order-complete'
});

9. طرق الدفع الإقليمية (UPI للهند)

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_online_course_hindi',
      quantity: 1
    }
  ],
  allowed_payment_method_types: [
    'upi_collect',
    'upi_intent',
    'credit',
    'debit'
  ],
  customer: {
    email: '[email protected]',
    name: 'Priya Sharma',
    phone_number: '+919876543210'
  },
  billing_address: {
    street: 'MG Road',
    city: 'Bangalore',
    state: 'Karnataka',
    country: 'IN',
    zipcode: '560001'
  },
  billing_currency: 'INR',
  return_url: 'https://education-platform.in/course-access',
  metadata: {
    region: 'south_india',
    language: 'hindi'
  }
});

10. دفع BNPL (اشتر الآن وادفع لاحقًا)

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_luxury_watch',
      quantity: 1
    }
  ],
  allowed_payment_method_types: [
    'klarna',
    'affirm',
    'afterpay_clearpay',
    'credit',
    'debit'
  ],
  customer: {
    email: '[email protected]',
    name: 'Emma Thompson',
    phone_number: '+1234567890'
  },
  billing_address: {
    street: '555 Fashion Ave',
    city: 'Los Angeles',
    state: 'CA',
    country: 'US',
    zipcode: '90210'
  },
  feature_flags: {
    allow_phone_number_collection: true
  },
  return_url: 'https://luxury-store.com/purchase-confirmation',
  metadata: {
    product_category: 'luxury',
    price_range: 'high_value'
  }
});

11. استخدام طرق الدفع الحالية للدفع الفوري

استخدم طريقة الدفع المحفوظة للعميل لإنشاء جلسة دفع تتم معالجتها على الفور، متجاوزًا جمع طريقة الدفع:
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_premium_plan',
      quantity: 1
    }
  ],
  customer: {
    customer_id: 'cus_123'  // Required when using payment_method_id
  },
  payment_method_id: 'pm_abc123',  // Use customer's saved payment method
  confirm: true,  // Required when using payment_method_id
  return_url: 'https://yourapp.com/success'
});
عند استخدام payment_method_id، يجب تعيين confirm إلى true ويجب تقديم customer_id موجود. سيتم التحقق من أهلية طريقة الدفع مع عملة الدفع.
يجب أن تنتمي طريقة الدفع إلى العميل وأن تكون متوافقة مع عملة الدفع. هذا يمكّن عمليات الشراء بنقرة واحدة للعملاء العائدين.

12. روابط قصيرة لروابط دفع أنظف

قم بإنشاء روابط دفع مختصرة وقابلة للمشاركة مع شفرات مخصصة:
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_monthly_subscription',
      quantity: 1
    }
  ],
  short_link: true,  // Generate a shortened payment link
  return_url: 'https://yourapp.com/success',
  customer: {
    email: '[email protected]',
    name: 'John Doe'
  }
});

// The checkout_url will be a shortened, cleaner link
console.log(session.checkout_url);  // e.g., https://checkout.dodopayments.com/buy/abc123
الروابط القصيرة مثالية لمشاركة عبر الرسائل القصيرة أو البريد الإلكتروني أو وسائل التواصل الاجتماعي. من الأسهل تذكرها وتبني ثقة أكبر لدى العملاء مقارنةً بالروابط الطويلة.

13. تخطي صفحة نجاح الدفع مع إعادة توجيه فورية

قم بإعادة توجيه العملاء مباشرة بعد إتمام الدفع، متجاوزًا صفحة النجاح الافتراضية:
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_digital_product',
      quantity: 1
    }
  ],
  feature_flags: {
    redirect_immediately: true  // Skip success page, redirect immediately
  },
  return_url: 'https://yourapp.com/success',
  customer: {
    email: '[email protected]',
    name: 'Jane Smith'
  }
});
استخدم redirect_immediately: true عندما يكون لديك صفحة نجاح مخصصة توفر تجربة مستخدم أفضل من صفحة نجاح الدفع الافتراضية. هذا مفيد بشكل خاص لتطبيقات الهاتف المحمول وتدفقات الدفع المضمنة.
عندما يتم تمكين redirect_immediately، يتم إعادة توجيه العملاء إلى return_url مباشرة بعد إتمام الدفع، متجاوزين صفحة النجاح الافتراضية تمامًا.

الانتقال من الروابط الديناميكية إلى جلسات الدفع

الاختلافات الرئيسية

سابقًا، عند إنشاء رابط دفع باستخدام الروابط الديناميكية، كان يتعين عليك تقديم عنوان الفوترة الكامل للعميل. مع جلسات الدفع، لم يعد هذا ضروريًا. يمكنك ببساطة تمرير أي معلومات لديك، وسنتولى الباقي. على سبيل المثال:
  • إذا كنت تعرف فقط بلد الفوترة للعميل، فقط قدم ذلك.
  • ستقوم عملية الدفع تلقائيًا بجمع التفاصيل المفقودة قبل نقل العميل إلى صفحة الدفع.
  • من ناحية أخرى، إذا كان لديك بالفعل جميع المعلومات المطلوبة وترغب في الانتقال مباشرة إلى صفحة الدفع، يمكنك تمرير مجموعة البيانات الكاملة وتضمين confirm=true في جسم طلبك.

عملية الترحيل

الترحيل من الروابط الديناميكية إلى جلسات الدفع سهل:
1

تحديث تكاملتك

قم بتحديث تكاملتك لاستخدام واجهة برمجة التطبيقات الجديدة أو طريقة SDK.
2

تعديل حمولة الطلب

قم بتعديل حمولة الطلب وفقًا لتنسيق جلسات الدفع.
3

هذا كل شيء!

نعم. لا حاجة لأي معالجة إضافية أو خطوات ترحيل خاصة من جانبك.