# ONE store In-App支付发布说明

### ONE Billing Lab发售 <a href="#id09.onebillinglab-fa-shou" id="id09.onebillinglab-fa-shou"></a>

ONE Billing Lab作为研发工具，帮助ONE store In-App支付库统一测试。

可通过大韩民国、新加坡、台湾、美国各国家/地区的账户登录进行支付测试，不需要为了支付测试安装各国家/地区的所有商店App。

可以不使用实际支付系统，仅使用响应模拟程序功能测试支付流程。

可以在ONE store App或GitHub下载 ONE Billing Lab。

* [在ONE store App安装](https://onesto.re/0001002700)
* [在GitHub安装](https://github.com/ONE-store/one_billing_lab)

{% hint style="info" %}
需要在ONE store研发者中心注册支付测试ID才能进行测试。（Sandbox或商用测试）

ONE Billing Lab会员和ONE store会员一致。可用原有账户在ONE Billing Lab注册，在ONE Billing Lab进行加入/退出会员也按照ONE store会员加入程序。
{% endhint %}

### ONE store In-App支付SDK 21.01 发行

ONE store In-App支付（内部App支付）SDK 21.01 已经发行。

主要变更事项如下。

* 解决了与检测App健全性的网络安全解决方案不兼容的问题。
* 解决了安装有韩国One store App时，下载安装全球One store App动线中发生的加载问题。
* 提供在研发阶段可以改变研发环境的设置。提供以下两种设置,可以选择国内One store和全球One store进行研发的环境。

### **ONE store In-App支付library API V7(SDK V21) 发布** <a href="#onestoreinapp-zhi-fu-fa-bu-shuo-ming-onestoreinapp-zhi-fu-libraryapiv7sdkv21-fa-bu" id="onestoreinapp-zhi-fu-fa-bu-shuo-ming-onestoreinapp-zhi-fu-libraryapiv7sdkv21-fa-bu"></a>

ONE store In-App支付library API V7(SDK V21.00)现已发布，主要变更事项如下。&#x20;

新商品必须应用ONE store In-App支付library API V7(SDK V21)。

应用ONE store In-App支付API V5(SDK V17)以上的应用软件可以迁移到API V7(SDK V21)。

由于ONE store In-App支付API V4(SDK V16)的设计结构与之后的版本完全不同，因此无法迁移到ONE store In-App支付API V6(SDK V19)。

#### 订阅型商品 <a href="#onestoreinapp-zhi-fu-fa-bu-shuo-ming-ding-yue-xing-shang-pin" id="onestoreinapp-zhi-fu-fa-bu-shuo-ming-ding-yue-xing-shang-pin"></a>

代替SDK V19以下版本中使用的包月型商品而提供订阅型商品。

订阅型商品不仅提供用户在ONE store应用软件内直接管理定期支付商品的多种功能，还为开发者提供各种功能，例如为新用户流入的促销活动、定期支付状态变

更的通知功能等。\
&#x20;

### **ONE store In-App支付library API V6(SDK V19) 发布** <a href="#onestoreinapp-zhi-fu-fa-bu-shuo-ming-onestoreinapp-zhi-fu-libraryapiv6sdkv19-fa-bu" id="onestoreinapp-zhi-fu-fa-bu-shuo-ming-onestoreinapp-zhi-fu-libraryapiv6sdkv19-fa-bu"></a>

ONE store In-App支付library API V6(SDK V19.00)现已发布，主要变更事项如下。

新商品必须应用ONE store In-App支付library API V6(SDK V19)。

应用ONE store In-App支付API V5(SDK V17)的应用软件可以迁移到API V6(SDK V19)。

由于ONE store In-App支付API V4(SDK V16)的设计结构与之后的版本完全不同，因此无法迁移到ONE store In-App支付API V6(SDK V19)。

<br>

#### 删除ONE store In-App支付API版本 <a href="#onestoreinapp-zhi-fu-fa-bu-shuo-ming-shan-chu-onestoreinapp-zhi-fu-api-ban-ben" id="onestoreinapp-zhi-fu-fa-bu-shuo-ming-shan-chu-onestoreinapp-zhi-fu-api-ban-ben"></a>

现在，您无需在应用软件的manifest中添加In-App API版本。

In-App支付SDK V19将添加API Version meta-data。

#### 确认购买 <a href="#onestoreinapp-zhi-fu-fa-bu-shuo-ming-que-ren-gou-mai" id="onestoreinapp-zhi-fu-fa-bu-shuo-ming-que-ren-gou-mai"></a>

如果软件使用的是ONE store In-App支付library API  v6（SDK 19）以上版本，则必须在3天内进行购买确认。

如果在3天内无法确认购买，将被认为item无法正常支付，并取消购买。

可以使用以下method之一确认购买：

* 对于消耗性产品，请使用PurchaseClient.consumeAsync()。
* 非消耗性产品，请使用PurchaseClient.acknowledgeAsync()。

对于包月型商品，只需确认首次支付的购买即可。

{% hint style="info" %}
如果应用了ONE store In-App API V6(SDK V19)，则必须在3天内进行购买确认。

请注意，如果3天内未确认购买，购买将被取消。
{% endhint %}

#### 获取市场分类代码 <a href="#onestoreinapp-zhi-fu-fa-bu-shuo-ming-huo-qu-shi-chang-fen-lei-dai-ma" id="onestoreinapp-zhi-fu-fa-bu-shuo-ming-huo-qu-shi-chang-fen-lei-dai-ma"></a>

从IAP library V6开始，为了使用Server to Server API，需要市场分类代码。

可以通过getStoreInfoAsync()获取市场分类代码。

#### 变更PurchaseClient API <a href="#onestoreinapp-zhi-fu-fa-bu-shuo-ming-bian-geng-purchaseclientapi" id="onestoreinapp-zhi-fu-fa-bu-shuo-ming-bian-geng-purchaseclientapi"></a>

|                        | **V5 (SDK V17)**            | **V6(SDK V19)**             |
| ---------------------- | --------------------------- | --------------------------- |
| **与支付模块的连接**           | connect                     | startConnection             |
| **断开与支付模块的连接**         | terminate                   | endConnection               |
| **确认是否支持**             | isBillingSupportedAsync     | X                           |
| **购买In-App商品**         | launchPurchaseFlowAsync     | launchPurchaseFlow          |
| **消费In-App商品**         | consumeAsync                | consumeAsync                |
| **In-App商品购买确认**       | X                           | acknowledgeAsync            |
| **未消费商品的订单（包括每月自动支付）** | queryPurchasesAsync         | queryPurchasesAsync         |
| **In-App商品详情**         | queryProductsAsync          | queryProductDetailsAsync    |
| **更改每月自动支付状态**         | manageRecurringProductAsync | manageRecurringProductAsync |
| **更新或安装支付模块**          | launchUpdateOrInstallFlow   | launchUpdateOrInstallFlow   |
| **调用ONE store登录**      | launchLoginFlowAsync        | launchLoginFlowAsync        |
| **确认市场分类代码**           | X                           | getStoreInfoAsync           |

#### 变更Server API  <a href="#onestoreinapp-zhi-fu-fa-bu-shuo-ming-bian-geng-serverapi" id="onestoreinapp-zhi-fu-fa-bu-shuo-ming-bian-geng-serverapi"></a>

| **区分** | **API目录**             | **API URI**                                                               |                                                                                        | **变更事项**                                                                                                              |
| ------ | --------------------- | ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
|        |                       | **V6 (SDK V19)**                                                          | **V6 (SDK V19)**                                                                       |                                                                                                                       |
| 变更     | 发放OAuth token         | /v2/oauth/token                                                           | /v6/oauth/token                                                                        | <p>在响应规格里删除status字段<br>使用Http response code检查是否正常(200)</p>                                                            |
| 删除     | 购买商品详情查询              | /v2/purchase/details/{purchaseId}/{packageName}                           | N/A                                                                                    | <p>为加强安全性，删除购买商品详情查询API<br>整合为购买商品详情查询By In-App商品ID</p>                                                               |
| 变更     | 购买商品详情查询By In-App商品ID | /v2/purchase/details-by-productid /{purchaseId}/{packageName}/{productId} | /v6/apps/{packageName}/purchases/inapp/products /{productId}/{purchaseToken}           | 在响应规格里添加 purchaseId, acknowledgeState 字段                                                                              |
| 变更     | 包月型商品购买详情查询           | /v2/purchase/recurring-details/{purchaseId}/{packageName}                 | /v6/apps/{packageName}/purchases/auto/products /{productId}/{purchaseToken}            | <p>在响应规格里添加 acknowledgeState, lastPurchaseId, lastPurchaseState<br>在响应规格里删除price, developerPayload, purchaseState</p> |
| 删除     | 包月型商品最后购买订单详情查询       | /v2/purchase/last-recurring-details/{purchaseId}/{packageName}            | N/A                                                                                    | 整合为包月型商品购买详情查询API                                                                                                     |
| 变更     | 解除自动支付                | /v2/purchase/manage-payment-status/{purchaseId}/{packageName}/cancel      | /v6/apps/{packageName}/purchases/auto/products /{productId}/{purchaseToken}/cancel     | 变更成功处理响应规格                                                                                                            |
| 变更     | 取消解除自动支付              | /v2/purchase/manage-payment-status/{purchaseId}/{packageName}/reactivate  | /v6/apps/{packageName}/purchases/auto/products /{productId}/{purchaseToken}/reactivate | 变更成功处理响应规格                                                                                                            |
| 变更     | 取消购买订单 查询             | /v2/purchase/voided-purchases/{packageName}                               | /v6/apps/{packageName}/voided-purchases                                                | <p>为了提高API的易用性，购买取消订单查询标准(startTime, endTime)从购买日变更为购买取消日<br>在响应规格添加 purchaseToken, marketCode</p>                    |
| 变更     | 消费购买商品                | /v2/purchase/consume/{purchaseId}/{packageName}                           | /v6/apps/{packageName}/purchases/all/products/ {productId}/{purchaseToken}/consume     | 变更成功处理响应规格                                                                                                            |
| 添加     | 购买确认                  | N/A                                                                       | /v6/apps/{packageName}/purchases/all/products/ {productId}/{purchaseToken}/acknowledge | 添加新的购买确认API                                                                                                           |

&#x20;\
&#x20;

#### 变更PNS消息规格  <a href="#onestoreinapp-zhi-fu-fa-bu-shuo-ming-bian-geng-pns-xiao-xi-gui-ge" id="onestoreinapp-zhi-fu-fa-bu-shuo-ming-bian-geng-pns-xiao-xi-gui-ge"></a>

* 为了支持韩币以外的货币，支付金额（price）的数据类型从Number变更为String。
* 为了支持韩币以外的货币，增加了支付金额的货币代码（priceCurrencyCode）。
* 为了支持韩币以外的货币，按支付方式分类的金额（amount）的数据类型从Number改为String。
* 在响应规格中添加了purchaseToken，environment和marketCode字段。

详细规格可在[PNS消息详细变更历史记录](https://onestore-dev.gitbook.io/dev/chi/tools/billing/v21/pns)中查看。\
&#x20;

### **ONE store In-App支付 library API V5(SDK V17)**   <a href="#onestoreinapp-zhi-fu-fa-bu-shuo-ming-onestoreinapp-zhi-fu-libraryapiv5sdkv17" id="onestoreinapp-zhi-fu-fa-bu-shuo-ming-onestoreinapp-zhi-fu-libraryapiv5sdkv17"></a>

* API版本必须在开发公司应用软件的"AndroidManifest.xml"文件中如下注明。
* 有关更多信息，请参见应用In-App支付的前期准备页上的"Android Manifest文件设置"部分。
* 在API V5（SDK V17）中的改进包括:

<table data-header-hidden><thead><tr><th width="145.33333333333331">项目</th><th> 详细改进项目</th><th>说明</th></tr></thead><tbody><tr><td><strong>API</strong></td><td>引入Consume概念</td><td>发生未发放item情况时，提供从应用软件中恢复的逻辑。</td></tr><tr><td></td><td>支持Custom PID</td><td>开发者可以直接输入In-App商品ID(PID)，通过直观的PID创建和操作。</td></tr><tr><td></td><td>提供通用的In-App支付interface</td><td>以其他市场为方向开发的应用软件，无需在编码投入开发时间，即可向ONE store方向启动。</td></tr><tr><td><strong>支付测试环境</strong></td><td>分别提供开发环境和商用环境</td><td><p>提供与开发公司的验证环境相同水平的ONE store支付环境。<br>在开发公司的开发环境中，可以与ONE store Sandbox联合开发/测试，在开发公司的商用环境中，可以在ONE store商用环境中进行实际支付。<br>在ONE store开发者中心以测试ID注册的ID登录到ONE store后，在实际支付的情况下，开发者可以自由地取消购买。</p><table data-header-hidden><thead><tr><th></th><th></th><th></th><th></th></tr></thead><tbody><tr><td>区分</td><td><br></td><td>开发者</td><td><br></td></tr><tr><td><br></td><td><br></td><td><strong>开发环境</strong></td><td><strong>商用环境</strong></td></tr><tr><td>ONE store支付环境</td><td><strong>Sandbox</strong></td><td>O</td><td>-</td></tr><tr><td><br></td><td><strong>商用环境 (实际支付)</strong></td><td>-</td><td>O</td></tr></tbody></table></td></tr><tr><td><strong>支付窗口UI</strong></td><td>可选择全屏支付和弹窗支付界面</td><td>您可以选择全屏支付或弹窗支付（弹窗支付指南）。<br>支付界面设置请参考应用In-App支付的前期准备页的"Android Manifest文件设置"部分。</td></tr><tr><td><strong>联动方式</strong></td><td>可选择IAP SDK, AIDL</td><td>除了传统的SDK方法，您还可以使用AIDL直接与OSS进行联动。<br>但是，在没有安装ONE store service（OSS）应用软件的智能手机上，In-App支付不能正常工作。<br>有关安装ONE store service应用软件的内容，请参考应用In-App支付的前期准备页上的"ONE store应用软件安装"部分。</td></tr><tr><td><strong>开发者中心</strong></td><td>改进其他应用市场应用软件商品信息抓取功能</td><td><p>您可以轻松地将已注册的其他应用市场的应用软件商品注册到ONE store。</p><p><br></p></td></tr><tr><td></td><td>提供其他应用市场In-App商品信息导入功能</td><td></td></tr><tr><td><strong>认证中心</strong></td><td>OAuth发放/认证/管理</td><td>加强开发者服务器与ONE store In-App支付服务器联动时的数据安全性。</td></tr></tbody></table>


---

# Agent Instructions: 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:

```
GET https://onestore-dev.gitbook.io/dev/chi/tools/billing/v21/releasenote.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
