支付中心API v2.0

概览

此部分介绍用于支付中心的方法。请使用基本认证来调用方法。要打开支付UI并启用安全支付,需先获取令牌

端点路径:https://api.xsolla.com

支付 UI

打开支付中心

支付中心是一个完整的支付UI,允许用户在您的网站上购买游戏和商品。要轻松在网站上实现该支付UI,请从我们的CDN下载以下脚本:链接。请使用该URL将脚本集成到您的网站。如需更多信息,请访问我们的GitHub存储库

用于脚本初始化的参数列表:

参数类型描述
access_token
string令牌,通过API接收。 必需
sandbox
boolean设置为 true 以测试支付流程,将使用 sandbox-secure.xsolla.com 而不是 secure.xsolla.com
lightbox
object带有选项列表的对象,可用于打开 lightbox(桌面版本)。
lightbox.width
stringLightbox 框架的宽度。如果为null,则取决于支付中心的宽度。默认值为null。
lightbox.height
stringlightbox 框架的高度。如果为null,则取决于支付中心的高度。默认值为'100%'。
lightbox.zIndex
integer控制垂直堆叠顺序的属性,默认值为 1000。
lightbox.overlayOpacity
integer叠加的不透明度(从 0 到 1),默认值为'0.6'。
lightbox.overlayBackground
string叠加的背景,默认值为'#000000'。
lightbox.modal
booleanlightbox 框架不可关闭,默认值为'false'。
lightbox.closeByClick
boolean切换单击叠加关闭 lightbox,默认值为'true'。
lightbox.closeByKeyboard
boolean切换按ESC键关闭 lightbox,默认值为'true'。
lightbox.contentBackground
string框架的背景,默认值为'#ffffff'。请注意,颜色更改不会影响支付中心iframe本身,只会影响容纳iframe的灯箱的设置。
lightbox.contentMargin
string框架页边,默认值为'10px'。
lightbox.spinner
string加载过程显示控件的动画类型。可为'xsolla'或'round'。默认值为'xsolla'。
lightbox.spinnerColor
string旋转加载动画的颜色,非默认设置。
childWindow
object支付中心UI所在子窗口的选项。适用于移动版本。
childWindow.target
string指定打开支付中心窗口的位置,可以是'_blank'、'_self'、'_parent',默认值为'_blank'。

脚本使您可以跟踪支付UI发生的事件。根据事件的类型,可以在网页上执行各种操作。

事件列表:

参数描述
init小部件初始化事件。
open打开小部件时的事件。
load已加载支付UI(支付中心)。
close已关闭支付UI(支付中心)。
status用户在状态页面上移动时的事件。
status-invoice用户在状态页面上移动但支付尚未完成时的事件。
status-delivering用户在状态页面上移动,支付完成以及我们正在发送支付通知时的事件。
status-done用户在状态页面上移动且支付已成功完成时的事件。
status-troubled用户在状态页面上移动但支付失败时的事件。

如果您想要自行初始化打开支付 UI,使用链接 https://secure.xsolla.com/paystation2/?access_token=ACCESS_TOKEN 即可。

如用于测试,请使用以下URL:https://sandbox-secure.xsolla.com/paystation2/?access_token=ACCESS_TOKEN

Notice: 参数 access_token 包含隐私用户数据。请确保获取该参数时使用服务器对服务器通信。
Copy
Full screen
php
  • php
  • html
通过回调进行异步脚本加载的示例
<html>
<head lang="en">
    <meta charset="UTF-8">
</head>
<body>
    <button data-xpaystation-widget-open>Buy Credits</button>

    <?php \Xsolla\SDK\API\PaymentUI\PaymentUIScriptRenderer::send($paymentUIToken, $isSandbox = true); ?>
</body>
</html>
<script>
    var options = {
        access_token: 'abcdef1234567890abcdef1234567890'
    };
    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>Buy Credits</button>

支付UI事件

iframe中或通过Pay Station Embed打开支付中心时,通过postMessage机制处理支付界面事件。

