Pay2Play
Pay2Play 모듈을 통해 웹사이트에서 직접 게임 개발자가 PIN 코드를 판매할 수 있습니다. 사용자는 Pay2Play 위젯을 사용하여 상점에 액세스할 수 있습니다. 모듈에는 다양한 통합 옵션이 있으므로 개발자는 다음을 수행할 수 있습니다.
- 다른 DRM 플랫폼 선택
- 각 DRM 플랫폼에 다른 가격 설정
- 위젯 크기와 컬러 테마 구성
- 개발자에게 팁 지급
Pay2Play 모듈을 통해 웹사이트에서 직접 게임 개발자가 PIN 코드를 판매할 수 있습니다. 사용자는 Pay2Play 위젯을 사용하여 상점에 액세스할 수 있습니다. 모듈에는 다양한 통합 옵션이 있으므로 개발자는 다음을 수행할 수 있습니다.
기본 통합 구현 방법:
통합에 필요한 매개변수는 다음과 같습니다.
Xsolla 샌드박스는 실제 결제를 제외한 결제 프로세스 관련 모든 기능을 지원하는 독립형 환경입니다. access_data 오브젝트 내에서 "settings.mode" = "sandbox"를 전송하여 샌드박스에 액세스할 수 있습니다. access_data의 JSON 구조와 매개변수는 토큰 요청과 동일합니다.
은행 카드 결제 테스트 방법:
중요 정보! 샌드박스 은행 카드 결제는 USD, EUR, RUB, GBP, SGD, HKD 또는 THB로만 이용할 수 있습니다.
Pay2Play 위젯은 라이트 박스(데스크톱 화면)나 새로운 창(모바일 및 태블릿 화면)에서 상점을 엽니다. 위젯이 자동으로 장치의 유형을 판별합니다. 위젯 코드를 얻으려면, 게시자 계정에서 모듈 설정을 연 후 게시 탭으로 이동합니다. 원하는 위젯 코드를 복사한 후 게임 웹사이트에 추가합니다. 비동기 로딩 기능을 사용하는 것이 좋습니다.
비동기 로딩 예제
<script>
var access_data = {"settings":{"project_id":14004},"purchase":{"pin_codes":{"codes":[{"digital_content":"game_sku"}]}}};
var target_element = "#widget-example-element";
var s = document.createElement('script');
s.type = "text/javascript";
s.async = true;
s.src = "//static.xsolla.com/embed/pay2play/2.1.0/widget.min.js";
s.addEventListener('load', function (e) {
var widgetInstance = XPay2PlayWidget.create(access_data,target_element);
}, false);
var head = document.getElementsByTagName('head')[0];
head.appendChild(s);
</script>
위젯 초기화 매개변수의 전체 목록은 API Reference에서 확인할 수 있으며, 설치에 대한 지침은 GitHub에서 확인할 수 있습니다.
고급 통합 구현 방법:
통합에 필요한 매개변수는 다음과 같습니다.
상점과 통합할 토큰을 받아야 합니다. 토큰은 게임/사용자 데이터 및 결제 설정을 포함하는 문자열입니다. Xsolla API는 기본 HTTP 인증을 사용합니다. 판매자 ID를 사용자 이름으로 지정하고 API 키를 암호로 지정합니다.
샌드박스 모드를 활성화하려면 "mode" = "sandbox"로 설정합니다.
토큰 검색 URL:
https://api.xsolla.com/merchant/merchants/{merchant_id}/token
결제 UI로 전달하기 원하는 매개변수를 포함하여 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 Reference에서 확인할 수 있습니다.
Xsolla는 프로젝트에 다음과 같은 웹훅을 전송합니다.
메시지 본문 없이 HTTP 코드 204로 응답하여 웹훅을 수신하였음을 확인합니다. 예제와 웹훅 처리에 대한 자세한 내용은 API Reference에서 확인할 수 있습니다.
전자 서명 생성 방법:
웹훅을 처리할 때 수신한 서명이 서명 헤더에 설정된 서명과 일치하는지 확인합니다.
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 Reference에서 확인할 수 있습니다.
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 Reference에서 확인할 수 있습니다.
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 Reference에서 확인할 수 있습니다.
웹훅 처리 테스트 방법:
Xsolla 샌드박스는 실제 결제를 제외한 결제 프로세스 관련 모든 기능을 지원하는 독립형 환경입니다. "mode" = "sandbox"를 전송하여 샌드박스에 액세스할 수 있습니다(토큰 입수 시 가능).
은행 카드 결제 테스트 방법:
중요 정보! 샌드박스 은행 카드 결제는 USD, EUR, RUB, GBP, SGD, HKD 또는 THB로만 이용할 수 있습니다.
Pay2Play 위젯은 라이트 박스(데스크톱 화면)나 새로운 창(모바일 및 태블릿 화면)에서 상점을 엽니다. 위젯이 자동으로 장치의 유형을 판별합니다. 위젯 코드를 얻으려면, 게시자 계정에서 모듈 설정을 연 후 게시 탭으로 이동합니다. 원하는 위젯 코드를 복사한 후 게임 웹사이트에 추가합니다. 비동기 로딩 기능을 사용하는 것이 좋습니다.
비동기 로딩 예제
<script>
var access_data = {"settings":{"project_id":14004},"purchase":{"pin_codes":{"codes":[{"digital_content":"game_sku"}]}}};
var target_element = "#widget-example-element";
var s = document.createElement('script');
s.type = "text/javascript";
s.async = true;
s.src = "//static.xsolla.com/embed/pay2play/2.1.0/widget.min.js";
s.addEventListener('load', function (e) {
var widgetInstance = XPay2PlayWidget.create(access_data,target_element);
}, false);
var head = document.getElementsByTagName('head')[0];
head.appendChild(s);
</script>
위젯 초기화 매개변수의 전체 목록은 API Reference에서 확인할 수 있으며, 설치에 대한 지침은 GitHub에서 확인할 수 있습니다.
프로젝트는 각 구매에 대한 팁을 받을 수 있습니다. 옵션을 활성화하려면, Pay2Play 가격 설정을 열고 Pay2Play 위젯에서 팁 사용을 켜기로 설정합니다. 추가한 각각의 통화에 대해 사전에 정의한 3개의 팁 금액을 사용할 수 있습니다.
사용자는 상점에 들어가기 전에 팁 금액을 선택할 수 있습니다. 팁은 구매 가격에 추가됩니다.
파일에 PIN 코드 목록을 업로드하는 대신 구매가 이루어진 후에 각각 PIN 코드를 전송할 수 있습니다. 기능 활성화 방법:
한 프로젝트에 판매할 수 있는 PIN 코드 수를 제한할 수 있습니다. 100개 이하의 PIN 코드가 남은 경우와 PIN 코드가 남지 않은 경우에 이메일 알림을 받게 됩니다. 한도를 초과한 경우, 사용자는 결제할 수 없게 됩니다.
Pay2Play 모듈을 사용하여 PIN 코드 판매 지역을 제한하는 설정을 할 수 있습니다. 특히, 다음과 같은 작업을 수행할 수 있습니다.
프로젝트를 올바르게 구성하면, 제한된 국가에서 PIN 코드를 구매하려는 사용자에게 해당 경고가 표시됩니다. PIN 코드 판매가 금지된 국가에서는 결제할 수 없습니다.
이 기능을 사용하려면 계정 관리자에게 문의하십시오. 지역 제한이 적용되는 각 플랫폼에 대해 다음과 같은 정보가 필요합니다.
단일 플랫폼의 경우 한 국가는 가격이 다른 그룹 또는 선주문이 비활성화되어 있는 그룹 중 하나에 속할 수 있습니다. 그룹에 속하지 않은 국가의 경우 PIN 코드를 기본 모듈 설정에서 설정한 가격으로 아무런 제한 없이 판매할 수 있습니다.
중요 정보! PIN 코드 활성화 및 게임 출시를 자신 또는 DRM 플랫폼에서 수행하는 경우, 릴리스 날짜에 지역 제한을 미리 구성한 PIN 코드를 업로드해야 합니다.