الانتقال إلى المحتوى الرئيسي
صلاحية الجلسة: جلسات الدفع صالحة لمدة 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: 'customer@example.com',
        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 (تراكب نافذة) أو الدفع المضمن (مضمن بالكامل). كلا الخيارين يستخدمان نفس عنوان 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, apple_pay, google_pay, amazon_pay, klarna, affirm, afterpay_clearpay, 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: 'customer@example.com',
    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: 'customer@example.com',
    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: 'user@startup.com',
    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: 'student@university.edu',
    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: 'client@company.co.uk',
    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: 'returning.customer@example.com',
    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: 'procurement@enterprise.com',
    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: 'john.sales@company.com'
  }
});

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: 'gamer@example.com',
    name: 'Mike Chen'
  },
  return_url: 'https://gaming-store.com/order-complete'
});

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

للحصول على معلومات مفصلة حول إعداد UPI والاختبار، يرجى الاطلاع على صفحة طرق الدفع في الهند.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_online_course_hindi',
      quantity: 1
    }
  ],
  allowed_payment_method_types: [
    'upi_collect',
    'credit',
    'debit'
  ],
  customer: {
    email: 'student@example.in',
    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)

للحصول على معلومات مفصلة حول إعداد BNPL والاختبار، يرجى الاطلاع على صفحة الدفع الآن والدفع لاحقًا (BNPL).
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_luxury_watch',
      quantity: 1
    }
  ],
  allowed_payment_method_types: [
    'klarna',
    'afterpay_clearpay',
    'credit',
    'debit'
  ],
  customer: {
    email: 'fashion.lover@example.com',
    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: 'customer@example.com',
    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
تعد الروابط القصيرة مثالية للمشاركة عبر SMS أو البريد الإلكتروني أو وسائل التواصل الاجتماعي. فهي أسهل في التذكر وتبني ثقة أكبر لدى العملاء مقارنةً بالروابط الطويلة.

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: 'customer@example.com',
    name: 'Jane Smith'
  }
});
استخدم redirect_immediately: true عندما يكون لديك صفحة نجاح مخصصة توفر تجربة مستخدم أفضل مقارنة بصفحة النجاح الافتراضية للدفع. هذا مفيد بشكل خاص لتطبيقات الجوال وعمليات الدفع المدمجة.
عند تمكين redirect_immediately، يتم إعادة توجيه العملاء إلى return_url الخاصة بك على الفور بعد إتمام الدفع، متجاوزين صفحة النجاح الافتراضية تمامًا.

المعاينة لجلسات الدفع

قبل إنشاء جلسة دفع، يمكنك معاينة تفاصيل التسعير بما في ذلك الضرائب والخصومات والإجماليات. هذا مفيد لعرض التسعير الدقيق للعملاء قبل الانتقال إلى الدفع.
const preview = await client.checkoutSessions.preview({
  product_cart: [
    { product_id: 'prod_123', quantity: 1 }
  ],
  billing_address: {
    country: 'US',
    state: 'CA',
    zipcode: '94102'
  },
  discount_code: 'SAVE20'
});

console.log('Subtotal:', preview.subtotal);
console.log('Tax:', preview.tax);
console.log('Discount:', preview.discount);
console.log('Total:', preview.total);

مرجع API للمعاينة

عرض الوثائق الكاملة لنقطة نهاية المعاينة.

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

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

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

عملية الهجرة

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

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

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

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

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

هذا كل شيء!

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