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

# 결제 기능

> 전환 최적화, 글로벌 규정 준수 결제 시스템으로 다중 통화, 다중 언어 지원, 자동 세금 계산, 할인 코드, 추가 기능 및 스마트 주소 수집 기능을 제공합니다.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/cover.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=2dc0a0db8e021e39fb17e84fc12eb5f9" alt="결제 페이지" style={{ maxHeight: '500px', width: 'auto' }} width="2844" height="1556" data-path="images/checkout/cover.png" />
</Frame>

<Info>
  Dodo Payments 체크아웃은 디지털 제품 및 SaaS 비즈니스를 위해 전환율에 최적화된, 전 세계 규정 준수 체크아웃입니다. 여러 통화, 언어, 세금, 할인, 애드온 및 비즈니스 친화적인 규정 준수 워크플로를 지원합니다.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    호스티드 체크아웃 세션을 프로그래밍 방식으로 생성합니다.
  </Card>

  <Card title="Preview Checkout" icon="eye" href="/api-reference/checkout-sessions/preview">
    세션 생성 전에 가격과 세금을 계산합니다.
  </Card>

  <Card title="Payment Methods" icon="credit-card" href="/features/payment-methods">
    지원되는 결제 수단 및 구성 옵션.
  </Card>
</CardGroup>

## 적응형 통화

적응형 통화는 고객이 선호하는 지역 통화로 결제할 수 있도록 하여 신뢰와 전환율을 향상시킵니다.

### 작동 방식

1. **활성화**: **설정 → 비즈니스**에서 적응형 통화를 활성화합니다.
2. **선택**: 고객은 결제 시 직접 통화를 변경할 수 있습니다.
3. **변환**: 가격은 실시간 환율을 사용하여 동적으로 변환됩니다.
4. **표시**: 최종 결제 금액은 결제 전에 투명하게 표시됩니다.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c1.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=c2f9ee4b1748448d4ab7ab23954dcc64" alt="결제 시 통화 선택기" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c1.png" />
</Frame>

<Card title="Adaptive Currency" icon="money-bill-transfer" href="/features/adaptive-currency">
  지원되는 통화, 환전 수수료, 환불 처리에 대해 자세히 알아보세요.
</Card>

## 다국어 체크아웃

Dodo Payments는 체크아웃 페이지에서 여러 언어를 지원하여 고객이 편안한 언어로 결제를 완료할 수 있도록 합니다.

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c2.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=ecc6eb8db604e37433d8797c51768577" alt="결제 시 언어 선택기" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c2.png" />
</Frame>

### 주요 하이라이트

* 체크아웃에서 직접 사용할 수 있는 언어 선택기
* UI 텍스트, 레이블 및 시스템 메시지가 현지화됨
* 접근성과 국제 전환율 향상

### 지원되는 언어

체크아웃 페이지는 21개 언어를 지원합니다:

| 언어     | 코드   |
| ------ | ---- |
| 아랍어    | `ar` |
| 카탈루냐어  | `ca` |
| 중국어    | `zh` |
| 네덜란드어  | `nl` |
| 영어     | `en` |
| 프랑스어   | `fr` |
| 독일어    | `de` |
| 히브리어   | `he` |
| 인도네시아어 | `id` |
| 이탈리아어  | `it` |
| 일본어    | `ja` |
| 한국어    | `ko` |
| 말레이어   | `ms` |
| 폴란드어   | `pl` |
| 포르투갈어  | `pt` |
| 루마니아어  | `ro` |
| 러시아어   | `ru` |
| 스페인어   | `es` |
| 스웨덴어   | `sv` |
| 태국어    | `th` |
| 터키어    | `tr` |

