> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# DataFast

> Atributkan pendapatan ke saluran pemasaran dengan analitik DataFast. Lacak sumber lalu lintas mana yang mengarahkan pelanggan yang membayar dan optimalkan pertumbuhan Anda.

## Pendahuluan

DataFast adalah alat analitik yang mengutamakan pendapatan yang membantu Anda menemukan saluran pemasaran mana yang mengarahkan pelanggan yang membayar. Dengan mengintegrasikan Dodo Payments dengan DataFast, Anda dapat mengatributkan pendapatan ke sumber lalu lintas Anda, mengidentifikasi segmen pelanggan bernilai tinggi, dan membuat keputusan berbasis data untuk mengembangkan bisnis Anda.

<Info>
  Integrasi ini membutuhkan Kunci API DataFast Anda, yang dapat Anda peroleh dari [dashboard DataFast](https://datafa.st/).
</Info>

## Cara Kerjanya

DataFast melacak pengunjung melalui ID pengunjung unik yang disimpan dalam cookie. Untuk mengatributkan pendapatan ke saluran pemasaran, Anda perlu:

1. **Ambil ID pengunjung DataFast** dari cookie `datafast_visitor_id` saat membuat sesi checkout
2. **Simpan ID pengunjung** di metadata pembayaran Anda
3. **Kirim data pembayaran ke DataFast** saat pembayaran berhasil melalui API Pembayaran mereka

Ini memungkinkan DataFast untuk mencocokkan pembayaran yang berhasil dengan sumber lalu lintas asli, memberikan Anda atribusi pendapatan yang lengkap.

## Memulai

<Steps>
  <Step title="Install DataFast Script">
    Pertama, pasang skrip pelacakan DataFast di situs web Anda. Ini akan membuat cookie `datafast_visitor_id` yang melacak pengunjung Anda.

    Kunjungi [dokumentasi DataFast](https://datafa.st/docs) untuk petunjuk instalasi sesuai platform Anda.
  </Step>

  <Step title="Get Your API Key">
    Masuk ke [dashboard DataFast](https://datafa.st/) Anda dan buka pengaturan situs web untuk mendapatkan kunci API Anda.

    <Warning>
      Jaga kunci API Anda tetap aman dan jangan pernah mengeksposnya di kode sisi klien.
    </Warning>
  </Step>

  <Step title="Capture Visitor ID in Checkout">
    Saat membuat sesi checkout, ambil ID pengunjung DataFast dari cookie dan tambahkan ke metadata pembayaran Anda.
  </Step>

  <Step title="Send Payment Data via Webhook">
    Konfigurasikan webhook untuk mengirim data pembayaran ke API Pembayaran DataFast saat pembayaran berhasil.
  </Step>

  <Step title="Done!">
    🎉 Data pendapatan kini akan muncul di dashboard DataFast Anda dengan atribusi penuh ke saluran pemasaran.
  </Step>
</Steps>

## Panduan Implementasi

### Langkah 1: Tambahkan ID Pengunjung ke Metadata Checkout

Saat membuat sesi checkout, tangkap ID pengunjung DataFast dari cookie dan sertakan dalam metadata pembayaran Anda.

<CodeGroup>
  ```typescript Next.js theme={null}
  import { cookies } from 'next/headers';
  import { dodopayments } from '@/lib/dodopayments';

  export async function createCheckout(productId: string) {
    // Capture DataFast visitor ID from cookie
    const datafastVisitorId = cookies().get('datafast_visitor_id')?.value;

    const payment = await dodopayments.payments.create({
      product_cart: [{ product_id: productId, quantity: 1 }],
      // ... other payment configuration
      metadata: {
        datafast_visitor_id: datafastVisitorId, // Store visitor ID in metadata
      },
    });

    return payment;
  }
  ```

  ```javascript Express.js theme={null}
  const express = require('express');
  const router = express.Router();

  router.post('/create-checkout', async (req, res) => {
    // Capture DataFast visitor ID from cookie
    const datafastVisitorId = req.cookies?.datafast_visitor_id;

    const payment = await dodopayments.payments.create({
      product_cart: [{ product_id: req.body.productId, quantity: 1 }],
      // ... other payment configuration
      metadata: {
        datafast_visitor_id: datafastVisitorId, // Store visitor ID in metadata
      },
    });

    res.json({ payment });
  });
  ```

  ```javascript Other Frameworks theme={null}
  // Capture DataFast visitor ID from cookie
  const datafastVisitorId = getCookie('datafast_visitor_id'); // Use your framework's cookie method

  const payment = await dodopayments.payments.create({
    product_cart: [{ product_id: productId, quantity: 1 }],
    // ... other payment configuration
    metadata: {
      datafast_visitor_id: datafastVisitorId, // Store visitor ID in metadata
    },
  });
  ```
</CodeGroup>

### Langkah 2: Kirim Data Pembayaran ke DataFast

Konfigurasikan endpoint webhook untuk mengirim data pembayaran ke API Pembayaran DataFast saat pembayaran berhasil.

<Steps>
  <Step title="Open the Webhook Section">
    Di dasbor Dodo Payments Anda, navigasikan ke <b>Webhooks → + Tambah Endpoint</b> dan perluas dropdown integrasi.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/VOF9xBBvs1EjN4xq/images/integrations/datafast/add.png?fit=max&auto=format&n=VOF9xBBvs1EjN4xq&q=85&s=3aec6c9e450d0616573a4a7dfe89f78e" alt="Tambah Endpoint dan dropdown integrasi" style={{ maxHeight: '500px', width: 'auto' }} width="1720" height="1192" data-path="images/integrations/datafast/add.png" />
    </Frame>
  </Step>

  <Step title="Select DataFast">
    Pilih kartu integrasi <b>DataFast</b>.
  </Step>

  <Step title="Enter API Key">
    Sediakan DataFast API Key Anda di bidang konfigurasi.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/VOF9xBBvs1EjN4xq/images/integrations/datafast/api-key.png?fit=max&auto=format&n=VOF9xBBvs1EjN4xq&q=85&s=25129c8ca64e38ef44a6960c2f3a2993" alt="Tambah API Key" style={{ maxHeight: '500px', width: 'auto' }} width="1740" height="882" data-path="images/integrations/datafast/api-key.png" />
    </Frame>
  </Step>

  <Step title="Configure Transformation">
    Edit kode transformasi untuk memformat data pembayaran agar sesuai dengan API Pembayaran DataFast.
  </Step>

  <Step title="Test & Create">
    Uji dengan payload contoh dan klik <b>Create</b> untuk mengaktifkan integrasi.
  </Step>
</Steps>

## Contoh Kode Transformasi

### Atribusi Pembayaran Dasar

```javascript basic_payment.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const payment = webhook.payload.data;
    
    // Only send to DataFast if visitor ID exists in metadata
    if (payment.metadata && payment.metadata.datafast_visitor_id) {
      webhook.payload = {
        amount: payment.total_amount / 100, // Convert from cents to dollars
        currency: payment.currency,
        transaction_id: payment.payment_id,
        datafast_visitor_id: payment.metadata.datafast_visitor_id,
      };
    } else {
      // Cancel dispatch if no visitor ID (prevents unnecessary API calls)
      webhook.cancel = true;
    }
  }
  return webhook;
}
```

### Tangani Mata Uang Tanpa Desimal

Beberapa mata uang (seperti JPY) tidak menggunakan tempat desimal. Sesuaikan perhitungan jumlahnya sesuai kebutuhan:

```javascript zero_decimal.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const payment = webhook.payload.data;
    
    if (payment.metadata && payment.metadata.datafast_visitor_id) {
      // Zero decimal currencies: JPY, KRW, CLP, etc.
      const zeroDecimalCurrencies = ['JPY', 'KRW', 'CLP', 'VND', 'UGX', 'MGA'];
      const isZeroDecimal = zeroDecimalCurrencies.includes(payment.currency);
      
      webhook.payload = {
        amount: isZeroDecimal 
          ? payment.total_amount // Use amount as-is for zero decimal currencies
          : payment.total_amount / 100, // Convert from cents for other currencies
        currency: payment.currency,
        transaction_id: payment.payment_id,
        datafast_visitor_id: payment.metadata.datafast_visitor_id,
      };
    } else {
      // Cancel dispatch if no visitor ID (prevents unnecessary API calls)
      webhook.cancel = true;
    }
  }
  return webhook;
}
```

### Pembayaran Berlangganan

Untuk pembayaran berlangganan yang berulang, Anda dapat melacak setiap pembayaran:

```javascript subscription_payment.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const payment = webhook.payload.data;
    
    // Check if this is a subscription payment
    const isSubscription = payment.subscription_id !== null;
    
    if (payment.metadata && payment.metadata.datafast_visitor_id) {
      webhook.payload = {
        amount: payment.total_amount / 100,
        currency: payment.currency,
        transaction_id: payment.payment_id,
        datafast_visitor_id: payment.metadata.datafast_visitor_id,
        // Optional: Add subscription context
        ...(isSubscription && {
          subscription_id: payment.subscription_id,
        }),
      };
    } else {
      // Cancel dispatch if no visitor ID (prevents unnecessary API calls)
      webhook.cancel = true;
    }
  }
  return webhook;
}
```

## Praktik Terbaik

<Tip>
  **Ambil ID pengunjung sejak awal**: Simpan ID pengunjung DataFast sesegera mungkin dalam alur checkout Anda untuk memastikan atribusi yang akurat, meskipun pengguna meninggalkan halaman dan kembali nanti.
</Tip>

* **Selalu sertakan ID pengunjung dalam metadata**: Tanpa ID pengunjung, DataFast tidak dapat mengatributkan pendapatan ke saluran pemasaran
* **Tangani mata uang tanpa desimal**: Beberapa mata uang (JPY, KRW, dll.) tidak menggunakan tempat desimal—sesuaikan perhitungan jumlah Anda sesuai kebutuhan
* **Uji dengan pembayaran contoh**: Verifikasi bahwa integrasi berfungsi dengan benar sebelum diluncurkan
* **Pantau dasbor DataFast Anda**: Periksa bahwa pembayaran muncul dengan benar dengan atribusi yang tepat
* **Gunakan pengulangan webhook**: API Pembayaran DataFast bersifat idempotent, jadi pengulangan aman jika webhook gagal

## Pemecahan Masalah

<AccordionGroup>
  <Accordion title="Payments not appearing in DataFast">
    * Verifikasi bahwa Kunci API DataFast Anda benar dan aktif
    * Periksa bahwa `datafast_visitor_id` sedang diambil dan disimpan dalam metadata pembayaran
    * Pastikan transformasi webhook memformat payload dengan benar
    * Verifikasi webhook memicu pada acara `payment.succeeded`
    * Periksa dashboard DataFast untuk pesan kesalahan atau log API
  </Accordion>

  <Accordion title="Revenue attribution not working">
    * Konfirmasi skrip pelacakan DataFast terpasang dan berfungsi di situs web Anda
    * Verifikasi cookie `datafast_visitor_id` disetel dengan benar
    * Periksa bahwa ID pengunjung cocok antara pembuatan checkout dan selesainya pembayaran
    * Pastikan Anda menangkap ID pengunjung sebelum membuat sesi checkout
    * Tinjau [dokumentasi API Pembayaran](https://datafa.st/docs/payments-api) DataFast untuk panduan tambahan
  </Accordion>

  <Accordion title="Transformation errors">
    * Validasi struktur JSON sesuai format API Pembayaran DataFast
    * Pastikan semua field yang dibutuhkan (`amount`, `currency`, `transaction_id`, `datafast_visitor_id`) ada
    * Pastikan jumlah dikonversi dengan benar (bagikan dengan 100 untuk sebagian besar mata uang, kecuali mata uang tanpa desimal)
    * Verifikasi URL endpoint API benar: `https://datafa.st/api/v1/payments`
    * Uji transformasi dengan payload webhook contoh
  </Accordion>

  <Accordion title="Currency conversion issues">
    * Untuk mata uang tanpa desimal (JPY, KRW, CLP, VND, UGX, MGA), kirim jumlah apa adanya tanpa dibagi 100
    * Untuk semua mata uang lain, bagi jumlah dengan 100 untuk mengonversi dari sen ke unit dasar
    * Periksa kembali kode mata uang sesuai format ISO 4217 (misalnya, "USD", "EUR", "JPY")
  </Accordion>
</AccordionGroup>

## Sumber Daya Tambahan

<CardGroup cols={2}>
  <Card title="DataFast Documentation" icon="book" href="https://datafa.st/docs/payments-api">
    Pelajari lebih lanjut tentang API Pembayaran DataFast dan fitur atribusi pendapatan.
  </Card>

  <Card title="DataFast Dashboard" icon="chart-bar" href="https://datafa.st/">
    Akses dashboard DataFast Anda untuk melihat analitik pendapatan dan data atribusi.
  </Card>
</CardGroup>

<Info>
  Perlu bantuan? Hubungi dukungan Dodo Payments di [support@dodopayments.com](mailto:support@dodopayments.com) untuk bantuan integrasi.
</Info>
