はじめる

概要

エクソラ APIは次の要素を含みます:

  • 決済ステーション API — 決済インターフェースとトークン化メソッド
  • ストア API — ストアモジュールと連動するメソッド:仮想通貨、仮想アイテム、サブスクリプション、ゲームキー、プロモーション、クーポン
  • パブリッシャーアカウントAPI — パブリッシャーアカウントのプロジェクトとユーザーを管理、レポートと連動するメソッド、サポートチケット
  • ログイン API — 独自のインターフェースを使ってユーザーを認証するメソッド(統合ガイドを参照)

エクソラ APIはRESTに基づいて設計されています。APIには、予測可能なリソース指向のURLがあり、HTTPレスポンスコードを使用してAPIエラーを示します。APIは、エラーの場合を含め、常にJSON形式で応答します。

APIは、HTTP認証やHTTP動詞などの組み込みのHTTP機能を使用します。これは、既製のHTTPクライアントによって解釈できます。また、クロスオリジンリソースシェアリングをサポートしているため、クライアントWebアプリケーションから安全にアクセスできます。

エクソラ APIは次のエンドポイントのパスを使います:

  • https://api.xsolla.com —決済ステーション API、ストア API、パブリッシャーアカウント API
  • https://login.xsolla.com/api — ログイン API
ほとんどのエンドポイントのパスには、merchant_idパラメーターが含まれています。これは、アプリケーションが出品者のために機能していることを示します。

リリースノート

バージョン2.0の変更点:
  • トランザクションをエクスポートするための新しいURL:https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/reports/transactions/registry.{format}
  • 変更されたレスポンス形式:
    • キャンセルされた取引の次のフィールドには負の値が示されます:
      • 決済システム固定料
      • エクソラ収益分配(固定)
      • 売上税
      • 仮装通貨の購入額
      • シンプルチェックアウト購入金額
      • 商品購入金額
      • 本国送金費用
      • 合計割引額(固定手数料)
      • ユーザー残高控除額(残高から手数料が支払われる)
      • 決済からの配当額(決済システムからの配当額)
      • 残高からの購入金額(残高からの支払い額)
      • 残高からの配当額
      • PINコードの購入額
    • 新しいフィールドの追加:
      • 決済システムタイプ - 決済タイプ
      • VAT - ユーザーに表示されたVAT
      • VAT、% - その国のVATの割合
      • 払い戻し理由のコメント - 払い戻し理由に関するコメント
      • 国民会計 - 国民会計かどうか
    • 削除された項目:
      • 決済システムの外部料金(%)
      • 決済システムの外部手数料
      • 決済システムの外部手数料の通貨
      • 「VAT控除」が0の場合、 「VAT控除、%」は0に設定されます。
    • フィールドの名称が変更されました:
      • VAT - >VAT控除
      • VAT(%) - >VAT控除、%
    • 0の場合、次のフィールドは入力されません:
      • 仮想通貨額
      • 仮想通貨購入額
      • シンプルチェックアウト購入額
      • PINコード購入額
    • 「仮想通貨購入額」が0の場合、「仮想通貨購入通貨」は記入されません。
    • 「シンプルチェックアウト購入金額」が0の場合、「シンプルチェックアウト購入通貨」は記入されません。
    • 「PINコード購入金額」が0の場合、「PINコード購入通貨」は記入されません。「PINコード購入カートのコンテンツ」は空のままです。

リクエストとレスポンス

エクソラAPIのリクエストに必要なこと:

  • HTTPSで送信。
  • TLS 1.2以降を使用。
  • 認証パラメータを含める。
  • 追加ヘッダーContent-Type: application/jsonをPUTリクエストとPOSTリクエストに含める。

Authorization: Basic <your_authorization_basic_key>
Content-Type: application/json

既定では、すべてのリクエストが本文にJSONデータを持ち、Content-Type:application/jsonヘッダーを含むレスポンスを返します。

APIの変更点

エクソラはAPIの機能を次のように変更することがあります:

  • 新しいAPIリソースを追加する。
  • オプションのリクエストパラメータを追加する。
  • 既存のAPIレスポンスに新しいプロパティを追加する。
  • 列挙可能な値の既存のパラメータに新しい値を追加する。
  • 新しいウェブフックタイプとJSONパラメータを追加する。
  • HTTPリクエストヘッダを追加する。
  • 有効なパラメータに無効な値が含まれているリクエストを拒否する。
  • 解析ロジックが変更された場合、寛大な構文解析のために以前に受け入れられた不適切な形式のリクエストを拒否する。
  • 文書化されていない機能をいつでも追加、変更、削除することができる。

変更に関係なく、クライアントは機能し続けます。たとえば、クライアントによって認識されない新しいJSONパラメータは、通常の操作を妨げてはいけません。

バージョン管理

すべてのエクソラ APIメソッドはバージョン管理をサポートしています。現在のバージョンと互換性のない変更があるたびに新しいバージョンを発行します。バージョンは、URLの"/merchant"接頭辞に続く"v1"や"v2"などの識別子によって識別されます。

初めてAPIを使用する場合は、最新のバージョンを使用してください。バージョンを省略すると、デフォルトで最初のバージョンが使用されます。

Info: エクソラでは、同じバージョン内でのみAPIの完全性を保証することができます。

認証

エクソラAPIは基本アクセス認証を採用しています。APIに対する全リクエストは、Authorization: Basic <your_authorization_basic_key>ヘッダーを含む必要があります。<your_authorization_basic_key>merchant_id:api_keyのペアで、Base64の基準に従ってエンコードしています。

エクソラのパブリッシャーアカウントを開いてパラメータmerchant_idapi_keyの値をご確認ください:

  • merchant_id:会社設定>会社>マーチャントID
  • api_key:会社設定>APIキー

Notice: APIキーは誰にも教えないでください。こちらを使って、個人アカウントとパブリッシャーアカウントのプロジェクトにアクセスできます。
Copy
Full screen
http
  • http
  • curl
  • php
  • C#
  • python
  • ruby
  • java
  • js
GET https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/events/messages
Headers:
  Authorization: Basic <your_authorization_basic_key>
curl --request GET \
--url 'https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/events/messages' \
--header 'authorization: Basic <your_authorization_basic_key>'
<?php