事件描述
show-error-page显示一个错误。错误文本包含在'value'中传递。
open-{state_name}在支付UI中打开一个页面。
create-invoice在艾克索拉侧创建发票。
close-widget关闭支付UI。
click-email-submit从状态页面发送电子邮件。
click-custom-package-continue购买任意数量的虚拟货币时单击继续按钮。
click-comment单击发表评论的按钮。
click-buy-package购买虚拟货币套餐时单击购买套餐按钮。
click-buy-gift-package购买虚拟货币套餐作为礼物时单击该按钮。
click-buy-gift-custom-package购买任意数量的虚拟货币作为礼物时单击该按钮。
click-btn-share单击分享到社交网络的按钮。社交网络名称包含在'value'中传递。
click-btn-pay在账单数据项目表单上单击立即支付
click-btn-continue单击购买订阅的按钮。
click-btn-apply兑换优惠券时单击应用按钮。
click-btn-activate激活游戏密钥时单击激活按钮。
click-btn-accept单击购买数字内容的按钮。
choose-payment-widget单击付款方式小组件。小组件名称包含在'value'中传递。
choose-method选择付款方式。付款方式名称包含在'value'中传递。
change-status更改付款状态。如果用户关闭支付UI或离开页面,则状态即改变且不会发送事件消息。

事件参数通过postMessage发送的消息传递。如果尚未收集到参数信息,则会收到空字符串。

参数类型描述
actionstring事件名称。
valuestring其他参数。包含根据用户选择而变的特定事件参数。
statestring支付UI页面,操作在该页面上完成。
datestringGMT格式的日期和时间。
millisecondsnumberUnix时间格式的日期和时间。
timezonestring用户时区。
session_idstring会话ID。该会话包含30分钟内或支付UI关闭前用户进行的所有操作。会话从打开支付UI的一刻开始,并在支付UI页面刷新时保存。
payment_countrystring付款国家/地区。
purchase_invoice_idnumber艾克索拉系统中的付款发票ID。
purchase_external_idstring合作伙伴系统中的付款发票ID。
purchase_typestring购买类型。可以是'virtual item'、'virtual currency'、'pay2play'、'subscription'。
purchase_sumnumber票面购买金额。
purchase_currencystring购买货币。
purchase_skustring已购商品的SKU。
purchase_digital_content_skustring已购游戏密钥套餐的SKU。
purchase_descriptionstring购买描述。
virtual_currency_amountnumber虚拟货币金额。
coupon_codestring优惠券代码。
subscription_package_external_idnumber订阅ID。
subscription_package_namestring订阅名称。
subscription_package_descriptionstring订阅描述。
total_sumnumber总购买金额,包含所有费用。
total_sum_currencystring总购买金额货币。
user_idstring用户ID (v1)。
user_countrystring用户所在国家/地区。
payment_instance_namestring付款方式名称。

事件链接到用户购买商品时执行的所有操作的页面。

状态描述
cart列出要使用虚拟货币购买的物品以及购买确认的页面。
coupon优惠券项目表单。
giftcard包含礼品卡列表的页面(礼品卡小组件)。
giftrecipient礼物购买页面。
history购买历史记录页面。
index打开应用程序后将用户重定向到的服务页面。不对用户显示。
legal包含法律文件链接的页面的移动设备版。
list付款方式列表。
paybycash包含通过自助终端机购买时支持的付款方式列表的页面(现金支付小组件)。
payment付款表单。
paymentaccount包含已保存的支付帐户的页面。
paymentreturn完成付款后将用户重定向到的服务页面,从该页面将用户发送到状态页面。不对用户显示。
pincart包含数字内容平台列表的页面。
pricepoint虚拟货币商店。
savedmethod已保存的付款方式列表。
shippingaddress收货地址表单。
status状态页面。
subscription订阅计划商店。
subscriptionchange订阅计划更改。
useraccount帐户信息页面(用户名、余额),包含对未来商品购买禁用确认屏幕设置。
userinventory用户物品库。
usermenu用户菜单页的移动设备版。
usersubscription用户订阅管理。
usersubscriptioninfo订阅详情页面。
virtualitem虚拟物品商店。


