플레이어 인벤토리
인벤토리는 사용자가 구매, 수입 혹은 지출할 수 있는 모든 아이템 세트를 뜻합니다.
엑솔라 플레이어 인벤토리는 파트너에게 다음을 허용합니다:
- 모든 플랫폼 상에서 사용자의 모든 구매 및 프리미엄 보상을 동기화.
- 엑솔라 API를 사용하여 사용자 인벤토리에서 아이템과 화폐를 부여 및 취소.
작동 방식
플레이어 인벤토리는 사용자 ID를 통해 사용자 인벤토리를 관리합니다. 사용자 식별은 엑솔라 로그인을 통해 이루어집니다. 사용자 식별 시스템을 자체적으로 구축하려면 클라이언트 API 메소드용 페이 스테이션 액세스 토큰을 사용할 수 있습니다.
플레이어 인벤토리 API 메소드를 사용하려면, 인증을 구성해야 합니다.
사용자 인벤토리는 소모품 및 비소모성 아이템을 포함할 수 있습니다. 소모품 아이템은 게임 클라이언트를 통해 여러 번 구매 및 인벤토리 추가와 제거가 가능합니다. 비소모성 아이템은 구매 및 인벤토리에의 추가가 한 번만 가능합니다. 구매 취소 및 인벤토리에서 제거는 게임 서버를 통하여 이루어집니다.
위의 구성표는 다음과 같은 플레이어 인벤토리 운용 원리를 보여줍니다:
1 - 인벤토리 가져오기
- 게임 내 사용자 식별은 엑솔라 로그인 계정 혹은 여러분 자체적인 식별 메소드를 통해 이루어집니다.
- 여러분의 어플리케이션 (클라이언트)이 Get user’s inventory 메소드를 호출하여 구매 및 보상 목록을 가져오거나 Get user’s virtual balance 메소드를 호출하여 가상통화 잔고를 확인할 수 있습니다.
- 엑솔라 인벤토리 서버는 사용자가 현재 소유 한 구매, 보상 또는 잔액에 대한 정보를 고객에게 반환합니다.
2 - 엑솔라 스토어를 통한 인게임 구매
- 게임 내에서 사용자는 엑솔라 로그인 계정 혹은 여러분 자체적인 식별 메소드를 통해 식별됩니다.
- 사용자는 엑솔라 스토어에서 구매할 수 있습니다.
- 콘텐츠 구매 이벤트는 엑솔라 인벤토리 서버로 전송되며 구매한 아이템은 자동으로 사용자 인벤토리에 부여됩니다.
3 - 서드파티 플랫폼을 통한 인 앱 구매(스팀, 플레이스테이션, 기타)
- 사용자는 플랫폼 계정을 사용하여 게임에 로그인합니다.
- 사용자는 플랫폼 결제 시스템을 통해 구매합니다.
- 게임 서버는 Grant items by purchase to users 메소드를 호출하는데 게임 내 사용자 고유 ID를 엑솔라 인벤토리 서버에 전송하여 구매를 승인합니다.
- 엑솔라 인벤토리 서버는 지정된 ID로 사용자 인벤토리에 구매 항목을 추가합니다.
4 - 사용자에게 보상 제공
- 게임 내 사용자 식별은 엑솔라 로그인 계정 혹은 여러분 자신의 식별 메소드를 통해 이루어집니다.
- 여러분의 서버는 보상을 제공하기 위하여 다음의 Grant items to users 메소드를 호출하며, 이 때 고유의 게임 내 사용자 ID를 전송합니다.
- 엑솔라 인벤토리 서버는 지정된 ID의 사용자 인벤토리에 보상을 추가합니다.
5 - 인벤토리 동기화
- 게임 내에서 사용자는 엑솔라 로그인 계정, 여러분 자체적인 식별 메소드 혹은 서드파티 플랫폼 계정을 통해 식별됩니다.
- 필요한 경우 게임 서버가 사용자 계정을 동기화합니다.
- 게임 클라이언트는 Get user’s inventory 메소드를 호출하여 사용 가능한 인게임 구매 항목을 확인하고 고유의 사용자 ID를 송부합니다.
- 엑솔라 인벤토리 서버는 특정 ID에 대하여 사용 가능한 항목의 목록을 반환합니다.
통합 절차
플레이어 인벤토리 활성화 방법:
- 엑솔라 인게임 스토어 설정.
- 인증 설정.
- 인벤토리 관리 메소드 구현.
인증 설정
보안을 위하여 게임 서버가 부여 및 취소 메소드를 호출합니다. 위에서 언급한 메소드를 위하여 다음 기본 접근 인증을 구현해야 합니다.
SDK 혹은 API를 통해 게임 클라이언트의 사용자 인벤토리 가져오기와 아이템 사용 메소드는 호출이 이루어집니다. 사용할 수 있는 인증 옵션은 다음과 같습니다:
- 만약 엑솔라 로그인이 연결된 경우, 인증 요청을 위해 엑솔라 로그인 JWT 사용합니다.
- 자체적인 식별 시스템을 갖춘 경우, 페이 스테이션 액세스 토큰을 이용하여 인증 요청합니다.
엑솔라 로그인을 통한 인증
- 게시자 계정 프로젝트를 지침에 따라 설정합니다.
- JSON 웹 토큰 혹은 OAuth 2.0 프로토콜을 통하여 인증 메소드 호출을 구현합니다.
사용자 데이터가 엑솔라 데이터 스토리지에 보관되는 경우, 다음 메소드 호출을 구현합니다:
사용자 데이터가 PlayFab 데이터 스토리지에 보관되는 경우, PlayFab 레시피 사용.
사용자 데이터를 여러분 자신이 보관하는 경우, 사용자 정의 스토리지 레시피.
페이 스테이션 액세스 토큰을 통한 인증
인증 절차:
- 앱(클라이언트)에서 서버에 인증 요청을 보냅니다.
- 여러분의 서버에서 엑솔라 서버로 판매자 ID 및 API 키를 보내고 access_token를 요청합니다.
- 엑솔라 서버는 access_token를 여러분의 서버 보냅니다.
- 여러분의 서버는 access_token를 여러분 클라이언트에게 송부합니다.
반환된 access_token는 Store API 인증 및 스토어 인터페이스 구축에 인증 토큰으로 사용됩니다.

기본 접근 인증 설정
엑솔라 API 인벤토리에 항목을 부여 및 취소하는 서버 명령은 기본 접근 인증을 사용합니다. API에의 모든 요청은 Authorization: Basic <your_authorization_basic_key> 헤더를 반드시 포함해야 하며, <your_authorization_basic_key>는 Base64 표준에 따라 인코딩된 merchant_id:api_key 쌍입니다.
엑솔라 게시자 계정으로 이동하여 project_id 및 api_key 매개변수 값을 찾습니다:
- project_id: 프로젝트 설정 > 웹훅
- api_key: 회사 설정 > API 키
- http
- curl
- php
- C#
- python
- ruby
- java
- js
POST https://store.xsolla.com/api/v2/project/{project_id}/inventory/reward
Headers:
Authorization: Basic <your_authorization_basic_key>
curl --request POST \
--url 'https://store.xsolla.com/api/v2/project/{project_id}/inventory/reward' \
--header 'authorization: Basic <your_authorization_basic_key>'
<?php
// if you use Xsolla SDK for PHP
use Xsolla\SDK\API\XsollaClient;
$xsollaClient = XsollaClient::factory(array(
'project_id' => PROJECT_ID,
'api_key' => API_KEY
));
$eventsList = $client->ListEvents(array());
// if you don’t use Xsolla SDK for PHP
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://store.xsolla.com/api/v2/project/{project_id}/inventory/rewards');
$request->setRequestMethod('POST');
$request->setHeaders(array(
'authorization' => 'Basic <your_authorization_basic_key>'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
var client = new RestClient("https://store.xsolla.com/api/v2/project/{project_id}/inventory/reward");
var request = new RestRequest(Method.POST);
request.AddHeader("authorization", "Basic <your_authorization_basic_key>");
IRestResponse response = client.Execute(request);
import http.client
conn = http.client.HTTPSConnection("api.xsolla.com")
headers = { 'authorization': "Basic <your_authorization_basic_key>" }
conn.request("POST", "https://store.xsolla.com/api/v2/project/{project_id}/inventory/reward", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
require 'uri'
require 'net/http'
url = URI("https://store.xsolla.com/api/v2/project/{project_id}/inventory/reward
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(url)
request["authorization"] = 'Basic <your_authorization_basic_key>'
response = http.request(request)
puts response.read_body
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://store.xsolla.com/api/v2/project/{project_id}/inventory/reward")
.post()
.addHeader("authorization", "Basic <your_authorization_basic_key>")
.build();
Response response = client.newCall(request).execute();
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://store.xsolla.com/api/v2/project/{project_id}/inventory/reward");
xhr.setRequestHeader("authorization", "Basic <your_authorization_basic_key>");
xhr.send(data);
인벤토리 관리 방식
인벤토리 관리 메소드는 다음 메소드 그룹을 포함합니다:
- 서버 메소드:
- 클라이언트 메소드:
Grant items to users
Grant items to users API 메소드를 구현하여 특정 아이템을 사용자 인벤토리에 추가하거나 가상 화폐를 잔고에 추가하기.
요청
- php
<?php
$uri = 'https://store.xsolla.com/api/v2/project/44056/inventory/reward';
$body = '
[
{
"user": {
"id": "0125760a-6810-11e9-84c0-42010aa80029"
},
"comment": "Quest completed",
"platform": "xsolla",
"items": [
{
"sku": "boots_1",
"quantity": 5
},
{
"sku": "crystal_pack_1",
"quantity": 3
}
]
},
{
"user": {
"id": "a7d10a4e-3f68-43cc-a6b2-893d2c68fd14"
},
"comment": "Daily reward",
"platform": "xsolla",
"items": [
{
"sku": "helmet_1",
"quantity": 2
},
{
"sku": "minigun_1",
"quantity": 3
}
]
}
]';
$auth = base64_encode('44056:your_merchant_api_key');
$headers = [
'Authorization: Basic ' . $auth,
'Content-type: application/json'
];
$request = curl_init($uri);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $body);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($request);
응답
- php
{
"count": 2,
"operations": [
{
"user_id": "0125760a-6810-11e9-84c0-42010aa80029",
"platform": "xsolla",
"comment": "Quest completed",
"items": [
{
"sku": "boots_1",
"quantity": 5
},
{
"sku": "crystal_pack_1",
"quantity": 3
}
]
},
{
"user_id": "a7d10a4e-3f68-43cc-a6b2-893d2c68fd14",
"platform": "xsolla",
"comment": "Daily reward",
"items": [
{
"sku": "helmet_1",
"quantity": 2
},
{
"sku": "minigun_1",
"quantity": 3
}
]
}
]
}
Revoke inventory items
Revoke inventory items API 메소드를 구현하여 사용자의 인벤토리에서 특정 아이템을 취소하거나 잔고에서 가상 화폐를 취소.
요청
- php
<?php
$uri = 'https://store.xsolla.com/api/v2/project/44056/inventory/revoke';
$body = '
[
{
"user": {
"id": "0125760a-6810-11e9-84c0-42010aa80029"
},
"comment": "Remove from inventory",
"items": [
{
"sku": "boots_1",
"quantity": 5
},
{
"sku": "crystal_pack_1",
"quantity": 3
}
]
},
{
"user": {
"id": "a7d10a4e-3f68-43cc-a6b2-893d2c68fd14"
},
"comment": "Cheater",
"items": [
{
"sku": "helmet_1",
"quantity": 2
},
{
"sku": "minigun_1",
"quantity": 3
}
]
}
]';
$auth = base64_encode('44056:your_merchant_api_key');
$headers = [
'Authorization: Basic ' . $auth,
'Content-type: application/json'
];
$request = curl_init($uri);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $body);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($request);
print_r($response);
응답
- php
{
"count": 2,
"operations": [
{
"user_id": "0125760a-6810-11e9-84c0-42010aa80029",
"platform": "xsolla",
"comment": "Remove from inventory",
"items": [
{
"sku": "boots_1",
"quantity": 5
},
{
"sku": "crystal_pack_1",
"quantity": 3
}
]
},
{
"user_id": "a7d10a4e-3f68-43cc-a6b2-893d2c68fd14",
"platform": "xsolla",
"comment": "Cheater",
"items": [
{
"sku": "helmet_1",
"quantity": 2
},
{
"sku": "minigun_1",
"quantity": 3
}
]
}
]
}
Grant items by purchase to users
Grant items by purchase to users API 메소드를 구현하여 서드파티 플랫폼 상에서 구매가 이루어진 경우 아이템을 사용자 인벤토리에 추가.
요청
- php
<?php
$uri = 'https://store.xsolla.com/api/v2/project/44056/inventory/purchase';
$body = '
[
{
"user": {
"id": "0125760a-6810-11e9-84c0-42010aa80029"
},
"comment": "Purchase in App Store",
"platform": "app_store_ios",
"purchase": {
"amount": "3.99",
"currency": "USD",
"external_purchase_id": "MS6TGW7023",
"external_purchase_date": "2020-01-25T05:00:00+05:00"
},
"items": [
{
"sku": "boots_1",
"quantity": 5
},
{
"sku": "crystal_pack_1",
"quantity": 3
}
]
},
{
"user": {
"id": "a7d10a4e-3f68-43cc-a6b2-893d2c68fd14"
},
"comment": "Purchase in Google Play",
"platform": "google_play",
"purchase": {
"amount": "1.99",
"currency": "EUR",
"external_purchase_id": "GPA.3357-9348-5932-89841",
"external_purchase_date": "2020-02-14T05:00:00+05:00"
},
"items": [
{
"sku": "helmet_1",
"quantity": 2
},
{
"sku": "minigun_1",
"quantity": 3
}
]
}
]';
$auth = base64_encode('44056:your_merchant_api_key');
$headers = [
'Authorization: Basic ' . $auth,
'Content-type: application/json'
];
$request = curl_init($uri);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $body);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($request);
print_r($response);
응답
- php
{
"count": 2,
"operations": [
{
"user_id": "0125760a-6810-11e9-84c0-42010aa80029",
"platform": "app_store_ios",
"comment": "Purchase in App Store",
"items": [
{
"sku": "boots_1",
"quantity": 5
},
{
"sku": "crystal_pack_1",
"quantity": 3
}
],
"order_id": 4125,
"external_purchase_id": "MS6TGW7023",
"external_purchase_date": "2020-01-25T05:00:00+05:00",
"amount": "3.99",
"currency": "USD"
},
{
"user_id": "a7d10a4e-3f68-43cc-a6b2-893d2c68fd14",
"platform": "google_play",
"comment": "Purchase in Google Play",
"items": [
{
"sku": "helmet_1",
"quantity": 2
},
{
"sku": "minigun_1",
"quantity": 3
}
],
"order_id": 4126,
"external_purchase_id": "GPA.3357-9348-5932-89841",
"external_purchase_date": "2020-02-14T05:00:00+05:00",
"amount": "1.99",
"currency": "EUR"
}
]
}
Get user’s inventory
Get user’s inventory API 메소드를 구현하여 구매 후 사용자 인벤토리에 추가된 아이템 목록 가져오기.
요청
- js
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://store.xsolla.com/api/v2/project/44056/user/inventory/items");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");
xhr.send(data);
응답
- js
{
"items": [
{
"description": "Conquer your foes with vindication using the Basic Blaster! ",
"image_url": "https://cdn.xsolla.net/img/misc/images/0c59a7698d4f66c1008b27ee752089b7.png",
"instance_id": null,
"long_description": "Conquer your foes with vindication using the Basic Blaster! Conquer your foes with vindication using the Basic Blaster! ",
"name": "Xsolla Basic Blaster 1",
"quantity": 22,
"sku": "gun_1",
"type": "virtual_good"
},
{
"description": "Protect your noggin' with style",
"image_url": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
"instance_id": null,
"long_description": "merchant_virtual_items_virtual_item_long_description_159429",
"name": "Xsolla Helmet",
"quantity": 18,
"sku": "helmet_1",
"type": "virtual_good"
}
]
}
Get user’s virtual balance
Get user’s virtual balance API 메소드를 구현하여 현재 사용자의 가상 화폐 잔고 정보를 가져오기.
요청
- js
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://store.xsolla.com/api/v2/project/44056/user/virtual_currency_balance");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");
xhr.send(data);
응답
- js
{
"items": [
{
"amount": 683,
"description": "Main in-game currency",
"image_url": "https://cdn3.xsolla.com/img/misc/images/91df536af4616519f639664854c13d75.png",
"name": "Crystals",
"sku": "crystal",
"type": "virtual_currency"
},
{
"amount": 450,
"description": "Money for in-store purchases",
"image_url": "https://cdn3.xsolla.com/img/misc/images/fda67a3feedaa706b4e4ae05a9edd6ab.png",
"name": "Gold",
"sku": "gold",
"type": "virtual_currency"
}
]
}
Consume item
사용자 인벤토리의 아이템을 소모하는 Consume item API 방식을 구현합니다.
요청
- js
let data = JSON.stringify({
"sku": "gun_1",
"quantity": 1,
"instance_id": null
});
let xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://store.xsolla.com/api/v2/project/44056/user/inventory/item/consume");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");
xhr.send(data);
오류 목록
사용자 혹은 사용자 인벤토리 오류:
코드 | 설명 | 동작 |
---|---|---|
0401-5002 | 사용자 아이템 인벤토리 추가 시 잘못된 데이터 오류. | item_id는 반드시 지정해야 하며 instance_id 혹은 quantity은 값을 입력해야 합니다null. |
0401-5003 | 사용자 ID를 지정해야 합니다. | 요구 사항에 사용자 ID가 있는지 확인하세요. |
0401-5004 | 사용자 인벤토리에서 항목을 찾을 수 없습니다. | 아이템이 인벤토리에 있는지 확인하세요. 인벤토리 상태는 Get user's inventory 메소드로 확인할 수 있습니다. |
0401-5006 | 가상화폐 잔액이 부족하여 구매할 수 없습니다. | - |
0401-5007 | 비소모성 아이템을 소모하려 시도했습니다. | - |
0401-5008 | 사용자를 찾을 수 없습니다. | - |
0401-5009 | 서드파티 플랫폼 구매 시 purchase 통과 실패. | - |
아이템 관리 오류:
코드 | 설명 | 동작 |
---|---|---|
0401-4001 | 기준에 의한 항목을 찾을 수 없습니다. | 아이템 목록은 Get user's inventory 메소드로 확인할 수 있습니다. |
Store API 관리 오류:
코드 | 설명 | 동작 |
---|---|---|
0401-1101 | 서비스 사용 불가(잘못된 주소, 연결 문제). | 시스템 상태는 status.xsolla.com에서 확인합니다; 엑솔라 고객 지원 팀 혹은 여러분의 계정 관리자에게 문의하세요 |
0401-1102 | 요청 항목 데이터 오류. | API 스펙 확인. |
0401-1016 | 요청 매개변수 중 하나에 인코딩 오류. | 요청 콘텐츠 확인. |
0401-1019 | 지원되지 않는 메소드. | 요청 확인. 지원되는 메소드는 응답에서 찾을 수 있습니다. |
0401-1020 | 판매자 키 해쉬 이용 시 인증 오류. | API 키 확인. |