Langsung ke konten utama

Prasyarat

Untuk mengintegrasikan API Pembayaran Dodo, Anda memerlukan:
  • Akun pedagang Pembayaran Dodo
  • Kredensial API (kunci API dan kunci rahasia webhook) dari dasbor

Pengaturan Dasbor

  1. Arahkan ke Dasbor Pembayaran Dodo
  2. Buat produk (pembayaran sekali atau langganan)
  3. Hasilkan kunci API Anda:
    • Pergi ke Developer > API
    • Panduan Detail
    • Salin kunci API di env bernama DODO_PAYMENTS_API_KEY
  4. Konfigurasi webhook:
    • Pergi ke Developer > Webhooks
    • Buat URL webhook untuk notifikasi pembayaran
    • Salin kunci rahasia webhook di env

Integrasi

Tautan Pembayaran

Pilih jalur integrasi yang sesuai dengan kasus penggunaan Anda:
  • Sesi Checkout (direkomendasikan): Terbaik untuk sebagian besar integrasi. Buat sesi di server Anda dan arahkan pelanggan ke checkout yang aman dan dihosting.
  • Checkout Overlay (tertanam): Gunakan saat Anda memerlukan pengalaman dalam halaman yang menyematkan checkout yang dihosting di situs Anda.
  • Tautan Pembayaran Statis: URL yang dapat dibagikan tanpa kode untuk pengumpulan pembayaran cepat.
  • Tautan Pembayaran Dinamis: Tautan yang dibuat secara programatik. Namun, Sesi Checkout direkomendasikan dan memberikan lebih banyak fleksibilitas.

1. Sesi Checkout

Gunakan Sesi Checkout untuk membuat pengalaman checkout yang aman dan dihosting untuk pembayaran sekali atau langganan. Anda membuat sesi di server Anda, lalu mengarahkan pelanggan ke checkout_url yang dikembalikan.
Sesi checkout berlaku selama 24 jam secara default. Jika Anda mengirim confirm=true, sesi berlaku selama 15 menit dan semua bidang yang diperlukan harus disediakan.
1

Buat sesi checkout

Pilih SDK pilihan Anda atau panggil REST API.
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode', // defaults to 'live_mode'
});

const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  customer: { email: '[email protected]', name: 'John Doe' },
  return_url: 'https://yourapp.com/checkout/success',
});
2

Arahkan pelanggan ke checkout

Setelah sesi dibuat, arahkan ke checkout_url untuk memulai alur yang dihosting.
// Example in a browser context
window.location.href = session.checkout_url;
Sebaiknya gunakan Sesi Checkout untuk cara tercepat dan paling andal dalam mulai menerima pembayaran. Untuk kustomisasi lanjutan, lihat panduan Sesi Checkout dan Referensi API.

2. Checkout Overlay

Untuk pengalaman checkout dalam halaman yang mulus, jelajahi integrasi Checkout Overlay kami yang memungkinkan pelanggan menyelesaikan pembayaran tanpa meninggalkan situs web Anda.

3. Tautan Pembayaran Statis

Tautan pembayaran statis memungkinkan Anda dengan cepat menerima pembayaran dengan membagikan URL sederhana. Anda dapat menyesuaikan pengalaman checkout dengan mengirimkan parameter kueri untuk mengisi detail pelanggan, mengontrol bidang formulir, dan menambahkan metadata kustom.
1

Buat tautan pembayaran Anda

Mulailah dengan URL dasar dan tambahkan ID produk Anda:
https://checkout.dodopayments.com/buy/{productid}
2

Tambahkan parameter inti

Sertakan parameter kueri penting:
  • quantity
    integer
    default:"1"
    Jumlah item yang akan dibeli.
  • redirect_url
    string
    required
    URL untuk mengarahkan setelah penyelesaian pembayaran.
URL pengalihan akan menyertakan detail pembayaran sebagai parameter kueri, misalnya:
https://example.com/?payment_id=pay_ts2ySpzg07phGeBZqePbH&status=succeeded
3

Isi informasi pelanggan (opsional)

Tambahkan bidang pelanggan atau penagihan sebagai parameter kueri untuk memperlancar checkout.
  • fullName
    string
    Nama lengkap pelanggan (diabaikan jika firstName atau lastName disediakan).
  • firstName
    string
    Nama depan pelanggan.
  • lastName
    string
    Nama belakang pelanggan.
  • email
    string
    Alamat email pelanggan.
  • country
    string
    Negara pelanggan.
  • addressLine
    string
    Alamat jalan.
  • city
    string
    Kota.
  • state
    string
    Negara bagian atau provinsi.
  • zipCode
    string
    Kode pos/ZIP.
  • showDiscounts
    boolean
    true atau false
4

Kontrol bidang formulir (opsional)

