> ## 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.

# Go Boilerplate

> Mulai dengan cepat menggunakan boilerplate Go minimal kami untuk mengintegrasikan Dodo Payments ke dalam aplikasi backend Go Anda

<Card title="GitHub Repository" icon="github" href="https://github.com/dodopayments/go-boilerplate">
  Boilerplate Minimal Go + Dodo Payments
</Card>

## Ikhtisar

Boilerplate Go menyediakan titik awal yang siap produksi untuk mengintegrasikan Dodo Payments dengan backend Go Anda. Template ini mencakup penanganan sesi checkout, verifikasi webhook, integrasi portal pelanggan, dan mengikuti praktik terbaik Go untuk membantu Anda mulai menerima pembayaran dengan cepat.

<Info>
  Boilerplate ini menggunakan Go 1.21+ dengan pola arsitektur bersih (`cmd`, `internal`, `templates`), template HTML, dan SDK `dodopayments-go` untuk integrasi API yang mulus.
</Info>

### Fitur

* **Quick Setup** - Mulai dalam waktu kurang dari 5 menit
* **Payment Integration** - Alur checkout yang sudah dikonfigurasi menggunakan SDK `dodopayments-go`
* **Modern UI** - Halaman harga bertema gelap yang bersih dengan template HTML
* **Webhook Handling** - Verifikasi dan proses event pembayaran dengan aman
* **Customer Portal** - Manajemen langganan swalayan
* **Go Best Practices** - Arsitektur bersih dengan `cmd`, `internal`, dan `templates`
* **Pre-filled Checkout** - Menunjukkan cara meneruskan data pelanggan untuk meningkatkan UX

## Prasyarat

Sebelum Anda mulai, pastikan Anda memiliki:

* **Go 1.21+**
* **Akun Dodo Payments** (untuk mengakses API dan Kunci Webhook dari dasbor)

## Memulai dengan Cepat