// if you use Xsolla SDK for PHP
use Xsolla\SDK\API\XsollaClient;
$xsollaClient = XsollaClient::factory(array(
    'merchant_id' => MERCHANT_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://api.xsolla.com/merchant/v2/merchants/{merchant_id}/events/messages');
$request->setRequestMethod('GET');
$request->setHeaders(array(
  'authorization' => 'Basic <your_authorization_basic_key>'
));

$client->enqueue($request)->send();
$response = $client->getResponse();

echo $response->getBody();
var client = new RestClient("https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/events/messages");
var request = new RestRequest(Method.GET);
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("GET", "/merchant/v2/merchants/{merchant_id}/events/messages", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'

url = URI("https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/events/messages")

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://api.xsolla.com/merchant/v2/merchants/{merchant_id}/events/messages")
  .get()
  .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("GET", "https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/events/messages");
xhr.setRequestHeader("authorization", "Basic <your_authorization_basic_key>");

xhr.send(data);

エンドポイントの種類

エンドポイントのタイプは、どのような種類のデータを処理するのか、どのような処理を実行するのかを示します。最も一般的なアクションは次のとおりです。

アクション HTTPメソッド 説明文
作成 POST 指定されたタイプのエンティティを作成して保存します。
リスト GET クエリに一致するエンティティのリストを返します。エンティティの詳細を取得するには、最初に対応するリストのエンドポイントを使用してそのIDを見つけ、このIDを対応する取得のエンドポイントに提供します。
取得 GET 指定されたIDを持つエンティティの詳細を提供します。
置換 PUT 指定されたIDを持つエンティティのすべてのフィールドを変更します。
更新 PATCH 指定されたIDを持つエンティティの指定されたフィールドを変更します。
削除 DELETE 指定されたIDを持つエンティティを削除します。

日付形式

すべての日付は、ISO 8601に従って文字配列として指定されます。日付文字配列は、UTC(例:2013-01-15T00:00:00Z)、またはUTCオフセット(例えばUTC+8 の場合、2013-01-15T00:00:00-08:00)を指定できます。後者の場合は、夏時間を考慮してください。

ページネーション

リストのエンドポイントは、返された結果にページ区切りを付けることがあります。つまり、すべての結果を単一のレスポンスで返す代わりに、これらのエンドポイントは結果の一部と、次の結果セットにリンクするレスポンスヘッダを返す可能性があります。この目的のために、offsetトlimitのパラメータを使用します。

エラー処理

サポートされているHTTPエラーの一覧:

  • 200、201、204 — エラーはありません。
  • 400 Bad Request — これは必要なパラメーターが欠落していることを示します。詳細については、レスポンス本文を参照してください。
  • 401 Unauthorized — 有効なAPIキーがありません。
  • 402 Request Failed — パラメータは有効でしたがリクエストの実行に失敗しました。
  • 403 Forbidden — 許可されていません。詳細については、レスポンス本文を参照してください。
  • 404 Not Found — 要求された項目が見つかりません。
  • 409、422 — リクエストパラメータが無効です。
  • 412 Precondition Failed —プロジェクトはまだアクティブ化されていません(トークンの取得メソッドで使用されています)。
  • 415 Unsupported Media Type — HTTPヘッダに "Content-Type:application/json"がありません。
  • 500, 502, 503, 504 Server Errors — サーバーエラーが起きました。

エクソラは、従来のHTTP レスポンスコードを使用して、APIリクエストが成功したかどうかを示します。一般的に、2xxは成功を示し、4xxは提供された情報のエラー(例えば、必要なパラメータの欠落、認証の失敗など)を示し、5xxはエクソラのサーバに関する問題を示します。

しかし、すべてのエラーがHTTPレスポンスコードと完全に一致するわけではありません。たとえば、リクエストが有効であったにもかかわらず失敗した場合、APIは 422エラーコードを返します。

すべてのAPIエラーレスポンスは、JSONオブジェクトに次のフィールドを提供します。

{< T "api_table_name" >}} 種類 説明文
http_status_code integer HTTPコード。
message string 人間が判読できるエラーの説明。このメッセージは常に英語で表示されます。将来的に変更される可能性があるため、特定のエラーのためにこの値に頼らないでください。
extended_message string より詳細なエラーの説明。
request_id string トラブルシューティングに使用する固有のリクエストID。
{
    "http_status_code": 500,
    "message": "Internal Server Error",
    "extended_message": null,
    "request_id": "6445b85"
}

トークン

決済をより安全に行うために、エクソラ APIは、決済ページで直接HTTP GETリクエストを使用してデータを受け取る代わりに、決済パラメータの一覧を含むトークンを使用します。決済ページを呼び出す前に、新しいトークンを取得する必要があります。トークンの有効期間は24時間です。

トークンの取得

HTTPリクエスト

POST https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/token

エクソラは任意のユーザーパラメータでトークンを作成しますこれらのパラメータを送信すると、決済後に当社がこれらのパラメータを受信します。トークンにはすべてのユーザーパラメータが含まれます。

パラメータ 種類 説明文
user
object ユーザーの詳細(オブジェクト)。
user.id
object ユーザーID。 必須。
user.id.value
string ユーザーID。
user.name
object ユーザーのニックネームに関するデータを含むオブジェクト。
user.name.value
string ユーザーのスクリーン名。
user.email
object ユーザーのEメール(オブジェクト)。
user.email.value
string ユーザーのメールアドレス。RFC 822 で規定された書式を厳密に守らなければなりません。
user.phone
object ユーザーの電話番号(オブジェクト)。
user.phone.value
string ユーザーの電話番号。
user.country
object ユーザーの国(オブジェクト)。
user.country.value
string ユーザーの国。2文字の国コード(大文字)は、ISO 3166-1 alpha-2 standardに従って使用されます。
user.country.allow_modify
boolean ユーザーが決済インターフェースで国を変更できるかどうか示します。既定では'false'です。
user.attributes
object キー値ペアの有効なJSONセットとして表される、アイテムリストをフィルタリングするためのユーザー属性。
user.steam_id
object ユーザーのSteam ID(オブジェクト)。
user.steam_id.value
string Steam ID。
user.tracking_id
object ユーザー追跡ID(オブジェクト)。
user.tracking_id.value
string 固有の追跡ID(マーケティングキャンペーンで使用)。
user.public_id.value
string ユーザーを一意に識別し、ユーザーに知られているパラメーター(電子メール、スクリーン名など)。ユーザーがゲームストア外で購入することを可能にします(例えば、電子キオスクを介して)。
user.utm
object トラフィック属性(オブジェクト)。
user.utm.utm_source
string トラフィックソース。
user.utm.utm_medium
string トラフィックチャネル(コンテンツ広告、メディア広告、Eメールリストなど)。
user.utm.utm_campaign
string カタカナ表記、または英語に翻訳されたキャンペーンのタイトル。
user.utm.utm_term
string キャンペーンキーワード。設定すると、統計は特定の検索クエリではなく広告ターゲティングに使用されるキーワードに基づきます。Googleアナリティクスでは、指定されたutm_termは一般検索語句レポートの一部です。
user.utm.utm_content
string キャンペーンのコンテンツ。
boolean ユーザーが法人かを示します。
object 法人情報を含むオブジェクトです。 user.is_legal が「true」の場合は、オブジェクトとその全パラメーターが必要です。
string 法人のフルネームです。
string 最後まで記載した法的住所です。
string 納税者個別のID。
string 法人の国。 ISO 3166-1 alpha-2 に従って大文字2文字の国コードを使用します。
settings
object カスタムプロジェクト設定(オブジェクト)。
settings.external_id
string トランザクションの外部ID。
settings.project_id
integer ゲームのエクソラ ID。パブリッシャ―アカウントにあります。 必須。
settings.language
string インタフェース言語。ISO 639-1の2文字の小文字の言語コード。
settings.return_url
string ページを使用して決済後にユーザーをリダイレクトします。パラメーター'user_id'、'foreigninvoice'、'invoice_id'と'status'は、自動的にリンクに追加されます。
settings.currency
string 標準の決済通貨。ISO 4217 3文字通貨コード。
settings.mode
string 決済処理をテストするには、"sandbox"に設定します。この場合、https://sandbox-secure.xsolla.comを使用してテスト決済インターフェースにアクセスしてください。
settings.payment_method
integer 決済方法のID。
settings.payment_widget
string 支払いウィジェットです。paybycashまたはgiftcardが選択できます。このパラメータが設定されている場合、ユーザーはPay by CashまたはGift Cardsウィジェットにそれぞれリダイレクトされます。
settings.ui
object インタフェース設定(オブジェクト)。
settings.ui.theme
string 決済インターフェースのテーマ。'default'(既定)または 'default_dark'に指定できます。
settings.ui.size
string 決済インターフェースのサイズ。に指定できます:
  • small:決済インターフェースの最小サイズです。ウィンドウサイズが厳密に制限されている場合は、この値を使用します(寸法:620 x 630)
  • medium:推奨サイズ。この値を使用して、ライトボックスに決済インターフェイスを表示します(寸法:740 x 760)
  • large:決済インターフェイスを新しいウィンドウまたはタブに表示するのに最適なサイズ(寸法:820 x 840)
settings.ui.version
string デバイスの種類。'desktop'(既定)または'mobile'に指定できます。
settings.ui.desktop
object デスクトップバージョン(オブジェクト)のインターフェース設定。
settings.ui.desktop.header
object ヘッダー設定(オブジェクト)。
settings.ui.desktop.header.is_visible
boolean 決済インターフェースにヘッダーを表示するかどうかを示します。
boolean 'true'の場合は、ヘッダーにロゴが表示されます(まず、アカウントマネージャーに画像を提供してください)。
settings.ui.desktop.header.visible_name
boolean ヘッダーにプロジェクト名を表示するかどうかを示します。
settings.ui.desktop.header.visible_purchase
boolean ヘッダーに購入説明(purchase.description.value)を表示するか示します。デフォルトは「true」です。
settings.ui.desktop.header.type
string ヘッダーを表示する方法。'compact'(プロジェクト名とユーザーIDを隠す)または 'normal'(既定)に指定できます。
settings.ui.desktop.header.close_button
boolean デスクトップ版決済ステーションに 閉じる ボタンを表示する設定。このボタンは決済ステーションを閉じて、"settings.return_url"パラメーターで指定されたURLにユーザーをリダイレクトします。デフォルトは「_False_」です。
settings.ui.desktop.subscription_list
object サブスクリプションプラン(オブジェクト)の一覧の設定。
settings.ui.desktop.subscription_list.layout
string テンプレートの一覧。'list'(既定)または 'grid'に指定できます。
settings.ui.desktop.subscription_list.description
string 決済インターフェースの利用可能なサブスクリプションプランの一覧上に表示されるテキスト。
settings.ui.desktop.subscription_list.display_local_price
boolean 'true'の場合、ユーザーの現地通貨が購読プランに設定されている通貨と異なる場合、ユーザーは両方の価格を見ることができます。1つは現地通貨で、もう1つは基本通貨で表示されます。
settings.ui.desktop.virtual_item_list
object 仮想アイテム(オブジェクト)の一覧の設定。
settings.ui.desktop.virtual_item_list.layout
string テンプレートの一覧。'list'(既定)または 'grid'に指定できます。
settings.ui.desktop.virtual_item_list.button_with_price
boolean 'true'の場合は、価格がボタンに表示されます。'false'の場合は、価格はボタンの左側に表示されます。既定では'false'です。
settings.ui.desktop.virtual_item_list.view
string 縦方向または横方向のメニューに仮想アイテムのグループを表示しましょう。'horizontal_navigation'あるいは'vertical' (既定) にできます。
settings.ui.desktop.virtual_currency_list
object 仮想通貨(オブジェクト)の一覧の設定。
settings.ui.desktop.virtual_currency_list.description
string 決済インターフェースの一覧の上に表示するテキスト。
settings.ui.desktop.virtual_currency_list.button_with_price
boolean 'true'の場合は、価格がボタンに表示されます。'false'の場合は、価格はボタンの左側に表示されます。既定では'false'です。
settings.ui.header.visible_virtual_currency_balance
boolean この要素を決済インターフェースで非示にできるかどうかを示します。既定では 'true'です。
settings.ui.mobile.mode
string ユーザーは、保存された決済方法を使用してのみ決済を行うことができます。'saved_accounts'に指定できます。
settings.ui.mobile.header.close_button
boolean プッシュボタンを表示するかどうかを指定するには、決済インタフェースを閉じ、ユーザーは'settings.return_url'パラメーターで指定されたURL(既定では'false')にリダイレクトされます。
boolean モバイル版の決済インターフェースでフッターを非表示にするかどうかを示します。
settings.ui.license_url
string EULAへのリンク。
settings.ui.components
object メニュー設定(オブジェクト)。
settings.ui.components.virtual_items
object 仮想アイテムサブメニュー。
settings.ui.components.virtual_items.order
integer メニュー内のサブメニューの位置。
settings.ui.components.virtual_items.hidden
boolean サブメニューを表示するかどうかを示します。
settings.ui.components.virtual_items.selected_group
string 仮想アイテムタブを開いた後に表示するグループ。
settings.ui.components.virtual_items.selected_item
string 仮想アイテムタブを開いた後に表示されるアイテム(アイテムSKU)。
settings.ui.components.virtual_currency
object 仮想通貨サブメニュー。
settings.ui.components.virtual_currency.custom_amount
boolean ユーザーが任意の数の仮想通貨を決済インターフェースに入力できるかどうかを示します。
settings.ui.components.virtual_currency.order
integer メニュー内のサブメニューの位置。
settings.ui.components.virtual_currency.hidden
boolean サブメニューを表示するかどうかを示します。
settings.ui.components.subscriptions
object サブスクリプションプランのサブメニュー(オブジェクト)。
settings.ui.components.subscriptions.order
integer メニュー内のサブメニューの位置。
settings.ui.components.subscriptions.hidden
boolean サブメニューを表示するかどうかを示します。
settings.ui.mode
string ユーザーアカウントの決済インターフェース。'user_account'のみに指定できます:ヘッダーにはユーザーアカウントのナビゲーションメニューのみが含まれています。ユーザーは商品を選択したり、決済を行うことはできません。このモードは、デスクトップ上でのみ使用できます。
settings.ui.user_account
object ユーザーアカウントの詳細(オブジェクト)。
settings.ui.user_account.info
object 「マイアカウント」ページ。
settings.ui.user_account.info.order
integer メニュー内のサブメニューの位置。
settings.ui.user_account.info.enable
boolean サブメニューを表示するかどうかを示します。既定では'false'です。
settings.ui.user_account.history
object 履歴サブメニュー。
settings.ui.user_account.history.order
integer メニュー内のサブメニューの位置。
settings.ui.user_account.history.enable
boolean サブメニューを表示するかどうかを示します。既定では'false'です。
settings.ui.user_account.payment_accounts
object 「決済アカウント」サブメニュー。
settings.ui.user_account.payment_accounts.order
integer メニュー内のサブメニューの位置。
settings.ui.user_account.payment_accounts.enable
boolean サブメニューを表示するかどうかを示します。既定では'false'です。
settings.ui.user_account.subscriptions
object 「サブスクリプションの管理」サブメニュー。
settings.ui.user_account.subscriptions.order
integer メニュー内のサブメニューの位置。
settings.ui.user_account.subscriptions.enable
boolean サブメニューを表示するかどうかを示します。既定では'false'です。
settings.shipping_enabled
boolean 配送先住所の入力フォームの表示/非表示を切替。既定では'false'です。
purchase
object 購入の詳細を含むオブジェクト。
purchase.virtual_currency
object 仮想通貨の詳細を含むオブジェクト。
purchase.virtual_currency.quantity
float 仮想通貨での購入金額。
purchase.virtual_currency.currency
string すべての計算で使用する仮想通貨パッケージの通貨。
purchase.virtual_items
object 購入時の仮想アイテムに関するデータを持つオブジェクト。
purchase.virtual_items.currency
string すべての計算で使用する注文アイテムの通貨。
purchase.virtual_items.items
array アイテムデータ(配列)。
purchase.virtual_items.items.sku
string アイテムID。
purchase.virtual_items.items.amount
integer アイテム数量。
purchase.virtual_items.available_groups
array アイテムグループのID(配列)。決済インターフェースには、指定したグループ内のアイテムのみが含まれます。
purchase.subscription
object サブスクリプションデータ(オブジェクト)。
purchase.subscription.plan_id
string プランID。
purchase.subscription.operation
string ユーザーのサブスクリプションプランに適用される操作の種類。サブスクリプションプランを変更する場合は、値「change_plan」を渡します。purchase.subscription.plan_idパラメーターに新しいプランIDを指定してください。
purchase.subscription.product_id
string 製品ID。
purchase.subscription.currency
string すべての計算で使用するサブスクリプションプランの通貨。
purchase.subscription.available_plans
array 決済インターフェイスに表示するサブスクリプションプラン(配列)。
purchase.subscription.trial_days
integer 試用期間(日)。
purchase.pin_codes
object ゲームキー(オブジェクト)。
purchase.pin_codes.currency
string すべての計算で使用する注文内のゲームキーの通貨。
purchase.pin_codes.codes
array ゲームキー(配列)。
purchase.pin_codes.codes.digital_content
string パブリッシャ―アカウントに設定されたゲームのSKU。
purchase.pin_codes.codes.drm
string DRMプラットフォームはゲームの配布に使用できます。'steam'、'playstation'、'xbox'、'uplay'、'origin'、'drmfree'、'gog'、'epicgames'、'nintendo_eshop'、'discord_game_store'、'oculus' のいずれかを指定できます。パブリッシャーアカウントで必要なDRMを設定していることをご確認ください。トークンに渡されなかった場合は、決済インターフェースでユーザーが選択します。
purchase.pin_codes.upgrade
object アップグレードデータを持つオブジェクト。
purchase.pin_codes.upgrade.id_user_history
integer エントリのIDで、ユーザーとパッケージのデータを含みます。
purchase.pin_codes.upgrade.id
integer アップグレードID。
purchase.checkout
object チェックアウトの詳細(オブジェクト)。
purchase.checkout.currency
string 購入通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.checkout.amount
float 購入金額。
purchase.description
object 購入の説明(オブジェクト)。
purchase.description.value
string 一般購入の説明は決済UIおよびEメールのレシートに含めるようにします。各アイテムを個別に通す場合にはpurchase.description.items配列のパラメータを使用します。
purchase.description.items
array of objects アイテム(配列)。
purchase.description.items.name
string アイテム名。
purchase.description.items.image_url
string アイテムアイコンへのリンク。
purchase.description.items.description
string 購入時のアイテムの説明。
purchase.description.items.price
object アイテムの価格を持つオブジェクト。
purchase.description.items.price.amount
string アイテムの価格。
purchase.description.items.quantity
integer 購入時のアイテム数。
purchase.description.items.is_bonus
boolean 無料かボーナスで製品を入手可能にする。デフォルトは'false'です。
purchase.gift
object 贈り物の詳細(オブジェクト)。
purchase.gift.giver_id
string 贈り主のID。
purchase.gift.message
string 贈り主からのメッセージ。
purchase.gift.hide_giver_from_receiver
string 贈り主の情報を受取り側に公開するかどうか('true'がデフォルトです)既定では 'true'です。
purchase.gift.friends
array フレンドのデータを配列。
purchase.gift.friends.id
string 贈り物の受取人のID。
purchase.gift.friends.name
string 贈り物の受取人のニックネーム。
purchase.gift.friends.email
string 贈り物を受け取る人のメールアドレス。
purchase.coupon_code
object 割引プロモーションコードまたは購入時のボーナスに関する情報(オブジェクト)。
purchase.coupon_code.value
string プロモーションコードの値。
purchase.coupon_code.hidden
boolean 決済インタフェースでプロモーションコードが入力されているフィールドを非表示にする。 デフォルト設定ではFALSE.
custom_parameters
object カスタムパラメータ、アイテムリストをフィルタリングするためのユーザー属性。

いずれかのパラメータが間違った形式で送信されたか、タイプが間違っている場合、トークンは発行されません。JSON本体にエラー記述とともに422 HTTPコードが送られます。この'extended_message'は、どのパラメータが間違っていたかを示します。

{
    "extended_message": {
        "global_errors": [],
        "property_errors": {
            "settings.project_id": [
                "string value found, but an integer is required"
            ]
        }
    }
}

Copy
Full screen
http
  • http
  • curl
  • php
  • C#
  • python
  • ruby
  • java
  • js
リクエスト
POST https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/token

Headers:
  Authorization: Basic <your_authorization_basic_key>
Content-Type: application/json

Body:
  {
  "purchase": {
    "virtual_currency": {
      "quantity": 100
    },
    "virtual_items": {
      "items": [
        {
          "amount": 1,
          "sku": "SKU01"
        }
      ]
    }
  },
  "settings": {
    "currency": "USD",
    "language": "en",
    "project_id": 16184,
    "ui": {
      "components": {
        "virtual_currency": {
          "custom_amount": true
        }
      },
      "desktop": {
        "virtual_item_list": {
          "button_with_price": true,
          "layout": "list"
        }
      },
      "size": "medium"
    }
  },
  "user": {
    "country": {
      "allow_modify": true,
      "value": "US"
    },
    "email": {
      "value": "john.smith@mail.com"
    },
    "id": {
      "value": "user_2"
    },
    "name": {
      "value": "John Smith"
    }
  }
}
curl --request POST \
  --url https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/token \
  --header 'authorization: Basic <your_authorization_basic_key>' \
  --header 'content-type: application/json' \
  --data '{"user":{"id":{"value":"user_2"},"name":{"value":"John Smith"},"email":{"value":"john.smith@mail.com"},"country":{"value":"US","allow_modify":true}},"settings":{"project_id":16184,"currency":"USD","language":"en","ui":{"size":"medium","desktop":{"virtual_item_list":{"layout":"list","button_with_price":true}},"components":{"virtual_currency":{"custom_amount":true}}}},"purchase":{"virtual_currency":{"quantity":100},"virtual_items":{"items":[{"sku":"SKU01","amount":1}]}}}'
<?php

$client = new http\Client;
$request = new http\Client\Request;

$body = new http\Message\Body;
$body->append('{"user":{"id":{"value":"user_2"},"name":{"value":"John Smith"},"email":{"value":"john.smith@mail.com"},"country":{"value":"US","allow_modify":true}},"settings":{"project_id":16184,"currency":"USD","language":"en","ui":{"size":"medium","desktop":{"virtual_item_list":{"layout":"list","button_with_price":true}},"components":{"virtual_currency":{"custom_amount":true}}}},"purchase":{"virtual_currency":{"quantity":100},"virtual_items":{"items":[{"sku":"SKU01","amount":1}]}}}');

$request->setRequestUrl('https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/token');
$request->setRequestMethod('POST');
$request->setBody($body);

$request->setHeaders(array(
  'authorization' => 'Basic <your_authorization_basic_key>',
  'content-type' => 'application/json'
));

$client->enqueue($request)->send();
$response = $client->getResponse();

echo $response->getBody();
var client = new RestClient("https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/token");
var request = new RestRequest(Method.POST);
request.AddHeader("authorization", "Basic <your_authorization_basic_key>");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"user\":{\"id\":{\"value\":\"user_2\"},\"name\":{\"value\":\"John Smith\"},\"email\":{\"value\":\"john.smith@mail.com\"},\"country\":{\"value\":\"US\",\"allow_modify\":true}},\"settings\":{\"project_id\":16184,\"currency\":\"USD\",\"language\":\"en\",\"ui\":{\"size\":\"medium\",\"desktop\":{\"virtual_item_list\":{\"layout\":\"list\",\"button_with_price\":true}},\"components\":{\"virtual_currency\":{\"custom_amount\":true}}}},\"purchase\":{\"virtual_currency\":{\"quantity\":100},\"virtual_items\":{\"items\":[{\"sku\":\"SKU01\",\"amount\":1}]}}}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
import http.client

conn = http.client.HTTPSConnection("api.xsolla.com")

payload = "{\"user\":{\"id\":{\"value\":\"user_2\"},\"name\":{\"value\":\"John Smith\"},\"email\":{\"value\":\"john.smith@mail.com\"},\"country\":{\"value\":\"US\",\"allow_modify\":true}},\"settings\":{\"project_id\":16184,\"currency\":\"USD\",\"language\":\"en\",\"ui\":{\"size\":\"medium\",\"desktop\":{\"virtual_item_list\":{\"layout\":\"list\",\"button_with_price\":true}},\"components\":{\"virtual_currency\":{\"custom_amount\":true}}}},\"purchase\":{\"virtual_currency\":{\"quantity\":100},\"virtual_items\":{\"items\":[{\"sku\":\"SKU01\",\"amount\":1}]}}}"

headers = {
    'content-type': "application/json",
    'authorization': "Basic <your_authorization_basic_key>"
    }

conn.request("POST", "/merchant/v2/merchants/{merchant_id}/token", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'

url = URI("https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/token")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["content-type"] = 'application/json'
request["authorization"] = 'Basic <your_authorization_basic_key>'
request.body = "{\"user\":{\"id\":{\"value\":\"user_2\"},\"name\":{\"value\":\"John Smith\"},\"email\":{\"value\":\"john.smith@mail.com\"},\"country\":{\"value\":\"US\",\"allow_modify\":true}},\"settings\":{\"project_id\":16184,\"currency\":\"USD\",\"language\":\"en\",\"ui\":{\"size\":\"medium\",\"desktop\":{\"virtual_item_list\":{\"layout\":\"list\",\"button_with_price\":true}},\"components\":{\"virtual_currency\":{\"custom_amount\":true}}}},\"purchase\":{\"virtual_currency\":{\"quantity\":100},\"virtual_items\":{\"items\":[{\"sku\":\"SKU01\",\"amount\":1}]}}}"

response = http.request(request)
puts response.read_body
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"user\":{\"id\":{\"value\":\"user_2\"},\"name\":{\"value\":\"John Smith\"},\"email\":{\"value\":\"john.smith@mail.com\"},\"country\":{\"value\":\"US\",\"allow_modify\":true}},\"settings\":{\"project_id\":16184,\"currency\":\"USD\",\"language\":\"en\",\"ui\":{\"size\":\"medium\",\"desktop\":{\"virtual_item_list\":{\"layout\":\"list\",\"button_with_price\":true}},\"components\":{\"virtual_currency\":{\"custom_amount\":true}}}},\"purchase\":{\"virtual_currency\":{\"quantity\":100},\"virtual_items\":{\"items\":[{\"sku\":\"SKU01\",\"amount\":1}]}}}");
Request request = new Request.Builder()
  .url("https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/token")
  .post(body)
  .addHeader("content-type", "application/json")
  .addHeader("authorization", "Basic <your_authorization_basic_key>")
  .build();

Response response = client.newCall(request).execute();
var data = JSON.stringify({
  "user": {
    "id": {
      "value": "user_2"
    },
    "name": {
      "value": "John Smith"
    },
    "email": {
      "value": "john.smith@mail.com"
    },
    "country": {
      "value": "US",
      "allow_modify": true
    }
  },
  "settings": {
    "project_id": 16184,
    "currency": "USD",
    "language": "en",
    "ui": {
      "size": "medium",
      "desktop": {
        "virtual_item_list": {
          "layout": "list",
          "button_with_price": true
        }
      },
      "components": {
        "virtual_currency": {
          "custom_amount": true
        }
      }
    }
  },
  "purchase": {
    "virtual_currency": {
      "quantity": 100
    },
    "virtual_items": {
      "items": [
        {
          "sku": "SKU01",
          "amount": 1
        }
      ]
    }
  }
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://api.xsolla.com/merchant/v2/merchants/{merchant_id}/token");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("authorization", "Basic <your_authorization_basic_key>");

xhr.send(data);
レスポンス
{
  "token": "eop57k1boA7nnYPtewZ6KEXJyJADEwRT"
}
{
  "token": "eop57k1boA7nnYPtewZ6KEXJyJADEwRT"
}
{
  "token": "eop57k1boA7nnYPtewZ6KEXJyJADEwRT"
}
{
  "token": "eop57k1boA7nnYPtewZ6KEXJyJADEwRT"
}
{
  "token": "eop57k1boA7nnYPtewZ6KEXJyJADEwRT"
}
{
  "token": "eop57k1boA7nnYPtewZ6KEXJyJADEwRT"
}
{
  "token": "eop57k1boA7nnYPtewZ6KEXJyJADEwRT"
}
{
  "token": "eop57k1boA7nnYPtewZ6KEXJyJADEwRT"
}

その他のパラメータ一覧

custom_parametersオブジェクトのトークンに追加パラメータを渡して、不正対策フィルタを設定できます。推奨のパラメータを以下の表で確認してください。必要に応じて一覧を全文表示できます。

レシピをご覧ください

パラメータ 種類 説明文
registration_date
string ISO 8601形式のアカウント作成日。
total_hours
integer 合計ゲーム時間数。
total_characters
integer ゲーム内のキャラクターの数。
social_networks_added
boolean プレイヤーがソーシャルメディアプロファイルを接続しているかを示します。
profile_image_added
boolean プレイヤーがプロフィール画像をアップロードしたかどうかを示します。
active_date
string ISO 8601形式の最終閲覧日。
total_friends
integer 友達の数。
additional_verification
boolean プレイヤーがアカウント承認手続きを使用するかどうかを示します。
win_rate
integer 勝率。
last_change_password_date
string ISO 8601に沿ったパスワード最終更新日。
chat_activity
boolean プレイヤーがチャット機能を使用するかどうかを示します。
forum_activity
boolean プレイヤーがフォーラム機能を使用するかどうかを示す。
total_bans
integer チャットやフォーラムでプレイヤーが禁止された回数。
profile_completed
boolean プレイヤーがプロフィールに追加情報を入力したかどうかを示します。
notifications_enabled
boolean プレイヤーが通知を有効化したかどうかを示します。
user_level
integer プレイヤーのレベル、評判、またはランク。
karma_points
integer プレイヤーのカルマ値。
total_sum
float 総支払額。
non_premium_currency
float 非プレミアム通貨の金額。
total_game_events
integer プレイヤーが参加したゲーム内イベントの数。
total_gifts
integer プレイヤーが送受信したゲーム内の贈り物の数。
tutorial_completed
boolean プレイヤーがゲームのチュートリアルを完了したかどうかを示します。
completed_tasks
integer 完了したタスクや目標の数。
items_used
boolean プレイヤーが購入したゲームアイテムを使用するかどうかを示します。
pvp_activity
boolean プレイヤーが対人戦に参加するかどうかを示します。
total_clans
integer プレイヤーがメンバーになっているクランの数。
unlocked_achievements
integer 達成した実績の数。
total_inventory_value
float インベントリ総額(ゲーム内通貨)。
character_customized
boolean プレイヤーがキャラクターをカスタマイズしたかどうかを示します。
session_time
string ISO 8601に沿った平均セッション時間。

ウェブフック

概要

ウェブフックを使用すると、エクソラトランザクションに発生したイベントの通知を受け取ることができます。ウェブフックを使用して、ステータスやその他のトランザクション関連情報の提供など、バックエンド機能や補足機能を自動化してください。

ウェブフックは以下の目的で使用します。

  • 仮想通貨や商品の購入、銀行カードでの決済など、
  • 定期決済やサブスクリプション、
  • 取引関連のチャージバック/払い戻しなどの決済。

ほとんどの場合、ウェブフックはウェブサイト上のユーザアクションによってトリガーされます。しかし、他のアクションによってトリガーされることもあります。たとえば、ウェブサイトのバックエンドプロセスによってAPIメソッドが呼び出されて決済が払い戻されたり、決済システムが請求額の訂正に関する通知を送信したりすることがあります。

ウェブフックを受信して処理するには、いわゆるリスナまたはハンドラを作成または使用する必要があります。これは、ウェブフックを待ち、通常は内部ワークフローに渡し、適切に応答するプログラムです。

たとえば、ウェブフック受信後に、次の操作を実行できます。

  • ユーザーの残高に入金、
  • ユーザーにアイテムを与える、
  • サブスクリプションのアクティブ化、
  • 詐欺行為を行うユーザーをブロックするなど。

次のIPアドレスのウェブフックを使う:185.30.20.0/24, 185.30.21.0/24

データベースには、同じIDによる2つの正常なトランザクションが含まれていないようにしてください。リスナーが既存のトランザクションIDを持つウェブフックを受け取った場合、リスナーはそのトランザクションの最新の結果を返す必要があります。ユーザーを2回課金したり、データベースに重複したレコードを作成しないようにしてください。

リスナーがエクソラから送られたすべてのウェブフックを受け取ることは、保証できません。インターネット接続は100%信頼できるものではないため、ウェブフックが時間通りに、または全く機能しないこともあります。これらの問題に対処するために、リトライメカニズムが提供されており、リスナーが受信確認を確認するまで、さまざまな間隔で送信失敗したメッセージを再送信します。繰り返しのウェブフックは、前のウェブフックから12時間以内に送信されます。再試行の最大回数は12回です。

Note: 接続の問題が、紛失、遅延、または重複ウェブフックにつながる可能性はありますが、最も一般的な原因はリスナ自体のロジックの誤りです。

署名リクエスト

デジタル署名は、安全なデータ伝送を可能にします。署名を生成するには、(1)リクエストのJSON本体をプロジェクトの秘密鍵と連結し、(2)結果の文字列に

作成された署名がHTTPヘッダーで渡されたものと一致することを確認してください。

Copy
Full screen
http
  • http
  • curl
リクエスト
POST /your_uri HTTP/1.1
Host: your.host
Accept: application/json
Content-Type: application/json
Content-Length: 165
Authorization: Signature 52eac2713985e212351610d008e7e14fae46f902

{"notification_type":"user_validation","user":{"ip":"127.0.0.1","phone":"18777976552","email":"email@example.com","id":1234567,"name":"Xsolla User","country":"US"}}
$curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Authorization: Signature 52eac2713985e212351610d008e7e14fae46f902' \
-d '{"notification_type":"user_validation","user":{"ip":"127.0.0.1","phone":"18777976552","email":"email@example.com","id":1234567,"name":"Xsolla User","country":"US"}}'

レスポンス

エクソラ APIは、成功したリクエストと失敗したリクエストのための従来のHTTPレスポンスコードを受け入れます。コード204は、処理が成功したことを示します。コード400を返します。サーバーでの一時的なエラーにはコード500を使用してください。

ウェブフック一覧

通知のタイプは、notification_type parameterで送信されます。

通知タイプ 説明
user_validation ユーザーがゲームに存在するかどうかを確認。
user_search パブリックユーザーIDに基づいてユーザー情報を取得。
payment ユーザーが決済を完了したときに送信。
refund 何らかの理由で決済をキャンセルする必要がある場合に送信。
afs_reject AFSチェック中にトランザクションが拒否されると、エクソラはトランザクションの詳細をURL ウェブフックに送信します。
create_subscription ユーザーがサブスクリプションを作成すると送信。
update_subscription サブスクリプションが更新または変更されたときに送信。
cancel_subscription サブスクリプションがキャンセルされたときに送信。
get_pincode エクソラ APIがゲームキーを取得する必要があるときに送信。
user_balance_operation ユーザーの残高が変更されたときに送信(操作の種類はoperation_typeで送信されます)。
redeem_key ユーザーがキーを有効にすると送信。
upgrade_refund アップグレードがキャンセルされたときに送信します。
inventory_get ゲームインベントリのアイテムリストを取得して流通市場へ送信。
inventory_pull ゲームインベントリのアイテムを取得して流通市場へ送信。
inventory_push 流通市場からゲームインベントリへアイテムを送信。

ユーザーの確認

ユーザーがゲームに存在することを確認するために送信されます。

パラメータ 種類 説明文
user
object ユーザーの詳細(オブジェクト)。
user.ip
string ユーザーIP。
user.phone
string ユーザーの電話。
user.email
string ユーザーのEメール。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
user.country
string ユーザーの国。2文字の国コード(大文字)は、ISO 3166-1 alpha-2に従って使用されます。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'notification_type' => 'user_validation',
    'user' => array(
        'ip' => '127.0.0.1',
        'phone' => '18777976552',
        'email'=> 'email@example.com',
        'id'=> '1234567',
        'country' => 'US'
    )
);
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "notification_type":"user_validation",
    "user": {
        "ip": "127.0.0.1",
        "phone": "18777976552",
        "email": "email@example.com",
        "id": "1234567",
        "name": "Xsolla User",
        "country": "US"
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
    "notification_type":"user_validation",
    "user": {
        "ip": "127.0.0.1",
        "phone": "18777976552",
        "email": "email@example.com",
        "id": "1234567",
        "name": "Xsolla User",
        "country": "US"
    }
}'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message->isUserValidation()) {
       $userArray = $message->getUser();
       $userId = $message->getUserId();
       $messageArray = $message->toArray();
       //TODO if user not found, you should throw InvalidUserException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content
Public User IDを使用してユーザーの詳細を取得するために送信されます。これにより、ユーザはゲームストア外で(例えば、現金キオスクを介して)購入することができます。

パラメータ 種類 説明文
notification_type
string 通知の種類。 必須。
user
object ユーザーの詳細(オブジェクト)。 必須。
user.public_id
string Public User ID。
user.id
string ユーザーID。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'notification_type' => 'user_search',
    'user' => array(
        'public_id' => 'public_email@example.com'
    )
);
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "notification_type":"user_search",
    "user": {
        "public_id": "public_email@example.com"
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
    "notification_type":"user_search",
    "user": {
        "public_id": "public_email@example.com"
    }
}'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;

$callback = function (Message $message) {
    if ($message instanceof \Xsolla\SDK\Webhook\Message\UserSearchMessage) {
        $userArray = $message->getUser();
        $userPublicId = $message->getUserPublicId();
        // TODO get a user from your database and fill the user data to model.
        $user = new \Xsolla\SDK\Webhook\User();
        $user->setId('user_id')
            ->setPublicId($userPublicId)
            ->setEmail('user_email') //Optional field
            ->setPhone('user_phone') //Optional field
            ->setName('user_name'); //Optional field
        //TODO if user not found, you should throw InvalidUserException
        return new \Xsolla\SDK\Webhook\Response\UserResponse($user);
    }
};
$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 200 OK
Content-Type: application/json

{
    "user": {
        "public_id": "public_email@example.com",
        "phone": "18777976552",
        "email": "email@example.com",
        "id": "1234567",
        "name": "Xsolla User"
    }
}
{
    "user": {
        "public_id": "public_email@example.com",
        "phone": "18777976552",
        "email": "email@example.com",
        "id": "1234567",
        "name": "Xsolla User"
    }
}

支払い

ユーザーが決済を完了したときに送信。支払いの詳細を含む。

パラメータ 種類 説明文
notification_type
string 通知の種類。 必須。
purchase
object 購入の詳細を含むオブジェクト。
purchase.virtual_currency
object 購入する仮想通貨(オブジェクト)。
purchase.virtual_currency.name
string 仮想通貨名。
purchase.virtual_currency.sku
string 仮想通貨パッケージSKU(仮想通貨パッケージに設定されている場合)。
purchase.virtual_currency.quantity
float 数量。
purchase.virtual_currency.currency
string 購入通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.virtual_currency.amount
float 現金通貨での価格。
purchase.checkout
object チェックアウトの詳細(オブジェクト)。
purchase.checkout.currency
string 購入通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.checkout.amount
float 購入金額。
purchase.subscription
object サブスクリプションの詳細(オブジェクト)。
purchase.subscription.plan_id
string プランID(プランがAPIを使用して作成された場合は外部)。
purchase.subscription.subscription_id
integer エクソラデータベースのサブスクリプションID。
purchase.subscription.product_id
string 製品ID(アクセストークンで送信された場合)。
purchase.subscription.tags
array プランのタグ。
purchase.subscription.date_create
string サブスクリプション作成日。日付時刻表記は、ISO 8601形式。
purchase.subscription.date_next_charge
string 次の請求日。日付時刻表記は、ISO 8601形式。
purchase.subscription.currency
string サブスクリプションの通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.subscription.amount
float 現金通貨での価格。
purchase.virtual_items
object 購入時の仮想アイテムに関するデータを持つオブジェクト。
purchase.virtual_items.items
array アイテムデータ(配列)。
purchase.virtual_items.items.sku
string アイテムID。
purchase.virtual_items.items.amount
integer アイテム数量。
purchase.virtual_items.currency
string 購入通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.virtual_items.amount
integer 購入金額。
purchase.pin_codes
object ゲームキー(配列)。
purchase.pin_codes.digital_content
string パブリッシャ―アカウントに設定されたゲームのSKU。
purchase.pin_codes.drm
string DRMプラットフォームはゲームの配布に使用されます。'steam'、'playstation'、'xbox'、'uplay'、'origin'、'drmfree'、'gog'、'epicgames'、'nintendo_eshop'、'discord_game_store'、'oculus' のいずれかに指定できます。必要なDRMプラットフォームがパブリッシャーアカウントに設定されていることを確認してください。
purchase.pin_codes.currency
string ゲームキーを購入する通貨。ISO 4217 3文字通貨コード。
purchase.pin_codes.amount
float 値段。
purchase.pin_codes.upgrade
object アップグレードデータを持つオブジェクト。
purchase.pin_codes.upgrade.digital_content_from
object パッケージ(ユーザーのアップグレード元)のデータを持つオブジェクト。
purchase.pin_codes.upgrade.digital_content_from.digital_content
string パブリッシャ―アカウントに設定されたゲームのSKU。
purchase.pin_codes.upgrade.digital_content_from.DRM
string ゲームのDRMプラットフォーム。
purchase.pin_codes.upgrade.digital_content_to
object パッケージ(ユーザーのアップグレード先)のデータを持つオブジェクト。
purchase.pin_codes.upgrade.digital_content_to.digital_content
string パブリッシャ―アカウントに設定されたゲームのSKU。
purchase.pin_codes.upgrade.digital_content_to.DRM
string ゲームのDRMプラットフォーム。
purchase.pin_codes.upgrade.currency
string 購入通貨。ISO 4217に準拠した3文字の通貨コード。
purchase.pin_codes.upgrade.amount
float 現金通貨での価格。
purchase.gift
object 贈り物の詳細(オブジェクト)。
purchase.gift.giver_id
string 贈り主のID。
purchase.gift.receiver_id
string 贈り物の受取人のID。
purchase.gift.receiver_email
string 贈り物を受け取る人のメールアドレス。
purchase.gift.message
string 贈り主からのメッセージ。
purchase.gift.hide_giver_from_receiver
string 贈り主の情報を受取り側に公開するかどうか('true'がデフォルトです)
purchase.total
object 購入(オブジェクト)の合計価格。 必須。
purchase.total.currency
string 購入通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.total.amount
float 支払額合計。
purchase.promotions
array このトランザクションに適用されたプロモーション(配列)。
purchase.promotions.technical_name
string プロモーションの名称。
purchase.promotions.id
integer プロモーションID。
purchase.coupon
object クーポンの詳細(オブジェクト; サブスクリプションの作成時にクーポンが使用された場合)。
purchase.coupon.coupon_code
string クーポンコード。
purchase.coupon.campaign_code
string キャンペーンコード。
user
object ユーザーの詳細(オブジェクト)。
user.ip
string ユーザーIP。
user.phone
string ユーザーの電話。
user.email
string ユーザーのEメール。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
user.country
string ユーザーの国。2文字の国コード(大文字)は、ISO 3166-1 alpha-2に従って使用されます。
user.zip
string Zipまたは郵便番号
transaction
object トランザクションの詳細(オブジェクト)。 必須。
transaction.id
integer トランザクションID。
transaction.external_id
string トランザクション外部ID。
transaction.payment_date
string 支払日。
transaction.payment_method
integer 決済方法のID。
transaction.dry_run
integer テスト用トランザクション。テストトランザクションの場合は1、そうでない場合は0。
transaction.agreement
integer 契約ID
payment_details
object 支払詳細(オブジェクト)。 必須。
payment_details.payment
object ユーザー(オブジェクト)によって支払われた金額。
payment_details.payment.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.payment.amount
string 金額。
payment_details.payment_method_sum
object 決済システムから振り込まれた金額。
payment_details.payment_method_sum.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.payment_method_sum.amount
string 金額。
payment_details.xsolla_balance_sum
object エクソラの残高から振り込まれた金額。
payment_details.xsolla_balance_sum.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.xsolla_balance_sum.amount
string 金額。
payment_details.payout
object 配当の詳細(オブジェクト)。
payment_details.payout.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.payout.amount
float 金額。
payment_details.vat
object VATの詳細(オブジェクト; EUのみ)。
payment_details.vat.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.vat.amount
float 金額。
payment_details.payout_currency_rate
float 決済と配当間の為替レート。
payment_details.xsolla_fee
object エクソラ 料金(オブジェクト)。
payment_details.xsolla_fee.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.xsolla_fee.amount
float 金額。
payment_details.payment_method_fee
object 決済システム料金。
payment_details.payment_method_fee.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.payment_method_fee.amount
float 金額。
payment_details.sales_tax
object 売上税(オブジェクト、米国のみ)。
payment_details.sales_tax.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.sales_tax.amount
float 金額。
payment_details.repatriation_commission
object 本国送金費用のデータ付きオブジェクト。サードパーティがエクソラに課します。
payment_details.repatriation_commission.currency
string 本国送金通貨。 ISO 4217 に準拠した3文字の通貨コードです。
payment_details.repatriation_commission.amount
float 本国送金費用。
custom_parameters
object カスタムパラメータ、
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'notification_type' => 'payment',
    'purchase' => array(
        'virtual_currency' => array(
            'name' => 'Coins',
            'quantity' => 100,
            'currency' => 'USD',
            'amount' => 9.99
        ),
        'total' => array(
            'currency' => 'USD',
            'amount' => 9.99
        )
    ),
    'user' => array(
        'ip' => '127.0.0.1',
        'phone' => '18777976552',
        'email' => 'email@example.com',
        'id' => '1234567',
        'country' => 'US'
    ),
    'transaction' => array(
        'id' => 87654321,
        'payment_date' => '2014-09-23T19:25:25+04:00',
        'payment_method' => 1380,
        'dry_run' => 1
    ),
    'payment_details' => array(
        'payment' => array(
            'currency' => 'USD',
            'amount' => 9.99
        ),
        'vat' => array(
            'currency' => 'USD',
            'amount' => 0
        ),
        'payout_currency_rate' => 1,
        'payout' => array(
            'currency' => 'USD',
            'amount' => 9.49
        ),
        'xsolla_fee' => array(
            'currency' => 'USD',
            'amount' => 0.19
        ),
        'payment_method_fee' => array(
            'currency' => 'USD',
            'amount' => 0.31
        ),
        'repatriation_commission' => array(
            'currency' => 'USD',
            'amount' => 0.2
        )
    )
);
POST /your_uri HTTP/1.1
Host: your.host
Accept: application/json
Content-Type: application/json
Content-Length: 1721
Authorization: Signature 34553d151e656110c656696c919f9a10e05de542

{
    "notification_type":"payment",
    "purchase":{
        "virtual_currency":{
            "name":"Coins",
            "sku":"test_package1",
            "quantity":10,
            "currency":"USD",
            "amount":100
        },
        "subscription":{
            "plan_id": "b5dac9c8",
            "subscription_id": "10",
            "product_id": "Demo Product",
            "date_create": "2014-09-22T19:25:25+04:00",
            "date_next_charge": "2014-10-22T19:25:25+04:00",
            "currency": "USD",
            "amount": 9.99
        },
        "checkout":{
            "currency":"USD",
            "amount":50
        },
        "virtual_items":{
            "items":[
                {
                    "sku": "test_item1",
                    "amount":1
                }
            ],
            "currency":"USD",
            "amount":50
        },
        "total":{
            "currency":"USD",
            "amount":200
        },
        "promotions":[{
            "technical_name":"Demo Promotion",
            "id":"853"
        }],
        "coupon":{
            "coupon_code":"ICvj45S4FUOyy",
            "campaign_code":"1507"
        }
    },
    "user": {
        "ip": "127.0.0.1",
        "phone": "18777976552",
        "email": "email@example.com",
        "id": "1234567",
        "name": "Xsolla User",
        "country": "US"
    },
    "transaction":{
        "id":1,
        "external_id":1,
        "payment_date":"2014-09-24T20:38:16+04:00",
        "payment_method":1,
        "dry_run":1,
        "agreement":1
    },
    "payment_details":{
        "payment":{
            "currency":"USD",
            "amount":230
        },
        "vat": {
            "currency": "USD",
            "amount": 0
        },
        "payout_currency_rate": 1,
        "payout":{
            "currency":"USD",
            "amount":200
        },
        "xsolla_fee":{
            "currency":"USD",
            "amount":10
        },
        "payment_method_fee":{
            "currency":"USD",
            "amount":20
        },
        "repatriation_commission":{
            "currency":"USD",
            "amount":"10"
        }
    },
    "custom_parameters":{
        "parameter1":"value1",
        "parameter2":"value2"
    }
}
$curl -v 'https://your.hostname/your/uri' \
-X POST \
-d '{
    "notification_type":"payment",
    "purchase":{
        "virtual_currency":{
            "name":"Coins",
            "sku":"test_package1",
            "quantity":10,
            "currency":"USD",
            "amount":100
        },
        "subscription":{
            "plan_id": "b5dac9c8",
            "subscription_id": "10",
            "product_id": "Demo Product",
            "date_create": "2014-09-22T19:25:25+04:00",
            "date_next_charge": "2014-10-22T19:25:25+04:00",
            "currency": "USD",
            "amount": 9.99
        },
        "checkout":{
            "currency":"USD",
            "amount":50
        },
        "virtual_items":{
            "items":[
                {
                    "sku": "test_item1",
                    "amount":1
                }
            ],
            "currency":"USD",
            "amount":50
        },
        "total":{
            "currency":"USD",
            "amount":200
        },
        "promotions":[{
            "technical_name":"Demo Promotion",
            "id":"853"
        }],
        "coupon":{
             "coupon_code":"ICvj45S4FUOyy",
             "campaign_code":"1507"
        }
    },
    "user": {
        "ip": "127.0.0.1",
        "phone": "18777976552",
        "email": "email@example.com",
        "id": "1234567",
        "name": "Xsolla User",
        "country": "US"
    },
    "transaction":{
        "id":1,
        "external_id":1,
        "payment_date":"2014-09-24T20:38:16+04:00",
        "payment_method":1,
        "dry_run":1,
        "agreement":1
    },
    "payment_details":{
        "payment":{
            "currency":"USD",
            "amount":230
        },
        "vat": {
            "currency": "USD",
            "amount": 0
        },
        "payout_currency_rate": 1,
        "payout":{
            "currency":"USD",
            "amount":200
        },
        "xsolla_fee":{
            "currency":"USD",
            "amount":10
        },
        "payment_method_fee":{
            "currency":"USD",
            "amount":20
        },
        "repatriation_commission":{
            "currency":"USD",
            "amount":"10"
        }
    },
    "custom_parameters":{
        "parameter1":"value1",
        "parameter2":"value2"
    }
}'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message->isPayment()) {
        $userArray = $message->getUser();
        $paymentArray = $message->getTransaction();
        $paymentId = $message->getPaymentId();
        $externalPaymentId = $message->getExternalPaymentId();
        $paymentDetailsArray = $message->getPaymentDetails();
        $customParametersArray = $message->getCustomParameters();
        $isDryRun = $message->isDryRun();
        $messageArray = $message->toArray();
        // TODO if the payment delivery fails for some reason, you should throw XsollaWebhookException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