要发送事件到Google Analytics(分析)Facebook Analytics帐户,需先集成这些分析平台。

测试卡片列表

在沙盒中,您可以使用下列信用卡模拟成功的支付:

卡片3-D Secure
卡号:4111111111111111
过期日期:12/40
CVV2:123
卡片类型:VISA
没有
卡号:5555555555554444
过期日期:11/40
CVV2:321
卡片类型:MasterCard
没有
卡号:4000000000000010
过期日期:12/40
CVV2: 123
卡片类型:VISA
卡号:5200000000000114
过期日期:11/40
CVV2:321
卡片类型:MasterCard
卡号:6759649826438453
过期日期:12/40
CVV2:321
卡片类型:Maestro

此外,您还可以使用下列数据模拟被拒绝的交易:

卡片3-D Secure描述
卡号:4000000000000002
过期日期:12/40
CVV2:123
卡片类型:VISA
没有资金不足
卡号:5200000000000007
过期日期:11/40
CVV2:321
卡片类型:MasterCard
没有资金不足
卡号:4000000000000036
过期日期:12/40
CVV2:123
卡片类型:VISA
拒绝
卡号:5200000000000031
过期日期:11/40
CVV2:321
卡片类型:MasterCard
拒绝

错误列表

代码描述
0004-0001令牌过期或者不正确。
0004-0008错误的 URL(尝试以secure.xsolla.com访问沙盒模式或者以sandbox-secure.xsolla.com访问实时模式)。
0002-0004未签署协议。
0004-0010已禁止无令牌集成。
0010-0001未找到套餐。
0010-0003套餐未配置数字版权管理(DRM)。
1000-0003该项目没有启用模块。
0004-0003未传递项目ID。
0004-0009access_data的JSON无效。
0003-0001所选国家/地区禁止进行支付。
1000-0002网络错误。初始化过程中未收到API响应。
0007-0009无法通过该令牌更改订阅计划。新订阅计划的货币与现有计划设置的不同。
0004-0002数字签名不正确。
0005-0001从账单检索用户数据时出错。
1000-0004未收到状态页面的数据。
1000-0001网络错误。API未响应。
1004-0001禁止更改该订阅计划。
0002-0002项目不存在。

直接支付

列示已保存的支付帐户

列示已保存的用户支付帐户。

HTTP请求

GET https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payment_accounts

参数类型描述
project_id
integer项目ID。
user_id
integer用户ID。
Copy
Full screen
http
  • http
  • curl
  • php
  • C#
  • python
  • ruby
  • java
  • js
请求
GET https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payment_accounts

Headers:
  Authorization: Basic <your_authorization_basic_key>
curl --request GET \
  --url https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payment_accounts \
  --header 'authorization: Basic <your_authorization_basic_key> '
<?php

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

$request->setRequestUrl('https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payment_accounts');
$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/projects/{project_id}/users/{user_id}/payment_accounts");
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/projects/{project_id}/users/{user_id}/payment_accounts", 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/projects/{project_id}/users/{user_id}/payment_accounts")

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/projects/{project_id}/users/{user_id}/payment_accounts")
  .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/projects/{project_id}/users/{user_id}/payment_accounts");
xhr.setRequestHeader("authorization", "Basic <your_authorization_basic_key> ");

