Tạo trải nghiệm thanh toán an toàn, được lưu trữ, xử lý toàn bộ quy trình thanh toán cho cả mua hàng một lần và đăng ký với quyền kiểm soát tùy chỉnh hoàn toàn.
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.
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' }); }});
Sao chép
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
Sao chép
// 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;});
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.
Số tiền mà khách hàng phải trả nếu pay_what_you_want được kích hoạt. Nếu không, trường này sẽ bị bỏ qua.Định dạng: Được biểu diễn bằng đơn vị thấp nhất của tiền tệ (ví dụ: xu cho USD). Ví dụ, để tính phí $1.00, truyền 100.
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.
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 Khách Hàng Hiện Có
Khách Hàng Mới
Đí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ọ.
Định danh duy nhất của một khách hàng hiện có. Sử dụng điều này để đính kèm phiên giao dịch thanh toán vào một khách hàng hiện có thay vì tạo một cái mới.
Tạo một bản ghi khách hàng mới trong quá trình thanh toán.
Số điện thoại của khách hàng theo định dạng quốc tế. Bắt buộc cho một số phương thức thanh toán và phòng ngừa gian lận.Định dạng: Bao gồm mã quốc gia, ví dụ: "+1234567890" cho số điện thoại của Mỹ
Mã quốc gia ISO hai chữ cái (ISO 3166-1 alpha-2). Trường này luôn bắt buộc khi địa chỉ thanh toán được cung cấp.Ví dụ: "US" (Hoa Kỳ), "CA" (Canada), "GB" (Vương Quốc Anh), "DE" (Đức)
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 credit và debit 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.
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.
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 đủ.
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 đủ.
Giá sản phẩm cho khoản phí ban đầu đến khách hàng. Nếu không được chỉ định, giá đã lưu của sản phẩm sẽ được sử dụng.Định dạng: Được biểu diễn bằng đơn vị thấp nhất của tiền tệ (ví dụ: xu cho USD). Ví dụ, để tính phí $1.00, truyền 100.
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.
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.