> For the complete documentation index, see [llms.txt](https://developers-apps-in-toss.toss.im/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers-apps-in-toss.toss.im/guide/zh/monetization/in-app-payment.md).

# 应用内支付

连接 Apps in Toss 的应用内支付，轻松销售数字商品、权益和内容吧。把购买流程缩短，用户会更容易付款，收入也能更快增长。

### 什么是应用内购买

应用内购买是在 App 内直接购买付费商品的支付方式。用户无需离开 App，就能支付所需功能、道具或内容。应用内购买商品分为消耗性商品和非消耗性商品。

* **消耗性商品：** 使用后就会消失的商品。若要再次使用，需要重新购买。（例：游戏道具、金币、提示券）
* **非消耗性商品：** 购买一次后可持续使用的商品。（例：解锁高级功能、去广告、特定内容使用权限）

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FQ8oGeiB5LAaJQsBNJloN%2Fimage.png?alt=media&#x26;token=96af789b-aebd-417f-874b-d0f38d4768cd" alt=""><figcaption></figcaption></figure>

***

### 应用内购买的优点

* 用户无需离开 App 就能直接结账，可减少支付过程中的流失。
* 从 App 上线初期起就能销售付费道具或订阅商品，快速创造收入。
* 可以将消耗性商品和非消耗性商品组合起来，打造多样化的支付模式。
* 提供符合使用目的的商品，能进一步提升营收。

{% hint style="info" %}
**请参考**

* 应用内购买退款遵循 Apple 和 Google 的政策。
* 销售价是加上增值税（VAT）后的金额。
* 支付进行期间，请将 App 内功能（如音乐·视频播放等）暂时暂停，并在支付结束后自动继续。
  {% endhint %}

***

### 在控制台中设置

#### 1) 注册商户信息

要接入应用内购买，首先需要注册商户信息。只有完成商户信息注册，才能继续下一步的同意条款与填写结算信息。注册方法请参考下方 [指南](https://developers-apps-in-toss.toss.im/guide/operation/register-business)。

#### 2) 填写结算信息

若要结算应用内购买收入， [请先注册结算信息](https://developers-apps-in-toss.toss.im/guide/settlement)。请在工作区的“信息”标签页中填写结算信息后申请审核。审核平均需要 2\~3 个工作日。

#### 3) 注册应用内商品

准确填写商品信息，用户就能清楚理解购买内容，也能减少运营中的争议和退款问题。

可注册的商品数量有限制。游戏迷你 App 最多 80 个，非游戏迷你 App 最多 30 个。

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FWEVxGawwAyHNKpTtQjK6%2Fimage.png?alt=media&#x26;token=d04f46a5-d324-4cb4-9551-8eeab755b74d" alt=""><figcaption></figcaption></figure>

**商品类型**

请根据商品的使用方式选择类型。无法销售现金性、可变现商品，或与 Toss 积分组合提供的商品。

* 消耗品：使用后会被消耗的商品。若要再次使用，需要重新购买。（例：游戏道具、内部货币充值、单次使用券）
* 非消耗品：购买一次后可持续使用的商品。（例：去广告、收藏型内容）
* 自动续期订阅：按固定周期自动扣款，直到取消前都可持续使用。（例：月度会员、定期内容订阅）

**商品名称**

* 商品名称应直接体现用户将获得的功能和条件。
* 请按实际提供内容填写。
* 不能使用夸大或容易引起误解的表述。比如使用期限是有限的，就不能写“无限制”。

**商品图片**

* 请设计得让用户能直观理解商品。
* 可以加入识别所需的文本，例如“30 天使用券”、“100 枚金币”。
* 如果加入活动文案，请务必同时标明活动期间。
* 分辨率需按 1024 × 1024px 注册。
* 只能使用没有版权问题的图片，且图片需由合作方自行准备。
* 不能使用可能带有煽动性、暴力或令人不适的图片。

**供货价**

* 供货价是不含增值税（VAT）的金额。
* 可设置最低 400 韩元，最高 1,400,000 韩元。
* 只能按 10 韩元单位输入。
* 输入供货价后，销售价会自动计算。目前不支持先输入销售价并自动计算供货价的功能。

**销售价**

销售价是用户实际支付的最终金额。系统会按供货价加上增值税自动设定。

**消耗品折扣**

消耗品类型的应用内商品可以设置折扣优惠。请在控制台的应用内商品列表中，点击展示中的消耗品商品上显示的“+ 折扣”按钮来登记折扣信息。设置折扣时，需要输入折扣后的供货价、折扣期间和折扣对象。折扣设置完成后无法修改。

折扣对象有三种。

* 全部用户：不论支付记录如何，都适用折扣。
* 无支付记录用户：对从未购买过的用户适用折扣。
* 有支付记录用户：对有购买记录的用户适用折扣。

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FOfV0TEWiEjCUpbiqujWn%2F%E1%84%8B%E1%85%B5%E1%86%AB%E1%84%8B%E1%85%A2%E1%86%B8%E1%84%89%E1%85%A1%E1%86%BC%E1%84%91%E1%85%AE%E1%86%B7%20%E1%84%85%E1%85%B5%E1%84%89%E1%85%B3%E1%84%90%E1%85%B3%2047%20(1).png?alt=media&#x26;token=dade1730-dd18-49ff-bc40-064f62fd7f1d" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FqV00eI3NVlVy64ecTTgz%2Fimage.png?alt=media&#x26;token=662c0467-46ed-4e74-a861-59e26b7cc855" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**请参考**

* 已经购买过折扣商品的用户，即使符合折扣对象条件，也不能再获得额外折扣。
* 已退款的支付也会计入购买记录。
* 折扣商品也可以通过现有应用内购买 SDK 购买，无需单独更改 SDK 连接。
  {% endhint %}

**自动续期订阅专用设置**

选择自动续期订阅类型后，可以额外设置以下项目。

* **自动续期周期：** 选择扣款重复的间隔。（每周：每 7 天 / 每月：每 30 天 / 每年：每 365 天自动扣款）
* **免费试用：** 可在一定期间内无需支付即可享受定期订阅权益。免费试用结束后，会自动进行付费扣款。时长可从 3 天、1 周、2 周、1 个月中选择。
* **新订阅折扣：** 为首次开始定期订阅的用户，以折扣价提供一段期间。输入折扣期间和折扣供货价后，会自动计算折扣销售价。
* **重新订阅折扣：** 为此前取消订阅的用户在重新订阅时提供折扣价。输入折扣期间和折扣供货价后，会自动计算折扣销售价。

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2F9UxqVhINyp7xoeoQQqS6%2FColumns%2091.png?alt=media&#x26;token=f2487a89-db2c-45a1-b6ff-37f8996388f1" alt=""><figcaption></figcaption></figure>

#### 4) 注册支付通知 URL

可注册在订阅续订、取消等支付状态变更时接收通知的 URL。注册 URL 后，当状态变更时，会向该 URL 发送 HTTP 请求。

* 支付通知 URL：请输入用于接收支付状态变更通知的服务器 URL。
* Basic Auth 标头：可选填写 Basic Auth 标头值。填写后，会如下包含在通知请求的 HTTP 标头中。

{% code collapsedlinecount="10" %}

```
Authorization: Basic {Basic Auth 标头值}
```

{% endcode %}

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FamRYTT5AmyJ4ArNLDALG%2F%E1%84%8B%E1%85%B5%E1%86%AB%E1%84%8B%E1%85%A2%E1%86%B8%E1%84%89%E1%85%A1%E1%86%BC%E1%84%91%E1%85%AE%E1%86%B7%20%E1%84%85%E1%85%B5%E1%84%89%E1%85%B3%E1%84%90%E1%85%B3%2042.png?alt=media&#x26;token=7b516918-5938-4a6a-93de-c9552f0a61c4" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2Fvf2Jq5yD4z1wdVaegJDN%2F%F0%9F%9F%A3%20Desktop_Modal%2038.png?alt=media&#x26;token=99491d6f-8dc9-4970-8748-0ffe4816640d" alt=""><figcaption></figcaption></figure>

#### 5) 查看支付·退款明细

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FegO0ESdAx6p9IK58ui1G%2F%E1%84%8B%E1%85%B5%E1%86%AB%E1%84%8B%E1%85%A2%E1%86%B8%E1%84%89%E1%85%A1%E1%86%BC%E1%84%91%E1%85%AE%E1%86%B7%20%E1%84%85%E1%85%B5%E1%84%89%E1%85%B3%E1%84%90%E1%85%B3%2030.png?alt=media&#x26;token=07e12b23-0f58-433e-866c-021becf9e8cd" alt=""><figcaption></figcaption></figure>

**支付明细**

这是用户在迷你 App 中购买的商品明细。

* 发放完成：表示已向用户提供了购买商品的全部内容。
* 支付完成：已完成支付，但购买商品尚未发放。

**退款明细**

这是用户申请退款的明细。可确认退款申请原因，并对申请进行驳回或批准。通过应用内购买支付的用户可在 Toss App 中点击“申请退款”按钮发起退款申请。

退款状态如下。

* 退款申请批准：合作方已批准退款申请的记录。批准后，会向应用商店发起审核请求。
* 退款申请驳回：合作方驳回退款申请，或应用商店驳回退款的记录。
* 退款完成：应用商店已完成退款的记录。

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2F4uYR0JGRfVulaRzaYxAp%2F%E1%84%8B%E1%85%B5%E1%86%AB%E1%84%8B%E1%85%A2%E1%86%B8%E1%84%89%E1%85%A1%E1%86%BC%E1%84%91%E1%85%AE%E1%86%B7%20%E1%84%85%E1%85%B5%E1%84%89%E1%85%B3%E1%84%90%E1%85%B3%2040.png?alt=media&#x26;token=1120d658-fbd9-453f-9062-881ffffe4766" alt=""><figcaption></figcaption></figure>

**按商店划分的退款政策**

应用内购买退款的处理方式会根据用户的操作系统（OS）和商店政策而不同。

<details>

<summary>Android</summary>

* 用户会在 Toss App 中直接申请退款。
* 合作方可在 Apps in Toss 控制台的“退款明细”菜单中查看申请记录，并进行批准或驳回处理。
* 但最终批准·拒绝与否由 Google Play 决定。
* 退款处理结果会通过推送通知发送给用户，用户也可在订单详情页面查看。即使是合作方或 Google Play 拒绝退款时，也会发送相同的通知。
* 请合作方在结合内部政策和 Google Play 政策后处理退款申请。

</details>

<details>

<summary>iOS</summary>

* iOS 用户的退款由 Apple 全权管理。所有退款都由 Apple 直接判断并批准。
* 合作方无法批准或拒绝退款，因为 Apple 不向外部提供退款申请功能。
* 合作方只能通过支付状态查询 API 查看状态。

</details>

***

### 进行开发对接

在控制台注册应用内商品后，请在迷你 App 中一并对接商品列表查询、支付请求、商品发放、未完成订单恢复流程。&#x20;

3.x SDK 参考按函数拆分，因此建议先理解下面的流程，再查看各步骤的 SDK 文档。

{% hint style="info" %}
**请先确认**

以下流程以消耗品和非消耗品这类一次购买即完成的一次性应用内商品为准。\n自动续期订阅请同时对接控制台的支付通知 URL 和支付状态变更处理。
{% endhint %}

#### 正常支付流程

1. **获取商品列表。**

   进入商品列表页面时， [`IAP.getProductItemList`](https://developers-apps-in-toss.toss.im/documentation/sdk/domains-api/iap/iap.getproductitemlist)会被调用以获取已在控制台注册的应用内商品。\n请使用响应中的 `sku`、商品名称、价格、图片信息来展示可购买商品列表。
2. **用户选择商品后发起支付。**

   点击购买按钮后，使用所选商品的 `sku`与 [`IAP.createOneTimePurchaseOrder`](https://developers-apps-in-toss.toss.im/documentation/sdk/domains-api/iap/iap.createonetimepurchaseorder)进行调用。\n此时必须一并传入 `options.processProductGrant` 回调。
3. **支付完成后发放商品。**

   支付完成并创建订单后，SDK 会调用 `processProductGrant` 回调。\n在此回调中， `orderId`为依据，将购买事实记录到合作方服务器或 App 存储中，并向用户发放商品·权限·内容。只有在发放处理最终成功时，才返回 `true`。

   `false`如果返回false或回调未正常结束，订单可能会保持未完成状态。此时用户已支付但尚未收到商品，因此必须一并实现下面的恢复流程。
4. **处理成功事件并整理资源。**

   支付与商品发放正常结束后， `onEvent`会 `type: "success"`时被调用。\n请展示支付完成页面，或刷新用户持有商品信息。支付流程结束后，请调用 `createOneTimePurchaseOrder`返回的 cleanup 函数以释放资源。

#### 未完成订单恢复流程

如果因应用关闭、网络错误、服务器错误等原因导致商品发放未完成，订单可能会保持未完成状态。\n为防止用户已支付却未收到商品的情况，请在应用启动时或进入支付页面时检查未完成订单。

1. [`IAP.getPendingOrders`](https://developers-apps-in-toss.toss.im/documentation/sdk/domains-api/iap/iap.getpendingorders)用于查询支付已完成但商品发放尚未结束的订单。
2. 以各订单的 `orderId`和 `sku`为基准重新发放商品·权限·内容。请确认是否为已发放过的订单，以防止重复发放。
3. 发放处理成功后， [`IAP.completeProductGrant`](https://developers-apps-in-toss.toss.im/documentation/sdk/domains-api/iap/iap.completeproductgrant)会被调用以变更为商品发放完成状态。若发放失败，请不要完成处理，保留到下一次恢复时机再次处理。

#### 查看订单状态与退款

如果需要在 App 中确认商品发放完成的订单或退款订单记录， [`IAP.getCompletedOrRefundedOrders`](https://developers-apps-in-toss.toss.im/documentation/sdk/domains-api/iap/iap.getcompletedorrefundedorders)即可使用。此函数不是用于未完成订单恢复，而是用于查看已完成或已退款的订单明细。

如果需要在服务器上验证特定订单的最新状态， [支付状态查询 API](https://developers-apps-in-toss.toss.im/api/iap)可调用。\n该 API 是合作方服务器到 Apps in Toss 服务器的服务器间通信，因此需要设置 mTLS 证书。

{% hint style="info" %}
**商品发放处理标准**

商品发放是向用户提供实际权益，并将结果保存到合作方系统的步骤。例如充值金币、授予去广告权限、激活付费内容访问权限等处理。只有在该处理成功后，才视为发放成功。
{% endhint %}

***

### 查看成果

完成开发对接后，可在一个页面查看应用内购买的成果指标。请结合营收走势和用户支付行为，优化商品结构和运营策略。数据将从 D+1 上午 8 点后开始依次更新。

* 营收指标：总支付金额、总营收、每位付款用户平均营收、每位付费用户营收
* 用户指标：活跃用户数、付费用户数、新增付费用户数、复购用户数、支付率、最终转化率

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FPcVTPy6VJlt4t51tJBUG%2Fimage.png?alt=media&#x26;token=d172209b-2352-4dc6-909b-e6cacd2eb1a3" alt=""><figcaption></figcaption></figure>

***

### 常见问题

<details>

<summary>应用内购买手续费是多少？</summary>

应用内购买手续费适用应用商店手续费 15%（未来可能随营收变化）+ Toss 手续费 5%。

更多详情请查看 结算了解 > 应用内购买 项目。

</details>

<details>

<summary>我想测试应用内购买。</summary>

应用内购买可在沙盒中测试。请查看指南。

</details>

<details>

<summary>如果用户希望退款，该怎么做？</summary>

iOS 用户请引导至苹果客服中心。（苹果拥有全部权限。）

Android 用户请按指南引导其在 Toss App 内申请退款。

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers-apps-in-toss.toss.im/guide/zh/monetization/in-app-payment.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
