الانتقال إلى المحتوى الرئيسي
صلاحية الجلسة: جلسات الدفع صالحة لمدة 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');
3

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

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

جسم الطلب

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

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

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

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

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

product_cart
array
required
مصفوفة من المنتجات التي يجب تضمينها في جلسة الدفع. يجب أن تحتوي كل منتج على product_id صالح من لوحة معلومات دودي للدفع.
مهم: يمكن أن تحتوي عربات المنتجات المتعددة على منتجات دفع لمرة واحدة فقط. لا يمكنك خلط منتجات الاشتراك مع المنتجات لمرة واحدة في نفس جلسة الدفع.
ابحث عن معرفات منتجاتك: يمكنك العثور على معرفات المنتجات في لوحة معلومات دودي للدفع تحت المنتجات → عرض التفاصيل، أو باستخدام 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
default:"false"
عرض طرق الدفع المحفوظة مسبقًا للعملاء العائدين، مما يحسن سرعة الدفع وتجربة المستخدم.
return_url
string
عنوان URL لإعادة توجيه العملاء بعد الدفع الناجح أو الإلغاء.
confirm
boolean
default:"false"
إذا كانت صحيحة، يتم إنهاء جميع تفاصيل الجلسة على الفور. ستقوم API بإلقاء خطأ إذا كانت البيانات المطلوبة مفقودة.
discount_code
string
تطبيق رمز خصم على جلسة الدفع.
metadata
object
أزواج مفاتيح وقيم مخصصة لتخزين معلومات إضافية حول الجلسة.
force_3ds
boolean
تجاوز سلوك 3DS الافتراضي للتاجر لهذه الجلسة.
minimal_address
boolean
default:"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'
  }
});

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

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

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

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

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

تحديث تكامل الخاص بك

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

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

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

هذا كل شيء!

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