<Tip>
  특정 언어를 강제로 설정하려면 체크아웃 세션 생성 시 `force_language` 매개변수를 설정하세요. 자세한 내용은 [Checkout Sessions API](/developer-resources/checkout-session#14-forcing-a-language)를 참고하세요.
</Tip>

## 자동 세금 계산

세금은 고객의 청구 위치를 기반으로 자동 계산되어 GST, VAT 및 판매세 요건을 수동 설정 없이 준수할 수 있도록 합니다.

### 세금 계산 작동 방식

<Steps>
  <Step title="Location Detection">
    고객의 국가(및 적용되는 경우 지역)를 기준으로 세금 규칙이 적용됩니다.
  </Step>

  <Step title="Dynamic Updates">
    세금 금액은 다음과 같은 경우 자동으로 업데이트됩니다:

    * 국가 변경
    * 주소가 업데이트될 때
  </Step>

  <Step title="Transparent Display">
    결제 전에 최종 세금 내역이 명확히 표시됩니다.
  </Step>
</Steps>

<Tip>
  세금 계산은 완전히 자동화되어 있으며 표준 디지털 상품 및 SaaS 제품에는 수동 구성이 필요 없습니다.
</Tip>

## 사업자 세금 ID 지원

등록된 사업체의 경우 체크아웃에서 고객이 VAT/GST 번호와 같은 사업자 세금 ID를 입력할 수 있습니다.

### 세금 ID를 입력할 경우

* 세금 적용 대상 여부가 실시간으로 검증됩니다
* 해당되는 세금 면제 또는 역급징수 규칙이 적용됩니다
* 세금 금액이 체크아웃에서 즉시 업데이트됩니다

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c3.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=76451fed5636a6ef3e5c3ec7f6a96c9f" alt="결제 시 사업자 세금 ID 입력" style={{ maxHeight: '500px', width: '70%' }} width="1440" height="1716" data-path="images/checkout/c3.png" />
</Frame>

<Info>
  이는 사업 고객이 세금 면제를 받을 수 있는 B2B SaaS 및 디지털 서비스에서 특히 유용합니다.
</Info>

## 할인 코드

고객은 대시보드에서 생성한 할인 또는 프로모션 코드를 체크아웃 페이지에서 바로 적용할 수 있습니다.

### 체크아웃 경험

1. 고객이 할인 코드를 입력합니다
2. 할인이 즉시 검증됩니다
3. 업데이트된 가격 및 절감액이 명확히 표시됩니다

<Frame>
  <img src="https://mintcdn.com/dodopayments/Vafy52417ELLVDIx/images/checkout/c4.png?fit=max&auto=format&n=Vafy52417ELLVDIx&q=85&s=639dcc94ddd1b41fdd6ff200c2a28e47" alt="결제 시 할인 코드 입력" style={{ maxHeight: '500px', width: '70%' }} width="794" height="858" data-path="images/checkout/c4.png" />
</Frame>

### API 통합

하나 이상의 중첩 할인 코드를 미리 적용하거나 할인 입력 필드를 활성화하기:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  discount_codes: ['WELCOME20'], // Pre-apply one or more codes (max 20, applied in order)
  feature_flags: {
    allow_discount_code: true // Show discount input field
  },
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  `discount_codes`는 최대 20개의 코드를 배열로 받아 순서대로 중첩합니다. 단수 `discount_code` 필드는 더 이상 사용되지 않지만 여전히 작동합니다 — 기존 통합은 즉시 변경할 필요가 없습니다. 중첩 사용 및 더 풍부한 응답 형태로 전환할 수 있을 때 `discount_codes`로 마이그레이션하세요.
</Info>

<Card title="Discount Codes" icon="percent" href="/features/discount-codes">
  할인 코드를 생성하고 관리하는 방법을 배우세요.
</Card>

<Card title="Validate Discount by Code" icon="tag" href="/api-reference/discounts/get-discount-by-code">
  코드 이름을 사용하여 할인 검색 및 검증.
</Card>

## 스마트 주소 수집

결제는 빠른 완료를 위해 유연한 주소 입력을 지원합니다.

### 사용 가능한 옵션

| 옵션                  | 설명               |
| ------------------- | ---------------- |
| **Google 주소 자동 완성** | 자동 완성으로 빠른 선택    |
| **수동 입력**           | 완전한 주소에 대한 전체 제어 |
| **국가 선택**           | 세금 및 준수 논리를 주도   |

<Tip>
  주소 수집은 전환을 극대화하면서 사용자 준수를 보장하기 위해 속도, 정확성 및 글로벌 범위를 조정합니다.
</Tip>

## 전화번호 수집

결제에서 전화번호 필드가 나타나는지 여부와 필수인지 여부는 체크아웃 세션 기능 플래그를 사용하여 제어합니다.

| 플래그                             | 기본값     | 동작                                        |
| ------------------------------- | ------- | ----------------------------------------- |
| `allow_phone_number_collection` | `true`  | 결제 양식에 전화번호 필드 표시                         |
| `require_phone_number`          | `false` | 전화번호 필드를 필수로 만듭니다 (양식 검증이 비어 있지 않은 값을 강요) |

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  feature_flags: {
    allow_phone_number_collection: true,
    require_phone_number: true
  },
  return_url: 'https://yoursite.com/return'
});
```

<Warning>
  `require_phone_number: true`는 `allow_phone_number_collection: true`가 필요합니다. 전화 수집이 비활성화된 상태에서 전화번호가 필요한 세션은 API가 거부합니다.
</Warning>

<Tip>
  `require_phone_number`를 B2B SaaS, 규제 산업 또는 지원, 사기 검토 또는 준수를 위한 확인된 연락 채널이 필요한 흐름에서 사용하세요.
</Tip>

## 사용자 정의 필드

결제 중 사용자 정의 양식 필드를 정의하여 고객으로부터 추가 정보를 수집합니다. 회사 이름, 팀 크기, 추천 소스 또는 기타 비즈니스 관련 정보를 수집하는 데 유용합니다.

### 사용 가능한 필드 유형

| 유형         | 설명             |
| ---------- | -------------- |
| `text`     | 단일 라인 텍스트 입력   |
| `number`   | 숫자 입력          |
| `email`    | 검증된 이메일 주소     |
| `url`      | 검증된 URL        |
| `date`     | 날짜 선택기         |
| `dropdown` | 사전 정의된 옵션에서 선택 |
| `boolean`  | 예/아니오 토글       |

### 예제

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  custom_fields: [
    {
      key: 'company_name',
      label: 'Company Name',
      field_type: 'text',
      required: true
    },
    {
      key: 'team_size',
      label: 'Team Size',
      field_type: 'dropdown',
      required: true,
      options: ['1-10', '11-50', '51-200', '200+']
    }
  ],
  return_url: 'https://yoursite.com/return'
});
```