xhr.send(data);
响应
[
  {
    "id": 4612345,
    "name": "PP_saved_account",
    "payment_system": {
      "id": 24,
      "name": "PayPal"
    },
    "type": "paypal"
  }
]
[
  {
    "id": 4612345,
    "name": "PP_saved_account",
    "payment_system": {
      "id": 24,
      "name": "PayPal"
    },
    "type": "paypal"
  }
]
[
  {
    "id": 4612345,
    "name": "PP_saved_account",
    "payment_system": {
      "id": 24,
      "name": "PayPal"
    },
    "type": "paypal"
  }
]
[
  {
    "id": 4612345,
    "name": "PP_saved_account",
    "payment_system": {
      "id": 24,
      "name": "PayPal"
    },
    "type": "paypal"
  }
]
[
  {
    "id": 4612345,
    "name": "PP_saved_account",
    "payment_system": {
      "id": 24,
      "name": "PayPal"
    },
    "type": "paypal"
  }
]
[
  {
    "id": 4612345,
    "name": "PP_saved_account",
    "payment_system": {
      "id": 24,
      "name": "PayPal"
    },
    "type": "paypal"
  }
]
[
  {
    "id": 4612345,
    "name": "PP_saved_account",
    "payment_system": {
      "id": 24,
      "name": "PayPal"
    },
    "type": "paypal"
  }
]
[
  {
    "id": 4612345,
    "name": "PP_saved_account",
    "payment_system": {
      "id": 24,
      "name": "PayPal"
    },
    "type": "paypal"
  }
]

通过已保存的帐户收费

使用已保存的支付帐户收费。

HTTP请求

POST https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payments/{type}/{account_id}

参数类型描述
project_id
integer项目ID。 必需
user_id
integer用户ID。 必需
type
string支付帐户类型:卡片/paypal。 必需
account_id
integer艾克索拉数据库中已保存的帐户的ID。 必需
user
object带用户相关数据的对象。
user.ip
string用户 IP。 必需
user.name
string用户名。
purchase
object带有购买相关数据的对象。
purchase.virtual_currency
object带有虚拟货币相关数据的对象。
purchase.virtual_currency.quantity
float使用虚拟货币购买的数量。
purchase.checkout
object带有结账参数相关数据的对象。
purchase.checkout.currency
string购买币种。参照ISO 4217标准的三字母货币代码。
purchase.checkout.amount
float购买金额。
settings
object带有购买设置相关数据的对象。
settings.mode
string设置'沙盒'值以测试支付流程。对于真实支付,应移除此参数。
custom_parameters
string您的自定义参数。应当是带键值对的有效 JSON 哈希。
Copy
Full screen
http
  • http
  • curl
  • php
  • C#
  • python
  • ruby
  • java
  • js
请求
POST https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payments/{type}/{account_id}

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

Body:
  {
  "card": {
    "cvn": "123"
  },
  "purchase": {
    "description": {
      "value": "currency purchase"
    },
    "virtual_currency": {
      "quantity": 100
    }
  },
  "settings": {
    "currency": "USD",
    "external_id": "ext123",
    "save": true
  },
  "user": {
    "id": "user123",
    "name": "John Smith"
  }
}
curl --request POST \
  --url https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payments/{type}/{account_id} \
  --header 'authorization: Basic <your_authorization_basic_key>' \
  --header 'content-type: application/json' \
  --data '{"user":{"id":"user123","name":"John Smith"},"card":{"cvn":"123"},"purchase":{"virtual_currency":{"quantity":100},"description":{"value":"currency purchase"}},"settings":{"save":true,"currency":"USD","external_id":"ext123"}}'
<?php

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

$body = new http\Message\Body;
$body->append('{"user":{"id":"user123","name":"John Smith"},"card":{"cvn":"123"},"purchase":{"virtual_currency":{"quantity":100},"description":{"value":"currency purchase"}},"settings":{"save":true,"currency":"USD","external_id":"ext123"}}');

$request->setRequestUrl('https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payments/{type}/{account_id}');
$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/projects/{project_id}/users/{user_id}/payments/{type}/{account_id}");
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\":\"user123\",\"name\":\"John Smith\"},\"card\":{\"cvn\":\"123\"},\"purchase\":{\"virtual_currency\":{\"quantity\":100},\"description\":{\"value\":\"currency purchase\"}},\"settings\":{\"save\":true,\"currency\":\"USD\",\"external_id\":\"ext123\"}}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
import http.client

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

