Langsung ke konten utama
Validitas Sesi: Sesi checkout berlaku selama 24 jam secara default. Jika Anda mengirim confirm=true dalam permintaan Anda, sesi hanya akan berlaku selama 15 menit.

Prasyarat

1

Akun Dodo Payments

Anda memerlukan akun pedagang Dodo Payments yang aktif dengan akses API.
2

Kredensial API

Hasilkan kredensial API Anda dari dasbor Dodo Payments:
3

Pengaturan Produk

Buat produk Anda di dasbor Dodo Payments sebelum menerapkan sesi checkout.

Membuat Sesi Checkout Pertama Anda

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

Respons API

Semua metode di atas mengembalikan struktur respons yang sama:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
1

Dapatkan URL checkout

Ekstrak checkout_url dari respons API.
2

Arahkan pelanggan Anda

Arahkan pelanggan Anda ke URL checkout untuk menyelesaikan pembelian mereka.
// Redirect immediately
window.location.href = session.checkout_url;

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

Tangani pengembalian

Setelah pembayaran, pelanggan akan diarahkan kembali ke return_url Anda dengan parameter kueri tambahan untuk status pembayaran.

Badan Permintaan

Bidang Wajib

Bidang penting yang dibutuhkan untuk setiap sesi checkout

Bidang Opsional

Konfigurasi tambahan untuk menyesuaikan pengalaman checkout Anda

Bidang Wajib

product_cart
array
required
Array produk yang termasuk dalam sesi checkout. Setiap produk harus memiliki product_id yang valid dari dasbor Dodo Payments Anda.
Penting: Beberapa keranjang produk hanya dapat berisi produk pembayaran satu kali. Anda tidak dapat mencampur produk langganan dengan produk satu kali dalam sesi checkout yang sama.
Temukan ID Produk Anda: Anda dapat menemukan ID produk di dasbor Dodo Payments Anda di bawah Produk → Lihat Detail, atau dengan menggunakan API Daftar Produk.

Bidang Opsional

Konfigurasikan bidang ini untuk menyesuaikan pengalaman checkout dan menambahkan logika bisnis ke alur pembayaran Anda.
customer
object
Informasi pelanggan. Anda dapat melampirkan pelanggan yang ada menggunakan ID mereka atau membuat catatan pelanggan baru selama checkout.
Lampirkan pelanggan yang ada ke sesi checkout menggunakan ID mereka.
billing_address
object
Informasi alamat penagihan untuk perhitungan pajak yang akurat, pencegahan penipuan, dan kepatuhan regulasi.
Ketika confirm diatur ke true, semua bidang alamat penagihan menjadi wajib untuk pembuatan sesi yang berhasil.
allowed_payment_method_types
array
Kontrol metode pembayaran mana yang tersedia untuk pelanggan selama checkout. Ini membantu mengoptimalkan untuk pasar atau persyaratan bisnis tertentu.Opsi Tersedia: 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
Kritis: Selalu sertakan credit dan debit sebagai opsi cadangan untuk mencegah kegagalan checkout ketika metode pembayaran yang diinginkan tidak tersedia.
Contoh:
["apple_pay", "google_pay", "credit", "debit"]
billing_currency
string
Tentukan pemilihan mata uang default dengan mata uang penagihan tetap. Menggunakan kode mata uang ISO 4217.Mata Uang yang Didukung: USD, EUR, GBP, CAD, AUD, INR, dan lainnyaContoh: "USD" untuk Dolar AS, "EUR" untuk Euro
Bidang ini hanya efektif ketika penetapan harga adaptif diaktifkan. Jika penetapan harga adaptif dinonaktifkan, mata uang default produk akan digunakan.
show_saved_payment_methods
boolean
default:"false"
Tampilkan metode pembayaran yang disimpan sebelumnya untuk pelanggan yang kembali, meningkatkan kecepatan checkout dan pengalaman pengguna.
return_url
string
URL untuk mengarahkan pelanggan setelah pembayaran berhasil atau pembatalan.
confirm
boolean
default:"false"
Jika benar, menyelesaikan semua detail sesi segera. API akan mengeluarkan kesalahan jika data yang diperlukan hilang.
discount_code
string
Terapkan kode diskon ke sesi checkout.
metadata
object
Pasangan kunci-nilai kustom untuk menyimpan informasi tambahan tentang sesi.
force_3ds
boolean
Tentukan perilaku 3DS default pedagang untuk sesi ini.
minimal_address
boolean
default:"false"
Aktifkan mode pengumpulan alamat minimal. Ketika diaktifkan, checkout hanya mengumpulkan:
  • Negara: Selalu diperlukan untuk penentuan pajak
  • Kode ZIP/Pos: Hanya di wilayah di mana itu diperlukan untuk perhitungan pajak penjualan, PPN, atau GST