<Info>
  고객 응답은 자동으로 웹훅 페이로드 (`payment.succeeded`, `subscription.active`)와 API 응답을 통해 `custom_field_responses` 배열에 포함됩니다. 체크아웃 세션당 최대 5개의 사용자 정의 필드를 정의할 수 있습니다.
</Info>

<Card title="Custom Fields Guide" icon="input-text" href="/developer-resources/checkout-session#15-collecting-custom-fields">
  사용자 정의 필드 구성 및 응답 접근에 대해 더 알아보세요.
</Card>

## 개인정보 보호정책 및 약관 동의

법적 및 준수 투명성을 보장하기 위해:

* [개인정보 보호정책](https://dodopayments.com/privacy-policy) 및 [구매자 약관](https://dodopayments.com/buyer-terms) 링크가 결제 시 명확하게 표시됩니다
* 고객은 결제를 완료하기 전에 명시적으로 이를 인정합니다

<Info>
  이는 GDPR 준수를 포함한 글로벌 소비자 보호 및 데이터 개인 정보 보호 요구 사항을 충족하도록 돕습니다.
</Info>

## 컬렉션 체크아웃

제품 컬렉션은 고객이 여러 관련 제품(예: 스타터, 프로, 엔터프라이즈 플랜)을 발견하고 선택할 수 있는 통합된 결제 경험을 제공합니다.

### 작동 방식

1. **모든 제품 표시**: 고객은 컬렉션의 모든 활성 제품을 확인합니다
2. **첫 번째 제품 자동 선택**: 컬렉션의 첫 번째 제품이 자동으로 선택됩니다
3. **옵션 비교**: 고객은 가격 및 기능을 비교하여 선택합니다
4. **단일 선택**: 제품 선택 후 표준 결제 흐름으로 진행

### 컬렉션 체크아웃 생성

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_collection_id: 'pdc_abc123',
  product_cart: [], // Required: pass an empty array for collection checkout
  return_url: 'https://yoursite.com/return'
});
```

<Warning>
  `product_collection_id`를 사용할 때, 빈 `product_cart` 배열을 전달합니다. 할인 코드는 세션 생성 시 미리 적용될 수 없습니다.
</Warning>

<Card title="Product Collections" icon="layer-group" href="/features/product-collections">
  통합된 체크아웃 경험을 위한 제품 컬렉션 생성 및 관리 방법을 배우세요.
</Card>

## 체크아웃 세션 구성

Checkout Sessions API를 사용하여 체크아웃 동작을 제어합니다:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customer: {
    email: 'customer@example.com',
    name: 'Jane Doe'
  },
  billing_currency: 'EUR', // Set specific currency
  discount_codes: ['PROMO10'],
  feature_flags: {
    allow_discount_code: true
  },
  return_url: 'https://yoursite.com/return',
  cancel_url: 'https://yoursite.com/pricing', // Optional: where to redirect on cancel
  metadata: {
    order_ref: 'ORD-12345'
  }
});
```