返金

決済がキャンセルされるたびに送信されます。支払いの詳細を含む。

パラメータ 種類 説明文
notification_type
string 通知の種類。 必須。
purchase
object 購入の詳細を含むオブジェクト。
purchase.virtual_currency
object 購入する仮想通貨(オブジェクト)。
purchase.virtual_currency.name
string 仮想通貨名。
purchase.virtual_currency.quantity
float 数量。
purchase.virtual_currency.currency
string 購入通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.virtual_currency.amount
float 現金通貨での価格。
purchase.checkout
object チェックアウトの詳細(オブジェクト)。
purchase.checkout.currency
string 購入通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.checkout.amount
float 購入金額。
purchase.subscription
object サブスクリプションの詳細(オブジェクト)。
purchase.subscription.plan_id
string プランID(プランがAPIを使用して作成された場合は外部)。
purchase.subscription.tags
array プランのタグ。
purchase.subscription.subscription_id
integer エクソラデータベースのサブスクリプションID。
purchase.subscription.date_create
string サブスクリプション作成日。日付時刻表記は、ISO 8601形式。
purchase.subscription.currency
string サブスクリプションの通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.subscription.amount
float 現金通貨での価格。
purchase.virtual_items
object 購入時の仮想アイテムに関するデータを持つオブジェクト。
purchase.virtual_items.items
array アイテムデータ(配列)。
purchase.virtual_items.items.sku
string アイテムID。
purchase.virtual_items.items.amount
integer アイテム数量。
purchase.virtual_items.currency
string 購入通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.virtual_items.amount
integer 購入金額。
purchase.pin_codes
object ゲームキー(オブジェクト)。
purchase.pin_codes.upgrade
object アップグレードデータを持つオブジェクト。
purchase.pin_codes.upgrade.digital_content_from
object パッケージ(ユーザーのアップグレード元)のデータを持つオブジェクト。
purchase.pin_codes.upgrade.digital_content_from.digital_content
string パブリッシャ―アカウントに設定されたゲームのSKU。
purchase.pin_codes.upgrade.digital_content_from.DRM
string ゲームのDRMプラットフォーム。
purchase.pin_codes.upgrade.digital_content_to
object パッケージ(ユーザーのアップグレード先)のデータを持つオブジェクト。
purchase.pin_codes.upgrade.digital_content_to.digital_content
string パブリッシャ―アカウントに設定されたゲームのSKU。
purchase.pin_codes.upgrade.digital_content_to.DRM
string ゲームのDRMプラットフォーム。
purchase.pin_codes.upgrade.currency
string 購入通貨。ISO 4217に準拠した3文字の通貨コード。
purchase.pin_codes.upgrade.amount
float 現金通貨での価格。
purchase.total
object 購入(オブジェクト)の合計価格。
purchase.total.currency
string 購入通貨。ISO 4217 に準拠した3文字の通貨コード。
purchase.total.amount
float 支払額合計。
user
object ユーザーの詳細(オブジェクト)。
user.ip
string ユーザーIP。
user.phone
string ユーザーの電話。
user.email
string ユーザーのEメール。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
user.country
string ユーザーの国。2文字の国コード(大文字)は、ISO 3166-1 alpha-2に従って使用されます。
user.zip
string Zipまたは郵便番号
transaction
object トランザクションの詳細(オブジェクト)。 必須。
transaction.id
integer トランザクションID。
transaction.external_id
string トランザクション外部ID。
transaction.dry_run
integer テスト用トランザクション。テストトランザクションの場合は1、そうでない場合は0。
transaction.agreement
integer 契約ID
refund_details
object 払い戻しの詳細(オブジェクト)。
refund_details.code
integer コードID。
refund_details.reason
string 返金の理由。
refund_details.author
string 返金要求者。
payment_details
object 支払詳細(オブジェクト)。 必須。
payment_details.payment
object ユーザー(オブジェクト)によって支払われた金額。
payment_details.payment.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.payment.amount
string 金額。
payment_details.payment_method_sum
object 決済システムから振り込まれた金額。
payment_details.payment_method_sum.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.payment_method_sum.amount
string 金額。
payment_details.xsolla_balance_sum
object エクソラの残高から振り込まれた金額。
payment_details.xsolla_balance_sum.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.xsolla_balance_sum.amount
string 金額。
payment_details.payout
object 配当の詳細(オブジェクト)。
payment_details.payout.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.payout.amount
float 金額。
payment_details.vat
object VATの詳細(オブジェクト; EUのみ)。
payment_details.vat.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.vat.amount
float 金額。
payment_details.payout_currency_rate
float 決済と配当間の為替レート。
payment_details.xsolla_fee
object エクソラ 料金(オブジェクト)。
payment_details.xsolla_fee.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.xsolla_fee.amount
float 金額。
payment_details.payment_method_fee
object 決済システム料金。
payment_details.payment_method_fee.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.payment_method_fee.amount
float 金額。
payment_details.sales_tax
object 売上税(オブジェクト、米国のみ)。
payment_details.sales_tax.currency
string 通貨。ISO 4217 に準拠した3文字の通貨コード。
payment_details.sales_tax.amount
float 金額。
payment_details.repatriation_commission
object 本国送金費用のデータ付きオブジェクト。サードパーティがエクソラに課します。
payment_details.repatriation_commission.currency
string 本国送金通貨。 ISO 4217 に準拠した3文字の通貨コードです。
payment_details.repatriation_commission.amount
float 本国送金費用。
custom_parameters
object カスタムパラメータ、

返金コード:

コード 理由 説明
1. Cancellation by the user request / the game request. パブリッシャーアカウントからキャンセルが開始されました。
2. Chargeback. トランザクションのチャージバックが要求されました。
3. Integration Error. エクソラとゲームの統合に関する問題 推奨事項:ユーザーをブラックリストに登録しないでください。
4. Fraud. 詐欺の疑い。
5. Test Payment. テストトランザクション後にキャンセル処理が実行されます。 推奨事項:ユーザーをブラックリストに登録しないでください。
6. Expired Invoice. 請求書の期限が切れました(後払いモデルで使用)。
7. PS debt cancel. 配当は決済システムによって拒否されました。 推奨事項:ユーザーをブラックリストに登録しないでください。
8. Cancellation by the PS request. 決済システムによってキャンセルが要求されました。 推奨事項:ユーザーをブラックリストに登録しないでください。
9. Cancellation by the user request. ユーザは何らかの理由でゲームや購入に満足していませんでした。 推奨事項:ユーザーをブラックリストに登録しないでください。
10. Cancellation by the game request. ゲームによってキャンセルが要求されました。 推奨事項:ユーザーをブラックリストに登録しないでください。
11. Account holder called to report fraud. アカウント所有者がトランザクションを行わなかったと述べています。
12. Friendly fraud. フレンドリー詐欺が報告されました。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'notification_type' => 'refund',
    'purchase' => array(
        'virtual_currency' => array(
            'name' => 'Coins',
            'quantity' => 100,
            'currency' => 'USD',
            'amount' => 9.99
        ),
        'total' => array(
            'currency' => 'USD',
            'amount' => 9.99
        )
    ),
    'user' => array(
        'ip' => '127.0.0.1',
        'phone' => '18777976552',
        'email' => 'email@example.com',
        'id' => '1234567',
        'country' => 'US'
    ),
    'transaction' => array(
        'id' => 87654321,
        'payment_date' => '2014-09-23T19:25:25+04:00',
        'payment_method' => 1380,
        'dry_run' => 1
    ),
    'refund_details' => array(
            'code' => 1,
            'reason' => 'Fraud'
    ),
    'payment_details' => array(
        'payment' => array(
            'currency' => 'USD',
            'amount' => 9.99
        ),
        'vat' => array(
            'currency' => 'USD',
            'amount' => 0
        ),
        'payout_currency_rate' => 1,
        'payout' => array(
            'currency' => 'USD',
            'amount' => 9.49
        ),
        'xsolla_fee' => array(
            'currency' => 'USD',
            'amount' => 0.19
        ),
        'payment_method_fee' => array(
            'currency' => 'USD',
            'amount' => 0.31
        ),
        'repatriation_commission' => array(
            'currency' => 'USD',
            'amount' => 0.2
        )
    )
);
POST /your_uri HTTP/1.1
Host: your.host
Accept: application/json
Content-Type: application/json
Content-Length: 1220
Authorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7

