はじめる

概要

エクソラAPIに含まれるものは:

  • In-Game Store API—ゲーム内ストアモジュールを操作するためのメソッド
  • Pay Station API—決済UIとトークン化メソッド
  • Subscription API—サブスクリプションのメソッド
  • Store API—Buy Buttonモジュールを操作するメソッド:仮想通貨、仮想アイテム、ゲームキー、プロモーション、クーポン
  • Publisher Account API—パブリッシャーアカウントのプロジェクトとユーザー、レポート、サポートチケットを操作するメソッド
  • Login 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パラメーターが含まれています。これは、アプリケーションが出品者のために機能していることを示します。

リクエストとレスポンス

エクソラ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キーを秘密にしてください。これにより、個人アカウントおよびパブリッシャーアカウントのプロジェクトにアクセスできます。
  • APIキーを変更すると、すべてのプロジェクトへの支払いが停止する場合があります。現在のキーを使用する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_codeintegerHTTPコード。
messagestring人間が判読できるエラーの説明。このメッセージは常に英語で表示されます。将来的に変更される可能性があるため、特定のエラーのためにこの値に頼らないでください。
extended_messagestringより詳細なエラーの説明。
request_idstringトラブルシューティングに使用する固有のリクエスト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ユーザーのメール(オブジェクト)。このuser.emailオブジェクトは、不正対策モデルの構築と支払処理に不可欠な部分です。これは、エクソラと決済システムの両方の要件です。このパラメーターがないと、受入率が低下する可能性があります。 必須。
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
stringSteam 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
stringEULAへのリンク。
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
stringDRMプラットフォームはゲームの配布に使用できます。'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
stringISO 8601形式のアカウント作成日。
total_hours
integer合計ゲーム時間数。
total_characters
integerゲーム内のキャラクターの数。
social_networks_added
booleanプレイヤーがソーシャルメディアプロファイルを接続しているかを示します。
profile_image_added
booleanプレイヤーがプロフィール画像をアップロードしたかどうかを示します。
active_date
stringISO 8601形式の最終閲覧日。
total_friends
integer友達の数。
additional_verification
booleanプレイヤーがアカウント承認手続きを使用するかどうかを示します。
win_rate
integer勝率。
last_change_password_date
stringISO 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
stringISO 8601に沿った平均セッション時間。

ウェブフック

概要

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

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

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

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

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

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

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

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

Notice: データベースには、同じIDを持つ2つの成功したトランザクションを含めることはできません。視聴者が既存のトランザクションIDを持つウェブフックを受信した場合、そのトランザクションの最新の結果を返す必要があります。ユーザーに2回課金することまたはデータベースに重複したレコードを作成することを避けてください。

私たちが送信するすべてのウェブフックを視聴者が受け取ることを保証することはできません。インターネット接続は100%安定ではないため、ウェブフックが時間どおりに表示されない、または全然表示されない場合があります。さらに、視聴者はサーバーの一時的なエラーに対して5xx HTTPコードを返す場合があります。たとえば、ユーザーが正常に購入した仮想アイテムがユーザーの在庫に追加されなかった場合、視聴者は500 HTTP応答コードを返します。

これらの問題に対処するために、視聴者がメッセージを受信するまで、失敗したメッセージを幾つかの間隔で再送信する再試行メカニズムを提供しています。繰り返されるウェブフックは前回より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_rejectAFSチェック中にトランザクションが拒否されると、エクソラはトランザクションの詳細を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流通市場からゲームインベントリへアイテムを送信。
payment_account_addユーザーが決済アカウントを追加または保存すると送信されます。
payment_account_removeユーザーが保存済みアカウントから決済アカウントを削除すると送信されます。

ユーザーの確認

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