Ini secara signifikan mengurangi gesekan checkout dengan menghilangkan bidang formulir yang tidak perlu.
Aktifkan alamat minimal untuk penyelesaian checkout yang lebih cepat. Pengumpulan alamat lengkap tetap tersedia untuk bisnis yang memerlukan detail penagihan lengkap.
customization
object
Sesuaikan penampilan dan perilaku antarmuka checkout.
feature_flags
object
Konfigurasikan fitur dan perilaku tertentu untuk sesi checkout.
subscription_data
object
Konfigurasi tambahan untuk sesi checkout yang berisi produk langganan.

Contoh Penggunaan

Berikut adalah 10 contoh komprehensif yang menunjukkan berbagai konfigurasi sesi checkout untuk berbagai skenario bisnis:

1. Checkout Produk Tunggal Sederhana

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. Keranjang Multi-Produk

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. Langganan dengan Periode Percobaan

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. Checkout yang Sudah Dikonfirmasi

Ketika confirm diatur ke true, pelanggan akan langsung dibawa ke halaman checkout, melewati langkah konfirmasi apa pun.
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. Checkout dengan Override Mata Uang

Override billing_currency hanya berlaku ketika mata uang adaptif diaktifkan dalam pengaturan akun Anda. Jika mata uang adaptif dinonaktifkan, parameter ini tidak akan berpengaruh.
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. Metode Pembayaran yang Disimpan untuk Pelanggan yang Kembali

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. Checkout B2B dengan Pengumpulan ID Pajak

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. Checkout Tema Gelap dengan Kode Diskon

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. Metode Pembayaran Regional (UPI untuk India)

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. Checkout BNPL (Beli Sekarang Bayar Nanti)

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

Beralih dari Tautan Dinamis ke Sesi Checkout

Perbedaan Utama

Sebelumnya, saat membuat tautan pembayaran dengan Tautan Dinamis, Anda diharuskan untuk memberikan alamat penagihan lengkap pelanggan. Dengan Sesi Checkout, ini tidak lagi diperlukan. Anda cukup mengirimkan informasi yang Anda miliki, dan kami akan menangani sisanya. Sebagai contoh:
  • Jika Anda hanya tahu negara penagihan pelanggan, cukup berikan itu.
  • Alur checkout akan secara otomatis mengumpulkan detail yang hilang sebelum memindahkan pelanggan ke halaman pembayaran.
  • Di sisi lain, jika Anda sudah memiliki semua informasi yang diperlukan dan ingin langsung ke halaman pembayaran, Anda dapat mengirimkan seluruh set data dan menyertakan confirm=true dalam badan permintaan Anda.

Proses Migrasi

Migrasi dari Tautan Dinamis ke Sesi Checkout sangatlah sederhana:
1

Perbarui integrasi Anda

Perbarui integrasi Anda untuk menggunakan metode API atau SDK yang baru.
2

Sesuaikan payload permintaan

Sesuaikan payload permintaan sesuai dengan format Sesi Checkout.
3

Itu saja!

Ya. Tidak ada penanganan tambahan atau langkah migrasi khusus yang diperlukan di pihak Anda.