仮想通貨
仮想通貨モジュールにより、開発者はゲーム内通貨を包括的に販売することができます。このモジュールにはさまざまな統合オプションがあり、ゲームプロジェクトでは次のことを行うことができます。
- パッケージと任意の金額のゲーム内通貨を販売、
- 複数の通貨に対するサポートの利用、
- カスタム画像とプロモーションラベルの使用、
- マーケティングキャンペーンの実行、
- ゲーム内通貨のユーザー残高の管理、
- ユーザーの通貨と国の自動検出。
仮想通貨モジュールにより、開発者はゲーム内通貨を包括的に販売することができます。このモジュールにはさまざまな統合オプションがあり、ゲームプロジェクトでは次のことを行うことができます。
モジュールの統合:
統合には次のパラメータが必要です。
ストアと統合するには、トークンを取得する必要があります。 トークンは、ゲームやユーザーデータと支払設定を含む文字列です。 Xsolla APIは、基本的なHTTP認証を使用します。マーチャントIDをユーザー名、APIキーをパスワードとして指定します。
サンドボックスモードを有効にするには、 "mode" = "sandbox"に設定します。
トークンの取得はこの URL から:
https://api.xsolla.com/merchant/merchants/{merchant_id}/token
決済インターフェースに引き渡すパラメータを含めることによって、HTTP POSTリクエストを変更することができます。リクエストとレスポンスは両方ともJSON形式です。
PHPとXsolla PHP SDKを使用してトークンを取得する例を示します。別の言語を使用する場合は、CURLベースの例(CURLをクリック)をご参照ください。
<?php
use Xsolla\SDK\API\XsollaClient;
use Xsolla\SDK\API\PaymentUI\TokenRequest;
$tokenRequest = new TokenRequest($projectId, $userId);
$tokenRequest->setUserEmail('email@example.com')
->setExternalPaymentId('12345')
->setSandboxMode(true)
->setUserName('USER_NAME')
->setCustomParameters(array('key1' => 'value1', 'key2' => 'value2'));
$xsollaClient = XsollaClient::factory(array(
'merchant_id' => MERCHANT_ID,
'api_key' => API_KEY
));
$token = $xsollaClient->createPaymentUITokenFromRequest($tokenRequest);
curl -v https://api.xsolla.com/merchant/merchants/{merchant_id}/token \
-X POST \
-u your_merchant_id:merchant_api_key \
-H 'Content-Type:application/json' \
-H 'Accept: application/json' \
-d '
{
"user":{
"id":{
"value":"1234567"
},
"email":{
"value":"email@example.com"
}
},
"settings":{
"project_id":14004,
"mode":"sandbox"
}
}'
パラメータの完全なリストはAPI リファレンスでご参照ください。
ストアの開き方:
サンドボックスモードでストアを開くには、次のURLを使用してください:https://sandbox-secure.xsolla.com/
Pay Station埋め込みスクリプトはデバイスの種類を判断し、ライトボックス(デスクトップ画面)または新しいウィンドウ(モバイル画面とタブレット画面)でストアインターフェースを開きます。非同期スクリプトの読み込みを使用することをお勧めします。
非同期ロードの例
<script>
var options = {
access_token:'ACCESS_TOKEN'、// TODO 前のステップで受信したアクセストークンを使用する
andbox:true // TODO 稼働時にこの設定を削除することを忘れないでください
};
var s = document.createElement('script');
s.type = "text/javascript";
s.async = true;
s.src = "https://static.xsolla.com/embed/paystation/1.0.7/widget.min.js";
s.addEventListener('load', function (e) {
XPayStationWidget.init(options);
}, false);
var head = document.getElementsByTagName('head')[0];
head.appendChild(s);
</script>
<button data-xpaystation-widget-open>クレジットの購入</button>
パラメータの完全なリストはAPI リファレンスで参照できます。
新しいウィンドウで決済インターフェース開くには、次のリンクを使用してください:https://secure.xsolla.com/paystation2/?access_token=ACCESS_TOKEN、ACCESS_TOKENは、前のステップで取得したトークンです。
iframeでストアのインターフェースを開くには、次のメカニズムを実装する必要があります。
新しいウィンドウで決済インターフェース開くには、次のリンクを使用してください:https://secure.xsolla.com/paystation2/?access_token=ACCESS_TOKEN、ACCESS_TOKENは、前のステップで取得したトークンです。
Xsolla は以下のウェブフックをプロジェクトに送信します:
メッセージ本体なしでHTTPコード204で応答することによってウェブフックの受信を確認します。ウェブフック処理の詳細と例については、APIリファレンスをご参照ください。
電子署名の作成:
ウェブフックを取り扱う際、受信した署名が署名ヘッダーに設定されたものと一致することを確認します。
Xsolla サーバーはプロジェクトのウェブフック URL にリクエストを送信して、ユーザーがゲーム内に存在することを確認します。
リクエストの例
$request = array(
'notification_type' => 'user_validation',
'user' => array(
'ip' => '127.0.0.1',
'phone' => '18777976552',
'email'=> 'email@example.com',
'id'=> '1234567',
'country' => 'US'
)
)
curl -v https://example.com/ \
-X POST \
-H 'Content-Type:application/json' \
-H 'Accept: 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",
"country":"US"
}
}'
パラメータの完全なリストはAPI リファレンスで参照できます。
Xsolla サーバーは、ユーザーが支払いを完了するたびに、支払いの詳細情報を含むウェブフックを送信します。
リクエストの例
$request = array(
'notification_type' => 'payment',
'purchase' => array(
'virtual_items' => array(
'items' => array(
0 => array(
'sku' => 'test_item1',
'amount' => 1,
),
1 => array(
'sku' => 'test_item2',
'amount' => 1,
),
2 => array(
'sku' => 'test_item3',
'amount' => 1,
),
)
),
'total' => array(
'currency' => 'USD',
'amount' => 9.99
)
),
'user' => array(
'ip' => '127.0.0.1',
'phone' => '18777976552',
'email' => 'email@example.com',
'id' => '1234567',
'country' => 'US'
),
'transaction' => array(
'id' => 87654321,
'payment_date' => '2014-09-23T19:25:25+04:00',
'payment_method' => 1380,
'dry_run' => 1
),
'payment_details' => array(
'payment' => array(
'currency' => 'USD',
'amount' => 9.99
),
'vat' => array(
'currency' => 'USD',
'amount' => 0
),
'payout_currency_rate' => 1,
'payout' => array(
'currency' => 'USD',
'amount' => 9.49
),
'xsolla_fee' => array(
'currency' => 'USD',
'amount' => 0.19
),
'payment_method_fee' => array(
'currency' => 'USD',
'amount' => 0.31
)
)
)
curl -v https://example.com/ \
-X POST \
-H 'Content-Type:application/json' \
-H 'Accept: application/json' \
-H 'Authorization:Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-d '
{
"notification_type": "payment",
"purchase":{
"virtual_items":{
"items": [
{
"sku": "test_item1",
"amount": 1
},
{
"sku": "test_item2",
"amount": 1
},
{
"sku": "test_item3",
"amount": 2
},
]
},
"total":{
"currency": "USD",
"amount": 9.99
}
},
"user":{
"ip":"127.0.0.1",
"phone":"18777976552",
"email":"email@example.com",
"id":"1234567",
"country":"US"
},
"transaction":{
"id": 87654321,
"payment_date": "2014-09-23T19:25:25+04:00",
"payment_method": 1380,
"dry_run": 1
},
"payment_details":{
"payment":{
"currency": "USD",
"amount": 9.99
},
"vat":{
"currency": "USD",
"amount": 0
},
"payout_currency_rate": 1,
"payout":{
"currency": "USD",
"amount": 9.49
},
"xsolla_fee":{
"currency": "USD",
"amount": 0.19
},
"payment_method_fee":{
"currency": "USD",
"amount": 0.31
}
}
}'
パラメータの完全なリストは、API リファレンスで参照してください。
Xsolla サーバーは、ユーザーが支払いをキャンセルするたびに、支払いの詳細情報を含むウェブフックを送信します。
リクエストの例
$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' => (
'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
)
)
);
curl -v https://example.com/ \
-X POST \
-H 'Content-Type:application/json' \
-H 'Accept: application/json' \
-H 'Authorization:Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
-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"
}
}
}'
パラメータの完全な一覧は、API リファレンスをご参照ください。
ウェブフックハンドラーのテスト:
Xsolla サンドボックスは独立した環境で、実際の決済を除くライブ環境のすべての機能をサポートします。サンドボックスにアクセスするには、トークンを取得する際に"mode" ="sandbox"を送信します。
銀行カードでの決済のテスト:
重要! サンドボックスの銀行カード決済はUSD、EUR、RUB、GBPでのみ実行可能です。
テスト成功後にモジュールを起動するには、アカウントで設定を開き、起動タブに移動してオンをクリックします。
重要! 支払いを受け取る前に、以下を行ってください:
トークンで渡されたcustom_parametersオブジェクトを使用して、ユーザーのゲーム内データを送信し、疑わしいアクティビティを検出することができます。例えば、ゲームに少ししか時間を費やしていないのに高レベルに達しているプレイヤーは、盗まれた銀行カードを使用してキャラクターをレベルアップした後にそれを販売するためにアカウントを作成した詐欺師という可能性があります。
アカウントマネージャーに、渡す予定のパラメータと、それぞれのパラメータのトリガー値を知らせてください。この情報を使用して不正防止フィルタを設定します。
ストアを開くと、settings.payment_methodパラメータで支払方法IDを送信することができます。この場合、ユーザーは直ちに、選択した支払方法の支払フォームにリダイレクトされます。
リクエストの例
curl -v https://api.xsolla.com/merchant/merchants/{merchant_id}/token \
-X POST \
-u your_merchant_id:merchant_api_key \
-H 'Content-Type:application/json' \
-H 'Accept: application/json' \
-d '
{
"user":{
"id":{
"value":"1234567"
},
},
"settings":{
"project_id":14004,
"payment_method": 24
}
}'
決済方法IDの一覧は、パブリッシャーアカウント> 決済システムまたは決済システムの一覧表示APIメソッドを使用して取得できます。
ストアを開くと、パッケージIDをpurchase.virtual_currency.quantityで送信することができます。この場合、ユーザーはすぐに決済インターフェースにリダイレクトされます。
リクエストの例
curl -v https://api.xsolla.com/merchant/merchants/{merchant_id}/token \
-X POST \
-u your_merchant_id:merchant_api_key \
-H 'Content-Type:application/json' \
-H 'Accept: application/json' \
-d '
{
"user":{
"id":{
"value":"1234567"
},
},
"settings":{
"project_id": 14004
},
"purchase": {
"virtual_currency": {
"quantity": 100
},
}
}'
ユーザーは、プロジェクトの設定ごとに、自分のニックネーム、電子メールなどを使用して自分自身を特定した後、決済端末でゲーム内通貨を購入することができます。機能の有効化:
ユーザーが任意の金額のゲーム内通貨を購入できるようにすることができます。機能の有効化: