# 웹에서 원스토어 인앱 결제 사용하기

## 개요

웹 환경에서 원스토어 인앱결제를 이용하기 위한 연동 방법을 설명합니다.

## 사전 확인

### 회원인증 연동

윈도우용 게임/앱 또는 PC/Mobile Web 상에서 원스토어 인앱결제를 구현하기 위해서는 회원인증(로그인)연동이 필요합니다.\
자세한 사항은 '[회원인증](member)'을 참고하시기 바랍니다.

### 방화벽 정책 등록

CallBackUrl 호출을 위해 원스토어 결제서버와 개발사 서버간 방화벽 정책 등록이 반드시 필요합니다.

CallBackUrl을 사용하실 개발사는 사전에 서버IP 정보를 전달해 주시기 바랍니다. \
(개발사 서버의 80 혹은 443 포트 연동을 기본으로 하며, 방화벽 정책 등록은 최소 1영업일 이상 소요됩니다.)

## 연동 아키텍쳐

원스토어는 회원 기반 서비스를 제공합니다. 웹 환경에서 결제 시에도 사용자 회원의 로그인이 필요하며, 로그인 이후 결제 요청이 가능합니다.\
결제가 필요한 경우 매번 사용자가 로그인을 수행하지 않도록 OAuth 인증을 지원하며, 모든 구매/결제 관련 서버 API는 로그인 시 제공되는 OAuth Token(이하 User Access Token)을 이용하여 요청해야 합니다.

## 서버 APIs

원스토어 웹 서버 API는 발급받은 접근 토큰(User Access Token)을 이용하여 호출합니다.\
HTTP로 호출 시, Header에 접근 토큰을 전송해 주어야 합니다.

### Standard Response Codes

<table><thead><tr><th width="149">Code</th><th>message_kr</th><th>message_en</th><th>HTTP Status Code</th><th>대상API</th></tr></thead><tbody><tr><td>UserNotExist</td><td>회원 정보가 존재하지 않습니다. </td><td>User does not exist.</td><td>404 - Not Found</td><td>공통</td></tr><tr><td>UserAccessTokenExpired</td><td>User Access Token이 만료되었습니다.</td><td>User Access Token has expired.</td><td>401 - Unauthorized</td><td>공통</td></tr><tr><td>UnsupportedDevice</td><td>상품이 해당 단말을 지원하지 않습니다. </td><td>The product does not support the device.</td><td>400 - Bad Request</td><td>공통</td></tr><tr><td>UnauthorizedUserAccess</td><td>해당 API에 접근권한이 없습니다.</td><td>Not authorized to this API.</td><td>403 - Forbidden<br></td><td>공통</td></tr><tr><td>Success</td><td>정상처리 되었습니다.</td><td>The request has been successfully completed.</td><td>200 - Success</td><td>consume/acknowledge<br></td></tr><tr><td>ServiceMaintenance</td><td>서비스 점검중입니다.</td><td>System maintenance is in progress.</td><td>503 - Service Temporarily Unavailable</td><td>공통</td></tr><tr><td>ResourceNotFound</td><td>요청한 자원이 존재하지 않습니다.</td><td>The requested resource could not be found.</td><td>404 - Not Found</td><td>공통</td></tr><tr><td>RequiredValueNotExist</td><td>필수값이 존재하지 않습니다. [ field1, field2, ... ]</td><td>Request parameters are required. [ field1, field2, ... ]</td><td>400 - Bad Request</td><td>공통</td></tr><tr><td>ProductNotExist</td><td>상품 정보가 존재하지 않습니다.</td><td>The product does not exist.</td><td>404 - Not Found</td><td>공통</td></tr><tr><td>NotSupportMultipleQuantity </td><td>복수 구매 요청은 관리형 상품으로 제한합니다.</td><td>Only Managed products are eligible for repeated purchase requests.</td><td>400 - Bad Request</td><td>requestPurchase</td></tr><tr><td>NoSuchData</td><td>조회된 결과값이 존재하지 않습니다.</td><td>The requested data could not be found.</td><td>404 - Not Found</td><td>단건조회 API</td></tr><tr><td>MethodNotAllowed</td><td>지원하지 않는 HTTP Method 입니다.</td><td>HTTP method not supported.</td><td>405 - Method Not Allowed</td><td>공통</td></tr><tr><td>InvalidUserAccessToken</td><td>User Access Token이 유효하지 않습니다.</td><td>User Access Token is invalid.</td><td>401 - Unauthorized</td><td>공통</td></tr><tr><td>InvalidUser</td><td>회원 정보가 유효하지 않습니다.</td><td>User information is not valid.<br></td><td>409 - Conflict</td><td>공통</td></tr><tr><td>InvalidRequest</td><td>입력값이 유효하지 않습니다. [ field1, field2, ... ]</td><td>Request parameters are invalid. [ field1, field2, ... ]</td><td>400 - Bad Request</td><td>공통</td></tr><tr><td>InvalidPurchaseState</td><td>구매내역이 존재하지 않거나, 구매완료 상태가 아닙니다.</td><td>Purchase history does not exist or is not completed.</td><td>409 - Conflict</td><td>consume/acknowledge<br></td></tr><tr><td>InvalidProduct</td><td>상품 정보가 유효하지 않습니다.</td><td>The product is not valid.</td><td>409 - Conflict</td><td>공통</td></tr><tr><td>InvalidContentType</td><td>잘못된 Content Type 입니다.</td><td>The request content-type is invalid.</td><td>415 - Unsupported Media Type</td><td>공통</td></tr><tr><td>InvalidConsumeState</td><td>소비상태 변경이 불가하거나, 이미 변경완료 되었습니다.</td><td>The purchase consumption status cannot be changed or has already been changed.</td><td>409 - Conflict</td><td>consume</td></tr><tr><td>InvalidAuthorizationHeader</td><td>Authorization 헤더의 값이 유효하지 않습니다.</td><td>Authorization header is invalid.</td><td>400 - Bad Request</td><td>공통</td></tr><tr><td>InternalError</td><td>정의되지 않은 오류가 발생하였습니다.</td><td>An undefined error has occurred.</td><td>500 - Internal Server Error</td><td>공통</td></tr><tr><td>ExceedQuantityMultiplePurchase</td><td>구매 요청이 가능한 개수를 초과하였습니다. (최대 10개)</td><td>Your purchase request has exceeded the quantity available. (Max. 10 items)</td><td>400 - Bad Request</td><td>requestPurchase</td></tr><tr><td>ExceedAmountMultiplePurchase</td><td>구매 요청이 가능한 금액을 초과하였습니다. (최대 50만원)</td><td>Your purchase request has exceeded the amount available. (Max. ₩500,000)</td><td>400 - Bad Request</td><td>requestPurchase</td></tr><tr><td>DeveloperPayloadNotMatch</td><td>구매요청 시 전달된 developerPayload값과 일치하지 않습니다.</td><td>The request developerPayload does not match the value passed in the purchase request.</td><td>400 - Bad Request</td><td>consume/acknowledge</td></tr><tr><td>AlreadyPurchased</td><td>이미 상품을 보유하였거나 함께 구매할 수 없는 상품을 보유중입니다.</td><td>You already have the product or a product that cannot be purchased together.</td><td>409 - Conflict</td><td>requestPurchase</td></tr><tr><td>AccessBlocked</td><td>요청이 차단되었습니다.</td><td>The request was blocked.</td><td>403 - Forbidden</td><td>공통</td></tr></tbody></table>

#### 표준 응답코드

오류응답인 경우 표준 응답코드에 정의된 코드 및 메시지를 전달합니다.

**Example**