{
    "notification_type":"refund",
    "purchase":{
        "virtual_currency":{
            "name": "Coins",
            "quantity":10,
            "currency":"USD",
            "amount":100
        },
        "subscription":{
            "plan_id": "b5dac9c8",
            "subscription_id": "10",
            "date_create": "2014-09-22T19:25:25+04:00",
            "currency": "USD",
            "amount": 9.99
        },
        "checkout":{
            "currency":"USD",
            "amount":50
        },
        "virtual_items":{
            "items":[
                {
                    "sku": "test_item1",
                    "amount":1
                }
            ],
            "currency":"USD",
            "amount":50
        },
        "total":{
            "currency":"USD",
            "amount":200
        }
    },
    "user": {
        "ip": "127.0.0.1",
        "phone": "18777976552",
        "email": "email@example.com",
        "id": "1234567",
        "name": "Xsolla User",
        "country": "US"
    },
    "transaction":{
        "id":1,
        "external_id":1,
        "dry_run":1,
        "agreement":1
    },
    "refund_details":{
        "code":1,
        "reason":"Fraud"
    },
    "payment_details":{
        "xsolla_fee":{
            "currency":"USD",
            "amount":"10"
        },
        "payout":{
            "currency":"USD",
            "amount":"200"
        },
        "payment_method_fee":{
            "currency":"USD",
            "amount":"20"
        },
        "payment":{
            "currency":"USD",
            "amount":"230"
        },
        "repatriation_commission":{
            "currency":"USD",
            "amount":"10"
        }
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-d '{
        "notification_type":"refund",
        "purchase":{
            "virtual_currency":{
                "name": "Coins",
                "quantity":10,
                "currency":"USD",
                "amount":100
            },
            "subscription":{
                "plan_id": "b5dac9c8",
                "subscription_id": "10",
                "date_create": "2014-09-22T19:25:25+04:00",
                "currency": "USD",
                "amount": 9.99
            },
            "checkout":{
                "currency":"USD",
                "amount":50
            },
            "virtual_items":{
                "items":[
                    {
                        "sku": "test_item1",
                        "amount":1
                    }
                ],
                "currency":"USD",
                "amount":50
            },
            "total":{
                "currency":"USD",
                "amount":200
            }
        },
        "user": {
            "ip": "127.0.0.1",
            "phone": "18777976552",
            "email": "email@example.com",
            "id": "1234567",
            "name": "Xsolla User",
            "country": "US"
        },
        "transaction":{
            "id":1,
            "external_id":1,
            "dry_run":1,
            "agreement":1
        },
        "refund_details":{
            "code":1,
            "reason":"Fraud"
        },
        "payment_details":{
            "xsolla_fee":{
                "currency":"USD",
                "amount":"10"
            },
            "payout":{
                "currency":"USD",
                "amount":"200"
            },
            "payment_method_fee":{
                "currency":"USD",
                "amount":"20"
            },
            "payment":{
                "currency":"USD",
                "amount":"230"
            },
            "repatriation_commission":{
                "currency":"USD",
                "amount":"10"
            }
        }
    }
}'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message->isRefund()) {
        $userArray = $message->getUser();
        $paymentArray = $message->getTransaction();
        $paymentId = $message->getPaymentId();
        $externalPaymentId = $message->getExternalPaymentId();
        $paymentDetailsArray = $message->getPaymentDetails();
        $customParametersArray = $message->getCustomParameters();
        $isDryRun = $message->isDryRun();
        $refundArray = $message->getRefundDetails();
        $messageArray = $message->toArray();
        // TODO if you cannot handle the refund, you should throw XsollaWebhookException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

アップグレードの払い戻し

