Buat pengalaman checkout yang aman dan dihosting yang menangani alur pembayaran lengkap untuk pembelian satu kali dan langganan dengan kontrol kustomisasi penuh.
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.
import DodoPayments from 'dodopayments';// Initialize the Dodo Payments clientconst 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 routeapp.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' }); }});
Salin
import osfrom dodopayments import DodoPayments# Initialize the Dodo Payments clientclient = DodoPayments( bearer_token=os.environ.get("DODO_PAYMENTS_API_KEY"), # This is the default and can be omitted environment="test_mode", # defaults to "live_mode")def create_checkout_session(): """ Create a checkout session for a single product with customer data pre-filled. Returns the session object containing checkout_url for customer redirection. """ try: session = client.checkout_sessions.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 checkout 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 print(f"Checkout URL: {session.checkout_url}") print(f"Session ID: {session.session_id}") return session except Exception as error: print(f"Failed to create checkout session: {error}") raise error# Example usage in a Flask routefrom flask import Flask, jsonify, requestapp = Flask(__name__)@app.route('/create-checkout', methods=['POST'])def create_checkout(): try: session = create_checkout_session() return jsonify({"checkout_url": session.checkout_url}) except Exception as error: return jsonify({"error": "Failed to create checkout session"}), 500
Salin
// Direct API call using fetch - useful for any JavaScript environmentasync function createCheckoutSession() { try { const response = await fetch('https://test.dodopayments.com/checkouts', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${process.env.DODO_PAYMENTS_API_KEY}` }, body: JSON.stringify({ // 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 checkout 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' } }) }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const session = await response.json(); // 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: Redirect user to checkoutcreateCheckoutSession().then(session => { window.location.href = session.checkout_url;});
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.
Jumlah yang dibayar pelanggan jika pay_what_you_want diaktifkan. Jika dinonaktifkan, bidang ini akan diabaikan.Format: Diwakili dalam denominasi terendah dari mata uang (misalnya, sen untuk USD). Sebagai contoh, untuk mengenakan biaya $1,00, kirim 100.
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.
Nomor telepon pelanggan dalam format internasional. Diperlukan untuk beberapa metode pembayaran dan pencegahan penipuan.Format: Sertakan kode negara, misalnya "+1234567890" untuk nomor AS
Kode negara ISO dua huruf (ISO 3166-1 alpha-2). Bidang ini selalu diperlukan ketika alamat_penagihan disediakan.Contoh: "US" (Amerika Serikat), "CA" (Kanada), "GB" (Inggris Raya), "DE" (Jerman)
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.
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.
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.
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.
Harga produk untuk biaya awal kepada pelanggan. Jika tidak ditentukan, harga yang disimpan dari produk akan digunakan.Format: Diwakili dalam denominasi terendah dari mata uang (misalnya, sen untuk USD). Sebagai contoh, untuk mengenakan biaya $1,00, kirim 100.
Apakah biaya mata uang adaptif harus disertakan dalam harga produk (true) atau ditambahkan di atas (false). Diabaikan jika penetapan harga adaptif tidak diaktifkan.
Override billing_currency hanya berlaku ketika mata uang adaptif diaktifkan dalam pengaturan akun Anda. Jika mata uang adaptif dinonaktifkan, parameter ini tidak akan berpengaruh.
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.