Chuyển đến nội dung chính
Thời Hạn Phiên Giao Dịch: Các phiên giao dịch thanh toán có hiệu lực trong 24 giờ theo mặc định. Nếu bạn truyền confirm=true trong yêu cầu của bạn, phiên sẽ chỉ có hiệu lực trong 15 phút.

Điều Kiện Tiên Quyết

1

Tài Khoản Dodo Payments

Bạn sẽ cần một tài khoản thương nhân Dodo Payments hoạt động với quyền truy cập API.
2

Thông Tin Xác Thực API

Tạo thông tin xác thực API của bạn từ bảng điều khiển Dodo Payments:
3

Cài Đặt Sản Phẩm

Tạo sản phẩm của bạn trong bảng điều khiển Dodo Payments trước khi triển khai các phiên giao dịch thanh toán.

Tạo Phiên Giao Dịch Thanh Toán Đầu Tiên Của Bạn

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' });
  }
});

Phản Hồi API

Tất cả các phương thức trên đều trả về cùng một cấu trúc phản hồi:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
1

Lấy URL thanh toán

Trích xuất checkout_url từ phản hồi API.
2

Chuyển hướng khách hàng của bạn

Chuyển hướng khách hàng của bạn đến URL thanh toán để hoàn tất giao dịch mua hàng.
// Redirect immediately
window.location.href = session.checkout_url;

// Or open in new window
window.open(session.checkout_url, '_blank');
3

Xử lý việc trở lại

Sau khi thanh toán, khách hàng sẽ được chuyển hướng đến return_url của bạn với các tham số truy vấn bổ sung cho trạng thái thanh toán.

Thân Yêu Yêu Cầu

Trường Bắt Buộc

Các trường thiết yếu cần thiết cho mỗi phiên giao dịch thanh toán

Trường Tùy Chọn

Cấu hình bổ sung để tùy chỉnh trải nghiệm thanh toán của bạn

Trường Bắt Buộc

product_cart
array
required
Mảng các sản phẩm để bao gồm trong phiên giao dịch thanh toán. Mỗi sản phẩm phải có một product_id hợp lệ từ bảng điều khiển Dodo Payments của bạn.
Quan Trọng: Nhiều giỏ sản phẩm chỉ có thể chứa các sản phẩm thanh toán một lần. Bạn không thể trộn lẫn các sản phẩm đăng ký với các sản phẩm một lần trong cùng một phiên giao dịch thanh toán.
Tìm ID Sản Phẩm Của Bạn: Bạn có thể tìm thấy ID sản phẩm trong bảng điều khiển Dodo Payments của bạn dưới Sản Phẩm → Xem Chi Tiết, hoặc bằng cách sử dụng API Danh Sách Sản Phẩm.

Trường Tùy Chọn

Cấu hình các trường này để tùy chỉnh trải nghiệm thanh toán và thêm logic kinh doanh vào quy trình thanh toán của bạn.
customer
object
Thông tin khách hàng. Bạn có thể đính kèm một khách hàng hiện có bằng cách sử dụng ID của họ hoặc tạo một bản ghi khách hàng mới trong quá trình thanh toán.
Đính kèm một khách hàng hiện có vào phiên giao dịch thanh toán bằng cách sử dụng ID của họ.
billing_address
object
Thông tin địa chỉ thanh toán để tính thuế chính xác, phòng ngừa gian lận và tuân thủ quy định.
Khi confirm được đặt thành true, tất cả các trường địa chỉ thanh toán trở thành bắt buộc để tạo phiên thành công.
allowed_payment_method_types
array
Kiểm soát các phương thức thanh toán nào có sẵn cho khách hàng trong quá trình thanh toán. Điều này giúp tối ưu hóa cho các thị trường hoặc yêu cầu kinh doanh cụ thể.Các Tùy Chọn Có Sẵn: 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
Quan Trọng: Luôn bao gồm creditdebit như các tùy chọn dự phòng để ngăn chặn việc thanh toán thất bại khi các phương thức thanh toán ưu tiên không khả dụng.
Ví dụ:
["apple_pay", "google_pay", "credit", "debit"]
billing_currency
string
Ghi đè lựa chọn tiền tệ mặc định bằng một loại tiền tệ thanh toán cố định. Sử dụng mã tiền tệ ISO 4217.Các Tiền Tệ Hỗ Trợ: USD, EUR, GBP, CAD, AUD, INR, và nhiều hơn nữaVí dụ: "USD" cho Đô la Mỹ, "EUR" cho Euro
Trường này chỉ có hiệu lực khi giá cả thích ứng được kích hoạt. Nếu giá cả thích ứng bị vô hiệu hóa, loại tiền tệ mặc định của sản phẩm sẽ được sử dụng.
show_saved_payment_methods
boolean
default:"false"
Hiển thị các phương thức thanh toán đã lưu trước đó cho khách hàng quay lại, cải thiện tốc độ thanh toán và trải nghiệm người dùng.
return_url
string
URL để chuyển hướng khách hàng sau khi thanh toán thành công hoặc hủy bỏ.
confirm
boolean
default:"false"
Nếu đúng, hoàn tất tất cả các chi tiết phiên ngay lập tức. API sẽ ném ra lỗi nếu dữ liệu cần thiết bị thiếu.
discount_code
string
Áp dụng mã giảm giá cho phiên giao dịch thanh toán.
metadata
object
Các cặp khóa-giá trị tùy chỉnh để lưu trữ thông tin bổ sung về phiên giao dịch.
force_3ds
boolean
Ghi đè hành vi 3DS mặc định của thương nhân cho phiên này.
minimal_address
boolean
default:"false"
Kích hoạt chế độ thu thập địa chỉ tối thiểu. Khi được kích hoạt, quá trình thanh toán chỉ thu thập:
  • Quốc gia: Luôn cần thiết để xác định thuế
  • Mã ZIP/Postal: Chỉ ở những khu vực mà nó cần thiết cho việc tính thuế bán hàng, VAT hoặc GST
