---
metadata:
  - name: generator
    content: Diplodoc Platform v5.48.2
alternate:
  - https://yandex.com/dev/games/doc/en/sdk/defold/in-app-purchases.md
  - https://yandex.com/dev/games/doc/hi/sdk/defold/in-app-purchases.md
  - https://yandex.com/dev/games/doc/ko/sdk/defold/in-app-purchases.md
  - https://yandex.com/dev/games/doc/ru/sdk/defold/in-app-purchases.md
  - https://yandex.com/dev/games/doc/tr/sdk/defold/in-app-purchases.md
  - https://yandex.com/dev/games/doc/vi/sdk/defold/in-app-purchases.md
  - https://yandex.com/dev/games/doc/zh/sdk/defold/in-app-purchases.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/games/doc/ko/llms.txt

# 게임 내 구매

사용자에게 게임 내 구매 옵션을 제공하여 수익을 올릴 수 있습니다. 예를 들어, 레벨을 완료하는 데 필요한 추가 시간이나 캐릭터의 액세서리를 구매할 수 있습니다. 이렇게 하려면 다음과 같이 하세요.

- Yandex Games 개발자 대시보드에서 [게임 내 구매를 활성화](https://yandex.com/dev/games/doc/ko/console/purchases.md#connect)합니다.
- 구매와 함께 작동하도록 SDK를 구성합니다.

## 포털 화폐

얀(Yan)은 Yandex Games 플랫폼의 포털 화폐로, 인앱구매 결제에 사용됩니다. 얀은 모든 게임에서 통합된 플레이어 잔고에 보관되며, 신용카드로 충전할 수 있습니다. 얀과 루블 간의 환율은 변동형입니다.

{% note info "참고" %}

국제 결제의 경우, 얀의 환율은 플레이어의 국가에 따라 다릅니다.

{% endnote %}

잔고는 다음에서 충전할 수 있습니다:

- 카탈로그 상단에서
- 플레이어 프로필에서
- 게임 내 구매 중

사용자들은 프로모션에 참여하거나 고정 패키지를 구매하여 추가로 얀을 받을 수도 있습니다.

Yandex에 로그인한 사용자뿐만 아니라 비로그인 사용자도 인앱 결제를 할 수 있습니다. 사용자는 게임을 하는 도중, 특히 결제를 진행하는 순간에도 로그인할 수 있습니다.

포털 화폐 도입과 관련하여 개발자에게 지급되는 라이선스 보상의 절차 및 조건은 변경되지 않습니다.

## 조건

구매 연결 요구 사항은 귀하의 법인 거주지에 따라 다릅니다.

{% list tabs %}

- 러시아 연방 거주자

    구매를 설정하고 테스트하려면 "Deed of Transfer of Non-exclusive Rights to Use the Game"에 서명해야 합니다.

    구매 추가 및 게임 초안 게시 후, 확인서 양식 요청 이메일을 [games-partners@yandex-team.com](mailto:games-partners@yandex-team.com)으로 보내주세요. 이메일에는 반드시 게임 이름과 식별자(ID)를 기재해야 합니다.

    회신으로 "Deed of Transfer of Non-exclusive Rights to Use the Game" 양식을 받게 됩니다. 이 양식을 작성, 서명한 뒤 고해상도 스캔본(또는 사진)을 회신 메일로 보내주셔야 합니다.

    서명된 확인서를 받은 후에만 인앱 구매의 설정 및 테스트가 가능합니다.

- 러시아 연방 비거주자

    구매 추가 및 게임 초안 게시 후, 구매 연결 요청 이메일을 [games-partners@yandex-team.com](mailto:games-partners@yandex-team.com)으로 보내주세요. 이메일에는 반드시 게임 이름, 식별자(ID), 그리고 귀하 법인의 거주 국가를 기재해야 합니다.

{% endlist %}

## 구매 프로세스

인앱 결제를 활성화하려면 다음 메서드를 사용하세요:

```lua
ysdk.payments.create_purchase(callback, options)
```

`callback` — function — 호출된 메서드의 콜백입니다. 형태는 다음과 같습니다:

```lua
function(self, purchase: table|nil, signature: string|nil): nil
```

- `purchase: table` — 구매 정보입니다. 다음과 같은 속성을 포함합니다:
    - `product_id: string` — 상품 식별자.
    - `purchase_token: string` — 구매자에게 구매를 사용할 수 있는 권한을 부여하는 토큰입니다.
    - `developer_payload: string|nil` — 구매에 대한 추가 정보입니다.
- `signature: string|nil` — 구매 데이터와 서명은 [플레이어의 진위 확인](../../sdk/sdk-purchases#purchase-data-example)을 위해 사용됩니다.

`options` — 메서드의 파라미터입니다. 다음과 같은 속성을 포함합니다:

- `id: string` — 개발자 콘솔에 설정된 상품 식별자입니다.
- `developer_payload: string` — 선택적 파라미터입니다. 구매와 관련된 추가 정보를 입력할 수 있으며, 이 값은 signature 파라미터에 포함되어 서버로 전송됩니다.
- `signed: boolean|nil` — 선택적 파라미터입니다. 게임에서 해킹이나 부정 행위로부터 보호하기 위한 용도입니다.

**예시**

```lua
function buy_item(id)
  ysdk.payments.create_purchase(
    function(self, purchase, signature)
      if purchase then
        print(purchase.product_id, signature)
      end
    end,
    { id, signed = true }
  )
end
```

## 구매한 아이템 목록 가져오기

플레이어가 이미 어떤 구매를 했는지 확인하려면 다음 메소드를 사용하세요:

```lua
ysdk.payments.getPurchases(
    callback: function,
    options : {
        signed: boolean|nil
    }
)
```

`callback` — function — 호출된 메소드의 콜백. 형태는 다음과 같습니다:

```lua
function(self, purchase: Purchase[]|nil, signature: string|nil): nil
```

- `Purchase` — 구매 정보입니다. 다음과 같은 속성을 포함합니다:
    - `product_id: string` — 상품 식별자입니다.
    - `purchase_token: string` — 구매를 사용하는 토큰입니다.
    - `developer_payload: string|nil` — 구매에 대한 추가 데이터입니다.

- `signature: string|nil` — 구매 데이터와, 플레이어의 신뢰성을 검증하기 위한 서명입니다.

**예시**

```lua
function display_puchases()
  ysdk.payments.get_purchases(function(self, purchases)
    if purchases then
      for k, v in pairs(purchases) do print(k, v) end
    end
  end)
end
```

## 모든 제품 카탈로그 가져오기

구매 가능한 항목과 각각의 가격 목록을 가져오려면 `ysdk.payments.getCatalog()` 메서드를 사용하세요.

```lua
ysdk.payments.getCatalog(callback: function)
```

`callback` — function — 호출된 메서드의 콜백입니다. 형태는 다음과 같습니다:

```lua
function(self, products: Product[]|nil): nil
```

- `products: table[]` — 상품 정보. 다음 속성을 포함합니다:

```lua
products = [
    {
        id: string,
        title: string,
        description: string,
        image_uri: string,
        price: string,
        price_value: string,
        price_currency_code: string,
        price_currency_image: {
            small: string,
            medium: string,
            svg: string
        }
    },
    ...
]
```

**예시**

```lua
function display_shop()
  ysdk.payments.get_catalog(function(self, products)
    if products then
      for k, v in pairs(products) do print(v.title, v.price, v.description) end
    end
  end)
end
```

## 구매 처리 및 게임 내 통화 적립하기

구매에는 영구 구매(예: 광고 비활성화)와 소모성 구매(예: 게임 내 화폐)의 두 가지 유형이 있습니다.

영구 구매를 처리하려면 `ysdk.payments.get_purchases()` 메서드를 사용합니다.

소모성 구매를 처리하려면 `ysdk.payments.consume_purchase()` 메서드를 사용합니다.

```lua
ysdk.payments.consume_purchase(purchase_token: string)
```

{% note alert "알림" %}

`ysdk.payments.consume_purchase()` 메서드를 호출하면 처리된 구매는 영구 삭제됩니다. 따라서 먼저 `ysdk.player.set_stats()` 또는 `ysdk.player.increment_stats()` 메서드를 사용하여 플레이어 데이터를 수정한 후 구매를 처리해야 합니다.

{% endnote %}

**예시**

```lua
function buy_item(id)
  ysdk.payments.create_purchase(
    function(self, purchase)
      if purchase then
        ysdk.payments.consume_puchase(purchase.purchase_token)
      end
    end,
    { id }
  )
end
```

---


<!-- source: ko/_includes/button-git-defold.md -->
<a href="https://github.com/yandex-games-plugins/defold">
  <span class="button">저장소</span>
</a>
<!-- endsource: ko/_includes/button-git-defold.md -->