```
HTTP/1.1 400 Bad Request
Content-type: application/json;charset=UTF-8
{
    "error" : {
        "code" : "NoSuchData",
        "message" : "The requested data could not be found."
    }
}
```

#### 상품 타입 코드&#x20;

| Code         | Name   | Description              |
| ------------ | ------ | ------------------------ |
| inapp        | 소비성 상품 | consume 가능한 소비성 상품       |
| auto         | 월정액 상품 | 월 자동결제 상품                |
| subscription | 구독형 상품 | 구독형 상품                   |
| all          | 전체 상품  | 소멸성 상품 + 월정액 상품 + 구독형 상품 |

### requestPurchase <a href="#id-2.-apiv7-4.2requestpurchase" id="id-2.-apiv7-4.2requestpurchase"></a>

#### **\[API Spec.]**&#x20;

| **Protocol**     | HTTPS            | **Method** | POST             |
| ---------------- | ---------------- | ---------- | ---------------- |
| **Content-Type** | application/json | 응답 포맷      | application/json |

<table data-header-hidden><thead><tr><th width="121.5859375"></th><th></th></tr></thead><tbody><tr><td><strong>Path</strong></td><td><p>(상용) <a href="https://pcapis.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/%7Btype%7D/products/%7BproductId%7D/order">https://pcapis.onestore.net/pc/v7/apps/{clientId}/purchases/{type}/products/{productId}/order</a></p><p>(개발) <a href="https://sbpp.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/%7Btype%7D/products/%7BproductId%7D/order">https://sbpp.onestore.net/pc/v7/apps/{clientId}/purchases/{type}/products/{productId}/order</a></p></td></tr><tr><td><strong>Description</strong></td><td><p></p><ul><li>특정 인앱상품의 구매를 요청합니다. </li><li>오류 코드 : 표준 응답코드 참조</li></ul></td></tr></tbody></table>

#### **\[ Request ]**

**Parameter**

<table><thead><tr><th>Parameter Name</th><th width="128.93359375">Data Type</th><th width="176.60546875">Required</th><th width="236.91796875">Description</th></tr></thead><tbody><tr><td>clientId</td><td>String</td><td>Y</td><td>API를 호출하는 앱의 클라이언트 ID</td></tr><tr><td>type</td><td>String</td><td>Y</td><td><ul><li>구매를 요청하고자 하는 인앱 상품 타입 코드</li><li>상품 타입 코드 참조</li></ul></td></tr><tr><td>productId</td><td>String</td><td>Y</td><td>구매를 요청하고자 하는 인앱상품 ID</td></tr></tbody></table>

**Header**

| Parameter Name | Data Type | Required | Description                                                                                    |
| -------------- | --------- | -------- | ---------------------------------------------------------------------------------------------- |
| Authorization  | String    | Y        | User Access Token 발급 API를 통해 발급받은 User Access Token                                            |
| x-market-code  | String    | N        | <p>마켓 구분 코드</p><ul><li>MKT_ONE: 원스토어 (대한민국)         </li><li>MKT_GLB: 원스토어 (대한민국 외) </li></ul> |

**Body**

| Element Name     | Data Type | Data Size   | Required | Description                                                        |
| ---------------- | --------- | ----------- | -------- | ------------------------------------------------------------------ |
| prchsClientPocCd | String    | 50          | Y        | <p>구매 요청 Client 구분 코드<br>POC_PC : PC 결제<br>POC_MOBILE : 모바일 결제</p> |
| returnUrl        | String    | 200         | Y        | 결제결과를 전달받기 위한 redirect URL                                         |
| callbackUrl      | String    | 200         | N        | 결제결과를 전달받기 위한 REST API URL(최종 결제결과만 전달)                            |
| productName      | String    | 50          | N        | 구매를 요청하고자 하는 인앱 상품명, 미 입력시 개발자센터에 등록된 상품명 사용                       |
| developerPayload | String    | 200         | N        | 구매 건을 식별하기 위해 개발사에서 관리하는 식별자                                       |
| quantity         | Integer   | <p><br></p> | N        | 구매하고자 하는 상품의 수량(Default: 1)                                        |

**Example**

```
POST /pc/v7/apps/com.onestorecorp.test/purchases/inapp/products/p5000/order
Host: pcapis.onestore.net Content-Type: application/json
Authorization: Bearer 680b3512-1253-5642-1263-8adjbf651nb
x-market-code: MKT_GLB
 
{
    "prchsClientPocCd": "POC_PC",
    "returnUrl": "https://onestorecorp.com",
    "callbackUrl": "https://onestorecorp.com",
    "productName": "금화100개",
    "developerPayload" : "1jkl2j3lk1lj",
    "quantity": 2
}
```

#### **\[ Response ]**

| Element Name | Data Type | Data Size | Description              |
| ------------ | --------- | --------- | ------------------------ |
| purchaseId   | String    | 20        | 구매 ID                    |
| paymentUrl   | String    | 200       | <p>결제 요청 URL 정보<br></p>  |
| paymentParam | String    | -         | <p>결제 요청 파라미터 정보<br></p> |

**Example**

```
성공 시

{
   "purchaseId": "200406083435101108801",
   "paymentUrl": "https://onestorecorp.com",
   "paymentParam": "ABCDEDIAGJAFERasdfwerewrlkjasjflsdafj42352ds"
}



// 실패 시

{
    "error" : {
        "code" : "AlreadyPurchased",
        "message" : "You already have the product or a product that cannot be purchased together."
    }
}
```

### getProductDetails <a href="#id-2.-apiv7-4.3getproductdetails" id="id-2.-apiv7-4.3getproductdetails"></a>

#### **\[ API Spec. ]**

| **Protocol**     | HTTPS            | **Method**          | POST             |
| ---------------- | ---------------- | ------------------- | ---------------- |
| **Content-Type** | application/json | **Response Format** | application/json |

<table data-header-hidden><thead><tr><th width="123.046875"></th><th></th></tr></thead><tbody><tr><td><strong>Path</strong></td><td><p>(상용) <br><a href="https://pcapis.onestore.net/pc/v7/apps/%7BclientId%7D/products/%7Btype%7D">https://pcapis.onestore.net/pc/v7/apps/{clientId}/products/{type}</a><br></p><p>(개발) <br><a href="https://sbpp.onestore.net/pc/v7/apps/%7BclientId%7D/products/%7Btype%7D">https://sbpp.onestore.net/pc/v7/apps/{clientId}/products/{type}</a></p></td></tr><tr><td><strong>Description</strong></td><td><ul><li>판매 가능한 인앱상품의 상세 정보를 반환합니다.</li><li>오류 코드 : 표준 응답코드 참조</li></ul></td></tr></tbody></table>

#### **\[ Request ]**

**Parameter**

| Parameter Name | Data Type | Required | Description                                                       |
| -------------- | --------- | -------- | ----------------------------------------------------------------- |
|  clientId      | String    | Y        | API를 호출하는 앱의 클라이언트 ID                                             |
| type           | String    | Y        | <ul><li>상품 정보를 조회하고자 하는 인앱 상품 타입 코드</li><li>상품 타입 코드 참조</li></ul> |

**Header**

| Parameter Name | Data Type | Required | Description                                                                                    |
| -------------- | --------- | -------- | ---------------------------------------------------------------------------------------------- |
| Authorization  | String    | Y        | User Access Token 발급 API를 통해 발급받은 User Access Token                                            |
| x-market-code  | String    | N        | <p>마켓 구분 코드</p><ul><li>MKT_ONE: 원스토어 (대한민국)         </li><li>MKT_GLB: 원스토어 (대한민국 외) </li></ul> |

**Body**

| Element Name     | Data Type   | Data Size   | Required    | Description               |
| ---------------- | ----------- | ----------- | ----------- | ------------------------- |
| productIdList \[ | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p>               |
| <p><br></p>      | String      | 150         | Y           | 개발자센터에 상품 등록시 지정한 인앱상품 ID |
| ]                | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p>               |

**Example**

<pre><code>POST /pc/v7/apps/com.onestorecorp.com.test/products/inapp
Host: 
pcapis.onestore.net

Content-Type: application/json
Authorization: Bearer 680b3512-1253-5642-1263-8adjbf651nb
x-market-code: MKT_GLB

{
    "productIdList": ["다이아100_20170818000000", "루비300_20170818000000"]
<strong>}
</strong></code></pre>

#### **\[ Response ]**

| Element Name         | Data Type   | Data Size   | Description                                 |
| -------------------- | ----------- | ----------- | ------------------------------------------- |
| productDetailList \[ | <p><br></p> | -           | 상품 상세 정보 목록                                 |
| {                    | <p><br></p> | <p><br></p> | <p><br></p>                                 |
| productId            | String      | 150         | 구매가능한 상품의 인앱상품 ID                           |
| type                 | String      | 20          | <ul><li>상품 타입</li><li>상품 타입 코드 참조</li></ul> |
| price                | String      | 30          | 상품금액                                        |
| priceCurrencyCode    | String      | 10          | KRW, USD 등의 통화 구분                           |
| title                | String      | -           | 상품명                                         |
| priceAmountMicros    | Long        | -           | 상품금액 \* 100만                                |
| }                    | <p><br></p> | <p><br></p> | <p><br></p>                                 |
| ]                    | <p><br></p> | <p><br></p> | <p><br></p>                                 |

**Example**

```
// 성공 시
{
    "productDetailList": [
        {
            "productId": "다이아100_20170818000000",
            "type": "inapp",
            "price": "1000",
            "priceCurrencyCode": "KRW",
            "title": "Sample Title",
            "priceAmountMicros": 1000000000
        },
        {
            "productId": "루비300_20170818000000",
            "type": "inapp",
            "price": "1000",
            "priceCurrencyCode": "KRW",
            "title": "Sample Title",
            "priceAmountMicros": 1000000000
        }
    ]
}
// 실패 시
{
    "error" : {
        "code" : "InvalidUserAccessToken",
        "message" : "Access token is invalid."
    }
}
```

\


### getPurchases <a href="#id-2.-apiv7-4.4getpurchases" id="id-2.-apiv7-4.4getpurchases"></a>

#### **\[ API Spec. ]**

| **Protocol**     | HTTPS            | **Method** | POST             |
| ---------------- | ---------------- | ---------- | ---------------- |
| **Content-Type** | application/json | 응답 포맷      | application/json |

<table data-header-hidden><thead><tr><th width="143.14453125"></th><th></th></tr></thead><tbody><tr><td><strong>Path</strong></td><td><p>(상용) </p><p><a href="https://pcapis.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/%7Btype%7D">https://pcapis.onestore.net/pc/v7/apps/{clientId}/purchases/{type}</a></p><p></p><p>(개발) <br><a href="https://sbpp.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/%7Btype%7D">https://sbpp.onestore.net/pc/v7/apps/{clientId}/purchases/{type}</a></p></td></tr><tr><td><strong>Description</strong></td><td><ul><li>소비하지 않은 구매목록(수량포함) 반환합니다. (최대 100건까지 조회)</li><li>오류 코드 : 표준 응답코드 참조</li></ul></td></tr></tbody></table>

#### **\[ Request ]**

**Parameter**

| Parameter Name | Data Type | Required | Description                                                                                       |
| -------------- | --------- | -------- | ------------------------------------------------------------------------------------------------- |
| clientId       | String    | Y        | API를 호출하는 앱의 클라이언트 ID                                                                             |
| type           | String    | Y        | <ul><li>상품 정보를 조회하고자 하는 인앱 상품 타입 코드</li><li>상품 타입 코드 참<mark style="color:red;">조</mark></li></ul> |

**Header**

| Parameter Name | Data Type | Required | Description                                                                          |
| -------------- | --------- | -------- | ------------------------------------------------------------------------------------ |
| Authorization  | String    | Y        | User Access Token 발급 API를 통해 발급받은 User Access Token                                  |
| x-market-code  | String    | N        | <p>마켓 구분 코드</p><ul><li>MKT_ONE: 원스토어 (대한민국)</li><li>MKT_GLB: 원스토어 (대한민국 외)</li></ul> |

**Body**

| Parameter Name  | Data Type | Data Size | Required | Description              |
| --------------- | --------- | --------- | -------- | ------------------------ |
| continuationKey | String    | 41        | N        | 구매 내역 paging 처리를 위한 다음 키 |

**Example**

```
POST /pc/v7/apps/com.onestorecorp.test/purchases/inapp
Host: pcapis.onestore.net Content-Type: application/json
Authorization: Bearer 680b3512-1253-5642-1263-8adjbf651nb
x-market-code: MKT_GLB
 
{
    "continuationKey" : "a2fajklfsjkl2"
}
```

#### **\[ Response ]**

| Element Name             | Data Type         | Data Size   | Description                                                                                 |
| ------------------------ | ----------------- | ----------- | ------------------------------------------------------------------------------------------- |
| productIdList \[         | <p><br></p>       | -           | XVjKVLbw7TIy                                                                                |
| <p><br></p>              | String            | 150         | 개발자센터에 상품 등록 시 지정한 인앱상품 ID                                                                  |
| ]                        | <p><br></p>       | <p><br></p> | <p><br></p>                                                                                 |
| purchaseDetailList \[    | <p><br></p>       | <p><br></p> | <p><br></p>                                                                                 |
| {                        | <p><br></p>       | <p><br></p> | <p><br></p>                                                                                 |
| orderId                  | String            | 40          | 결제ID                                                                                        |
| packageName              | String            | 128         | 구매한 앱의 패키지명                                                                                 |
| productId                | <p>String<br></p> | 150         | <p>개발자센터에 상품 등록 시 지정한 인앱상품 ID<br></p>                                                       |
| purchaseTime             | Long              | -           | 구매 시간                                                                                       |
| acknowledgeState         | Int               | -           | 구매확인 상태( 0: Not Acknowledged, 1: Acknowledged)                                              |
| purchaseState            | Int               | -           | 구매 상태                                                                                       |
| recurringState           | Int               | -           | <p>자동 결제 상태</p><ul><li>0 : 정상가입 상태</li><li>1 : 해지예약 상태</li><li>-1 : 월정액 상품이 아닌 경우</li></ul> |
| purchaseId               | String            | 20          | 구매ID                                                                                        |
| purchaseToken            | String            | 20          | 구매토큰                                                                                        |
| developerPayload         | String            | 200         | 구매건을 식별하기 위해 개발사에서 관리하는 식별자                                                                 |
| quantity                 | Int               | <p><br></p> | 구매 수량                                                                                       |
| }                        | <p><br></p>       | <p><br></p> | <p><br></p>                                                                                 |
| ]                        | <p><br></p>       | <p><br></p> | <p><br></p>                                                                                 |
| purchaseSignatureList \[ | <p><br></p>       | <p><br></p> | <p><br></p>                                                                                 |
| <p><br></p>              | String            | -           | purchaseDetailList 각각의 구매정보 검증을 위한 signature                                                |
| ]                        | <p><br></p>       | <p><br></p> | <p><br></p>                                                                                 |
| continuationKey          | String            | 41          | 구매 내역 paging 처리를 위한 다음 키                                                                    |

**Example**

```
// 성공 시
{
    "productIdList": ["다이아100_20170818000000", "루비300_20170818000000"],
    "purchaseDetailList": [
        {
            "orderId": "01239349082349823489342",
            "packageName": "com.onestore.sample",
            "productId": "다이아100_20170818000000",
            "purchaseTime": 1345678900000,
            "acknowledgeState": 1,
            "purchaseState": 0,
            "recurringState": -1,
            "purchaseId": "17070421461015116878",
            "purchaseToken": "17070421461015116878",
            "developerPayload": "E23DEFB029F84F4383ECB0E53B46B6A2",
            "quantity": 1
        },
        {
            "orderId": "01239349082349823489343",
            "packageName": "com.onestore.sample",
            "productId": "루비300_20170818000000",
            "purchaseTime": 1345678920000,
            "acknowledgeState": 0,
            "purchaseState": 0,
            "recurringState": -1,
            "purchaseId": "17070431461610116878",
            "purchaseToken": "17070421461015116878",
            "developerPayload": "T_RPAY_27_201707120110880",
            "quantity": 2
        }
    ],
    "purchaseSignatureList": ["sign1", "sign2"],
    "continuationKey" : "continuationKey"
}
 
// 실패 시
{
    "error" : {
        "code" : "InvalidUserAccessToken",
        "message" : "Access token is invalid."
    }
}
```

### consumePurchase <a href="#id-2.-apiv7-4.5consumepurchase" id="id-2.-apiv7-4.5consumepurchase"></a>

#### **\[ API Spec. ]**

| **Protocol**     | HTTPS            | **Method** | POST             |
| ---------------- | ---------------- | ---------- | ---------------- |
| **Content-Type** | application/json | 응답 포맷      | application/json |

<table data-header-hidden><thead><tr><th width="129.44921875"></th><th></th></tr></thead><tbody><tr><td><strong>Path</strong></td><td>(상용) <br><a href="https://pcapis.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/inapp/%7BpurchaseToken%7D/consume">https://pcapis.onestore.net/pc/v7/apps/{clientId}/purchases/inapp/{purchaseToken}/consume</a><br><br>(개발) <br><a href="https://sbpp.onestore.co.kr/pc/v7/apps/%7BclientId%7D/purchases/inapp/%7BpurchaseToken%7D/consume">https://sbpp.onestore.co.kr/pc/v7/apps/{clientId}/purchases/inapp/{purchaseToken}/consume</a></td></tr><tr><td><strong>Description</strong></td><td><ul><li>구매한 관리형 인앱 상품을 소비한 상태로 변경합니다. (소비성 상품만 사용 가능)</li><li>오류 코드 : 표준 응답코드 참조</li></ul></td></tr></tbody></table>

#### **\[ Request ]**

**Parameter**

| Parameter Name | Data Type | Required | Description           |
| -------------- | --------- | -------- | --------------------- |
| clientId       | String    | Y        | API를 호출하는 앱의 클라이언트 ID |
| purchaseToken  | String    | Y        | 구매토큰                  |

**Header**

| Parameter Name | Data Type | Required | Description                                                                          |
| -------------- | --------- | -------- | ------------------------------------------------------------------------------------ |
| Authorization  | String    | Y        | User Access Token 발급 API를 통해 발급받은 User Access Token                                  |
| x-market-code  | String    | N        | <p>마켓 구분 코드</p><ul><li>MKT_ONE: 원스토어 (대한민국)</li><li>MKT_GLB: 원스토어 (대한민국 외)</li></ul> |

**Body**

| Parameter Name   | Data Type | Data Size | Required | Description                  |
| ---------------- | --------- | --------- | -------- | ---------------------------- |
| developerPayload | String    | 200       | N        | 구매 건을 식별하기 위해 개발사에서 관리하는 식별자 |

**Example**

```
POST /pc/v7/apps/com.onestorecorp.test/purchases/inapp/200406083435101108801/consume
Host: http://pcapis.onestore.net
Content-Type: application/json
Authorization: Bearer 680b3512-1253-5642-1263-8adjbf651nb
x-market-code: MKT_GLB

{
"developerPayload" : "1jkl2j3lk1lj"
}
```

#### **\[ Response ]**

| Element Name | Data Type   | Data Size   | Description |
| ------------ | ----------- | ----------- | ----------- |
| result       | Object      | <p><br></p> | <p><br></p> |
| {            | <p><br></p> | <p><br></p> | <p><br></p> |
| code         | String      | 50          | 응답코드(정상처리)  |
| message      | String      | 300         | 응답메시지(정상처리) |
| }            | <p><br></p> | <p><br></p> | <p><br></p> |

**Example**

```
/// 성공 시

{
    "result" : {
        "code" : "Success",
        "message" : "Request has been completed successfully."
    }
}



// 실패 시

{
    "error" : {
        "code" : "AlreadyPurchased",
        "message" : "You already have the product or a product that cannot be purchased together."
    }
}
```

### acknowledgePurchase

#### **\[ API Spec. ]**

| **Protocol**     | HTTPS            | **Method** | POST             |
| ---------------- | ---------------- | ---------- | ---------------- |
| **Content-Type** | application/json | 응답 포맷      | application/json |

<table data-header-hidden><thead><tr><th width="125.921875"></th><th></th></tr></thead><tbody><tr><td><strong>Path</strong></td><td><p>(상용) <br><a href="https://pcapis.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/all/%7BpurchaseToken%7D/acknowledge">https://pcapis.onestore.net/pc/v7/apps/{clientId}/purchases/all/{purchaseToken}/acknowledge</a><br></p><p>(개발) <br><a href="https://sbpp.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/all/%7BpurchaseToken%7D/acknowledge">https://sbpp.onestore.net/pc/v7/apps/{clientId}/purchases/all/{purchaseToken}/acknowledge</a></p></td></tr><tr><td><strong>Description</strong></td><td><ul><li>구매한 인앱 상품을 구매확인 상태로 변경합니다. (소멸성 상품, 월정액 상품 모두 지원)</li><li>오류 코드 : 표준 응답코드 참조</li></ul></td></tr></tbody></table>

#### **\[ Request ]**

**Parameter**

| Parameter     | Data Type | Required | Description           |
| ------------- | --------- | -------- | --------------------- |
|  clientId     | String    | Y        | API를 호출하는 앱의 클라이언트 ID |
| purchaseToken | String    | Y        | 구매토큰                  |

**Header**

| Parameter Name | Data Type | Required | Description                                                                          |
| -------------- | --------- | -------- | ------------------------------------------------------------------------------------ |
| Authorization  | String    | Y        | User Access Token 발급 API를 통해 발급받은 User Access Token                                  |
| x-market-code  | String    | N        | <p>마켓 구분 코드</p><ul><li>MKT_ONE: 원스토어 (대한민국)</li><li>MKT_GLB: 원스토어 (대한민국 외)</li></ul> |

**Body**

<table><thead><tr><th width="157.7734375">Element Name</th><th>Data Type</th><th>Data Size</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>developerPayload</td><td>String</td><td>200</td><td>N</td><td>구매 건을 식별하기 위해 개발사에서 관리하는 식별자</td></tr></tbody></table>

**Example**

```
POST /pc/v7/apps/com.onestorecorp.test/purchases/inapp/200406083435101108801/acknowledge
Host: pcapis.onestore.net
Content-Type: application/json
Authorization: Bearer 680b3512-1253-5642-1263-8adjbf651nb
x-market-code: MKT_GLB

{
"developerPayload" : "1jkl2j3lk1lj"
}
```

#### **\[ Response ]**

| Element Name | Data Type   | Data Size   | Description |
| ------------ | ----------- | ----------- | ----------- |
| result       | Object      | <p><br></p> | <p><br></p> |
| {            | <p><br></p> | <p><br></p> | <p><br></p> |
| code         | String      | 50          | 응답코드(정상처리)  |
| message      | String      | 300         | 응답메시지(정상처리) |
| }            | <p><br></p> | <p><br></p> | <p><br></p> |

**Example**

```
// 성공 시

{
    "result" : {
        "code" : "Success",
        "message" : "Request has been completed successfully."
    }
}



// 실패 시

{
    "error" : {
        "code" : "AlreadyPurchased",
        "message" : "You already have the product or a product that cannot be purchased together."
    }
}
```

### cancelRecurringPurchase <a href="#id-2.-apiv7-4.7cancelrecurringpurchase" id="id-2.-apiv7-4.7cancelrecurringpurchase"></a>

#### **\[ API Spec. ]**

| **Protocol**     | HTTPS            | **Method** | POST             |
| ---------------- | ---------------- | ---------- | ---------------- |
| **Content-Type** | application/json | 응답 포맷      | application/json |

<table data-header-hidden><thead><tr><th width="121.58984375"></th><th></th></tr></thead><tbody><tr><td><strong>Path</strong></td><td><p>(상용) <br><a href="https://pcapis.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/auto/%7BpurchaseToken%7D/cancel">https://pcapis.onestore.net/pc/v7/apps/{clientId}/purchases/auto/{purchaseToken}/cancel</a><br></p><p>(개발) <br><a href="https://sbpp.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/auto/%7BpurchaseToken%7D/cancel">https://sbpp.onestore.net/pc/v7/apps/{clientId}/purchases/auto/{purchaseToken}/cancel</a></p></td></tr><tr><td><strong>Description</strong></td><td><ul><li>월정액(자동결제) 상품의 다음 자동결제를 취소 예약(해지 예약)합니다.</li><li>오류 코드 : 표준 응답코드 참조</li></ul></td></tr></tbody></table>

#### **\[ Request ]**

**Parameter**

| Parameter Name | Data Type | Required | Description           |
| -------------- | --------- | -------- | --------------------- |
|  clientId      | String    | Y        | API를 호출하는 앱의 클라이언트 ID |
| purchaseToken  | String    | Y        | 구매토큰                  |

**Header**

| Parameter Name | Data Type | Required | Description                                                                          |
| -------------- | --------- | -------- | ------------------------------------------------------------------------------------ |
| Authorization  | String    | Y        | User Access Token 발급 API를 통해 발급받은 User Access Token                                  |
| x-market-code  | String    | N        | <p>마켓 구분 코드</p><ul><li>MKT_ONE: 원스토어 (대한민국)</li><li>MKT_GLB: 원스토어 (대한민국 외)</li></ul> |

**Body**

N/A

**Example**

```
POST /pc/v7/apps/com.onestorecorp.test/purchases/auto/200406083435101108801/cancel
Host: pcapis.onestore.net
Content-Type: application/json
Authorization: Bearer 680b3512-1253-5642-1263-8adjbf651nb
x-market-code: MKT_GLB

{
}
```

#### **\[ Response ]**

| Element Name | Data Type   | Data Size   | Description |
| ------------ | ----------- | ----------- | ----------- |
| result       | Object      | <p><br></p> | <p><br></p> |
| {            | <p><br></p> | <p><br></p> | <p><br></p> |
| code         | String      | 50          | 응답코드(정상처리)  |
| message      | String      | 300         | 응답메시지(정상처리) |
| }            | <p><br></p> | <p><br></p> | <p><br></p> |

**Example**

```
// 성공 시

{
    "result" : {
        "code" : "Success",
        "message" : "Request has been completed successfully."
    }
}



// 실패 시

{
    "error" : {
        "code" : "NoSuchData",
        "message" : "The requested data could not be found."
    }
}
```

### reactivateRecurringPurchase <a href="#id-2.-apiv7-4.8reactivaterecurringpurchase" id="id-2.-apiv7-4.8reactivaterecurringpurchase"></a>

#### **\[ API Spec. ]**

| **Protocol**     | HTTPS            | **Method** | POST             |
| ---------------- | ---------------- | ---------- | ---------------- |
| **Content-Type** | application/json | 응답 포맷      | application/json |

<table data-header-hidden><thead><tr><th width="126.37890625"></th><th></th></tr></thead><tbody><tr><td><strong>Path</strong></td><td><p>(상용) <a href="https://pcapis.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/auto/%7BpurchaseToken%7D/reactivate">https://pcapis.onestore.net/pc/v7/apps/{clientId}/purchases/auto/{purchaseToken}/reactivate</a><br></p><p>(개발) <br><a href="https://sbpp.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/auto/%7BpurchaseToken%7D/reactivate">https://sbpp.onestore.net/pc/v7/apps/{clientId}/purchases/auto/{purchaseToken}/reactivate</a></p></td></tr><tr><td><strong>Description</strong></td><td><ul><li>월정액(자동결제) 상품의 기존 취소 예약(해지 예약)을 취소하여 다음 자동결제가 정상적으로 진행되도록 합니다.</li><li>이 API는 요청하는 월정액(자동결제) 상품의 상태가 취소 예약 상태일 때만 정상동작합니다.</li><li>오류 코드 : 표준 응답코드 참조</li></ul></td></tr></tbody></table>

#### **\[ Request ]**

**Parameter**

| Parameter Name | Data Type | Required | Description           |
| -------------- | --------- | -------- | --------------------- |
| clientId       | String    | Y        | API를 호출하는 앱의 클라이언트 ID |
| purchaseToken  | String    | Y        | 구매토큰                  |

**Header**

| Parameter Name | Data Type | Required | Description                                                                          |
| -------------- | --------- | -------- | ------------------------------------------------------------------------------------ |
| Authorization  | String    | Y        | User Access Token 발급 API를 통해 발급받은 User Access Token                                  |
| x-market-code  | String    | N        | <p>마켓 구분 코드</p><ul><li>MKT_ONE: 원스토어 (대한민국)</li><li>MKT_GLB: 원스토어 (대한민국 외)</li></ul> |

**Body**

N/A

**Example**

```
POST /pc/v7/apps/com.onestorecorp.test/purchases/auto/200406083435101108801/reactivate
Host: pcapis.onestore.net
Content-Type: application/json
Authorization: Bearer 680b3512-1253-5642-1263-8adjbf651nb
x-market-code: MKT_GLB

{
}
```

#### **\[ Response ]**

| Element Name | Data Type   | Data Size   | Description |
| ------------ | ----------- | ----------- | ----------- |
| result       | Object      | <p><br></p> | <p><br></p> |
| {            | <p><br></p> | <p><br></p> | <p><br></p> |
| code         | String      | 50          | 응답코드(정상처리)  |
| message      | String      | 300         | 응답메시지(정상처리) |
| }            | <p><br></p> | <p><br></p> | <p><br></p> |

**Example**

```
// 성공 시

{
    "result" : {
        "code" : "Success",
        "message" : "Request has been completed successfully."
    }
}



// 실패 시

{
    "error" : {
        "code" : "NoSuchData",
        "message" : "The requested data could not be found."
    }
}
```

### cancelSubscription <a href="#id-2.-apiv7-4.9cancelsubscription" id="id-2.-apiv7-4.9cancelsubscription"></a>

#### **\[ API Spec. ]**

| **Protocol**     | HTTPS            | **Method** | POST             |
| ---------------- | ---------------- | ---------- | ---------------- |
| **Content-Type** | application/json | 응답 포맷      | application/json |

<table data-header-hidden><thead><tr><th width="127.9375"></th><th></th></tr></thead><tbody><tr><td><strong>Path</strong></td><td><p>(상용) <br><a href="https://pcapis.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/subscription/%7BpurchaseToken%7D/cancel">https://pcapis.onestore.net/pc/v7/apps/{clientId}/purchases/subscription/{purchaseToken}/cancel</a><br></p><p>(개발) <br><a href="https://sbpp.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/subscription/%7BpurchaseToken%7D/cancel">https://sbpp.onestore.net/pc/v7/apps/{clientId}/purchases/subscription/{purchaseToken}/cancel</a></p></td></tr><tr><td><strong>Description</strong></td><td><ul><li>구독형 상품의 다음 자동결제를 취소 예약(해지 예약)합니다.</li><li>오류 코드 : 표준 응답코드 참조</li></ul></td></tr></tbody></table>

#### **\[ Request ]**

**Parameter**

| Parameter Name | Data Type | Required | Description           |
| -------------- | --------- | -------- | --------------------- |
| clientId       | String    | Y        | API를 호출하는 앱의 클라이언트 ID |
| purchaseToken  | String    | Y        | 구매토큰                  |

**Header**

| Parameter Name | Data Type | Required | Description                                                                          |
| -------------- | --------- | -------- | ------------------------------------------------------------------------------------ |
| Authorization  | String    | Y        | User Access Token 발급 API를 통해 발급받은 User Access Token                                  |
| x-market-code  | String    | N        | <p>마켓 구분 코드</p><ul><li>MKT_ONE: 원스토어 (대한민국)</li><li>MKT_GLB: 원스토어 (대한민국 외)</li></ul> |

**Body**

N/A

**Example**

```
POST /pc/v7/apps/com.onestorecorp.test/purchases/subscription/200406083435101108801/cancel
Host: pcapis.onestore.net
Content-Type: application/json
Authorization: Bearer 680b3512-1253-5642-1263-8adjbf651nb
x-market-code: MKT_GLB
 
{  
}
```

#### **\[ Response ]**

| Element Name | Data Type   | Data Size   | Description |
| ------------ | ----------- | ----------- | ----------- |
| result       | Object      | <p><br></p> | <p><br></p> |
| {            | <p><br></p> | <p><br></p> | <p><br></p> |
| code         | String      | 50          | 응답코드(정상처리)  |
| message      | String      | 300         | 응답메시지(정상처리) |
| }            | <p><br></p> | <p><br></p> | <p><br></p> |

**Example**

```
// 성공 시
{
    "result" : {
        "code" : "Success",
        "message" : "Request has been completed successfully."
    }
}
 
 
// 실패 시
{
    "error" : {
        "code" : "NoSuchData",
        "message" : "The requested data could not be found."
    }
}
```

### reactivateSubscription <a href="#id-2.-apiv7-4.10reactivatesubscription" id="id-2.-apiv7-4.10reactivatesubscription"></a>

#### **\[ API Spec. ]**

| **Protocol**     | HTTPS            | **Method** | POST             |
| ---------------- | ---------------- | ---------- | ---------------- |
| **Content-Type** | application/json | 응답 포맷      | application/json |

<table data-header-hidden><thead><tr><th width="129.203125"></th><th></th></tr></thead><tbody><tr><td><strong>Path</strong></td><td><p>(상용) <br><a href="https://pcapis.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/subscription/%7BpurchaseToken%7D/reactivate">https://pcapis.onestore.net/pc/v7/apps/{clientId}/purchases/subscription/{purchaseToken}/reactivate</a><br></p><p>(개발) <br><a href="https://sbpp.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/subscription/%7BpurchaseToken%7D/reactivate">https://sbpp.onestore.net/pc/v7/apps/{clientId}/purchases/subscription/{purchaseToken}/reactivate</a></p></td></tr><tr><td><strong>Description</strong></td><td><ul><li>구독형 상품의 다음 자동결제를 취소 예약(해지 예약)을 취소합니다.</li><li>오류 코드 : 표준 응답코드 참조</li></ul></td></tr></tbody></table>

#### **\[ Request ]**

**Parameter**

| Parameter Name | Data Type | Required | Description           |
| -------------- | --------- | -------- | --------------------- |
| clientId       | String    | Y        | API를 호출하는 앱의 클라이언트 ID |
| purchaseToken  | String    | Y        | 구매토큰                  |

**Header**

| Parameter Name | Data Type | Required | Description                                                                          |
| -------------- | --------- | -------- | ------------------------------------------------------------------------------------ |
| Authorization  | String    | Y        | User Access Token 발급 API를 통해 발급받은 User Access Token                                  |
| x-market-code  | String    | N        | <p>마켓 구분 코드</p><ul><li>MKT_ONE: 원스토어 (대한민국)</li><li>MKT_GLB: 원스토어 (대한민국 외)</li></ul> |

**Body**

**Example**

```
POST /pc/v7/apps/com.onestorecorp.test/purchases/subscription/200406083435101108801/reactivate
Host: pcapis.onestore.net 
Content-Type: application/json
Authorization: Bearer 680b3512-1253-5642-1263-8adjbf651nb
x-market-code: MKT_GLB
 
{
}

```

#### **\[ Response ]**

| Element Name | Data Type   | Data Size   | Description |
| ------------ | ----------- | ----------- | ----------- |
| result       | Object      | <p><br></p> | <p><br></p> |
| {            | <p><br></p> | <p><br></p> | <p><br></p> |
| code         | String      | 50          | 응답코드(정상처리)  |
| message      | String      | 300         | 응답메시지(정상처리) |
| }            | <p><br></p> | <p><br></p> | <p><br></p> |

**Example**

```
// 성공 시
{
    "result" : {
        "code" : "Success",
        "message" : "Request has been completed successfully."
    }
}
 
 
// 실패 시
{
    "error" : {
        "code" : "NoSuchData",
        "message" : "The requested data could not be found."
    }
}
```

### getSubscriptionDetail <a href="#id-2.-apiv7-4.11getsubscriptiondetail" id="id-2.-apiv7-4.11getsubscriptiondetail"></a>

#### **\[ API Spec. ]**

| **Protocol**     | HTTPS            | **Method** | POST             |
| ---------------- | ---------------- | ---------- | ---------------- |
| **Content-Type** | application/json | 응답 포맷      | application/json |

<table data-header-hidden><thead><tr><th width="128.640625"></th><th></th></tr></thead><tbody><tr><td><strong>Path</strong></td><td><p>(상용) <br><a href="https://pcapis.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/subscription/%7BpurchaseToken%7D">https://pcapis.onestore.net/pc/v7/apps/{clientId}/purchases/subscription/{purchaseToken}</a><br></p><p>(개발) <br><a href="https://sbpp.onestore.net/pc/v7/apps/%7BclientId%7D/purchases/subscription/%7BpurchaseToken%7D">https://sbpp.onestore.net/pc/v7/apps/{clientId}/purchases/subscription/{purchaseToken}</a></p></td></tr><tr><td><strong>Description</strong></td><td><ul><li>구독의 상세정보를 조회한다.</li><li>오류 코드 : 표준 응답코드 참조</li></ul></td></tr></tbody></table>

#### **\[ Request ]**

**Path Parameter**

| Parameter Name | Data Type | Required | Description           |
| -------------- | --------- | -------- | --------------------- |
| clientId       | String    | Y        | API를 호출하는 앱의 클라이언트 ID |
| purchaseToken  | String    | Y        | 구매토큰                  |

**Header**

| Parameter Name | Data Type | Required | Description                                                                          |
| -------------- | --------- | -------- | ------------------------------------------------------------------------------------ |
| Authorization  | String    | Y        | User Access Token 발급 API를 통해 발급받은 User Access Token                                  |
| x-market-code  | String    | N        | <p>마켓 구분 코드</p><ul><li>MKT_ONE: 원스토어 (대한민국)</li><li>MKT_GLB: 원스토어 (대한민국 외)</li></ul> |

**Body**

**Example**

```
POST /pc/v7/apps/com.onestorecorp.test/purchases/subscription/200406083435101108801
Host: pcapis.onestore.net Content-Type: application/json
Authorization: Bearer 680b3512-1253-5642-1263-8adjbf651nb
x-market-code: MKT_GLB
 
{
}
```

#### **\[ Response ]**

<table><thead><tr><th width="149">Element Name</th><th></th><th></th><th>Data Type</th><th>Description</th></tr></thead><tbody><tr><td>result {</td><td></td><td></td><td>Object</td><td>API호출 결과(정상) - 정상 시에 응답</td></tr><tr><td></td><td>code</td><td></td><td>String</td><td>응답코드</td></tr><tr><td></td><td>message</td><td></td><td>String</td><td>응답메시지</td></tr><tr><td>}</td><td><br></td><td><br></td><td></td><td></td></tr><tr><td>error {</td><td></td><td></td><td>Object</td><td>API호출 결과(에러) - 에러 시에 응답</td></tr><tr><td></td><td>code</td><td></td><td>String</td><td>응답코드</td></tr><tr><td></td><td>message</td><td></td><td>String</td><td>응답메시지</td></tr><tr><td>}</td><td><br></td><td><br></td><td></td><td></td></tr><tr><td>subscription {</td><td></td><td><br></td><td>Object</td><td></td></tr><tr><td><br></td><td>productId</td><td></td><td>String</td><td>커스텀 상품 ID</td></tr><tr><td><br></td><td>productName</td><td></td><td>String</td><td>상품명</td></tr><tr><td><br></td><td>parentProductId</td><td></td><td>String</td><td>모상품 ID</td></tr><tr><td><br></td><td>parentProductName</td><td></td><td>String</td><td>모상품명</td></tr><tr><td><br></td><td>packageName</td><td></td><td>String</td><td>패키지명</td></tr><tr><td><br></td><td>productAmount</td><td></td><td>String</td><td>상품 금액</td></tr><tr><td><br></td><td>productAmountMicros</td><td></td><td>Long</td><td>상품 금액 * 100만</td></tr><tr><td><br></td><td>priceCurrencyCode<br></td><td></td><td>String</td><td>KRW, USD 등등의 통화 구분</td></tr><tr><td><br></td><td>imagePath</td><td></td><td>String</td><td>상품 이미지 경로</td></tr><tr><td><br></td><td>periodUnit</td><td></td><td>String</td><td>이용 기간 단위</td></tr><tr><td><br></td><td>period</td><td></td><td>Integer</td><td>이용 기간</td></tr><tr><td><br></td><td>purchaseToken</td><td></td><td>String</td><td>구매 토큰</td></tr><tr><td><br></td><td>status</td><td></td><td>String</td><td>구독 상태 코드</td></tr><tr><td><br></td><td>startDate</td><td></td><td>Long</td><td>구독 시작(첫 결제) 일시(millis)</td></tr><tr><td><br></td><td>expiryDate</td><td></td><td>Long</td><td>구독 만료 일시(millis)</td></tr><tr><td><br></td><td>paymentAmount</td><td></td><td>String</td><td>이전 결제 금액</td></tr><tr><td><br></td><td>paymentAmountMicros</td><td></td><td>Long</td><td>이전 결제 금액 * 100만</td></tr><tr><td><br></td><td>nextPaymentAmount</td><td></td><td>String</td><td>다음 결제 금액 </td></tr><tr><td><br></td><td>nextPaymentAmountMicros</td><td></td><td>Long</td><td>다음 결제 금액 * 100만</td></tr><tr><td><br></td><td>nextPaymentDate</td><td></td><td>Long</td><td>다음 결제 일시(millis)</td></tr><tr><td><br></td><td>pauseAllow</td><td></td><td>String</td><td>일시중지 사용 가능 여부(Y/N(default))</td></tr><tr><td><br></td><td>pauseStartDate</td><td></td><td>Long</td><td>일시중지 시작일시(millis) - 일시중지예약/일시중지 상태일 경우에만 응답</td></tr><tr><td><br></td><td>pauseEndDate</td><td></td><td>Long</td><td>일시중지 종료일시(millis) - 일시중지예약/일시중지 상태일 경우에만 응답 </td></tr><tr><td><br></td><td>promotionAmount</td><td></td><td>String</td><td>프로모션 상품 금액</td></tr><tr><td><br></td><td>promotionAmountMicros</td><td></td><td>Long</td><td>프로모션 상품 금액 * 100만</td></tr><tr><td><br></td><td>promotionPeriod</td><td></td><td>Integer</td><td>프로모션 이용 기간</td></tr><tr><td><br></td><td>priceChanges [</td><td></td><td>Array</td><td>가격 변동 정보 목록</td></tr><tr><td><br></td><td>{</td><td><br></td><td><br></td><td><br></td></tr><tr><td><br></td><td><br></td><td>priceChangeSeq</td><td>Integer</td><td>가격 변동 시퀀스 </td></tr><tr><td><br></td><td><br></td><td>priceChangeApplyStartDate</td><td>Long</td><td>가격 변동 적용 시작 시간</td></tr><tr><td><br></td><td><br></td><td>priceChangePreviousAmount</td><td>String</td><td>가격 변동 이전 금액</td></tr><tr><td><br></td><td><br></td><td>priceChangePreviousAmountMicros</td><td>Long</td><td>가격 변동 이전 금액 * 100만</td></tr><tr><td><br></td><td><br></td><td>priceChangeAmount</td><td>String</td><td>가격 변동 금액</td></tr><tr><td><br></td><td><br></td><td>priceChangeAmountMicros</td><td>Long</td><td>가격 변동 금액 * 100만</td></tr><tr><td><br></td><td><br></td><td>priceChangeAgreement</td><td>String</td><td>가격 변동 동의 여부</td></tr><tr><td><br></td><td><br></td><td>priceChangeAgreementDueDate</td><td>Long</td><td><p>가격 변동 동의 만료 시간</p><p>(정책 부연 설명)</p><ul><li>Value = 가격변경일 +7+30일</li><li>사용자는 동의만료일 이후 첫 자동결제 시점까지 동의가능함.</li></ul></td></tr><tr><td><br></td><td>}]</td><td><br></td><td><br></td><td><br></td></tr><tr><td>}</td><td><br></td><td><br></td><td></td><td></td></tr></tbody></table>

\


**Example**

```
// 성공 시
{
    "result" : {
        "code" : "Success",
        "message" : "Request has been completed successfully."
    },
    "subscription" : {
        "productId" : "다이아100_20170818000000",
        "productName" : "다이아100",
        "productAmount" : "2000",
        "productAmountMicros" : 2000000000,
        "priceCurrencyCode" : "KRW",
        "imagePath" : "https://xxx.png",
        "periodUnit" : "MONTH",
        "period" : 1,
        "purchaseToken" : "17070421461015116878",
        "status" : "SUBSCRIBING"
        "parentProductId" : "03904729375",
        "parentProductName" : "모상품명",
        "packageName" : "com.test.game",
        "startDate" : 1345578920000,
        "expiryDate" : 1345678920000,
        "startPaymentDate" : 1345578920000,
        "paymentAmount" : "1000",
        "paymentAmountMicros" : 1000000000,
        "nextPaymentAmount" : "1500",
        "nextPaymentAmountMicros" : 1500000000,
        "nextPaymentDate" : 1345678920000,
        "pauseAllow": "Y",
        "pauseStartDate" : 1625670000000,
        "pauseEndDate" : 1628840000000,
        "promotionAmount" : "1000",
        "promotionAmountMicros" : 1000000000,
        "promotionPeriod" : 1,
        "priceChanges" : [{
            "priceChangeSeq": 1,
            "priceChangeApplyStartDate": 1345678920000,
            "priceChangePreviousAmount" : "2000",
            "priceChangePreviousAmountMicros" : 2000000000,            
            "priceChangeAmount" : "2500",
            "priceChangeAmountMicros" : 2500000000,
            "priceChangeAgreement" : "N",
            "priceChangeAgreementDueDate": 1345678920000
        }]
    }
}
 
 
// 실패 시
{
    "error" : {
        "code" : "NoSuchData",
        "message" : "The requested data could not be found."
    }
}
```

## 결제

### 결제 요청 <a href="#id-2.-apiv7-5.1" id="id-2.-apiv7-5.1"></a>

원스토어 인 결제를 요청합니다. paymentUrl로 paymentParam을 전달합니다.&#x20;

성공 시, ONE store 표준 결제화면이 노출됩니다.

#### **\[ 호출 Spec. ]**

| Protocol     | HTTPS      | Method | POST       |
| ------------ | ---------- | ------ | ---------- |
| Content-Type | text/plain | Accept | text/plain |

<table data-header-hidden><thead><tr><th width="125.93359375"></th><th></th></tr></thead><tbody><tr><td>URL Path</td><td>paymentUrl</td></tr><tr><td>Description</td><td>웹 표준 결제화면 호출</td></tr></tbody></table>

**Parameter**

| Parameter Name | Data Size | Required | Description                         |
| -------------- | --------- | -------- | ----------------------------------- |
| paymentParam   | 500       | M        | 결제요청 데이터 (표준 결제화면 호출을 위한 parameter) |

#### **결제 요청 시 브라우저 크기**

원스토어 표준 결제화면에 최적화된 브라우저 크기는 width=400, height=580 입니다.&#x20;

브라우저 크기가 다른 경우 결제화면이 정상적으로 노출되지 않거나 동작하지 않을 수 있습니다. &#x20;

아래는 새 브라우저 창으로 원스토어 결제화면을 호출할 때의 예입니다.&#x20;

{% code overflow="wrap" %}
```
window.open('paymentUrl','pp01','width=400, height=580, left='+((window.screen.width / 2) - (400 / 2))+', top='+((window.screen.height / 2) - (580 / 2))+' status=no, menubar=no, toolbar=no, sizable=no');
```
{% endcode %}

### 결제 응답 <a href="#id-2.-apiv7-5.2" id="id-2.-apiv7-5.2"></a>

표준 결제화면의 결제결과를 개발사로 전달합니다.

#### **\[ 호출 Spec. ]**

| Signature Algorithm | SHA512 with RSA |
| ------------------- | --------------- |

| Protocol     | HTTP/HTTPS                                                                                | Method | POST                           |
| ------------ | ----------------------------------------------------------------------------------------- | ------ | ------------------------------ |
| Content-Type | <p>returnUrl : Application/x-www-form-urlencode<br><br>callbackUrl : Application/json</p> | Accept | callbackUrl : Application/json |

<table data-header-hidden><thead><tr><th width="125.15234375"></th><th></th></tr></thead><tbody><tr><td>URL Path</td><td>returnUrl, callbackUrl</td></tr><tr><td>Description</td><td><p>개발사가 제공한 returnUrl(Redirect Page)와 callbackUrl(REST API)을 통해 결제결과를 전달합니다. 두 방식 모두 Parameter Element는 동일하며 returnUrl은 form data submit 형태로, callbackUrl은 json 형태로 전달됩니다.</p><ul><li>단, callbackUrl 데이터는 실제 PG와의 연동 발생시 최종 결제결과에 대해서만 전달됩니다.</li></ul></td></tr></tbody></table>

**Parameter**

| Element Name          | Data Type | Data Size | Required | Description                                                                                                                                                                                                                                                       |
| --------------------- | --------- | --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| responseCode          | String    | 20        | Y        | 응답코드 (하단 표 참조)                                                                                                                                                                                                                                                    |
| responseMessage       | String    | 200       | N        | 결제성공(Success)시 빈 값                                                                                                                                                                                                                                                |
| orderId               | String    | 20        | N        | 결제ID                                                                                                                                                                                                                                                              |
| purchaseId            | String    | 20        | N        | 구매ID                                                                                                                                                                                                                                                              |
| purchaseToken         | String    | 20        | N        | 구매토큰                                                                                                                                                                                                                                                              |
| purchaseTime          | Long      | 13        | N        | 구매시간(millisecond)                                                                                                                                                                                                                                                 |
| developerPayload      | String    | 200       | N        | 구매 건을 식별하기 위해 개발자에서 관리하는 식별자                                                                                                                                                                                                                                      |
| quantity              | Long      | 5         | N        | 복수구매 수량                                                                                                                                                                                                                                                           |
| purchaseSignature     | String    | 2000      | N        | <p>구매정보 검증을 위한 signature</p><ul><li><p>단건 결제시 </p><ul><li>(orderId+purchaseId+purchaseToken+purchaseTime+developerPayload)</li></ul></li><li><p>복수구매 결제시</p><ul><li>(orderId+purchaseId+purchaseToken+purchaseTime+developerPayload+quantity)</li></ul></li></ul> |
| <p>billingKey<br></p> | String    | 200       | N        | <p>S2S 자동결제 승인을 위한 billing 키<br></p>                                                                                                                                                                                                                              |

**Example(returnUrl)**

```
<form name="paymentResultForm" action="{returnUrl}" method="post">

<input type="hidden" name="responseCode" value="Success">
<input type="hidden" name="responseMessage" value="">
<input type="hidden" name="orderId" value="20200429OS01123456789">
<input type="hidden" name="purchaseId" value="20042912345678901234">
<input type="hidden" name="purchaseToken" value="20042912345678905678">
<input type="hidden" name="purchaseTime" value=5615474165165>
<input type="hidden" name="developerPayload" value="pd2020042912354987321">
<input type="hidden" name="quantity" value=3>
<input type="hidden" name="purchaseSignature" value="DB98B5CB92126B1D52E86FED4C6E4AC9E29ADAF356057DB98B5CB92126B1D5......">
<input type="hidden" name="billingKey" value="36FED4C6E4AC9E29ADAF356057DB98B5CB92126B1D52E87577....">

</form>

```

**Example(callbackUrl)**

```
{
  "responseCode" : "Success",
  "responseMessage" : "",
  "orderId" : "20200429OS01123456789",
  "purchaseId" : "20042912345678901234",
  "purchaseToken" : "20042912345678905678",
  "purchaseTime" : 5615474165165,
  "developerPayload" : "pd2020042912354987321",
  "quantity" : 3
  "purchaseSignature" : "DB98B5CB92126B1D52E86FED4C6E4AC9E29ADAF356057DB98B5CB92126B1D5......",
  "billingKey" : "36FED4C6E4AC9E29ADAF356057DB98B5CB92126B1D52E87577...."
}
```

#### **응답코드**

| Response Code      | Response Message     | Description                      |
| ------------------ | -------------------- | -------------------------------- |
| Success            | 빈값                   | 결제성공                             |
| Fail               | 설명참조                 | 각 PG사 및 내부 시스템 오류에 대한 원인을 전달합니다. |
| UserCancel         | 결제가 취소 되었습니다.        | <p><br></p>                      |
| PaymentTimeExpired | 결제시간이 초과 되었습니다.(10분) | <p><br></p>                      |

