---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
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
  - href: vi/sdk/defold/in-app-purchases.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/games/doc/vi/llms.txt

# Mua hàng trong trò chơi

Bạn có thể tạo doanh thu bằng cách cung cấp cho người dùng tùy chọn mua hàng trong trò chơi. Ví dụ: họ có thể mua thêm thời gian để hoàn thành cấp độ hoặc phụ kiện cho nhân vật của mình. Để làm việc này:

- [Cho phép mua hàng trong trò chơi](https://yandex.com/dev/games/doc/vi/console/purchases.md#connect) trong Bảng điều khiển Yandex Games.
- Đặt cấu hình SDK để làm việc với giao dịch mua hàng.

## Tiền tệ cổng thông tin

Yan là tiền tệ cổng thông tin của nền tảng Yandex Games, dùng để thanh toán các giao dịch mua trong trò chơi. Yan được lưu trữ trên một số dư chung cho tất cả các trò chơi mà người chơi có thể nạp thông qua thẻ ngân hàng. Tỷ giá của Yan so với rúp là tỷ giá động.

{% note info "Ghi chú" %}

Đối với các khoản thanh toán quốc tế, hệ số quy đổi giữa Yan và đơn vị tiền tệ sẽ phụ thuộc vào quốc gia của người chơi.

{% endnote %}

Bạn có thể nạp số dư:

- ở đầu danh mục;
- trong hồ sơ người chơi;
- trong quá trình mua hàng trong trò chơi.

Người dùng cũng có thể nhận Yan dưới dạng thưởng tham gia các chương trình khuyến mãi hoặc mua các gói cố định.

Cả người dùng đã đăng nhập vào Yandex lẫn chưa đăng nhập đều có thể thực hiện mua hàng trong trò chơi. Người dùng có thể đăng nhập ngay trong khi chơi, kể cả ngay lúc tiến hành thanh toán.

Trình tự và điều kiện trả thù lao bản quyền cho nhà phát triển sẽ không thay đổi liên quan đến việc giới thiệu tiền tệ cổng thông tin.

## Điều kiện

Yêu cầu kết nối mua hàng phụ thuộc vào nơi đăng ký pháp lý của doanh nghiệp bạn.

{% list tabs %}

- Cư dân Liên bang Nga (RF)

    Để thiết lập và kiểm thử mua hàng, bạn cần ký "Deed of Transfer of Non-exclusive Rights to Use the Game".

    Sau khi thêm tính năng mua hàng và xuất bản bản nháp trò chơi, hãy gửi email yêu cầu mẫu biên bản đến [games-partners@yandex-team.com](mailto:games-partners@yandex-team.com). Trong thư, nhất định phải ghi rõ tên và mã định danh (ID) của trò chơi.

    Chúng tôi sẽ gửi cho bạn mẫu "Deed of Transfer of Non-exclusive Rights to Use the Game". Bạn cần điền thông tin, ký tên và gửi lại bản scan (hoặc ảnh chất lượng tốt) để xác nhận.

    Chỉ sau khi chúng tôi nhận được biên bản đã ký, bạn mới có thể thiết lập và kiểm thử mua hàng trong game.

- Không phải cư dân Liên bang Nga (RF)

    Sau khi thêm tính năng mua hàng và xuất bản bản nháp trò chơi, hãy gửi email yêu cầu kết nối mua hàng đến [games-partners@yandex-team.com](mailto:games-partners@yandex-team.com). Trong email, nhất định phải ghi rõ tên và mã định danh (ID) của trò chơi, cũng như quốc gia nơi doanh nghiệp bạn đăng ký.

{% endlist %}

## Quy trình mua hàng

Bạn có thể kích hoạt mua hàng trong trò chơi bằng phương thức sau:

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

`callback` — function — callback của phương thức đã được gọi. Có dạng:

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

- `purchase: table` — thông tin về giao dịch mua. Bao gồm các thuộc tính:
    - `product_id: string` — mã định danh sản phẩm.
    - `purchase_token: string` — token dùng cho giao dịch mua.
    - `developer_payload: string|nil` — dữ liệu bổ sung về giao dịch mua.
- `signature: string|nil` — dữ liệu giao dịch mua và chữ ký dùng để [kiểm tra tính xác thực của người chơi](../../sdk/sdk-purchases#purchase-data-example).

`options` — các tham số của phương thức. Bao gồm các thuộc tính:

- `id: string` — mã định danh sản phẩm, được chỉ định trong bảng điều khiển nhà phát triển.
- `developer_payload: string` — tham số tùy chọn. Thông tin bổ sung về giao dịch mua mà bạn muốn gửi đến máy chủ của mình (sẽ được truyền trong tham số signature).
- `signed: boolean|nil` — tham số tùy chọn. Được sử dụng để bảo vệ trò chơi khỏi gian lận.

**Ví dụ**

```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
```

## Lấy danh sách các mặt hàng đã mua

Để kiểm tra những giao dịch mà người chơi đã thực hiện, hãy sử dụng phương thức sau:

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

`callback` — function — callback của phương thức đã được gọi. Có dạng:

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

- `Purchase` — thông tin về giao dịch mua. Bao gồm các thuộc tính:
    - `product_id: string` — mã định danh sản phẩm.
    - `purchase_token: string` — token dùng để xác nhận giao dịch mua.
    - `developer_payload: string|nil` — dữ liệu bổ sung về giao dịch mua.

- `signature: string|nil` — dữ liệu về giao dịch mua và chữ ký dùng để xác minh tính xác thực của người chơi.

***Ví dụ**

```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
```

## Lấy danh mục tất cả các sản phẩm

Để lấy danh sách các mua hàng có sẵn và giá của chúng, hãy sử dụng phương thức `ysdk.payments.getCatalog()`.

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

`callback` — function — callback của phương thức được gọi. Có dạng:

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

- `products: table[]` — thông tin về sản phẩm. Bao gồm các thuộc tính:

```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
        }
    },
    ...
]
```

**Ví dụ**

```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
```

Có hai loại giao dịch mua hàng: hàng không tiêu hao (chẳng hạn như để tắt quảng cáo) và hàng tiêu hao (chẳng hạn như để mua tiền trong trò chơi).

Để xử lý các giao dịch mua hàng không tiêu hao, hãy sử dụng phương thức `ysdk.payments.get_purchases()`.

Để xử lý các giao dịch mua hàng tiêu hao, hãy sử dụng phương thức `ysdk.payments.consume_purchase()`.

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

{% note alert "Chú ý" %}

Sau khi gọi phương thức `ysdk.ayments.consume_purchase()` giao dịch mua hàng đã xử lý sẽ bị xóa vĩnh viễn. Để thực hiện việc này, trước tiên bạn nên sửa đổi dữ liệu người chơi thông qua phương thức `ysdk.player.set_stats()` hoặc `ysdk.player.increment_stats()` và sau đó xử lý giao dịch mua hàng.

{% endnote %}

**Ví dụ**

```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: vi/_includes/button-git-defold.md -->
<a href="https://github.com/yandex-games-plugins/defold">
  <span class="button">Kho lưu trữ</span>
</a>
<!-- endsource: vi/_includes/button-git-defold.md -->
