# 运营SDK DLC接入文档

## 一、功能描述

本模块功能自运营 SDK `3.18.0` 开始提供。

当您的游戏需开放新章节、新主线等付费的 DLC 内容时，您可使用 DLC 正版验证服务完成用户的解锁资格验证。


## 二、接入准备
在正式接入DLC前，接入方需要确认以下流程已完善：
- 已经在 4399 平台注册好游戏，并完善了平台所要求的配置
- 已经按照一般流程引入了 4399 运营SDK，具体流程参考 [SDK 客户端接入文档](./online_java_guide.html)
- DLC功能需要在4399开放平台提交申请，由运营审核

## 三、接口调用

### 0、前置接口

在调用本服务相关接口前，游戏应先调用下面前置接口：
- [初始化](./online_java_guide.html)
- [登录](./online_java_guide.html)

### 1、获取商品列表
**调用时机： 账号登录后**  

```java
/*
 * 获取DLC商品列表
 */
DLC.querySkuList(new OpeDataListener<List<DLCSku>>() {
    /*
	 * 查询结果回调
	 *
     * code：0、查询成功；3、查询失败（网络异常或服务器异常）
     * message：状态说明
     * skuList：商品列表
     *
     */
    @Override
    public void onFinished(int code, @Nullable String message, List<DLCSku> skuList) {
		// 展示商品列表
        for (DLCSku dlcSku : skuList) {

        }
    }
});
```

`DLCSku` 实体类：

| 参数信息 | 描述      |获取方式 |
| :-----  | :--------  |:--------|
| `id`    |商品id| `dlcSku.getId()` |
| `name` |商品名称 |`dlcSku.getName()` |
| `price` |实付金额|`dlcSku.getPrice()` |
| `originalPrice` |原价（划线价） |`dlcSku.getOriginalPrice()` |

### 2、购买商品
**调用时机： 账号登录后**  

```java
/*
 * 购买商品
 *
 * skuId：商品id
 * mark：游戏发起充值时生成唯一标识，用于游戏方服务端向SDK服务端发起订单查询的凭证（可空，最大长度：35位）
 */
 DLC.purchase(skuId, mark, new OpeResultListener() {
     /*
	  * 购买结果回调
	  *
      * code：0、支付成功；1、用户取消支付；3、支付失败（网络异常或服务器异常）；5、用户之前已购买过该商品；7、商品已下架
      * message：状态说明
      */
     @Override
     public void onResult(int code, @Nullable String message) {

     }
 });
```

### 3、查询商品
**调用时机： 账号登录后**  

```java
// 若不指定 skuId，将查询所有商品
ArrayList<String> skuIds = new ArrayList<>();
skuIds.add(skuId);
skuIds.add(skuId);

DLC.querySkuState(skuIds, new OpeDataListener<List<DLCSkuState>>() {
    /*
     * 查询结果回调
	 *
     * code：0、查询成功；3、查询失败（网络异常或服务器异常）
     * message：状态说明
     * skuStateList：带状态的商品列表
     */
    @Override
    public void onFinished(int code, @Nullable String message, List<DLCSkuState> skuStateList) {
        for (DLCSkuState dlcSkuState : skuStateList) {

        }
    }
});
```
`DLCSkuState` 实体类：

|   参数信息 |     描述      |     获取方式      |
| :----- | :--------| :--------|
| `id` |商品id|`dlcSkuState.getId()`|
| `name` |商品名称 |`dlcSkuState.getName()`|
| `price` |实付金额|`dlcSkuState.getPrice()`|
| `originalPrice` |原价（划线价） |`dlcSkuState.getOriginalPrice()`|
| `isPurchased` |是否已购买 |`dlcSkuState.isPurchased()`|
| `status` |商品上架状态，0：下架； 1：上架 |`dlcSkuState.getStatus()` |