<Steps>
  <Step title="Clone the Repository">
    ```bash theme={null}
    git clone https://github.com/dodopayments/go-boilerplate.git
    cd go-boilerplate
    ```
  </Step>

  <Step title="Install Dependencies">
    ```bash theme={null}
    make install
    ```

    Atau secara manual:

    ```bash theme={null}
    go mod download
    ```
  </Step>

  <Step title="Get API Credentials">
    Daftar di [Dodo Payments](https://dodopayments.com/) dan dapatkan kredensial Anda dari dashboard:

    * **Kunci API:** [Dasbor → Pengembang → Kunci API](https://app.dodopayments.com/developer/api-keys)
    * **Kunci Webhook:** [Dasbor → Pengembang → Webhook](https://app.dodopayments.com/developer/webhooks)

    <Tip>
      Pastikan Anda berada dalam **Test Mode** saat mengembangkan!
    </Tip>
  </Step>

  <Step title="Configure Environment Variables">
    Buat file `.env` di direktori root:

    ```bash theme={null}
    cp .env.example .env
    ```

    Perbarui nilai dengan kredensial Dodo Payments Anda:

    ```bash .env theme={null}
    DODO_PAYMENTS_API_KEY=your_api_key_here
    DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_signing_key_here
    DODO_PAYMENTS_RETURN_URL=http://localhost:8000
    DODO_PAYMENTS_ENVIRONMENT=test_mode
    ```

    <Warning>
      Jangan pernah meng-commit file `.env` ke kontrol versi. File tersebut sudah termasuk dalam `.gitignore`.
    </Warning>
  </Step>

  <Step title="Add Your Products">
    Perbarui `internal/lib/products.go` dengan ID produk Anda yang sesungguhnya dari Dodo Payments:

    ```go theme={null}
    var Products = []Product{
        {
            ProductID:   "pdt_001", // Replace with your product ID
            Name:        "Basic Plan",
            Description: "Get access to basic features and support",
            Price:       9999, // in cents
            Features: []string{
                "Access to basic features",
                "Email support",
                "1 Team member",
                "Basic analytics",
            },
        },
        // ... add more products
    }
    ```
  </Step>

  <Step title="Run the Development Server">
    ```bash theme={null}
    make run
    ```

    Atau secara manual:

    ```bash theme={null}
    go run cmd/server/main.go
    ```

    Buka [http://localhost:8000](http://localhost:8000) untuk melihat halaman harga Anda!

    <Check>
      Anda akan melihat halaman harga bertema gelap dengan produk Anda siap dibeli.
    </Check>
  </Step>
</Steps>

## Struktur Proyek

```text theme={null}
go-boilerplate/
├── cmd/
│   └── server/             # Application entry point
├── internal/
│   ├── api/                # API handlers (Checkout, Portal, Webhook)
│   ├── core/               # Configuration and system core
│   └── lib/                # Shared logic (Products, Customer utils)
├── templates/              # HTML templates
├── Makefile                # Build and run commands
├── go.mod                  # Go module definition
├── go.sum                  # Dependency checksums
├── .env.example            # Environment template
└── README.md
```

## Endpoint API

Boilerplate ini mencakup endpoint yang sudah dikonfigurasi sebagai berikut:

| Endpoint               | Method | Deskripsi                          |
| ---------------------- | ------ | ---------------------------------- |
| `/`                    | GET    | Halaman harga dengan daftar produk |
| `/api/checkout`        | POST   | Membuat sesi checkout baru         |
| `/api/webhook`         | POST   | Menangani webhook Dodo Payments    |
| `/api/customer-portal` | POST   | Menghasilkan URL portal pelanggan  |

## Kustomisasi

### Perbarui Informasi Produk

Edit `internal/lib/products.go` untuk mengubah:

* ID Produk (dari dashboard Dodo Anda)
* Harga
* Fitur
* Deskripsi

```go theme={null}
var Products = []Product{
    {
        ProductID:   "pdt_001", // Replace with your product ID
        Name:        "Basic Plan",
        Description: "Get access to basic features and support",
        Price:       9999,
        Features: []string{
            "Access to basic features",
            "Email support",
            "1 Team member",
            "Basic analytics",
        },
    },
}
```

### Praisi Data Pelanggan

Di `templates/index.html`, ganti data pelanggan yang di-hardcode dengan data pengguna Anda yang sebenarnya:

```javascript theme={null}
const customerData = {
    name: "John Doe",       // Replace with actual logged-in user's name
    email: "john@example.com"  // Replace with actual logged-in user's email
};
```

Dalam aplikasi produksi, Anda akan menyuntikkan nilai-nilai ini secara dinamis dari sistem otentikasi Anda.

## Peristiwa Webhook

Boilerplate ini menunjukkan penanganan event webhook di `internal/api/webhook.go`. Event yang didukung mencakup:

| Event                 | Deskripsi                           |
| --------------------- | ----------------------------------- |
| `subscription.active` | Dipicu saat langganan menjadi aktif |
| `payment.succeeded`   | Dipicu saat pembayaran berhasil     |

Tambahkan logika bisnis Anda di dalam penangan webhook untuk:

* Memperbarui izin pengguna di database Anda
* Mengirim email konfirmasi
* Menyediakan akses ke produk digital
* Melacak analitik dan metrik

## Menguji Webhook Secara Lokal

Untuk pengembangan lokal, gunakan alat seperti [ngrok](https://ngrok.com/) untuk mengekspos server lokal Anda:

```bash theme={null}
ngrok http 8000
```

Perbarui URL webhook di [Dasbor Dodo Payments Anda](https://app.dodopayments.com/developer/webhooks):

```
https://your-ngrok-url.ngrok.io/api/webhook
```

## Penyebaran

### Bangun untuk Produksi

```bash theme={null}
make build
```

Atau secara manual:

```bash theme={null}
go build -o bin/server cmd/server/main.go
./bin/server
```

### Deploy ke Vercel

\[

![Deploy dengan Vercel](https://vercel.com/button)

]\([https://vercel.com/new/clone?repository-url=https://github.com/dodopayments/go-boilerplate](https://vercel.com/new/clone?repository-url=https://github.com/dodopayments/go-boilerplate))

### Docker

Buat `Dockerfile`:

```dockerfile theme={null}
FROM golang:1.21-alpine AS builder

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN go build -o bin/server cmd/server/main.go

FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/bin/server .
COPY --from=builder /app/templates ./templates

EXPOSE 8000
CMD ["./server"]
```

Bangun dan jalankan:

```bash theme={null}
docker build -t go-dodo .
docker run -p 8000:8000 --env-file .env go-dodo
```

### Pertimbangan Produksi

<Warning>
  Sebelum menerapkan ke produksi:

  * Ubah `DODO_PAYMENTS_ENVIRONMENT` menjadi `live_mode`
  * Gunakan kunci API produksi dari dashboard
  * Perbarui URL webhook ke domain produksi Anda
  * Aktifkan HTTPS untuk semua endpoint
</Warning>

## Pemecahan Masalah

<AccordionGroup>
  <Accordion title="Build errors or missing dependencies">
    Pastikan modul Go telah diunduh dengan benar:

    ```bash theme={null}
    go mod tidy
    go mod download
    ```
  </Accordion>

  <Accordion title="Checkout session creation fails">
    **Penyebab umum:**

    * ID produk tidak valid - verifikasi bahwa ID tersebut ada di dashboard Dodo Anda
    * Kunci API atau pengaturan lingkungan yang salah di `.env`
    * Periksa log server untuk pesan kesalahan yang lebih rinci
  </Accordion>

  <Accordion title="Webhooks not receiving events">
    Untuk pengujian lokal, gunakan [ngrok](https://ngrok.com) untuk mengekspos server Anda:

    ```bash theme={null}
    ngrok http 8000
    ```

    Perbarui URL webhook di [dashboard Dodo Anda](https://app.dodopayments.com/developer/webhooks) ke URL ngrok. Pastikan memperbarui file `.env` dengan kunci verifikasi webhook yang benar.
  </Accordion>

  <Accordion title="Templates not loading">
    Pastikan Anda menjalankan server dari direktori root proyek, atau path template telah dikonfigurasi dengan benar dalam kode Anda.
  </Accordion>
</AccordionGroup>

## Pelajari Lebih Lanjut

<CardGroup cols={2}>
  <Card title="Go SDK" icon="golang" href="/developer-resources/sdks/go">
    Dokumentasi lengkap Go SDK
  </Card>

  <Card title="Webhooks Documentation" icon="webhook" href="/developer-resources/webhooks">
    Pelajari semua event webhook dan praktik terbaik
  </Card>

  <Card title="Checkout Sessions" icon="credit-card" href="/developer-resources/checkout-session">
    Pendalaman konfigurasi sesi checkout
  </Card>

  <Card title="API Reference" icon="book" href="/api-reference/introduction">
    Dokumentasi lengkap API Dodo Payments
  </Card>
</CardGroup>

## Dukungan

Butuh bantuan dengan boilerplate?

* Bergabunglah dengan [komunitas Discord kami](https://discord.gg/bYqAp4ayYh) untuk pertanyaan dan diskusi
* Periksa [repositori GitHub](https://github.com/dodopayments/go-boilerplate) untuk masalah dan pembaruan
* Hubungi [tim dukungan kami](mailto:support@dodopayments.com) untuk bantuan
