> For the complete documentation index, see [llms.txt](https://docs.igamepub.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.igamepub.co.kr/sdk-guide/purchase.md).

# 결제

## 결제 초기화

{% hint style="info" %}
[셋업](/sdk-guide/setup.md#setupsdk)을 완료한 이후에 호출해야 합니다.
{% endhint %}

다음과 같은 기능이 있습니다.

* 결제 기능 초기화
* 모든인앱 상품 정보 제공

{% tabs %}
{% tab title="Example" %}

```csharp
// Action<Result<PubInitBillingResult>> action;
GamePubSDK.Ins.InitBilling(result => {
    result.Match(
        value => {
            // 파라미터로 넘어온 상품 정보로 상점UI를 구성해 주세요.
            foreach (product in value.ProductList)
            {
                // product.ProductId
                // product.Currency
                // product.Price
                // product.Title
                // product.Desc
            }
        },
        error => {
            // error.ErrCode
            // error.Message
        }
    );
});
```

{% endtab %}

{% tab title="Response" %}

<pre class="language-csharp"><code class="lang-csharp">public class PubInitBillingResult
{
    private PubInAppProduct[] productList; // 상품정보 리스트
}

public class PubInAppProduct
{
    private string productId; // 마켓 상품ID
<strong>    private string currency;  // 통화 (예: "KRW")
</strong>    private string price;     // 상품 가격 (예: "￦2,000")
    private string title;     // 마켓에 등록한 상품명
    private string desc;      // 마켓에 등록한 상품 설명
}
</code></pre>

{% endtab %}

{% tab title="Error Code" %}

<table><thead><tr><th width="300.3333333333333">Error</th><th width="84">Code</th><th>Description</th></tr></thead><tbody><tr><td>SUCCESS</td><td>1000</td><td>성공</td></tr><tr><td>NETWORK_ERROR</td><td>2003</td><td>서버 통신 중 장애가 발생했습니다.</td></tr><tr><td>SDK_INTERNAL_ERROR</td><td>2004</td><td> SDK 내부 오류입니다.</td></tr><tr><td>IAP_NOT_INITIALIZED</td><td>4001</td><td>결제 초기화가 완료되지 않았습니다.</td></tr><tr><td>IAP_UNSUPPORTED_MARKET</td><td>4002</td><td>지원하지 않는 스토어입니다.</td></tr><tr><td>IAP_PRODUCT_LIST_NOT_EXISTS</td><td>4003</td><td>초기화할 상품목록이 없습니다.</td></tr><tr><td>IAP_AGENT_GOOGLE_ERROR</td><td>4006</td><td>Google Play 결제 서비스 오류입니다.</td></tr><tr><td>IAP_AGENT_APPLE_ERROR</td><td>4007</td><td>App Store 결제 서비스 오류입니다.</td></tr><tr><td>IAP_AGENT_ONE_ERROR</td><td>4008</td><td>Onestore 결제 서비스 오류입니다.</td></tr><tr><td>IAP_AGENT_GALAXY_ERROR</td><td>4009</td><td>Galaxy Store 결제 서비스 오류입니다.</td></tr><tr><td>IAP_SERVICE_DISCONNECTED</td><td>90000</td><td>결제 초기화를 재수행해 주세요.</td></tr><tr><td>SERVER_INTERNAL_ERROR</td><td>40000</td><td>서버 내부 오류입니다.</td></tr><tr><td>SERVER_UNKNOWN_ERROR</td><td>40002</td><td>서버에서 알 수 없는 오류가 발생했습니다.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## 결제

{% hint style="info" %}
[셋업](/sdk-guide/setup.md#setupsdk), [결제 초기화](#undefined), [로그인](#undefined)을 완료한 이후에 호출해야 합니다.
{% endhint %}

인앱상품 결제 기능입니다.

{% tabs %}
{% tab title="Example" %}

```csharp
// string productId;
// string channelId;
// string characterId;
// Action<Result<PubPurchaseResult>> action;
GamePubSDK.Ins.Purchase(
    productId, 
    channelId, 
    characterId, 
    result => {
        result.Match(
            value => {
                // 파라미터로 넘어온 결제정보로 아이템 지급을 진행해 주세요.
                // value.GamepubTid
                // value.PurchaseToken
                // value.OriginalJSONData
            },
            error => {
                // error.ErrCode
                // error.Message
            }
        );
    }
);
```

{% endtab %}

{% tab title="Response" %}

```csharp
public class PubPurchaseResult
{
    private string gamepubTid;        // 게임펍 거래ID
    private string purchaseToken;     // 구매 토큰
    private string originalJSONData;  // 마켓 원본 데이터
}
```

{% endtab %}

{% tab title="Error Code" %}

<table><thead><tr><th width="300.3333333333333">Error</th><th width="84">Code</th><th>Description</th></tr></thead><tbody><tr><td>SUCCESS</td><td>1000</td><td>성공</td></tr><tr><td>NETWORK_ERROR</td><td>2003</td><td>서버 통신 중 장애가 발생했습니다.</td></tr><tr><td>SDK_INTERNAL_ERROR</td><td>2004</td><td> SDK 내부 오류입니다.</td></tr><tr><td>IAP_NOT_INITIALIZED</td><td>4001</td><td>결제 초기화가 완료되지 않았습니다.</td></tr><tr><td>IAP_UNSUPPORTED_MARKET</td><td>4002</td><td>지원하지 않는 스토어입니다.</td></tr><tr><td>IAP_PRODUCT_LIST_NOT_EXISTS</td><td>4003</td><td>초기화할 상품목록이 없습니다.</td></tr><tr><td>IAP_USER_CANCELED</td><td>4004</td><td>결제가 취소되었습니다.</td></tr><tr><td>IAP_PRODUCT_ID_NOT_EXISTS</td><td>4005</td><td>존재하지 않는 Market ProductID 입니다.</td></tr><tr><td>IAP_AGENT_GOOGLE_ERROR</td><td>4006</td><td>Google Play 결제 서비스 오류입니다.</td></tr><tr><td>IAP_AGENT_APPLE_ERROR</td><td>4007</td><td>App Store 결제 서비스 오류입니다.</td></tr><tr><td>IAP_AGENT_ONE_ERROR</td><td>4008</td><td>Onestore 결제 서비스 오류입니다.</td></tr><tr><td>IAP_AGENT_GALAXY_ERROR</td><td>4009</td><td>Galaxy Store 결제 서비스 오류입니다.</td></tr><tr><td>IAP_SERVICE_DISCONNECTED</td><td>90000</td><td>결제 초기화를 재수행해 주세요.</td></tr><tr><td>SERVER_INTERNAL_ERROR</td><td>40000</td><td>서버 내부 오류입니다.</td></tr><tr><td>SERVER_UNKNOWN_ERROR</td><td>40002</td><td>서버에서 알 수 없는 오류가 발생했습니다.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## 결제 재시도

{% hint style="warning" %}
Android 환경에서만 동작합니다.
{% endhint %}

{% hint style="info" %}
[셋업](/sdk-guide/setup.md#setupsdk), [결제 초기화](#undefined), [로그인](#undefined)을 완료한 이후에 호출해야 합니다.
{% endhint %}

consume 처리가 실패한 인앱상품이 있을 경우 재처리를 시도하는 기능입니다.

아래와 같은 시점에 호출할 것을 권장합니다.

* 로그인 완료 직후
* 구매 요청 직전
* 게임 내 상점 진입시
* 유저 프로필 또는 우편함 확인시

{% tabs %}
{% tab title="Example" %}

```csharp
// string channelId;
// string characterId;
// Action<Result<PubRetryPurchaseResult>> action;
GamePubSDK.Ins.RetryPurchase(
    channelId, 
    characterId, 
    result => {
        result.Match(
            value => {
                foreach (product in value.PurchaseResults)
                {
                    // 파라미터로 넘어온 결제정보로 아이템 지급을 진행해 주세요.
                    // product.GamepubTid
                    // product.PurchaseToken
                    // product.OriginalJSONData
                }
            },
            error => {
                // error.ErrCode
                // error.Message
            }
        );
    }
);
```

{% endtab %}

{% tab title="Response" %}

```csharp
public class PubRetryPurchaseResult
{
    private PubPurchaseResult[] purchaseResults; // 결제정보 목록
}

public class PubPurchaseResult
{
    private string gamepubTid;        // 게임펍 거래ID
    private string purchaseToken;     // 구매 토큰
    private string originalJSONData;  // 마켓 원본 데이터
}
```

{% endtab %}

{% tab title="Error Code" %}

<table><thead><tr><th width="300.3333333333333">Error</th><th width="84">Code</th><th>Description</th></tr></thead><tbody><tr><td>SUCCESS</td><td>1000</td><td>성공</td></tr><tr><td>NETWORK_ERROR</td><td>2003</td><td>서버 통신 중 장애가 발생했습니다.</td></tr><tr><td>SDK_INTERNAL_ERROR</td><td>2004</td><td> SDK 내부 오류입니다.</td></tr><tr><td>IAP_NOT_INITIALIZED</td><td>4001</td><td>결제 초기화가 완료되지 않았습니다.</td></tr><tr><td>IAP_UNSUPPORTED_MARKET</td><td>4002</td><td>지원하지 않는 스토어입니다.</td></tr><tr><td>IAP_PRODUCT_LIST_NOT_EXISTS</td><td>4003</td><td>초기화할 상품목록이 없습니다.</td></tr><tr><td>IAP_USER_CANCELED</td><td>4004</td><td>결제가 취소되었습니다.</td></tr><tr><td>IAP_PRODUCT_ID_NOT_EXISTS</td><td>4005</td><td>존재하지 않는 Market ProductID 입니다.</td></tr><tr><td>IAP_AGENT_GOOGLE_ERROR</td><td>4006</td><td>Google Play 결제 서비스 오류입니다.</td></tr><tr><td>IAP_AGENT_APPLE_ERROR</td><td>4007</td><td>App Store 결제 서비스 오류입니다.</td></tr><tr><td>IAP_AGENT_ONE_ERROR</td><td>4008</td><td>Onestore 결제 서비스 오류입니다.</td></tr><tr><td>IAP_AGENT_GALAXY_ERROR</td><td>4009</td><td>Galaxy Store 결제 서비스 오류입니다.</td></tr><tr><td>IAP_RETRY_LIST_EMPTY</td><td>4010</td><td>결제를 재시도할 상품이 없습니다.</td></tr><tr><td>IAP_SERVICE_DISCONNECTED</td><td>90000</td><td>결제 초기화를 재수행해 주세요.</td></tr><tr><td>SERVER_INTERNAL_ERROR</td><td>40000</td><td>서버 내부 오류입니다.</td></tr><tr><td>SERVER_UNKNOWN_ERROR</td><td>40002</td><td>서버에서 알 수 없는 오류가 발생했습니다.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