アップグレードに関する支払いをユーザーが払い戻す際に、エクソラからキャンセルされた全てのアップグレードと現在のゲームパッケージに関するデータをウェブフックURLに送ります。

パラメータ 種類 説明文
notification_type
string 通知の種類。 必須。
purchase
object 購入データを持つオブジェクト。 必須。
purchase.pin_codes
object 購入済みゲームパッケージのデータを持つオブジェクト。
purchase.pin_codes.purchase_type
string 購入タイプ。パッケージの購入で「regular」かパッケージのアップグレードで「upgrade」になります。
purchase.pin_codes.digital_content
string パブリッシャ―アカウントに設定されたゲームのSKU。
purchase.pin_codes.DRM
string ゲームのDRMプラットフォーム。
purchase.pin_codes.currency
string 購入通貨。ISO 4217に準拠した3文字の通貨コード。
purchase.pin_codes.amount
float 現金通貨での価格。
purchase.pin_codes.transaction
object 処理データを持つオブジェクト。
purchase.pin_codes.transaction.id
integer トランザクションID。
purchase.pin_codes.upgrade
object アップグレードデータを持つオブジェクト。
purchase.pin_codes.upgrade.digital_content_from
object パッケージ(ユーザーのアップグレード元)のデータを持つオブジェクト。
purchase.pin_codes.upgrade.digital_content_from.digital_content
string パブリッシャ―アカウントに設定されたゲームのSKU。
purchase.pin_codes.upgrade.digital_content_from.DRM
string ゲームのDRMプラットフォーム。
purchase.pin_codes.upgrade.digital_content_to
object パッケージ(ユーザーのアップグレード先)のデータを持つオブジェクト。
purchase.pin_codes.upgrade.digital_content_to.digital_content
string パブリッシャ―アカウントに設定されたゲームのSKU。
purchase.pin_codes.upgrade.digital_content_to.DRM
string ゲームのDRMプラットフォーム。
ownership
object ユーザーが所有するパッケージのデータを持つオブジェクト。 必須。
ownership.digital_content
string パブリッシャ―アカウントに設定されたゲームのSKU。
ownership.DRM
string ゲームのDRMプラットフォーム。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array (
  'notification_type' => 'upgrade_refund',
  'purchase' =>
  array (
    'pin_codes' =>
    array (
      0 =>
      array (
        'purchase_type' => 'regular',
        'digital_content' => 'silver',
        'DRM' => 'drmfree',
        'currency' => 'USD',
        'amount' => '40',
        'transaction' =>
        array (
          'id' => '361697569',
        ),
      ),
      1 =>
      array (
        'purchase_type' => 'upgrade',
        'upgrade' =>
        array (
          'digital_content_from' =>
          array (
            'digital_content' => 'silver',
            'DRM' => 'drmfree',
          ),
          'digital_content_to' =>
          array (
            'digital_content' => 'gold',
            'DRM' => 'drmfree',
          ),
        ),
        'currency' => 'USD',
        'amount' => '20',
        'transaction' =>
        array (
          'id' => '361697570'
        ),
      ),
      2 =>
      array (
        'purchase_type' => 'upgrade',
        'upgrade' =>
        array (
          'digital_content_from' =>
          array (
            'digital_content' => 'gold',
            'DRM' => 'drmfree',
          ),
          'digital_content_to' =>
          array (
            'digital_content' => 'platinum',
            'DRM' => 'drmfree',
          ),
        ),
        'currency' => 'USD',
        'amount' => '20',
        'transaction' =>
        array (
          'id' => '361697571'
        ),
      ),
    ),
  ),
  'ownership' =>
  array (
    'digital_content' => NULL,
    'DRM' => NULL,
  ),
)
POST /your_uri HTTP/1.1
Host: your.host
Accept: application/json
Content-Type: application/json
Authorization: Signature <signature>

{
  "notification_type": "upgrade_refund",
  "purchase": {
    "pin_codes": [
      {
        "purchase_type": "regular",
        "digital_content": "silver",
        "DRM": "drmfree",
        "currency": "USD",
        "amount": "40",
        "transaction": {
          "id": "361697569"
        }
      },
      {
        "purchase_type": "upgrade",
        "upgrade": {
          "digital_content_from": {
            "digital_content": "silver",
            "DRM": "drmfree"
          },
          "digital_content_to": {
            "digital_content": "gold",
            "DRM": "drmfree"
          }
        },
        "currency": "USD",
        "amount": "20",
        "transaction": {
          "id": "361697570"
        }
      },
      {
        "purchase_type": "upgrade",
        "upgrade": {
          "digital_content_from": {
            "digital_content": "gold",
            "DRM": "drmfree"
          },
          "digital_content_to": {
            "digital_content": "platinum",
            "DRM": "drmfree"
          }
        },
        "currency": "USD",
        "amount": "20",
        "transaction": {
          "id": "361697571"
        }
      }
    ]
  },
  "ownership": {
    "digital_content": null,
    "DRM": null
  }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-d '{
  "notification_type": "upgrade_refund",
  "purchase": {
    "pin_codes": [
      {
        "purchase_type": "regular",
        "digital_content": "silver",
        "DRM": "drmfree",
        "currency": "USD",
        "amount": "40",
        "transaction": {
          "id": "361697569"
        }
      },
      {
        "purchase_type": "upgrade",
        "upgrade": {
          "digital_content_from": {
            "digital_content": "silver",
            "DRM": "drmfree"
          },
          "digital_content_to": {
            "digital_content": "gold",
            "DRM": "drmfree"
          }
        },
        "currency": "USD",
        "amount": "20",
        "transaction": {
          "id": "361697570"
        }
      },
      {
        "purchase_type": "upgrade",
        "upgrade": {
          "digital_content_from": {
            "digital_content": "gold",
            "DRM": "drmfree"
          },
          "digital_content_to": {
            "digital_content": "platinum",
            "DRM": "drmfree"
          }
        },
        "currency": "USD",
        "amount": "20",
        "transaction": {
          "id": "361697571"
        }
      }
    ]
  },
  "ownership": {
    "digital_content": null,
    "DRM": null
  }
}'
レスポンス

AFSチェック後のトランザクションのキャンセル

AFSチェック中にトランザクションが拒否されると、エクソラはトランザクションの詳細をURL ウェブフックに送信します。この通知を有効にするには、アカウントマネージャーに連絡してください。

パラメータ 種類 説明文
notification_type
string 通知の種類。 必須。
user
object ユーザーの詳細(オブジェクト)。
user.ip
string ユーザーIP。
user.phone
string ユーザーの電話。
user.email
string ユーザーのEメール。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
user.country
string ユーザーの国。2文字の国コード(大文字)は、ISO 3166-1 alpha-2に従って使用されます。
user.zip
string Zipまたは郵便番号
transaction
object トランザクションの詳細(オブジェクト)。 必須。
transaction.id
integer トランザクションID。
transaction.external_id
string トランザクション外部ID。
transaction.dry_run
integer テスト用トランザクション。テストトランザクションの場合は1、そうでない場合は0。
transaction.agreement
integer 契約ID
refund_details
object 払い戻しの詳細(オブジェクト)。
refund_details.code
integer コードID。
refund_details.reason
string 返金の理由。
refund_details.author
string 返金要求者。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'notification_type' => 'afs_reject',
    'user' => array(
        'ip' => '127.0.0.1',
        'phone' => '18777976552',
        'email' => 'email@example.com',
        'id' => '1234567',
        'country' => 'US'
    ),
    'transaction' => array(
        'id' => 87654321,
        'payment_date' => '2014-09-23T19:25:25+04:00',
        'payment_method' => 1380,
        'dry_run' => 1
    ),
    'refund_details' => array(
            'code' => 4,
            'reason' => 'Potential fraud'
    )
);
POST /your_uri HTTP/1.1
Host: your.host
Accept: application/json
Content-Type: application/json
Content-Length: 1220
Authorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7

{
    "notification_type":"afs_reject",
    "user": {
        "ip": "127.0.0.1",
        "phone": "18777976552",
        "email": "semail@example.com,
        "id": "1234567",
        "name": "Xsolla User",
        "country": "US"
    },
    "transaction":{
        "id":1,
        "external_id":1,
        "dry_run":1,
        "agreement":1
    },
    "refund_details":{
        "code":4,
        "reason":"Potential fraud"
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-d '{
  "notification_type":"afs_reject",
  "user": {
      "ip": "127.0.0.1",
      "phone": "18777976552",
      "email": "semail@example.com,
      "id": "1234567",
      "name": "Xsolla User",
      "country": "US"
  },
  "transaction":{
      "id":1,
      "external_id":1,
      "dry_run":1,
      "agreement":1
  },
  "refund_details":{
      "code":4,
      "reason":"Potential fraud"
  }
}'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message->isRefund()) {
        $userArray = $message->getUser();
        $paymentArray = $message->getTransaction();
        $paymentId = $message->getPaymentId();
        $externalPaymentId = $message->getExternalPaymentId();
        $customParametersArray = $message->getCustomParameters();
        $isDryRun = $message->isDryRun();
        $refundArray = $message->getRefundDetails();
        $messageArray = $message->toArray();
        // TODO if you cannot handle the refund, you should throw XsollaWebhookException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

作成されたサブスクリプション

ユーザーがサブスクリプションを作成すると、支払い通知スクリプトに通知が送信されます。

パラメータ 種類 説明文
notification_type
string 通知の種類。 必須。
user
object ユーザーの詳細(オブジェクト)。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
subscription
object サブスクリプションの詳細(オブジェクト)。
subscription.plan_id
string プランID(プランがAPIを使用して作成された場合は外部)。
subscription.tags
array プランのタグ。
subscription.subscription_id
integer エクソラデータベースのサブスクリプションID。
subscription.product_id
string 製品ID(アクセストークンで送信された場合)。
subscription.date_create
string サブスクリプション作成日。日付時刻表記は、ISO 8601形式。
subscription.date_next_charge
string 次の請求日。日付時刻表記は、ISO 8601形式。
subscription.trial
object 試行期間(オブジェクト)。
subscription.trial.value
integer 試行期間。
subscription.trial.type
string 試行期間種類:day。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'notification_type' => 'create_subscription',
    'user' => array(
        'id' => '1234567',
        'name' => 'Xsolla User'
    ),
    'subscription' => array(
        'plan_id' => 'b5dac9c8',
        'subscription_id' => '10',
        'product_id' => 'Demo Product',
        'date_create' => '2014-09-22T19:25:25+04:00',
        'date_next_charge' => '2015-01-22T19:25:25+04:00',
        'trial' =>  array(
                'value' =>  90,
                'type' =>  'day'
            )
    )
);
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "notification_type":"create_subscription",
    "user":{
        "id":"1234567",
        "name":"Xsolla User"
    },
    "subscription":{
        "plan_id":"b5dac9c8",
        "subscription_id":"10",
        "product_id":"Demo Product",
        "date_create":"2014-09-22T19:25:25+04:00",
        "date_next_charge":"2015-01-22T19:25:25+04:00",
        "trial": {
                "value": 90,
                "type": "day"
            }
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
        "notification_type":"create_subscription",
        "user":{
            "id":"1234567",
            "name":"Xsolla User"
        },
        "subscription":{
            "plan_id":"b5dac9c8",
            "subscription_id":"10",
            "product_id":"Demo Product",
            "date_create":"2014-09-22T19:25:25+04:00",
            "date_next_charge":"2015-01-22T19:25:25+04:00",
            "trial": {
                    "value": 90,
                    "type": "day"
                }
        }
    }'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message instanceof CreateSubscriptionMessage) {
       $messageArray = $message->toArray();
       // TODO if the subscription creation fails for some reason, you should throw XsollaWebhookException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

更新されたサブスクリプション

サブスクリプションの"plan_id" or "date_next_charge"が変更されたり、サブスクリプションが延長されるたびに送信されます。

パラメータ 種類 説明文
notification_type
string 通知の種類。 必須。
user
object ユーザーの詳細(オブジェクト)。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
subscription
object サブスクリプションの詳細(オブジェクト)。
subscription.plan_id
string プランID(プランがAPIを使用して作成された場合は外部)。
subscription.tags
array プランのタグ。
subscription.subscription_id
integer エクソラデータベースのサブスクリプションID。
subscription.product_id
string 製品ID(アクセストークンで送信された場合)。
subscription.date_next_charge
string 次の請求日。日付時刻表記は、ISO 8601形式。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'notification_type' => 'update_subscription',
    'user' => array(
        'id' => '1234567',
        'name' => 'Xsolla User'
    ),
    'subscription' => array(
        'plan_id' => 'b5dac9c8',
        'subscription_id' => '10',
        'product_id' => 'Demo Product',
        'date_next_charge' => '2015-01-22T19:25:25+04:00'
    )
);
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "notification_type":"update_subscription",
    "user":{
        "id":"1234567",
        "name":"Xsolla User"
    },
    "subscription":{
        "plan_id":"b5dac9c8",
        "subscription_id":"10",
        "product_id":"Demo Product",
        "date_next_charge":"2015-01-22T19:25:25+04:00"
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
        "notification_type":"update_subscription",
        "user":{
            "id":"1234567",
            "name":"Xsolla User"
        },
        "subscription":{
            "plan_id":"b5dac9c8",
            "subscription_id":"10",
            "product_id":"Demo Product",
            "date_next_charge":"2015-01-22T19:25:25+04:00"
        }
    }'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
  if ($message instanceof UpdateSubscriptionMessage) {
     $messageArray = $message->toArray();
     // TODO if the subscription renewing fails for some reason, you should throw XsollaWebhookException
  }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

キャンセルされたサブスクリプション

何らかの理由でサブスクリプションがキャンセルされた場合、支払い通知スクリプトに通知が送信されます。