Anda dapat menonaktifkan bidang tertentu agar hanya dapat dibaca oleh pelanggan. Ini berguna ketika Anda sudah memiliki detail pelanggan (misalnya, pengguna yang sudah masuk).
Untuk menonaktifkan sebuah bidang, berikan nilainya dan atur bendera disable… yang sesuai ke true:
&[email protected]&disableEmail=true
BidangBendera NonaktifParameter Diperlukan
Nama LengkapdisableFullNamefullName
Nama DepandisableFirstNamefirstName
Nama BelakangdisableLastNamelastName
EmaildisableEmailemail
NegaradisableCountrycountry
Alamat JalandisableAddressLineaddressLine
KotadisableCitycity
Negara BagiandisableStatestate
Kode ZIPdisableZipCodezipCode
Menonaktifkan bidang membantu mencegah perubahan yang tidak disengaja dan memastikan konsistensi data.
Mengatur showDiscounts=false akan menonaktifkan dan menyembunyikan bagian diskon di formulir checkout. Gunakan ini jika Anda ingin mencegah pelanggan memasukkan kupon atau kode promo selama checkout.
5

Tambahkan kontrol lanjutan (opsional)

  • paymentCurrency
    string
    Menentukan mata uang pembayaran. Secara default menggunakan mata uang negara penagihan.
  • showCurrencySelector
    boolean
    default:"true"
    Tampilkan atau sembunyikan pemilih mata uang.
  • paymentAmount
    integer
    Jumlah dalam sen (hanya untuk harga Bayar Sesuai Keinginan).
  • metadata_*
    string
    Bidang metadata kustom (misalnya, metadata_orderId=123).
6

Bagikan tautan

Kirim tautan pembayaran yang telah selesai kepada pelanggan Anda. Ketika mereka mengunjungi, semua parameter kueri dikumpulkan dan disimpan dengan ID sesi. URL kemudian disederhanakan untuk hanya menyertakan parameter sesi (misalnya, ?session=sess_1a2b3c4d). Informasi yang disimpan bertahan melalui penyegaran halaman dan dapat diakses sepanjang proses checkout.
Pengalaman checkout pelanggan sekarang lebih lancar dan dipersonalisasi berdasarkan parameter Anda.

4. Tautan Pembayaran Dinamis

Sebaiknya gunakan Sesi Checkout untuk sebagian besar kasus penggunaan, mereka menawarkan lebih banyak fleksibilitas dan kontrol.
Dibuat melalui panggilan API atau SDK kami dengan detail pelanggan. Berikut adalah contohnya: Ada dua API untuk membuat tautan pembayaran dinamis: Panduan di bawah ini adalah untuk pembuatan tautan pembayaran sekali. Untuk instruksi rinci tentang mengintegrasikan langganan, lihat Panduan Integrasi Langganan.
Pastikan Anda mengirim payment_link = true untuk mendapatkan tautan pembayaran
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
bearerToken: process.env['DODO_PAYMENTS_API_KEY'], // This is the default and can be omitted
environment: 'test_mode', // defaults to 'live_mode'
});

async function main() {
const payment = await client.payments.create({
payment_link: true,
billing: { city: 'city', country: 'AF', state: 'state', street: 'street', zipcode: 0 },
customer: { email: '[email protected]', name: 'name' },
product_cart: [{ product_id: 'product_id', quantity: 0 }],
});

console.log(payment.payment_id);
}

main();
Setelah membuat tautan pembayaran, arahkan pelanggan Anda untuk menyelesaikan pembayaran mereka.

Mengimplementasikan Webhook

Siapkan endpoint API untuk menerima notifikasi pembayaran. Berikut adalah contoh menggunakan Next.js:
import { Webhook } from "standardwebhooks";
import { headers } from "next/headers";
import { WebhookPayload } from "@/types/api-types";

const webhook = new Webhook(process.env.DODO_WEBHOOK_KEY!); // Replace with your secret key generated from the Dodo Payments Dashboard

export async function POST(request: Request) {
  const headersList = headers();
  const rawBody = await request.text();

  const webhookHeaders = {
    "webhook-id": headersList.get("webhook-id") || "",
    "webhook-signature": headersList.get("webhook-signature") || "",
    "webhook-timestamp": headersList.get("webhook-timestamp") || "",
  };

  await webhook.verify(rawBody, webhookHeaders);
  const payload = JSON.parse(rawBody) as WebhookPayload;
  
  // Process the payload according to your business logic
}
Implementasi webhook kami mengikuti spesifikasi Standard Webhooks. Untuk definisi jenis webhook, lihat Panduan Acara Webhook. Anda dapat merujuk proyek ini dengan implementasi demo di GitHub menggunakan Next.js dan TypeScript. Anda dapat melihat implementasi langsung di sini.