パラメータ種類説明文
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
stringPublic 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
float購入金額。
purchase.pin_codes
objectゲームキー(配列)。
purchase.pin_codes.digital_content
stringパブリッシャ―アカウントに設定されたゲームのSKU。
purchase.pin_codes.drm
stringDRMプラットフォームはゲームの配布に使用されます。'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
stringZipまたは郵便番号。
transaction
objectトランザクションの詳細(オブジェクト)。 必須。
transaction.id
integerトランザクションID。
transaction.external_id
stringトランザクション外部ID。
transaction.payment_date
string支払日。
transaction.payment_method
integer決済方法のID。
transaction.payment_method_order_id
string決済システムの決済ID。
transaction.dry_run
integerテストトランザクション。 パラメータは、テストトランザクションの場合は1つの値を持ち、もしくはトランザクションが実際の場合は送信されません。
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
objectVATの詳細(オブジェクト; 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,
        'payment_method_order_id' => 1234567890123456789,
        '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,
        "payment_method_order_id":1234567890123456789,
        "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,
        "payment_method_order_id":1234567890123456789,
        "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
float購入金額。
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
stringZipまたは郵便番号。
transaction
objectトランザクションの詳細(オブジェクト)。 必須。
transaction.id
integerトランザクションID。
transaction.external_id
stringトランザクション外部ID。
transaction.dry_run
integerテストトランザクション。 パラメータは、テストトランザクションの場合は1つの値を持ち、もしくはトランザクションが実際の場合は送信されません。
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
objectVATの詳細(オブジェクト; 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
stringZipまたは郵便番号。
transaction
objectトランザクションの詳細(オブジェクト)。 必須。
transaction.id
integerトランザクションID。
transaction.external_id
stringトランザクション外部ID。
transaction.dry_run
integerテストトランザクション。 パラメータは、テストトランザクションの場合は1つの値を持ち、もしくはトランザクションが実際の場合は送信されません。
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

決済アカウントを追加する

ユーザーが決済アカウントを手動で追加するか、ゲーム内で何かを購入するときに決済アカウントを保存するたびに送信されます。この通知を有効にするには、アカウントマネージャーにお問い合わせください。

パラメータ種類説明文
notification_type
string通知の種類。 必須。
user
objectユーザーの詳細(オブジェクト)。
user.ip
stringユーザーIP。
user.email
stringユーザーのEメール。
user.id
stringユーザーID。 必須。
user.name
stringユーザー名。
user.country
stringユーザーの国。2文字の国コード(大文字)は、ISO 3166-1 alpha-2に従って使用されます。
user.zip
stringZipまたは郵便番号。
payment_account
object決済アカウントの詳細(オブジェクト)。
payment_account.id
string決済アカウントID。 必須。
payment_account.name
string決済システムの決済アカウント名、例えば、決済カードの番号、メール。
payment_account.payment_method
integer決済方法のID。
payment_account.type
string決済アカウントの種類、例えば、カード、ペイパル。
Copy
Full screen
http
  • http
  • curl
リクエスト
POST /your/uri HTTP/1.1
Host:           your.hostname
Accept:         application/json
Content-Length: 255
Content-Type:   application/json
Authorization:  Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843

{
    "notification_type": "payment_account_add",
    "user": {
        "ip": "127.0.0.1",
        "email": "email@example.com",
        "id": "1234567",
        "name": "John Smith",
        "country": "RU",
        "zip": "12345"
    },
    "payment_account": {
        "id": "12345678",
        "name": "email@example.com",
        "payment_method": "24",
        "type": "paypal"
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \
-d '{
    "notification_type":"payment_account_add",
    "user": {
        "ip": "127.0.0.1",
        "email": "email@example.com",
        "id": "1234567",
        "name": "John Smith",
        "country": "RU",
        "zip": "12345"
    },
    "payment_account": {
        "id": "12345678",
        "name": "email@example.com",
        "payment_method": "24",
        "type": "paypal"
    }
}'
レスポンス
HTTP/1.1 204 No Content

決済アカウントを削除する

ユーザーが保存済みアカウントから決済アカウントを削除するたびに送信されます。この通知を有効にするには、アカウントマネージャーにお問い合わせください。

パラメータ種類説明文
notification_type
string通知の種類。 必須。
user
objectユーザーの詳細(オブジェクト)。
user.email
stringユーザーのEメール。
user.id
stringユーザーID。 必須。
user.name
stringユーザー名。
payment_account
object決済アカウントの詳細(オブジェクト)。
payment_account.id
string決済アカウントID。 必須。
payment_account.name
string決済システムの決済アカウント名、例えば、決済カードの番号、メール。
payment_account.payment_method
integer決済方法のID。
payment_account.type
string決済アカウントの種類、例えば、カード、ペイパル。
Copy
Full screen
http
  • http
  • curl
リクエスト
POST /your/uri HTTP/1.1
Host:           your.hostname
Accept:         application/json
Content-Length: 258
Content-Type:   application/json
Authorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523


{
    "notification_type": "payment_account_remove",
    "user": {
        "email": "email@example.com",
        "id": "1234567",
        "name": "John Smith"
    },
    "payment_account": {
        "id": "12345678",
        "name": "email@example.com",
        "payment_method": "24",
        "type": "paypal"
    }
}
$ curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \
-d '{
    "notification_type": "payment_account_remove",
    "user": {
        "email": "email@example.com",
        "id": "1234567",
        "name": "John Smith"
    },
    "payment_account": {
        "id": "12345678",
        "name": "email@example.com",
        "payment_method": "24",
        "type": "paypal"
    }
}'
レスポンス
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"
    }
}