パラメータ 種類 説明文
notification_type
string 通知の種類。 必須。
user
object ユーザーの詳細(オブジェクト)。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
subscription
object サブスクリプションの詳細(オブジェクト)。
subscription.plan_id
string プランID(プランがAPIを使用して作成された場合は外部)。
subscription.tags
array プランのタグ。
subscription.subscription_id
integer エクソラデータベースのサブスクリプションID。
subscription.product_id
string 製品ID(アクセストークンで送信された場合)。
subscription.date_create
string サブスクリプション作成日。日付時刻表記は、ISO 8601形式。
subscription.date_end
string サブスクリプション終了日。日付時刻表記は、ISO 8601形式。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'notification_type' => 'cancel_subscription',
    'user' => array(
        'id' => '1234567',
        'name' => 'Xsolla User'
    ),
    'subscription' => array(
        'plan_id' => 'b5dac9c8',
        'subscription_id' => '10',
        'product_id' => 'Demo Product',
        'date_create' => '2014-09-22T19:25:25+04:00',
        'date_end' => '2015-01-22T19:25:25+04:00',
    )
);
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "notification_type":"cancel_subscription",
    "user":{
        "id":"1234567",
        "name":"Xsolla User"
    },
    "subscription":{
        "plan_id":"b5dac9c8",
        "subscription_id":"10",
        "product_id":"Demo Product",
        "date_create":"2014-09-22T19:25:25+04:00",
        "date_end":"2015-01-22T19:25:25+04:00"
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
        "notification_type":"cancel_subscription",
        "user":{
            "id":"1234567",
            "name":"Xsolla User"
        },
        "subscription":{
            "plan_id":"b5dac9c8",
            "subscription_id":"10",
            "product_id":"Demo Product",
            "date_create":"2014-09-22T19:25:25+04:00",
            "date_end":"2015-01-22T19:25:25+04:00"
        }
    }'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message instanceof CancelSubscriptionMessage) {
       $messageArray = $message->toArray();
       // TODO if the subscription canceling fails for some reason, you should throw XsollaWebhookException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

ゲームキーの取得

決済が成功するたびに、ゲームのアクティベーションコードを取得するためにサーバーにAPI呼び出しが行われます。

パラメータ 種類 説明文
notification_type
string 通知の種類。
user
object ユーザーの詳細(オブジェクト)。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
pin_code
object ゲームキーの詳細(オブジェクト)。
pin_code.digital_content
string ゲームSKU。
pin_code.DRM
string ゲームを配布するために使用されるDRMプラットフォーム。'
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array (
       'notification_type' => 'get_pincode',
       'user' =>
           array (
               'id' => '1234567',
               'name' => 'Xsolla User',
           ),
       'pin_code' =>
           array (
               'digital_content' => 'Game SKU',
               'DRM' => 'Steam',
           ),
   );
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "notification_type":"get_pincode",
    "user":{
        "id":"1234567",
        "name":"Xsolla User"
    },
    "pin_code":{
        "digital_content":"Game SKU",
        "DRM":"Steam"
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
        "notification_type":"get_pincode",
        "user":{
            "id":"1234567",
            "name":"Xsolla User"
        },
        "pin_code":{
            "digital_content":"Game SKU",
            "DRM":"Steam"
        }
    }'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message instanceof GetPinCodeMessage) {
        $userArray = $message->getUser();
        $drmSku = $message->getDRM();
        $digitalContentSku = $message->getDigitalContent();
        // TODO get a pin code from your database or generate a new one. Put the pin code into variable $newPinCode
        $newPinCode = 'NEW_PIN_CODE';
        // TODO if the pin code creation or generation fail for some reason, you should throw XsollaWebhookException
        return new \Xsolla\SDK\Webhook\Response\PinCodeResponse($newPinCode);
    }
};
$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 200 OK
Content-Type: application/json
{
    "pin_code": "PIN_CODE"
}

有効化キー

ユーザーがキーを起動すると、エクソラがウェブフックURLに通知を送ります。

パラメータ 種類 説明文
notification_type
string 通知の種類。
key
string 有効化キー。
sku
string 固有のキーパッケージID。
user_id
string ユーザーID。
activation_date
datetime キーの有効日。フォーマットは ISO 8601 に従って、 YYYY-MM-DD’T’HH:MM:SS となります。
user_country
string ユーザーの国。 ISO 3166-1 alpha-2 に従って大文字2文字の国コードを使用します。
restriction
object 地域制限クラスタ設定を含むオブジェクト。クラスタは、制限の種類と国リスト、ゲームが利用できるサーバーとロケールを含みます。
restriction.sku
string 固有のクラスタID。
restriction.name
string クラスタの名前。
restriction.types
array 制限の種類の配列。
restriction_countries
array クラスタの国の配列。
restriction.servers
array ゲームサーバーの配列。
restriction.locales
array ロケールの配列。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php
$request = array(
    'notification_type' => 'redeem_key',
    'key' => ‘wqdqwwddq9099022’,
    'sku' => 123,
    'user_id' => ‘sample_user’,
    'activation_date' => ‘2018-11-20T08:38:51+03:00,
    'user_country' => ‘EN’,
    'restriction' =>
           array(
                'name' => ‘cls_1’,
                'types' =>
                        array(
                            ‘activation’
                        ),
                'countries' =>
                        array(
                            ‘RU’
                        ),
             ),
);  
POST /your_uri HTTP/1.1
Host: your.host
Accept: application/json
Content-Type: application/json
Content-Length: 165
Authorization: Signature 52eac2713985e212351610d008e7e14fae46f902

{
  "notification_type": "redeem_key",
  "key": "wqdqwwddq9099022",
  "sku": "123",
  "user_id": "sample_user",
  "activation_date": "2018-11-20T08:38:51+03:00",
  "user_country": "EN",
  "restriction": {
      "name": "cls_1",
      "types": [
           "activation"
        ],
        "countries": [
             "RU"
        ]
  }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
     "notification_type": "redeem_key",
  "key": "wqdqwwddq9099022",
  "sku": "123",
  "user_id": "sample_user",
  "activation_date": "2018-11-20T08:38:51+03:00",
  "user_country": "EN",
  "restriction": {
      "name": "cls_1",
      "types": [
           "activation"
        ],
        "countries": [
             "RU"
         ]
    }
}'
レスポンス
<?php

$response = null;
HTTP/1.1 204 No Content

フレンドリスト

APIはパートナー側で実行してください。フレンドの上限は 2000. 人です。詳しくはレシピを参照。

HTTPリクエスト

GET https://your.webhook.url?notification_type=friends_list&user=user_id&query=frien&offset=10&limit=20&sign=12dfg3f5gdsf4g5s6dfg2sdg1

パラメータ 種類 説明文
notification_type
string 友達一覧を取得するリクエストの種類を定義するID。値は 'friends_list'です。
user
string 贈り物を購入したユーザーの固有ID。
query
string フレンドの名前かID(全部または一部)。
limit
string ページにあるエレメント数の制限。 必須。
offset
integer リスト生成元のエレメントの番号です(カウントは0から始まります)。
sign
string 署名欄は次のように生成します:
  • まず notification_type と、キーおよび secret_key でアルファベット順にソートしたパラメータ値を連結する。
  • 結果の文字列にSHA-1を適用する。
Copy
Full screen
http
  • http
  • curl
リクエスト
GET https://your.webhook.url?notification_type=friends_list&user=user_id&query=frien&offset=10&limit=20&sign=12dfg3f5gdsf4g5s6dfg2sdg1 HTTP/1.1
Host: your.host
Accept: application/json
Content-Type: application/json
Content-Length: 1220
Authorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7
$ curl -v 'https://your.webhook.url?notification_type=friends_list&user=user_id&query=frien&offset=10&limit=20&sign=12dfg3f5gdsf4g5s6dfg2sdg1' \
-X GET \
-u merchant_id:merchant_api_key
レスポンス
HTTP/1.1 200 OK
Content-Type: application/json

[
  {
    "friends": [
      {
        "id": "1",
        "name": "doctor",
        "email": "doctor@hospital.com",
        "image_url": "https://partner/link/doctor.jpg"
      },
      {
        "id": "2",
        "name": "cook",
        "email": "cook@kitchen.com",
        "image_url": "https://partner/link/cook.jpg"
      },
      {
        "id": "3",
        "name": "teacher",
        "email": "teacher@school.com"
      },
      {
        "id": "4",
        "name": "god",
        "email": "god@heaven.com",
        "image_url": "https://partner/link/god.jpg"
      }
      ],
    "total": 10
  }
]
[
  {
  "friends": [
      {
        "id": "1",
        "name": "John Carter",
        "email": "carter@xsolla.com",
        "image_url": "https://partner/link/doctor.jpg"
      },
      {
        "id": "2",
        "name": "John Smith",
        "email": "smith@xsolla.com",
        "image_url": "https://partner/link/cook.jpg"
      }
    ],
  "total": 10
  }
]

ユーザ残高:支払い

ユーザーが決済を行うたびに送信されます。

パラメータ 種類 説明文
notification_type
string 通知の種類。
operation_type
string 操作の種類。
id_operation
integer エクソラデータベースの操作ID。
user
object ユーザーの詳細(オブジェクト)。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
user.email
string ユーザーのEメール。
virtual_currency_balance
object ユーザ残高:内部操作
virtual_currency_balance.old_value
string トランザクション前の残高。
virtual_currency_balance.new_value
string トランザクション後の残高。
virtual_currency_balance.diff
string 購入時の仮想通貨の数量。
transaction
object トランザクションの詳細(オブジェクト)。 必須。
transaction.id
integer トランザクションID。
transaction.date
string トランザクション日。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'virtual_currency_balance' => array(
        'old_value' => '0',
        'new_value' => '200',
        'diff' => '200'
    ),
    'user' => array(
        'name' => 'Xsolla User',
        'id' => '1234567',
        'email' => 'email@example.com'
    ),
    'transaction => array(
        'id' => '123456789',
        'date' => '2015-05-19T15:54:40+03:00'
    ),
    'operation_type' => 'payment',
    'notification_type' => 'user_balance_operation',
    'id_operation' => '66989'
);
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "virtual_currency_balance":{
        "old_value":"0",
        "new_value":"200",
        "diff":"200"
    },
    "user":{
        "name":"Xsolla User",
        "id":"1234567",
        "email":"email@example.com"
    },
    "transaction":{
        "id":"123456789",
        "date":"2015-05-19T15:54:40+03:00"
    },
    "operation_type":"payment",
    "notification_type":"user_balance_operation",
    "id_operation":"66989"
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
        "virtual_currency_balance":{
            "old_value":"0",
            "new_value":"200",
            "diff":"200"
        },
        "user":{
            "name":"Xsolla User",
            "id":"1234567",
            "email":"email@example.com"
        },
        "transaction":{
            "id":"123456789",
            "date":"2015-05-19T15:54:40+03:00"
        },
        "operation_type":"payment",
        "notification_type":"user_balance_operation",
        "id_operation":"66989"
    }'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message instanceof UserBalanceMessage) {
       $messageArray = $message->toArray();
       // TODO if the user balance operation fails for some reason, you should throw XsollaWebhookException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

ユーザ残高:購入

ユーザーがゲーム内で何かを購入したときに送信されます。ユーザの残高の変更を詳述します。

パラメータ 種類 説明文
notification_type
string 通知の種類。
operation_type
string 操作の種類。
id_operation
integer エクソラデータベースの操作ID。
user
object ユーザーの詳細(オブジェクト)。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
user.email
string ユーザーのEメール。
virtual_currency_balance
object ユーザ残高:内部操作
virtual_currency_balance.old_value
string トランザクション前の残高。
virtual_currency_balance.new_value
string トランザクション後の残高。
virtual_currency_balance.diff
string 購入時の仮想通貨の数量。
items_operation_type
string 仮想アイテムで行われる操作の種類。
items
array 購入内の仮想アイテム(オブジェクトの配列)。
items.sku
string アイテムID。
items.amount
integer アイテム数量。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'virtual_currency_balance' => array(
            'old_value' => '0',
            'new_value' => '200',
            'diff' => '200'
    ),
    'user' => array(
        'name' => 'Xsolla User',
        'id' => '1234567',
        'email' => 'email@example.com'
    ),
    'operation_type' => 'inGamePurchase',
    'notification_type' => 'user_balance_operation',
    'items_operation_type' =>  'add',
         'items' =>  array(
             'sku' =>  '1468',
             'amount' =>  '2'
         ),
    'id_operation' => '66989'
);
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "virtual_currency_balance":{
        "old_value":"0",
        "new_value":"200",
        "diff":"200"
    },
    "user":{
        "name":"Xsolla User",
        "id":"1234567",
        "email":"email@example.com"
    },
    "operation_type":"inGamePurchase",
    "notification_type":"user_balance_operation",
    "items_operation_type": "add",
         "items": [{
         "sku": "1468",
         "amount": "2"
         }],
    "id_operation":"66989"
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
        "virtual_currency_balance":{
            "old_value":"0",
            "new_value":"200",
            "diff":"200"
        },
        "user":{
            "name":"Xsolla User",
            "id":"1234567",
            "email":"email@example.com"
        },
        "operation_type":"inGamePurchase",
        "notification_type":"user_balance_operation",
        "items_operation_type": "add",
             "items": [{
             "sku": "1468",
             "amount": "2"
             }],
        "id_operation":"66989"
    }'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message instanceof UserBalanceMessage) {
       $messageArray = $message->toArray();
       // TODO if the user balance operation fails for some reason, you should throw XsollaWebhookException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

ユーザ残高:クーポンの償還

ユーザーが仮想アイテムまたは仮想通貨を受け取るためにクーポンを引き換えたときに送信されます。