Điều này giảm đáng kể ma sát trong quá trình thanh toán bằng cách loại bỏ các trường biểu mẫu không cần thiết.
Kích hoạt địa chỉ tối thiểu để hoàn tất thanh toán nhanh hơn. Việc thu thập địa chỉ đầy đủ vẫn có sẵn cho các doanh nghiệp cần thông tin thanh toán đầy đủ.
customization
object
Tùy chỉnh giao diện và hành vi của giao diện thanh toán.
feature_flags
object
Cấu hình các tính năng và hành vi cụ thể cho phiên giao dịch thanh toán.
subscription_data
object
Cấu hình bổ sung cho các phiên giao dịch thanh toán chứa sản phẩm đăng ký.

Ví Dụ Sử Dụng

Dưới đây là 10 ví dụ toàn diện trình bày các cấu hình phiên giao dịch thanh toán khác nhau cho các kịch bản kinh doanh khác nhau:

1. Thanh Toán Sản Phẩm Đơn Giản

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. Giỏ Nhiều Sản Phẩm

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. Đăng Ký Với Thời Gian Dùng Thử

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. Thanh Toán Đã Xác Nhận Trước

Khi confirm được đặt thành true, khách hàng sẽ được đưa trực tiếp đến trang thanh toán, bỏ qua bất kỳ bước xác nhận nào.
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. Thanh Toán Với Ghi Đè Tiền Tệ

Ghi đè billing_currency chỉ có hiệu lực khi tiền tệ thích ứng được kích hoạt trong cài đặt tài khoản của bạn. Nếu tiền tệ thích ứng bị vô hiệu hóa, tham số này sẽ không có tác dụng.
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. Các Phương Thức Thanh Toán Đã Lưu Cho Khách Hàng Quay Lại

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. Thanh Toán B2B Với Việc Thu Thập ID Thuế

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. Thanh Toán Chủ Đề Tối Với Mã Giảm Giá

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. Các Phương Thức Thanh Toán Khu Vực (UPI cho Ấn Độ)

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. Thanh Toán BNPL (Mua Ngay Trả Sau)

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'
  }
});

Chuyển Từ Liên Kết Động Sang Các Phiên Giao Dịch Thanh Toán

Sự Khác Biệt Chính

Trước đây, khi tạo một liên kết thanh toán với Liên Kết Động, bạn phải cung cấp địa chỉ thanh toán đầy đủ của khách hàng. Với Các Phiên Giao Dịch Thanh Toán, điều này không còn cần thiết. Bạn chỉ cần truyền bất kỳ thông tin nào bạn có, và chúng tôi sẽ xử lý phần còn lại. Ví dụ:
  • Nếu bạn chỉ biết quốc gia thanh toán của khách hàng, chỉ cần cung cấp điều đó.
  • Quy trình thanh toán sẽ tự động thu thập các chi tiết còn thiếu trước khi chuyển khách hàng đến trang thanh toán.
  • Mặt khác, nếu bạn đã có tất cả thông tin cần thiết và muốn bỏ qua trực tiếp đến trang thanh toán, bạn có thể truyền toàn bộ tập dữ liệu và bao gồm confirm=true trong thân yêu cầu của bạn.

Quy Trình Di Chuyển

Di chuyển từ Liên Kết Động sang Các Phiên Giao Dịch Thanh Toán là đơn giản:
1

Cập Nhật tích hợp của bạn

Cập nhật tích hợp của bạn để sử dụng phương thức API hoặc SDK mới.
2

Điều Chỉnh tải trọng yêu cầu

Điều chỉnh tải trọng yêu cầu theo định dạng Các Phiên Giao Dịch Thanh Toán.
3

Chỉ vậy thôi!

Đúng vậy. Không cần xử lý thêm hoặc các bước di chuyển đặc biệt nào cần thiết từ phía bạn.