<Info>
  결제 후, 고객은 `return_url`로 리디렉션되며 쿼리 매개변수가 자동으로 추가됩니다 — `payment_id` 또는 `subscription_id`, `status`, `email` 및 `license_key` (적용 가능한 경우 포함). [Checkout Sessions 가이드](/developer-resources/checkout-session#request-body)에서 전체 목록을 확인하세요.
</Info>

<CardGroup cols={2}>
  <Card title="Checkout Sessions API" icon="code" href="/api-reference/checkout-sessions/create">
    체크아웃 세션에 대한 완전한 API 참조.
  </Card>

  <Card title="Checkout Integration Guide" icon="book" href="/developer-resources/checkout-session">
    체크아웃 통합에 대한 단계별 가이드.
  </Card>
</CardGroup>

## 체크아웃 테마 사용자 정의

API를 통해 체크아웃 세션을 생성할 때 `customization.theme_config` 매개변수를 사용하여 브랜드에 맞게 체크아웃 페이지의 모양을 사용자 정의하세요. 밝은 모드와 어두운 모드 모두에 대해 색상, 글꼴, 테두리 반경, 버튼 텍스트를 구성합니다.

<Frame>
  <img src="https://mintcdn.com/dodopayments/rTHkQICkStFgSdh-/images/checkout/theme-example.png?fit=max&auto=format&n=rTHkQICkStFgSdh-&q=85&s=5277b69d67c90fd87e7c5d9c125fee12" alt="사용자 정의된 테마 체크아웃 페이지" style={{ maxHeight: '500px', width: 'auto' }} width="2856" height="1490" data-path="images/checkout/theme-example.png" />
</Frame>

<Card title="Design & Theme Customization" icon="palette" href="/features/design">
  대시보드에서 사전 구축된 테마, 타이포그래피, 색상 및 실시간 미리보기를 사용하여 시각적으로 테마를 구성하세요.
</Card>

<Info>
  이 섹션은 `customization.theme_config`를 사용한 **서버 측 API** 테마 구성을 다룹니다. **Checkout SDK** (오버레이 또는 인라인 체크아웃)를 사용하는 경우 [오버레이 체크아웃](/developer-resources/overlay-checkout#theme-customization) 또는 [인라인 체크아웃](/developer-resources/inline-checkout#theme-customization)의 테마 사용자 정의 섹션을 참조하세요. camelCase 속성(예: `bgPrimary` 대신 `bg_primary`)을 사용합니다.
</Info>

### 테마 구성 옵션

| 속성                   | 설명                                             |
| -------------------- | ---------------------------------------------- |
| `light`              | 라이트 모드에 대한 색상 구성                               |
| `dark`               | 다크 모드에 대한 색상 구성                                |
| `font_primary_url`   | 기본 글꼴의 URL                                     |
| `font_secondary_url` | 보조 글꼴의 URL                                     |
| `font_size`          | 글꼴 크기: `xs`, `sm`, `md`, `lg`, `xl`, `2xl`     |
| `font_weight`        | 글꼴 굵기: `normal`, `medium`, `bold`, `extraBold` |
| `radius`             | UI 요소의 테두리 반경 (예: `4px`, `0.5rem`, `8px`)      |
| `pay_button_text`    | 결제 버튼의 사용자 정의 텍스트 (예: "구매 완료", "지금 구독")        |

### 색상 구성 (라이트/다크 모드)

각 모드 (`light` 및 `dark`)는 다음 색상 속성을 지원합니다:

| 속성                       | 설명            |
| ------------------------ | ------------- |
| `bg_primary`             | 배경 기본 색상      |
| `bg_secondary`           | 배경 보조 색상      |
| `text_primary`           | 텍스트 기본 색상     |
| `text_secondary`         | 텍스트 보조 색상     |
| `text_placeholder`       | 텍스트 자리 표시자 색상 |
| `text_error`             | 텍스트 오류 색상     |
| `text_success`           | 텍스트 성공 색상     |
| `border_primary`         | 테두리 기본 색상     |
| `border_secondary`       | 테두리 보조 색상     |
| `button_primary`         | 기본 버튼 배경 색상   |
| `button_primary_hover`   | 기본 버튼 호버 색상   |
| `button_secondary`       | 보조 버튼 배경 색상   |
| `button_secondary_hover` | 보조 버튼 호버 색상   |
| `button_text_primary`    | 기본 버튼 텍스트 색상  |
| `button_text_secondary`  | 보조 버튼 텍스트 색상  |
| `input_focus_border`     | 입력 포커스 테두리 색상 |

<Info>
  모든 색상 필드는 표준 CSS 색상 형식을 받아들입니다:

  * Hex: `#fff`, `#ffffff`, `#ffffffff`
  * RGB/RGBA: `rgb(255, 255, 255)`, `rgba(255, 255, 255, 0.5)`
  * HSL/HSLA: `hsl(120, 100%, 50%)`, `hsla(120, 100%, 50%, 0.5)`
  * 이름 있는 색상: `red`, `blue`, `transparent`
</Info>

### 예제

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customization: {
    theme_config: {
      // Custom fonts
      font_primary_url: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap',
      font_size: 'md',
      font_weight: 'medium',
      radius: '8px',
      pay_button_text: 'Complete Purchase',
      
      // Light mode colors
      light: {
        bg_primary: '#ffffff',
        bg_secondary: '#f5f5f5',
        text_primary: '#1a1a1a',
        text_secondary: '#666666',
        button_primary: '#0066ff',
        button_primary_hover: '#0052cc',
        button_text_primary: '#ffffff',
        border_primary: '#e0e0e0'
      },
      
      // Dark mode colors
      dark: {
        bg_primary: '#1a1a1a',
        bg_secondary: '#2d2d2d',
        text_primary: '#ffffff',
        text_secondary: '#a0a0a0',
        button_primary: '#3385ff',
        button_primary_hover: '#4d99ff',
        button_text_primary: '#ffffff',
        border_primary: '#404040'
      }
    }
  },
  return_url: 'https://yoursite.com/return'
});
```

<Tip>
  모든 색상 속성을 지정할 필요는 없습니다. 지정되지 않은 속성은 기본 테마 값을 사용합니다.
</Tip>