payload = "{\"user\":{\"id\":\"user123\",\"name\":\"John Smith\"},\"card\":{\"cvn\":\"123\"},\"purchase\":{\"virtual_currency\":{\"quantity\":100},\"description\":{\"value\":\"currency purchase\"}},\"settings\":{\"save\":true,\"currency\":\"USD\",\"external_id\":\"ext123\"}}"

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

conn.request("POST", "/merchant/v2/projects/{project_id}/users/{user_id}/payments/{type}/{account_id}", 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/projects/{project_id}/users/{user_id}/payments/{type}/{account_id}")

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\":\"user123\",\"name\":\"John Smith\"},\"card\":{\"cvn\":\"123\"},\"purchase\":{\"virtual_currency\":{\"quantity\":100},\"description\":{\"value\":\"currency purchase\"}},\"settings\":{\"save\":true,\"currency\":\"USD\",\"external_id\":\"ext123\"}}"

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\":\"user123\",\"name\":\"John Smith\"},\"card\":{\"cvn\":\"123\"},\"purchase\":{\"virtual_currency\":{\"quantity\":100},\"description\":{\"value\":\"currency purchase\"}},\"settings\":{\"save\":true,\"currency\":\"USD\",\"external_id\":\"ext123\"}}");
Request request = new Request.Builder()
  .url("https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payments/{type}/{account_id}")
  .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": "user123",
    "name": "John Smith"
  },
  "card": {
    "cvn": "123"
  },
  "purchase": {
    "virtual_currency": {
      "quantity": 100
    },
    "description": {
      "value": "currency purchase"
    }
  },
  "settings": {
    "save": true,
    "currency": "USD",
    "external_id": "ext123"
  }
});

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/projects/{project_id}/users/{user_id}/payments/{type}/{account_id}");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("authorization", "Basic <your_authorization_basic_key>");

xhr.send(data);
响应
{
    "transaction_id": 123458390
}
{
    "transaction_id": 123458390
}
{
    "transaction_id": 123458390
}
{
    "transaction_id": 123458390
}
{
    "transaction_id": 123458390
}
{
    "transaction_id": 123458390
}
{
    "transaction_id": 123458390
}
{
    "transaction_id": 123458390
}

删除已保存的支付帐户

删除已保存的支付帐户。

HTTP请求

DELETE https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payment_accounts/{type}/{account_id}

参数类型描述
project_id
integer项目ID。
user_id
integer用户ID。
type
string支付帐户类型:卡片/paypal。
account_id
integer艾克索拉数据库中已保存的帐户的ID。
Copy
Full screen
http
  • http
  • curl
  • php
  • C#
  • python
  • ruby
  • java
  • js
请求
DELETE https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payment_accounts/{type}/{account_id}

Headers:
  Authorization: Basic <your_authorization_basic_key>
curl --request DELETE \
  --url https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payment_accounts/{type}/{account_id} \
  --header 'authorization: Basic <your_authorization_basic_key>'
<?php

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

$request->setRequestUrl('https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payment_accounts/{type}/{account_id}');
$request->setRequestMethod('DELETE');
$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/projects/{project_id}/users/{user_id}/payment_accounts/{type}/{account_id}");
var request = new RestRequest(Method.DELETE);
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("DELETE", "/merchant/v2/projects/{project_id}/users/{user_id}/payment_accounts/{type}/{account_id}", 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/projects/{project_id}/users/{user_id}/payment_accounts/{type}/{account_id}")

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

request = Net::HTTP::Delete.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/projects/{project_id}/users/{user_id}/payment_accounts/{type}/{account_id}")
  .delete(null)
  .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("DELETE", "https://api.xsolla.com/merchant/v2/projects/{project_id}/users/{user_id}/payment_accounts/{type}/{account_id}");
xhr.setRequestHeader("authorization", "Basic <your_authorization_basic_key>");

xhr.send(data);
响应