パラメータ 種類 説明文
notification_type
string 通知の種類。
operation_type
string 操作の種類。
id_operation
integer エクソラデータベースの操作ID。
user
object ユーザーの詳細(オブジェクト)。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
user.email
string ユーザーのEメール。
virtual_currency_balance
object ユーザ残高:内部操作
virtual_currency_balance.old_value
string トランザクション前の残高。
virtual_currency_balance.new_value
string トランザクション後の残高。
virtual_currency_balance.diff
string 購入時の仮想通貨の数量。
items_operation_type
string 仮想アイテムで行われる操作の種類。
items
array 購入内の仮想アイテム(オブジェクトの配列)。
items.sku
string アイテムID。
items.amount
integer アイテム数量。
coupon
object クーポンの詳細(オブジェクト)。
coupon.coupon_code
string クーポンコード。
coupon.campaign_code
string キャンペーンコード。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'virtual_currency_balance' => array(
        'old_value' => '0',
        'new_value' => '0',
        'diff' => '0'
    ),
    'user' => array(
        'name' => 'Xsolla User',
        'id' => '1234567',
        'email' => 'email@example.com'
    ),
    'operation_type' => 'coupon',
    'notification_type' => 'user_balance_operation',
    'items_operation_type' =>  'add',
         'items' =>  array(
             'sku' =>  '1468',
             'amount' =>  '2'
         ),
    'id_operation' => '66989',
    'coupon' =>  array(
         'coupon_code' =>  'test123',
         'campaign_code' =>  'Xsolla Campaign'
    )
);
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "virtual_currency_balance":{
        "old_value":"0",
        "new_value":"0",
        "diff":"0"
    },
    "user":{
        "name":"Xsolla User",
        "id":"1234567",
        "email":"email@example.com"
    },
    "operation_type":"coupon",
    "notification_type":"user_balance_operation",
    "items_operation_type": "add",
         "items": [{
             "sku": "1468",
             "amount": "2"
         }],
    "id_operation":"66989",
    "coupon": {
         "coupon_code": "test123",
         "campaign_code": "Xsolla Campaign"
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
        "virtual_currency_balance":{
            "old_value":"0",
            "new_value":"0",
            "diff":"0"
        },
        "user":{
            "name":"Xsolla User",
            "id":"1234567",
            "email":"email@example.com"
        },
        "operation_type":"coupon",
        "notification_type":"user_balance_operation",
        "items_operation_type": "add",
             "items": [{
                 "sku": "1468",
                 "amount": "2"
             }],
        "id_operation":"66989",
        "coupon": {
             "coupon_code": "test123",
             "campaign_code": "Xsolla Campaign"
        }
    }'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message instanceof UserBalanceMessage) {
       $messageArray = $message->toArray();
       // TODO if the user balance operation fails for some reason, you should throw XsollaWebhookException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

ユーザ残高:手動アップデート

ユーザーの残高が手動で変更されたときに送信されます。

パラメータ 種類 説明文
notification_type
string 通知の種類。
operation_type
string 操作の種類。
id_operation
integer エクソラデータベースの操作ID。
user
object ユーザーの詳細(オブジェクト)。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
user.email
string ユーザーのEメール。
virtual_currency_balance
object ユーザ残高:内部操作
virtual_currency_balance.old_value
string トランザクション前の残高。
virtual_currency_balance.new_value
string トランザクション後の残高。
virtual_currency_balance.diff
string 購入時の仮想通貨の数量。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
    'virtual_currency_balance' => array(
        'old_value' => '0',
        'new_value' => '100',
        'diff' => '100'
    ),
    'user' => array(
        'name' => 'Xsolla User',
        'id' => '1234567',
        'email' => 'email@example.com'
    ),
    'operation_type' => 'internal',
    'notification_type' => 'user_balance_operation',
    'id_operation' => '67002'
);
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "virtual_currency_balance":{
        "old_value":"0",
        "new_value":"100",
        "diff":"100"
    },
    "user":{
        "name":"Xsolla User",
        "id":"1234567",
        "email":"email@example.com"
    },
    "operation_type":"internal",
    "notification_type":"user_balance_operation",
    "id_operation":"67002"
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
        "virtual_currency_balance":{
            "old_value":"0",
            "new_value":"100",
            "diff":"100"
        },
        "user":{
            "name":"Xsolla User",
            "id":"1234567",
            "email":"email@example.com"
        },
        "operation_type":"internal",
        "notification_type":"user_balance_operation",
        "id_operation":"67002"
    }'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message instanceof UserBalanceMessage) {
       $messageArray = $message->toArray();
       // TODO if the user balance operation fails for some reason, you should throw XsollaWebhookException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

ユーザ残高:返金

ユーザーが支払いをキャンセルしたときに送信されます。ユーザの残高の変更を詳述します。

パラメータ 種類 説明文
notification_type
string 通知の種類。
operation_type
string 操作の種類。
id_operation
integer エクソラデータベースの操作ID。
user
object ユーザーの詳細(オブジェクト)。
user.id
string ユーザーID。 必須。
user.name
string ユーザー名。
user.email
string ユーザーのEメール。
virtual_currency_balance
object ユーザ残高:内部操作
virtual_currency_balance.old_value
string トランザクション前の残高。
virtual_currency_balance.new_value
string トランザクション後の残高。
virtual_currency_balance.diff
string 購入時の仮想通貨の数量。
transaction
object トランザクションの詳細(オブジェクト)。 必須。
transaction.id
integer トランザクションID。
transaction.date
string トランザクション日。
items_operation_type
string 仮想アイテムで行われる操作の種類。
items
array 購入内の仮想アイテム(オブジェクトの配列)。
items.sku
string アイテムID。
items.amount
integer アイテム数量。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
     'virtual_currency_balance' => array(
         'old_value' => '0',
         'new_value' => '0',
         'diff' => '0'
     ),
     'user' => array(
         'name' => 'Xsolla User',
         'id' => '1234567',
         'email' => 'email@example.com'
     ),
     'transaction' => array(
         'id' => '123456789',
         'date' => '2015-05-19T15:54:40+03:00'
     ),
     'operation_type' => 'cancellation',
     'notification_type' => 'user_balance_operation',
     'items_operation_type' =>  'remove',
         'items' =>  array(
             'sku' =>  '1468',
             'amount' =>  '2'
         ),
     'id_operation' => '66989'
);
POST /your/uri HTTP/1.1
Host: your.hostname
Accept: application/json
Content-Type: application/json
Content-Length: 240
Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

{
    "virtual_currency_balance":{
        "old_value":"0",
        "new_value":"0",
        "diff":"0"
    },
    "user":{
        "name":"Xsolla User",
        "id":"1234567",
        "email":"email@example.com"
    },
    "transaction":{
        "id":"123456789",
        "date":"2015-05-19T15:54:40+03:00"
    },
    "operation_type":"cancellation",
    "notification_type":"user_balance_operation",
    "items_operation_type": "remove",
         "items": [{
             "sku": "1468",
             "amount": "2"
         }],
    "id_operation":"66989"
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '{
        "virtual_currency_balance":{
            "old_value":"0",
            "new_value":"0",
            "diff":"0"
        },
        "user":{
            "name":"Xsolla User",
            "id":"1234567",
            "email":"email@example.com"
        },
        "transaction":{
            "id":"123456789",
            "date":"2015-05-19T15:54:40+03:00"
        },
        "operation_type":"cancellation",
        "notification_type":"user_balance_operation",
        "items_operation_type": "remove",
             "items": [{
                 "sku": "1468",
                 "amount": "2"
             }],
        "id_operation":"66989"
    }'
レスポンス
<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    if ($message instanceof UserBalanceMessage) {
       $messageArray = $message->toArray();
       // TODO if the user balance operation fails for some reason, you should throw XsollaWebhookException
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();
HTTP/1.1 204 No Content

流通市場:アイテム一覧の取得

流通市場がゲームインベントリからアイテムデータをリクエストすると、エクソラがウェブフックURLに通知を送信します。

パラメータ 種類 説明文
notification_type
string 通知の種類。
project_id
integer プロジェクトID。
payload
object ユーザーデータと流通市場のデータを持つオブジェクト。
payload.user
object ユーザーデータを持つオブジェクト。
payload.user.id
string ユーザーID。
payload.secondary_market
object 流通市場のデータを持つオブジェクト。
payload.secondary_market.id
string 流通市場のID。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
 'notification_type' => 'inventory_get',
 'project_id' => 1024,
 'payload' => array(
   'user' => array(
     'id' => 'username'
   ),
   'secondary_market' => array(
     'id' => '1'
   ),
 ),
);
POST /your_uri HTTP/1.1
Host: your.host
Content-Type: application/json
Authorization: Signature sha1(body + project_secret)

{
    "notification_type": "inventory_get",
    "project_id": 1024,
    "payload": {
         "user": {
             "id": "username"
              },
          "secondary_market": {
              "id": "1"
          }
     }  
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-u merchant_id:merchant_api_key \
-H 'Content-Type: application/json' \
-d '{
    "notification_type": "inventory_get",
    "project_id": 1024,
    "payload": {
         "user": {
             "id": "username"
          },
          "secondary_market": {
              "id": "1"
          }
     }  
}
レスポンス
<?php

$response = array(
 'user' => array(
  'id' => 'username'
  ),
  'items' => array(
   array(
    'sku' => 'sku1',
    'instance_id' => 'instance1'
    ),
    array(
     'sku' => 'sku2',
     'instance_id' => 'instance2'
    ),
  ),
)
HTTP/1.1 204

{
    "user": {
        "id": "username"
    },
    "items": [
        {
            "sku": "sku1",
            "instance_id": “instance1”
        },
        {
            "sku": "sku2",
            "instance_id": “instance2”
        }
    ],
}
{
    "user": {
        "id": "username"
    },
    "items": [
        {
        "sku": "sku1",
        "instance_id": "instance1"
        },
        {
        "sku": "sku2",
        "instance_id": "instance2"
        }
    ],
}

流通市場:ゲームアイテムの取得

流通市場がゲームインベントリからアイテムをリクエストすると、エクソラがウェブフックURLに通知を送信します。

パラメータ 種類 説明文
notification_type
string 通知の種類。
project_id
integer プロジェクトID。
payload
object ユーザーデータと流通市場のデータを持つオブジェクト。
payload.user
object ユーザーデータを持つオブジェクト。
payload.user.id
string ユーザーID。
items
array アイテムデータを持つ配列。
items.sku
string アイテムSKU。
items.instance_id
string ゲーム内の固有アイテムIDです。
payload.secondary_market
object 流通市場のデータを持つオブジェクト。
payload.secondary_market.id
string 流通市場のID。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
  'notification_type' => 'inventory_pull',
  'project_id' => 1024,
  'payload' => array(
    'user' => array(
      'id' => 'username'
    ),
    'items' => array(
      array(
        'sku' => 'sku1',
        'instance_id' => 'instance1'
      ),
      array(
        'sku' => 'sku2',
        'instance_id' => 'instance2'
      ),
    )
    'secondary_market' => array(
      'id' => '1'
    ),
  ),
);
POST /your_uri HTTP/1.1
Host: your.host
Content-Type: application/json
Authorization: Signature sha1(body + project_secret)

{
    "notification_type": "inventory_pull",
    "project_id": 1024,
    "payload": {
        "user": {
            "id": "username"
        },
        "items": [
            {
                "sku": "sku1",
                "instance_id": "instance1"
            },
            {
                "sku": "sku2",
                "instance_id": "instance2"
            },
        ],
        "secondary_market": {
            "id": "1"
        }
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-u merchant_id:merchant_api_key \
-H 'Content-Type: application/json' \
-d '{
    "notification_type": "inventory_pull",
    "project_id": 1024,
    "payload": {
         "user": {
             "id": "username"
              },
         "items": [
            {
                "sku": "sku1",
                "instance_id": "instance1"
            },
            {
                "sku": "sku2",
                "instance_id": "instance2"
            }
          ],
          "secondary_market": {
              "id": "1"
          }
     }  
}
レスポンス
<?php

$response = null;
HTTP/1.1 204 No Content

流通市場:ゲームアイテムの送信

流通市場がゲームインベントリへアイテムを送信すると、エクソラがウェブフックURLに通知を送信します。

パラメータ 種類 説明文
notification_type
string 通知の種類。
project_id
integer プロジェクトID。
payload
object ユーザーデータと流通市場のデータを持つオブジェクト。
payload.user
object ユーザーデータを持つオブジェクト。
payload.user.id
string ユーザーID。
items
array アイテムデータを持つ配列。
items.sku
string アイテムSKU。
items.instance_id
string ゲーム内の固有アイテムIDです。
payload.secondary_market
object 流通市場のデータを持つオブジェクト。
payload.secondary_market.id
string 流通市場のID。
Copy
Full screen
php
  • php
  • http
  • curl
リクエスト
<?php

$request = array(
  'notification_type' => 'inventory_push',
  'project_id' => 1024,
  'payload' => array(
    'user' => array(
      'id' => 'username'
    )
    'items' => array(
      array(
        'sku' => 'sku1',
        'instance_id' => 'instance1'
      ),
      array(
        'sku' => 'sku2',
        'instance_id' => 'instance2'
      ),
    ),
    'secondary_market' => array(
      'id' => '1'
    ),
  ),
);
POST /your_uri HTTP/1.1
Host: your.host
Content-Type: application/json
Authorization: Signature sha1(body + project_secret)

{
    "notification_type": "inventory_push",
    "project_id": 1024,
    "payload": {
        "user": {
            "id": "username"
        },
        "items": [
            {
                "sku": "sku1",
                "instance_id": "instance1"
            },
            {
                "sku": "sku2",
                "instance_id": "instance2"
            }
        ],
        "secondary_market": {
            "id": "1"
        }
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-u merchant_id:merchant_api_key \
-H 'Content-Type: application/json' \
-d '{
    "notification_type": "inventory_push",
    "project_id": 1024,
    "payload": {
         "user": {
             "id": "username"
              },
          "items": [
              {
                  "sku": "sku1",
                  "instance_id": "instance1"
              },
              {
                  "sku": "sku2",
                  "instance_id": "instance2"
              }
          ],
          "secondary_market": {
               "id": "1"
          }
     }  
}
レスポンス
<?php

$response = null;
HTTP/1.1 204 No Content

ウェブフックエラー

永続的エラーコード:

コード メッセージ
INVALID_USER 無効なユーザー。
INVALID_PARAMETER 無効なパラメータ。
INVALID_SIGNATURE 無効な署名。
INCORRECT_AMOUNT 不正確な価格。
INCORRECT_INVOICE 不正確な請求書。
HTTP/1.1 400 Bad Request

{
    "error":{
        "code":"INVALID_USER",
        "message":"Invalid user"
    }
}