在第三方网站上显示HTML5游戏的API,版本1.3


与HTML5游戏相关的API

在您的网站上显示我们的游戏非常简单。 为此,您至少需要一个激活的终端 (登录名和密码)。
集成步骤如下所述

步骤1 - 获取可用的HTML5游戏列表

要获取活跃游戏的列表,请使用以下命令


HTTPS GET apiserver.solutions/remote_games_web


API将返回以下结构的JSON数组:

		<actualdate>2017-06-30 06:15:17</actualdate>
		<gamescount>120</gamescount>
		<gamelist>GAME_ARRAY</gamelist>


其中,gamescount 是可用游戏的数量,gamelist 包含按类别划分的游戏数组
每个类别 (family)包含类别的ID (id)、类别名称 (name)以及一个包含游戏的子数组 (games)
 games 子数组中的每 个游戏都包含游戏的ID (id)、游戏名称 (name)、指向图标的网络链接 ( icon),以及以像素为单位的尺寸 (width 和 height)

步骤2 - 获取用户会话

要在您的网站上运行游戏,除了游戏的ID之外,您还需要一个活跃的用户 (终端)会话 若要取得會話 请使用用户会话管理API , 的“set”命令。
以下是要发送的数据示例:


<request>
<version>0.6</version>
<user_id>125</user_id>
<user_password>31003sdfds</user_password>
<operation>set</operation>
<show_packet>1</show_packet>
<response_url></response_url>
</request>


如果响应成功,您将从终端获得一个数据数组,其中可以找到活动会话的参数:
sessionid – 会话ID , key1, key2 - 密钥
有关与API会话交互的完整示例 请参阅相应章节

第 3 步:在您的網站上展示遊戲

完成前两步后,您将拥有一个活跃的终端会话和游戏列表
要按游戏编号显示游戏,请使用以下命令。


HTTPS GET apiserver.solutions/showgame?gameid=GAMEID&sid=SID&key1=KEY1&key2=KEY2


其中,GAMEID 是所需游戏的ID,SID、KEY1、KEY2 是会话参数
响应中,您将收到一个带有游戏原始大小的窗口。 您可以将其放在您网站上的弹出窗口中,或嵌 入到内嵌框架中,必要时按比例缩小尺寸。 此外,您还可以传递语言参数 LANG,可用的值是英文 (en)和俄文 (ru)。

其他遊戲伺服器 API 指南

通用 API 工作流程

API请求通过HTTPS协议执行,使用“POST”方法将XML请求发送到相应的API URL

步骤指南:

  1. 您需要生成一个XML请求签名。 签名有以下三种类型:
    • 类型1 - md5 (hall_secret + XML_request (line) + hall_secret),其中 hall_secret是大厅的密钥 (参见大厅API)
    • 类型2 - base64_encode (agent_password),其中agent_password是代理的密码 (参见代理API)
    • 类型3 - md5 (user_password + XML_request (line) + user_password),其中 user_password是用户 (终端)的密码 (适用于游戏日志API、会话API)
  2. XML请求应具有以下格式:$xml = 'XML data';
  3. 然后,您应使用base64编码对XML请求进行编码,并使用POST方法将其发送到指定的URL:字段 reg_xml => base64_encode (XML_request),字段reg_sign => signature
  4. 如果请求成功,您将收到一个以base64格式编码的XML数据包及其签名。 每个API描述中都有响 应字段的详细说明。 您可以在下面查看通用响应格式:
    <request>
    	<version>0.6</version>
    	<status>success</status>
    	<time>timestamp (unix_timestamp)</time>
    	...
    </request>
    		
  5. 如果出现任何故障,响应将包含以下4个字段:version、status、time、code (将包含错误代 码)。 您可以在下面查看通用响应格式:
    <request>
    	<version>0.6</version>
    	<status>failure</status>
    	<time>timestamp(unix_timestamp)</time>
    	...
    </request>
    		

如果出现故障,数据包中的 code 字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml, reg_sign)
required_fields_are_empty XML包中并非所有必需字段都存在
invalid_xml_format 请求的XML文档格式不正确
wrong_signature 包签名错误
wrong_api_version API版本指定不正确

获取游戏列表

有三种不同的游戏列表可供获取:

  1. https://apiserver.solutions/remote_games_list_new – 返回至少16款新游戏;
  2. https://apiserver.solutions/remote_games_list_pop – 返回至少16款热门游戏;
  3. https://apiserver.solutions/remote_games_list – 返回所有可用的游戏。

游戏列表可以以三种不同的格式接收:XML、JSON和JavaScript。 默认情况下,数据以XML格式 提供。 要指定输出格式,您应在请求行中传递参数 format 并设置为 xml、json 或 javascript。

请求的输出示例如下: https://apiserver.solutions/remote_games_list_new?format=json (JSON format):

{"gamelist":{"family":{"id":99,"name":"new","games":[{"id":245,"name":"flightsoffancy","icon":"http://content.stargame.solutions/api/game/icon/245","isaristocrat":1,"gametype":11,"url":"http://admin.stargamecasino.com/tote_opbetting3?gameid=245&x=329858436","width":1280,"height":1024},{"id":244,"name":"jaguarMist","icon":"http://content.stargame.solutions/api/game/icon/244","isaristocrat":1,"gametype":11,"url":"http://admin.stargamecasino.com/tote_opbetting3?gameid=244&x=1350294640","width":1400,"height":1024}]}}}

请求的输出示例如下: https://apiserver.solutions/remote_games_list_new?format=javascript (JavaScript format):

var casinoData = {"gamelist":{"family":{"id":99,"name":"new","games":[{"id":245,"name":"flightsoffancy","icon":"http://content.stargame.solutions/api/game/icon/245","isaristocrat":1,"gametype":11,"url":"http://admin.stargamecasino.com/tote_opbetting3?gameid=245&x=752267000","width":1280,"height":1024}]}}};

请求的输出示例如下: https://apiserver.solutions/remote_games_list (XML format):

<?xml version = "1.0" encoding = "utf-8" ?>
<root>
	<data>
		<actualdate>2014-12-12 06:15:17</actualdate>
		<gamescount>84</gamescount>
		<config>https://apiserver.solutions/flashconfig.php</config>
	</data>
	<gamelist>
		<family id="6" name="coolfire 2">
			<game>
				<id>211</id>
				<name>dragonemperor</name>
				<icon>https://apiserver.solutions/img/tote/games/cf_all/211.jpg</icon>
				<width>1024</width>
				<height>768</height>
				<url>https://apiserver.solutions/tote_opbetting3?gameid=211&x=353750879</url>
			</game>
			<game>
				<id>210</id>
				<name>diamonddestiny</name>
				<icon>https://apiserver.solutions/img/tote/games/cf_all/210.jpg</icon>
				<width>1024</width>
				<height>768</height>
				<url>https://apiserver.solutions/tote_opbetting3?gameid=210&x=804659655</url>
			</game>
			...
		</family>
		...
	</gamelist>
</root>

新游戏列表热门游戏列表 有相似的结构 但每个游戏块 <game> 游戏描述)都有额外的字段isaristocrat (更多信息请参见: 可用游戏列表的结构):

<game>
	<id>206</id>
	<name>50lions</name>
	<icon>https://apiserver.solutions/img/tote/games/cf_all/206.jpg</icon>
	<width>1024</width>
	<height>768</height>
	<url>https://apiserver.solutions/tote_opbetting3?gameid=206&x=2045331503</url>
</game>

游戏列表的数据会缓存在服务器上。 缓存每60分钟更新一次。


可用游戏列表的结构

获取游戏列表的API响应结构包含以下块和参数:

data – 通用数据:

  1. actualdate – 服务器端游戏列表的创建日期和时间
  2. gamescount – 此集合中的游戏数量
  3. config – Flash加载器的配置路径

family – 该类别的游戏描述:

  1. id – 类别ID
  2. name – 类别名称
  3. games – 游戏列表

game – 每个游戏的参数:

  1. id – 游戏ID
  2. name – 游戏名称
  3. icon – 游戏图标链接
  4. url – 游戏链接
  5. width – 游戏窗口宽度
  6. height – 游戏窗口高度
  7. isaristocrat – 如果此参数等于1,表示游戏属于 “aristocrat” (可选参数)。

新游戏列表仅 包含一个类别 name="new" 其ID为99。 最受欢迎的游戏列表 仅包含一个类别 name="popular" 其ID为77。 所有游戏列表包含 所有可用的游戏类别, 但不包括ID为99和77的 类别, 因为这些类别是集合类别 (新游戏和热门游戏)。

用户注册

用户注册通过发送XML请求至地址 https://apiserver.solutions/api_reg 进行。

XML请求中的必填字段包括:

字段 类型 必填 描述
version float API版本号 应设置为0.6
hall_id integer 大厅ID
name string 用户姓名。 应包含不 少于6个字符。 如果未 提供,将自动生成。
phone bigint 电话号码。 仅包含数 字,无空格且不含 "+" 号。
email string 用户电子邮件地址。 如果未提供,将自动 生成。
ex_id integer 用户在客户端数据库 中的ID
operation_id bigint 用户系统中的操作ID。 操作ID用于数据包 重新发送。 仅接受大 整数型ID类型。 如果 ID类型不是大整数型 ,则操作不会被记录, 且无法重新发送操 作!
password string 用户密码。 应包含不 少于6个字符。 如果未 提供,将自动生成。 密 码只能包含拉丁字母 和数字。 如果存在其 他符号,系统会自动 删除这些符号
birthDay,
birthMonth,
birthYear
integer 用户出生日期。 这些 参数应组成一个正确 的日期。 如果日期不 正确,系统会给出操 作错误消息。 例如: birthDay=01, birthMonth=05, birthYear=1980.
address string 用户地址
country string 用户所在国家
show_packet smallint 是,如果未提供 response_url 如果该参数等于1,则 XML请求的结果将返 回给调用脚本。 否则, 结果将发送到参数 response_url中提 供的URL地址
response_url string 是,如果参数 `show_packet`等于0 使用POST方法将 XML请求结果发送到 的地址。

还需要以操作的 MD5 摘要 形式生产数据包签名,具体如下: MD5 (HALL_SECRET_WORD + XML请求 (行) + HALL_SECRET_WORD). 在PHP中使用函数执行此操作 md5.

在创建XML请求结构后,应使用base64编码 中的 (`base64_encode` 函数) 并将带有数字签 名的行发送到地址`https://apiserver.solutions/api_get_userslist`,使用POST方法。 加密的请求行 放在参数 reg_xml, 数字签名放在参数 reg_sign 中。

<?php
	//Creating digital sign
	$signature = md5 ($secret_word.$XML_REQUEST.$secret_word);

	//XML request encoding with base64_encode
	$base64_result = base64_encode ($XML_REQUEST);

	//Creating array with data to be sent to server
	$post_request = array (
									'reg_xml' => $base64_result,
									'reg_sign' => $signature
								);

	//cURL initialization
	$ch = curl_init();

	//setting cURL options
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/api_reg');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	//passing data
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	//enabling SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	//fulfilling the request
	$result = curl_exec($ch);
?>

如果请求成功,您将收到一个经过base64编码的响应数据的XML包以及包签名。 响应数据包包含 以下字段:

字段 类型 描述
version float API版本
status string 操作状态。 如果成功,则为success;如果失败,则为failure。
code string 错误代码
hall_id integer 用户大厅ID
login string 用户登录名
password string 用户密码
email string 用户邮箱
phone bigint 用户电话号码
time bigint Unix时间戳格式的时间戳
birthDay,
birthMonth,
birthYear
integer 用户出生日期
operation_id bigint 我们系统中的操作ID
country string 用户国家
address string 用户地址
operation_exist smallint 标志,表示操作是否第一次执行,或者这是重复的数据包发送。 值为0和1均可接受。
is_first_deposit smallint 是否为系统中的第一次存款。 值为0和1均可接受。
is_first_enter smallint 是否为第一次进入。 值为0和1均可接受。

如果失败,服务器请求将包含4个字段: version, status, hall_id + code code字段 (将包含错误代码)。 code 字段的解释:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml、req_sign)
invalid_xml_sended 请求的XML文档格式不正确
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_signature 请求签名不正确
wrong_api_version API版本指定不正确
hall_not_exist 大厅不存在
hall_id_format_invalid hall_id 字段格式错误
wrong_email 邮箱格式错误
phone_format_invalid 电话号码格式错误
user_phone_already_exist 该电话号码已在系统中注册
wrong_password 密码错误
wrong_birthdate_params 出生日期格式错误 (参数为birthDate、birthMonth、birthYear)

发出的XML请求示例:

<request>
	<version>0.6</version>
	<hall_id>125</hall_id>
	<phone>310903377415</phone>
	<birthDay>02</birthDay>
	<birthMonth>05</birthMonth>
	<birthYear>1980</birthYear>
	<address>some address</address>
	<password>sdgf55123</password>
	<show_packet>1</show_packet>
	<response_url></response_url>
</request>

有效请求的服务器响应示例:

<request>
	<version>0.6</version>
	<login>95745</login>
	<password>sdf55yhh</password>
	<email>mRXqMXcrfD@stargamecasino.com</email>
	<phone>3808053344000</phone>
	<birthdate></birthdate>
	<hall_id>25</hall_id>
	<operation_id></operation_id>
	<operation_exist>0</operation_exist>
	<status>success</status>
	<time>1390778516</time>
	<ex_id></ex_id>
	<is_first_deposit>1</is_first_deposit>
	<is_first_enter>0</is_first_enter>
	<is_passing>0</is_passing>
</request>

失败情况下的响应示例:

<request>
	<version>0.6</version>
	<status>failure</status>
	<code>user_phone_already_exist</code>
	<hall_id>125</hall_id>
</request>

用户会话远程控制

用户会话远程控制通过向地址 https://apiserver.solutions/remotecab_session 发送XML请求,使用POST方法进行。

传入XML请求中必需的字段:

字段 类型 必需 描述
version float API版本。应为0.6
user_id integer 用户ID
user_password string 用户密码
operation string 执行的操作。
get - 接收用户会话
set - 创建新会话
check - 检查会话状态。 如果会话已关闭,则创建新会话。
close - 关闭所有会话
sessionid bigint 会话ID (get操作所需)
key1 integer 会话密钥1 (get操作所需)
key2 integer 会话密钥2 (get操作所需)
show_packet smallint 是,如果未给出response_url 如果参数等于1,XML 请求的结果将返回给调用脚本。 否则,结果将通过在参数 response_url 中传递的 URL 地址发送
response_url string 是,如果参数show_packet等于0 结果将通过POST方法发送到的地址,如果参数show_packet等于0。

数据包签名: 类型 3 (使用 user_password)

请求示例:

<?php
	//数据包签名
	$signature = md5($secret_word.$XML_REQUEST.$secret_word);

	//使用base64_encode编码XML请求
	$base64_result = base64_encode($XML_REQUEST);

	//要发送到服务器的数据数组
	$post_request = array(
									'reg_xml' => $base64_result,
									'reg_sign' => $signature
								);

	//cURL 初始化
	$ch = curl_init();

	//设置cURL选项
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/remotecab_session');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	//通过cURL发送的数据
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	 //启用SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	//执行请求
	$result = curl_exec($ch);
?>

如果请求成功,您将收到一个以base64格式编码的XML数据包和数据包签名。 数据包包含以下字段:

字段 类型 描述
version float API版本
time bigint Unix时间戳格式的时间戳
status string 操作状态。 如果成功,则为success;如果失败,则为failure。
code string 错误代码
uid integer 账户ID
password string 用户密码
sessionid bigint 会话ID (适用于所有操作,除了close)
key1 integer 会话密钥 (适用于所有操作,除了close)
key2 integer 会话密钥 (适用于所有操作,除了close)
name string 用户名 (仅适用于get和create操作)
roomnumber integer 大厅ID (仅适用于get和create操作)
email string 用户邮箱 (仅适用于get和create操作)
phone bigint 用户电话号码 (仅适用于get和create操作)
birthdate timestamp 用户出生日期 (仅适用于get和create操作)
balance bigint 用户余额 (仅适用于get和create操作)
currency string 大厅货币 (仅适用于get和create操作)
unique_id string 唯一用户ID (仅适用于get和create操作)
is_first_deposit smallint 是否为系统中的第 一 次存款 (仅适用于get和create操作)。 接受值0或1。
is_first_enter smallint 是否为第一次进入 (仅适用于get和create操作)。 接受值0或1。
is_passing smallint 用户是否可以通过远程网站增加其账户 (仅适用于get和create操作)
is_home boolean 大厅是否具有homeedition状态。 此参数用于与API遗留版本的向后兼容性 (仅适用于get和create操作)

如果失败,服务器响应将包含4个字段: version, status, hall_id + code 字段 (将包含错误代码)。 code 字段的解释:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml、req_sign)
wrong_api_version API版本指定不正确
invalid_xml_sended 请求的XML文档格式不正确
required_fields_are_empty XML请求中的所有必填字段未填写
no_path_to_send_packet 未给出服务器响应的路径
wrong_session_data 会话数据不正确
wrong_user_data 密码或用户ID不正确

接收用户余额

接收用户余额通过向地址 https://apiserver.solutions/api_get_balance 发送XML请求,使用POST方法进行.

传入XML请求中必需的字段:

字段 类型 必需 描述
version float API版本。应为0.6
user_id integer 用户ID
hall_id integer 游戏大厅ID
user_ex smallint 如果值等于1,则使用ex_id (客户端数据库中的外部用户ID)接收用户数据。 默认值为0。
show_packet smallint 是,如果未给出response_url 如果参数等于1,XML请求的结果将返回给调用脚本。 否则,结果将通过在参数response_url 中传递的URL地址发送
response_url string 是,如果参数show_packet等于0 结果将通过POST方法发送到的地址,如果参数show_packet等于0。

数据包签名: 类型1 (使用hall_secret)

请求示例:

<?php
	//数据包签名
	$signature = md5($secret_word.$XML_REQUEST.$secret_word);

	//使用base64_encode编码XML请求
	$base64_result = base64_encode($XML_REQUEST);

	//要发送到服务器的数据数组
	$post_request = array(
									'reg_xml' => $base64_result,
									'reg_sign' => $signature
								);

	//cURL初始化
	$ch = curl_init();

	//设置cURL选项
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/api_get_balance');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	//通过cURL发送的数据
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	//启用SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	 //执行请求
	$result =curl_exec($ch);
?>

如果请求成功,您将收到一个以base64格式编码的XML数据包和数据包签名。 数据包包含以下字段:

字段 类型 描述
version float API版本
status string 操作状态。 如果成功,则为success;如果失败,则为failure。
code string 错误代码 (仅在失败时)
hall_id integer 用户大厅ID
time bigint Unix时间戳格式的时间戳
user_id integer 用户ID
balance bigint 用户余额 (以积分计算)

如果失败,数据包中的code字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml)
invalid_xml_format 请求的XML文档格式不正确
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_userid 用户ID不正确
user_not_isset 该用户不存在
wrong_signature 大厅秘密字指定不正确
wrong_api_version API版本指定不正确
hall_not_exist 大厅不存在

发出的XML请求示例:

<request>
	<version>0.6</version>
	<hall_id>125</hall_id>
	<user_id>345</user_id>
	<show_packet>1</show_packet>
	<response_url></response_url>
</request>

有效请求的服务器响应示例:

<request>
	<version>0.6</version>
	<status>success</status>
	<user_id>10025</user_id>
	<hall_id>129</hall_id>
	<balance>2924316</balance>
	<time>1390780004</time>
</request>

失败情况下的响应示例:

<request>
	<version>0.6</version>
	<status>failure</status>
	<code>hall_not_exist</code>
	<hall_id>125</hall_id>
</request>

用户余额操作

用户余额操作通过向地址 https://apiserver.solutions/api_operation_balance 发送XML请求,使用POST方法进行。

传入XML请求中必需的字段:

字段 类型 必需 描述
version float API版本。 应为0.6
user_id integer 用户ID
hall_id integer 游戏大厅ID
user_ex smallint 如果值为1,则使用ex_id (客户端数据库中的外部用户ID)接收用户数据。 默认值为0。
operation string 执行的操作类型:
increase - 余额增加,
decrease - 余额扣除,
decrease_all - 余额完全重置。
注意:请注意,重置后用户账户中的所有资金将被提取。 然而,脚本检查sum字段。 应将值0发送到sum字段。
operation_id bigint 用户系统中的操作ID。 操作ID用于数据包重发。 仅接受bigint类型的ID。 如果ID类型不是bigint,则操作将不被记录,且无法进行操作重发!
sum integer 在相应操作中余额增加或扣除的金额 (以分为单位)。 该金额在余额增加时不得超过大厅余额,在余额扣除时不得超过用户余额。
user_password string 用户密码
show_packet smallint 是,如果未给出response_url 如果参数等于1,XML请求的结果将返回给调用脚本。 否则,结果将通过在参数response_url中传递的URL地址发送。
response_url string 是,如果参数show_packet等于0 结果将通过POST方法发送到的地址,如果参数show_packet等于0。

数据包签名: 类型1 (使用hall_secret)

请求示例:

<?php
	//数据包签名
	$signature = md5($secret_word.$XML_REQUEST.$secret_word);

	//使用base64_encode编码XML请求
	$base64_result = base64_encode($XML_REQUEST);

	//要发送到服务器的数据数组
	$post_request = array (
									'reg_xml' => $base64_result,
									'reg_sign' => $signature
								);

	$ch = curl_init ();

	//设置cURL选项
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/api_operation_balance');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	//通过cURL发送的数据
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	//启用SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	//执行请求
	$result = curl_exec($ch);
?>

如果请求成功,您将收到一个以base64格式编码的XML数据包和数据包签名。 数据包包含以下字段:

字段 类型 描述
version float API版本
status string 操作状态。 如果成功,则为success;如果失败,则为failure。
code string 错误代码
hall_id integer 用户大厅ID
user_id integer 用户ID
balance integer 用户余额 (以积分计算)
time bigint Unix时间戳格式的时间戳

如果失败,服务器响应将包含4个字段: version, status, hall_id + code code字段 (它将包含一个错误代码)。 Сode字段的解释:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml,req_sign)
invalid_xml_sended 请求的XML文档格式不正确
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_signature 请求签名不正确
wrong_api_version API版本指定不正确
wrong_userid 用户ID不正确
user_not_isset 该用户不存在
hall_not_exist 大厅不存在
operator_not_isset 该操作员在大厅中不存在
wrong_password 密码不正确
too_low_balance_for_increase 余额增加值过低
too_low_hall_balance 大厅余额不足以进行此操作
previous_payments_not_finished 用户的先前支付操作尚未完成
wrong_incoming_data 余额变更内部错误
operation_not_set 未提供操作字段

发出的XML请求示例:

<request>
	<version>0.6</version>
	<hall_id>125</hall_id>
	<user_id>345</user_id>
	<operation>increase</operation>
	<sum>500</sum>
	<show_packet>1</show_packet>
	<response_url></response_url>
</request>

有效请求的服务器响应示例:

<request>
	<version>0.6</version>
	<status>success</status>
	<user_id>10125</user_id>
	<hall_id>125</hall_id>
	<operation>increase</operation>
	<operation_id></operation_id>
	<old_balance>5000</old_balance>
	<new_balance>5500</new_balance>
	<operation_exist>0</operation_exist>
	<time>1390783078</time>
</request>

失败情况下的响应示例:

<request>
	<version>0.6</version>
	<status>failure</status>
	<code>operation_not_set</code>
	<hall_id>125</hall_id>
</request>

大厅创建

此操作通过向地址 https://apiserver.solutions/api_create_hall 发送XML请求,使用POST方法进行。

传入XML请求中必需的字段:

字段 类型 必需 描述
version float API版本。 应为0.6
hall_name string 大厅名称
hall_secret string 大厅密码.应仅包含拉丁字符和数字,且不超过32个字符。
agent_id integer 代理ID
show_packet smallint 是,如果未给出response_url 如果参数等于1,XML请求的结果将返回给调用脚本。 否则,结果将通过在参数 response_url中传递的URL地址发送。
response_url string 是,如果参数show_packet等于0 结果将通过POST方法发送到的地址,如果参数show_packet等于0。

数据包签名: 类型2 (使用代理密码)

如果请求成功,您将收到一个以base64格式编码的XML数据包和数据包签名。 数据包包含以下字段:

字段 类型 描述
version float API版本
status string 操作状态。 如果成功,则为success;如果失败,则为failure。
hall_id integer 用户大厅ID
currency smallint ISO货币代码

如果失败,服务器响应将包含4个字段: version, status, hall_id + code 字段 (它将包含一个错误代码)。Code 字段的解释:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml,req_sign)
invalid_xml_sended 请求的XML格式不正确
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_signature 请求签名不正确
wrong_api_version API版本指定不正确
agent_not_exist 代理不存在
hall_name_already_exists 该大厅名称已被使用
hall_data_empty 未提供大厅名称

发出的XML请求示例:

<request>
	<version>0.6</version>
	<hall_name>MyNewHall</hall_name>
	<hall_secret>fgghhjjuku</hall_secret>
	<agent_id>12345678</agent_id>
	<response_url></response_url>
</request>

有效请求的服务器响应示例:

<request>
	<version>0.6</version>
	<status>success</status>
	<time>123456789</time>
	<hall_id>114</hall_id>
	<hall_secret>somecode</hall_secret>
	<currency>643</currency>
</request>

接收大厅终端列表

接收大厅终端列表通过向地址 https://apiserver.solutions/api_get_userslist 发送XML请求,使用POST方法进行。

传入XML请求中必需的字段:

字段 类型 必需 描述
version float API版本。 应为0.6
hall_id integer 游戏大厅ID
show_packet smallint 是,如果未给出response_url 如果参数等于1,XML请求的结果将返回给调用脚本。 否则,结果将通过在参数response_url中传递的URL地址发送。
response_url string 如果参数show_packet等于0 结果将通过POST方法发送到的地址,如果参数show_packet等于0。

请求示例:

<?php
	//使用base64_encode编码XML请求
	$base64_result = base64_encode($XML_REQUEST);

	//要发送到服务器的数据数组
	$post_request = array('reg_xml' => $base64_result);

	//cURL初始化
	$ch = curl_init ();

	//设置cURL选项
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/api_get_userslist');
	curl_setopt(ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	//通过cURL发送的数据
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	//启用SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	//执行请求
	$result = curl_exec($ch);
?>

如果请求成功,您将收到一个以base64格式编码的XML数据包和数据包签名。 数据包包含以下字段:

字段 类型 描述
version float API版本
status string 操作状态。 如果成功,则为success;如果失败,则为failure。
code string 错误代码
hall_id integer 用户大厅ID
time bigint 以Unix时间戳格式的时间戳
users_count integer 用户数量
users array 包含用户详细信息的数组

如果失败,数据包中的 code 字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml)
invalid_xml_format 请求的XML格式不正确
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_signature 请求签名不正确
wrong_api_version API版本指定不正确
hall_not_exist 大厅不存在

发出的XML请求示例:

<request>
	<version>0.6</version>
	<hall_id>125</hall_id>
	<show_packet>1</show_packet>
	<response_url></response_url>
</request>

有效请求的服务器响应示例:

<request>
	<version>0.6</version>
	<status>success</status>
	<hall_id>125</hall_id>
	<time>1390568302</time>
	<users_count>2</users_count>
	<users>
		<user><uid>30359</uid>
			<name>protest1</name>
			<password>fxa445</password>
			<balance>347</balance>
		</user>
		<user><uid>308905</uid>
			<name>protest2</name>
			<password>4454599</password>
			<balance>4004</balance>
		</user>
	</users>
</request>

如果失败,响应示例:

<request>
	<version>0.6</version>
	<status>failure</status>
	<code>wrong_signature</code>
	<hall_id>250</hall_id>
</request>

大厅配置更改

此操作通过向地址 https://apiserver.solutions/api_hall_settings 发送XML请求,使用POST方法进行。

传入XML请求中必需的字段:

字段 类型 必需 描述
version float API版本。 应为0.6
hall_id integer 大厅ID
operation string 操作:get - 接收当前设置数组,set - 设置更新
settings array 设置数组。 仅在操作为set时必需
show_packet smallint 是,如果未给出response_url 如果参数等于1,XML请求的结果将返回给调用脚本。 否则,结果将通过在参数 response_url中传递的URL地址发送。
response_url string 是,如果参数show_packet等于0 结果将通过POST方法发送到的地址,如果参数show_packet等于0。

数据包签名: 类型1 (使用hall_secret)

对于set操作的参数settings描述:

参数名称 类型 描述 可接受的值
maxbetperline 每行的最大投注 integer 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30,40, 50, 100
maxwin 滚轴上的最大赢取 integer 根据公式评估:不得少于maxbetperline * 500
maxriskwin 风险游戏中的最大赢取 integer 根据公式评估:不得少于maxbetperline * 500
creditlimit 分值限制 integer 从100到1000000
matproc 数学效率百分比 integer 80, 83, 85, 88, 93
maxriskround 风险游戏中最大轮数 integer 从2到100
denominationenable 是否启用面值 boolean 1或0
denominationminval 面值最小值 float 0.01, 0.02, 0.04, 0.05, 0.1, 0.25, 0.5, 0.75,1.00
denominationmaxval 面值最大值 float 0.25, 1.00, 2.00, 4.00, 5.00, 10.00, 25.00, 50.00, 100.00
minamount 最低支付金额 integer 不能小于或等于0
pbonus 存款到奖金的百分比 integer 从0到15
mbonus 奖金的最低存款 integer 不能小于或等于0
fixedcashback 固定现金返还奖金 integer 1 (启用)或0 (禁用)。 如果现金返还奖金或固定现金返还奖金启用,则存款奖金将设为0。

需要注意的是,单个设置可以更改,即不必列举所有设置以更改其中之 一 在这种情况下,只需在设置包中选择所需的设置,而不指定其他设置。 get操作返回所有设置。

如果请求成功,您将收到一个以base64格式编码的XML数据包和数据包签名。 数据包包含以下字段:

字段 类型 描述
version float API版本
status string 操作状态。 如果成功,则为success;如果失败,则为failure。
hall_id integer 大厅ID
operation string 操作:get或set
time bigint 以Unix时间戳格式的时间戳
settings array 当前大厅设置列表。 仅用于get操作。

如果失败,数据包中的 code 字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml)
invalid_xml_format POST请求中未找到必需字段 (reg_xml)
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_signature 请求签名不正确
wrong_api_version API版本指定不正确
hall_not_exist 大厅不存在
too_low_maxwin maxwin < winMinLimit 或 maxwin < 100
too_big_maxwin maxwin > 1000000
too_low_maxriskwin maxriskwin < winMinLimit 或 maxriskwin < 100
too_big_maxriskwin maxriskwin > 1000000
wrong_creditlimit_count creditlimit < 100 或 creditlimit > 1000000
wrong_maxriskround_count maxriskround < 2 或 maxriskround > 100
wrong_denominationmin_count 面值最小值 denominationminval 不在范围内 (1, 2, 4, 5, 10, 25, 50, 75, 100)
wrong_denominationmax_count 面值最大值 denominationmaxval 不在范围内 (25, 100, 200, 400, 500, 1000, 2500, 5000, 10000)
denmin_biggest_than_denmax denominationmaxval < denominationminval
wrong_pbonus_count pbonus < 0 或 pbonus > 15
wrong_mbonus_count mbonus < 0
nothing_to_update 设置数组为空 (没有更新数据)

大厅消息操作

此操作通过向地址 https://apiserver.solutions/api_hall_message 发送XML请求,使用POST方法进行。

传入XML请求中必需的字段:

字段 类型 必需 描述
version float API版本。 应为0.6
hall_id integer 大厅ID
operation string 操作:add - 添加消息,delete - 删除消息
text string 是 (操作为add) 消息文本。 最大字符数为255个字符。 可使用拉丁字符、斯拉夫字符和数字。
repeat integer 是 (操作为add) 消息重复次数。 可接受值:从1到100。
send_type string 是 (操作为add) 输出类型。 可接受值:time_repeat - 一次性重复,regular - 定期 (见表下方注释)。
schedule array 是 (操作为add) 序列化的base64数组,操作格式不同 (见表下方注释)。
message_id integer 是 (操作为delete) 要删除的消息ID
show_packet smallint 是 (如果未给出response_url) 如果参数等于1,XML请求的结果将返回给调用脚本。 否则,结果将通过在参数response_url中传递的URL地址发送。
response_url string 是 (如果未给出show_packet) 结果将通过POST方法发送到的地址,如果参数show_packet等于0。

schedule数组形成示例:

<?php

$shedule = base64_encode(serialize(array('dateFrom' => '2011-12-11', 'hours' => '11', 'minutes' => '20', 'interval' => 30)));

?>

send_type 数组形成示例 (一次性重复类型):

<?php

$send_type = array('dateFrom' => '2015-01-02', 'hours' => 12, 'minutes' => 20, 'interval' => 30);

?>

此数组参数的可接受值:dateFrom - 日期格式为年-月-日,hours - 从0到24,minutes - 从0到59,interval - 发送间隔,以分钟为单位,可接受值:10, 30, 60, 120, 180, 360, 1140, 2880。send_type数组形成示例 (定期类型):

<?php

$send_type = array('dateFrom' => '2015-01-02', 'dateTo' => '2015-02-02', 'interval' => 60);

?>

数据包签名: 类型 1 (使用hall_secret)

如果请求成功,您将收到一个以base64格式编码的XML数据包和数据包签名。 数据包包含以下字段:

字段 类型 描述
version float API版本
time bigint 以Unix时间戳格式的时间戳
status string 操作状态。如果成功,则为success;如果失败,则为failure。
code string 错误代码
message_id integer 添加或删除的消息ID,分别对应操作add和delete
hall_id integer 大厅ID

如果失败,数据包中的 code 字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml)
invalid_xml_format 请求的XML格式不正确
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_signature 请求签名不正确
wrong_api_version API版本指定不正确
hall_not_exist 大厅不存在
message_not_isset 不存在此ID的消息
message_fields_are_empty 添加消息的参数未给出或未全部给出
text_too_big 字符数量超过255
unable_to_parse_schedule 消息发送计划无法解析.参数为空、未序列化或未编码为base64。
wrong_schedule_format 消息发送计划格式不正确 (参数为dateFrom、dateTo、hours、minutes、interval)
unknown_operation 操作不正确

接收大厅余额

该操作通过向地址 https://apiserver.solutions/api_get_hall_balance 发送XML请求,使用POST方法进行。

传入XML请求中必需的字段:

字段 类型 必需 描述
version float API版本。 应为0.6
hall_id integer 大厅ID
show_packet smallint 是 (如果未给出response_url) 如果参数等于1,XML请求的结果将返回给调用脚本。 否则,结果将通过在参数 response_url 中传递的URL地址发送
response_url string 是 (如果show_packet等于0) 结果将通过POST方法发送到的地址,如果参数show_packet等于0。

数据包签名 类型 1 (使用hall_secret)

如果请求成功,您将收到一个以base64格式编码的XML数据包和数据包签名。 数据包包含以下字段:

字段 类型 描述
version float API版本
status string 操作状态。 如果成功,则为success;如果失败,则为failure。
code string 错误代码
hall_id integer 用户大厅ID
balance integer 大厅余额
time bigint 以Unix时间戳格式的时间戳

接收代理余额

此操作通过向地址 https://apiserver.solutions/api_get_agent_balance 发送XML请求,使用POST方法进行。

传入XML请求中必需的字段:

字段 类型 必需 描述
version float API版本,必须为0.6
agent_id integer 代理ID
show_packet smallint 是 (如果未给出response_url) 如果该参数等于1,XML请求的结果将传递给调用脚本。 否则,结果将通过参数 response_url 提供的url地址发送
response_url string 是 (如果show_packet参数等于0) 请求的结果将通过POST方法发送到此地址 注意:请求期开始时间和结束时间的差异不能超过三天。

数据包签名: 类型 2 (使用代理密码)

如果请求成功,您将收到一个base64格式编码的XML包和数据包签名。 该包包含以下字段::

字段名称 类型 描述
version float API版本
status string 操作状态,成功为success,失败为failure。
code string 代理ID
agent_id integer 错误代码
balance integer 代理餘額以貨幣形式表示 (例如美分)
time bigint 时间戳,格式为unix时间戳

如失败,数据包中的 code 字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml)
invalid_xml_format 請求的 XML 文檔格式不正確
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_signature 请求签名不正确
wrong_api_version API版本指定不正确
agent_not_exist 具有此 ID 和此密碼的代理程式不存在
invalid_agent_id 座席 ID 格式錯誤或未給予參數

大厅头奖操作

操作通过发送XML请求到地址https://apiserver.solutions/api_operation_jackpot,使用POST方法进行

传入XML请求中的必填字段:

字段名称 类型 必填 描述
version float API版本,必须为0.6
hall_id integer 大厅ID
operation string 操作类型:get_balance - 获取余额 (注意:当前值以货币单位显示),reset - 重置头奖,change - 改变头奖值,get_settings - 获取设置数组,set_settings - 自定义新设置,get_history - 获取头奖历史
settings array 设置数组 (仅用于set_settings操作)
period_start unix timestamp 选择周期的开始,格式为 unix 时间戳。 仅用于 get_history 操作
period_end unix 时间戳 选择周期的结束,格式为unix时间戳。 仅用于get_history操作
show_packet smallint 是 (若未给出response_url) 如果该参数等于1,XML请求的结果将返回给调用脚本。 否则,结果将通过参数 response_url 提供的url地址发送
response_url string 是 (如果show_packet参数等于0) 如果show_packet参数为0,结果通过POST方法发送到此地址。

数据包签名: 类型 1 (使用hall_secret)

操作设置 set_settings 的参数描述:

参数名 类型 描述 可接受的值
enable 是否启用 Jackpot smallint 0 或 1
jackpotpercent 每个赌注中的百分比分配到 Jackpot float 0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2
timer Jackpot 计时器 integer 从 0 到 86399。 单位为秒。 例如,如果你需要设置计时器为上午 10:30:15,最终的参数值应为 106060 + 30*60 + 15
tunejackpot 将基本值应用于 Jackpot smallint 0 或 1。 如果参数设置为 1,则 Jackpot 的值将等于 Jackpot "basevalue" 参数。 相应的金额将从大厅余额中扣除。 此操作不可撤销。 扣除的金额等于当前 Jackpot 值与其 basevalue 之间的差额之和。
interval_enabled 激活 Jackpot 奖励期 smaillint 0或1
interval_start 开始时间 integer 从 0 到 1440。 单位为分钟。 例如,如果开始时间为上午 10:30,则将参数设置为 10*60 + 30
interval_end 结束时间 integer 从 0 到 1440。 单位为分钟。 例如,如果结束时间为上午 12:30,则将参数设置为 12*60 + 30。 结束时间和开始时间之间的差值应大于 1 分钟
bronze,silver,gold,diamond 每个 Jackpot 级别的设置数组 array bronze - 第一级 (青铜 Jackpot),依此类推按升序排列。
outtext 显示在游戏终端上的消息文本。 string 仅接受拉丁字母、点号、逗号和感叹号。

每个 Jackpot 级别数组的描述

参数名 类型 描述 可接受的值
enable 是否启用 smallint 0 或 1
activate 激活值 integer 从 0 到 2500000。 达到此值后,Jackpot 从被动状态变为主动状态。 在被动状态下,Jackpot 无法被赢得。 当 Jackpot 处于主动状态时,所有符合 Jackpot 抽奖条件的玩家都有机会赢得奖池。
init 基本值 integer 从 0 到 2500000。 Jackpot 的基础值,默认值为 0。 如果设置了该值,则每次 Jackpot 抽奖后,下一次 Jackpot 的起始值将从此金额开始。 注意!!!Jackpot 的基础值会从大厅余额中扣除。
max 最大值 integer 从 0 到 2500000。 如果最大值为 0,则忽略该值,Jackpot 会由计时器进行抽奖。 如果最大值大于激活值,则 Jackpot 会按最大值进行抽奖。 越接近最大值,Jackpot 抽奖的概率越高。
minbet 最小投注金额 integer 从 0 到 250000000。 玩家参与 Jackpot 抽奖的最低投注额。 投注额低于此值时,玩家无法赢得 Jackpot。 注意!!!以分为单位。 如果想设置最低投注为 1 美元,应该设置为 100。

如果请求成功,您将收到一个base64格式的编码XML包和数据包签名。 该包包含以下字段:

字段名称 类型 描述
version float API版本
status string 操作状态,成功为success,失败为failure。
hall_id integer 大厅ID
operation string 操作类型:get_balance, reset, change, get_settings或set_settings
jackpotvalue bigint 当前头奖金额,以货币单位的分数形式显示
time bigint 时间戳,以unix时间戳格式显示
settings array J头奖设置列表
history array 头奖历史数组

如失败,数据包中的 code 字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml)
invalid_xml_format XML文档格式错误
required_fields_are_empty XML请求中未填写所有必填字段
wrong_signature 请求签名错误
wrong_api_version API版本错误
hall_not_exist 大厅不存在
wrong_settings_array 设置数组错误 (set_settings操作)
wrong_jackpot_percent 头奖百分比错误 (set_settings操作)
wrong_activate_value 激活值错误 (set_settings操作)
wrong_init_value 基础值错误 (set_settings操作)
activation_LEVEL_value_not_set 未设置对应级别的激活值 (set_settings操作)
init_value_should_not_be_more_than_half_of_activation_value 基础值不应超过激活值的一半 (set_settings操作)
next_level_jackpot_should_double_previous 每个头奖级别应至少是前一级别的两倍,且必须按顺序启用
jackpot_interval_wrong 头奖击中周期间隔错误 (set_settings操作)
timer_wrong 头奖计时器值错误 (set_settings操作)
nothing_to_update 无更新数据 (set_settings操作)
time_periods_are_empty 如操作=get_history,且period_start或period_end为空,则会出现此错误
invalid_date_format period_start或period_end日期格式错误。
time_period_more_that_thirty_days 选择周期超过三十天
设置四个级别头奖的完整请求示例:
 <request>
    <version>0.6</version>
    <settings>
       <enable>1</enable>
       <outtext>STAR JACKPOT</outtext>
       <timer>1800</timer>
       <jackpotpercent>2</jackpotpercent>
       <tunejackpot>1</tunejackpot>
       <interval_enabled>1</interval_enabled>
       <interval_start>100</interval_start>
       <interval_end>400</interval_end>
       <bronze>
          <enable>1</enable>
          <minbet>300</minbet>
          <init>30</init>
          <max>3000</max>
          <activate>300</activate>
       </bronze>
       <silver>
          <enable>1</enable>
          <minbet>300</minbet>
          <init>60</init>
          <max>3000</max>
          <activate>600</activate>
       </silver>
       <gold>
          <enable>1</enable>
          <minbet>300</minbet>
          <init>90</init>
          <max>3000</max>
          <activate>1200</activate>
       </gold>
       <diamond>
          <enable>1</enable>
          <minbet>900</minbet>
          <init>90</init>
          <max>9000</max>
          <activate>2400</activate>
       </diamond>
    </settings>
    <operation>set_settings</operation>
    <user_id>77777</user_id>
    <hall_id>77</hall_id>
    <show_packet>1</show_packet>
 </request>

此请求与管理面板中的以下设置相匹配。



接收代理大厅列表

该操作通过发送XML请求到地址 https://apiserver.solutions/api_get_hallslist,使用POST方法执行。

传入XML请求中的必填字段:

字段名称 类型 必填 描述
version float API版本,必须为0.6
agent_id integer 代理ID
show_packet smallint 是 (如果未给出response_url) 如果该参数等于1,XML请求的结果将传递给调用脚本。 否则,结果将通过参数 response_url 提供的url地址发送
response_url string 是 (如果show_packet参数等于0) 如果show_packet参数等于0,请求的结果将通过POST方法发送到此地址。

数据包签名: 类型 2 (使用代理密码)

如果请求成功,您将收到一个base64格式编码的XML包和数据包签名。 该包包含以下字段:

字段名称 类型 描述
version float API版本
status string 操作状态,成功为success,失败为failure。
code string 错误代码
agent_id integer 代理ID
halls_count integer 大厅数量
halls array 大厅数组
time bigint 时间戳,格式为unix时间戳

当前的大厅以数组形式接收。 数组示例如下:

<?php
'hall' =>(
		'id' => 1,
		'name' =>
		'hall1',
		'balance' => 10400,
		'operator_name' => 'oper1'
	);
?>

其中id是大厅ID,name是大厅名称,balance是大厅余额,operator_name是操作员名称。

在失败的情况下,数据包中的 code 字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml)
invalid_xml_format 请求的XML文档格式不正确
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_signature 请求签名不正确
wrong_api_version API版本指定不正确
agent_not_exist 使用此ID和密码的代理不存在
invalid_agent_id 用户ID格式不正确或未提供此参数

代理更改大厅余额

该操作通过发送XML请求到地址 https://apiserver.solutions/api_hall_operation_balance,使用POST方法执行。

传入XML请求中的必填字段:

字段名称 类型 必填 描述
version float API版本,必须为0.6
agent_id integer 代理ID
hall_id integer O大厅ID
operation string increase - 增加余额,decrease - 扣除余额
sum integer 金额
show_packet smallint 是 (如果未给出response_url) 如果该参数等于1, 如果该参数等于1,XML请求的结果将传递给调用脚本。 否则,结果将通过参数 response_url 提供的 url 地址发送
response_url string 是 (如果show_packet参数等于0) 如果show_packet参数等于0,请求的结果将通过POST方法发送到此地址。

数据包签名: 类型 2 (使用代理密码)

如果请求成功,您将收到一个base64格式编码的XML包和数据包签名。 该包包含以下字段:

字段名称 类型 描述
version float API版本
status string 操作状态,成功为success,失败为failure。
hall_id integer 大厅ID
code string 错误代码
old_balance integer 先前的大厅余额 (以货币单位分表示
new_balance integer 新的大厅余额 (以货币单位分表示)
time bigint 时间戳,格式为unix时间戳

在失败的情况下,数据包中的 code 字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml)
invalid_xml_format 请求的XML文档格式不正确
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_signature 请求签名不正确
wrong_api_version API版本指定不正确
agent_not_exist 使用此ID和密码的代理不存在
agent_is_not_owner 该代理不是大厅所有者
wrong_operation 操作类型不正确
hall_too_low_balance 大厅余额不足 (操作decrease)
agent_too_low_balance 代理余额不足 (操作increase)

接收用户操作列表

该操作通过发送XML请求到地址https://apiserver.solutions/api_get_agent_story,使用POST方法执行。

传入XML请求中的必填字段:

字段名称 类型 必填 描述
version float API版本,必须为0.6
agent_id integer 代理ID
period_start bigint Unix时间戳,请求期开始时间
period_end bigint Unix时间戳,请求期结束时间
show_packet smallint 是 (如果未给出 response_url) 如果该参数等于1,XML请求的结果将传递给调用脚本。否则,结果将通过参数 response_url 提供的 url 地址发送
response_url string 是 (如果show_packet参数等于0) show_packet参数等于0,请求的结果将通过POST方法发送到此地址。

注意:请求期开始时间和结束时间的差异不能超过三天。

数据包签名: 类型 2 (使用代理密码)

如果请求成功,您将收到一个base64格式编码的XML包和数据包签名。 该包包含以下字段:

字段名称 类型 描述
version float API版本
status string 操作状态,成功为success,失败为failure。
agent_id integer 代理ID
code string 错误代码
period_start bigint Unix时间戳,请求期开始时间
period_end bigint Unix时间戳,请求期结束时间
operations_count integer 操作次数
operations array 操作数组
time bigint 时间戳,格式为Unix时间戳

操作历史以数组形式接收。 数组示例如下:

<?php
'operation' => array('id' => 1,
                     'description' => 'hall 360, + 1000',
                     'date' => time(),
                     'balance_before' => 104000,
                     'sum' => 100000
                     'balance_after' => 40000,
                     'by' => 'someagent');
?>

在失败的情况下,数据包中的code 字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段
invalid_xml_format 请求的XML文档格式不正确
required_fields_are_empty XML请求中的所有必填字段未填写
wrong_signature 请求签名不正确
wrong_api_version API版本指定不正确
agent_not_exist 使用此ID和密码的代理不存在
wrong_period_data 请求期设置不正确
too_big_period 提供的请求期过长

接收游戏日志列表

该操作通过发送XML请求到地址https://apiserver.solutions/remotecab_game_history,使用POST方法执行。

XML请求中的必填字段:

字段名称 类型 必填 描述
version float API版本,必须为0.4或0.5
user_id integer 用户ID
user_password string 用户密码
use_hash integer 如果该参数等于1,user_password字段应包含md5摘要,而不是密码。 如果等于0,则使用明文密码
operation string 是操作类型。 list - 获取指定时间段的日志列表;log - 获取单个日志的详细信息
log_id / game_id bigint /int 日志ID或游戏ID (两者之一)用于log操作。 如果指定了game_id,将返回最新的游戏日志
period_start datetime 选择期的开始时间,格式为YEAR-MONTH-DAY HOUR:MINUTE。 仅适用于list操作。
period_end datetime 选择期的结束时间,格式为YEAR-MONTH-DAY HOUR:MINUTE。 仅适用于list操作
show_packet smallint 是 (如果未指定response_url) 如果该参数等于1,XML请求的结果将传递给调用脚本。 否则,结果将通过参数 response_url 提供的地址发送
response_url string 如果show_packet参数等于0 如果show_packet参数等于0,结果将通过POST方法发送到该地址

注意:开始时间和结束时间之间的差异不能超过六天。

还应形成一个数字签名,格式为md5 (user_password + XML_request (字符串)+ user_password),其中user_password为用户密码。

注意限制:日志选择的最大间隔为24小时。 选择的最大时间段为7天。 日志在我们的服务器上最多存储7天。 我们建议您每小时选择一次日志并将其放入您的数据库中。 这样可以减少服务器负载并提高系统的运行速度。 在分析游戏日志信息时,我们单独提供了一个base64编码的HTML代码,因为信息分析是在我们这边进行的。 日志中的图片有指向我们服务器的链接。

如果请求成功,您将收到一个base64格式编码的XML包和数据包签名。该包将包含以下字段:

1. 操作列表 - 接收日志列表:
字段名称 类型 描述
version float API版本
status string 操作状态,成功为success,失败为failure。
user_id integer 用户ID
user_hash integer 确定数据包签名的方式 - md5 (user_password) 或 user_password.参见上面的use_hash参数
code string 错误代码
hall_id integer 用户大厅号
logs_count integer 记录数
operation bigint 所选操作
timestamp bigint 时间戳,格式为UNIX时间戳
md5 string 数据包签名

游戏日志数组内容

字段名称 类型 描述
dataid bigint 游戏日志 ID
gameid integer 游戏索引
date datetime 游戏日期和时间,格式为YEAR-MONTH-DAY HOUR:MINUTE
bet bigint BET字段 (下注金额)
win bigint WIN字段 (赢得金额)
lines bigint LINES字段
balance bigint 用户余额
gname string 游戏名称

操作日志 - 接收所选日志的信息:

字段名称 类型 描述
status string 操作状态,成功为success,失败为failure。
code string 错误代码。 如果status为success,则不存在此字段
user_id integer 用户 ID
use_hash integer 确定数据包签名的方式 - md5 (user_password) 或 user_password。 参见上面的use_hash参数。
hallid integer 用户大厅号
timestamp bigint 时间戳,格式为unix时间戳
operation string 所选操作
log_id bigint 游戏日志ID
log_date datetime 日志日期和时间,格式为YEAR-MONTH-DAY HOUR:MINUTE
log_bet bigint BET字段 (下注金额)
log_win bigint WIN字段 (赢得金额)
log_betline bigint BetLine字段
log_lines bigint LINES字段
log_balance bigint 用户余额
log_gname string 游戏名称
log_html string 带有日志解释和游戏图片的HTML。 该字符串为base64编码
md5 string 数据包签名。 格式为md5Encrypt (user_password + timestamp + user_id + user_password)

失败情况下,数据包中的 code 字段将包含错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 (reg_xml)
invalid_xml_sended 请求的XML文档格式不正确
wrong_api_version API版本指定不正确 (仅支持0.4或0.5)
required_fields_are_empty XML请求中的所有必填字段未填写
no_path_to_send_packet show_packet参数等于0,且未指定response_url
wrong_userid 用户ID指定不正确
user_not_isset 指定ID的用户不存在
wrong_user_pass 用户密码指定不正确
time_periods_are_empty 如果operation = list,period_start或period_end字段为空,将给出此错误
invalid_date_format period_start或period_end字段中的日期格式不正确
time_period_more_that_one_day 选择期超过24小时 (606024)
game_id_is_wrong, log_id_is_wrong 如果operation = log,log_id或game_id字段的格式不正确
either_game_id_or_log_id_must_be_supplied 如果operation = log,log_id和game_id字段均为空 (必须提供至少一个参数)
invalid_operation_name operation字段填写不正确,接受list和log.
log_is_not_isset 指定ID的日志和用户未找到。
请求和响应示例:
请求
 <request>
 <version>0.4</version> 
 <operation>log</operation> 
 <user_id>12044</user_id> 
 <user_password>1DF12b3</user_password> 
 <use_hash>0</use_hash> 
 <log_id>5951155076</log_id> 
 <response_url></response_url> 
 <show_packet>1</show_packet> 
 </request>
 

响应
 <request>
 <version>0.4</version> 
 <status>success</status> 
 <timestamp>1470312323</timestamp> 
 <user_id>12044</user_id> 
 <use_hash>0</use_hash> 
 <hall_id>255</hall_id> 
 <operation>log</operation> 
 <log_id>5951155076</log_id> 
 <log_date>2016-07-31 12:26:02</log_date> 
 <log_bet>500</log_bet> 
 <log_win>1000</log_win> 
 <log_betline>0</log_betline> 
 <log_lines>0</log_lines> 
 <log_balance>3327000</log_balance> 
 <log_gname>Deuces Wild</log_gname>
 <log_html>PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CgoJICAgICAgICAgICAgICAgIDx0cj48dGQgYmdjb2xvcj0iNDQwMDAwIj4KCgkgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMSIgIGJvcmRlcj0iMCI+CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgYmdjb2xvcj0iIzhGMDAwMCI+CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiA+R2FtZSBpbmZvcm1hdGlvbjogRGV1Y2VzIFdpbGQgPGJyIC8+CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyMDE2LTA3LTMxIDEyOjI2OjAyKTwvdGQ+CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+PHRyPjx0ZCBhbGlnbj0iY2VudGVyIj48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0cj48dHI+PHRkPkJFVDo8L3RkPjx0ZD41LjAwPC90ZD48L3RyPjx0cj48dGQ+V0lOOjwvdGQ+PHRkPjEwLjAwPC90ZD48L3RyPjx0cj48dGQ+QkFMQU5DRTo8L3RkPjx0ZD4zMzI3MC4wMDwvdGQ+PC90cj48L3RyPjwvdGFibGU+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249ImNlbnRlciI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj48dHI+PHRkPjxpbWcgc3JjPSJodHRwczovL2FwaXNlcnZlci5zb2x1dGlvbnMvaW1nL2JhcmFiYW4vY2FyZHMvYmlnLzEwLmpwZyIgd2lkdGg9IjkwIiBoaWdodD0iMTAwIi8+PC90ZD48dGQ+PGltZyBzcmM9Imh0dHBzOi8vYXBpc2VydmVyLnNvbHV0aW9ucy9pbWcvYmFyYWJhbi9jYXJkcy9iaWcvOS5qcGciIHdpZHRoPSI5MCIgaGlnaHQ9IjEwMCIvPjwvdGQ+PHRkPjxpbWcgc3JjPSJodHRwczovL2FwaXNlcnZlci5zb2x1dGlvbnMvaW1nL2JhcmFiYW4vY2FyZHMvYmlnLzguanBnIiB3aWR0aD0iOTAiIGhpZ2h0PSIxMDAiLz48L3RkPjx0ZD48aW1nIHNyYz0iaHR0cHM6Ly9hcGlzZXJ2ZXIuc29sdXRpb25zL2ltZy9iYXJhYmFuL2NhcmRzL2JpZy8yNS5qcGciIHdpZHRoPSI5MCIgaGlnaHQ9IjEwMCIvPjwvdGQ+PHRkPjxpbWcgc3JjPSJodHRwczovL2FwaXNlcnZlci5zb2x1dGlvbnMvaW1nL2JhcmFiYW4vY2FyZHMvYmlnLzM5LmpwZyIgd2lkdGg9IjkwIiBoaWdodD0iMTAwIi8+PC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPjwvdGFibGU+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+PHRyPjx0ZCBhbGlnbj0iY2VudGVyIj48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0cj48dGQ+PGltZyBzcmM9Imh0dHBzOi8vYXBpc2VydmVyLnNvbHV0aW9ucy9pbWcvYmFyYWJhbi9jYXJkcy9iaWcvMTAuanBnIiB3aWR0aD0iOTAiIGhpZ2h0PSIxMDAiLz48L3RkPjx0ZD48aW1nIHNyYz0iaHR0cHM6Ly9hcGlzZXJ2ZXIuc29sdXRpb25zL2ltZy9iYXJhYmFuL2NhcmRzL2JpZy85LmpwZyIgd2lkdGg9IjkwIiBoaWdodD0iMTAwIi8+PC90ZD48dGQ+PGltZyBzcmM9Imh0dHBzOi8vYXBpc2VydmVyLnNvbHV0aW9ucy9pbWcvYmFyYWJhbi9jYXJkcy9iaWcvOC5qcGciIHdpZHRoPSI5MCIgaGlnaHQ9IjEwMCIvPjwvdGQ+PHRkPjxpbWcgc3JjPSJodHRwczovL2FwaXNlcnZlci5zb2x1dGlvbnMvaW1nL2JhcmFiYW4vY2FyZHMvYmlnLzI1LmpwZyIgd2lkdGg9IjkwIiBoaWdodD0iMTAwIi8+PC90ZD48dGQ+PGltZyBzcmM9Imh0dHBzOi8vYXBpc2VydmVyLnNvbHV0aW9ucy9pbWcvYmFyYWJhbi9jYXJkcy9iaWcvMzkuanBnIiB3aWR0aD0iOTAiIGhpZ2h0PSIxMDAiLz48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPgoKCQk8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlIj48dHI+CgoJCTx0ZCBzdHlsZT0id2lkdGg6NTAlOyB0ZXh0LWFsaWduOmxlZnQ7Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iJmx0OyZsdDsiIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj0naHR0cHM6Ly9hcGlzZXJ2ZXIuc29sdXRpb25zL3JlbW90ZWNhYj9hY3Q9bG9nJmxvZ19pZD01OTUxMTUwMjM0JyIgLz48L3RkPgoKCQk8dGQgc3R5bGU9IndpZHRoOjUwJTsgdGV4dC1hbGlnbjpyaWdodDsiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSImZ3Q7Jmd0OyIgb25jbGljaz0id2luZG93LmxvY2F0aW9uPSdodHRwczovL2FwaXNlcnZlci5zb2x1dGlvbnMvcmVtb3RlY2FiP2FjdD1sb2cmbG9nX2lkPTU5NTExNDk5NzAnIiAvPjwvdGQ+CgoJCTwvdHI+PC90YWJsZT4=</log_html> 
 <md5>9986a56907868571b3f15ec5579f0748</md5> 
 </request>


接收游戏日志列表 (新版本)

此操作通过使用POST方法发送XML请求至 https://apiserver.solutions/remotecab_game_history 来执行。

XML请求中的必填字段:

字段 类型 是否必填 描述
version float API版本号,必须为0.5
hall_id integer 大厅ID
operation string 操作类型,get_full_list 获取指定时间段的日志列表。
period_start datetime 选择的起始时间,格式为 YEAR-MONTH-DAY HOUR:MINUTE:SECOND,仅适用于操作类型为列表
period_end datetime 选择的结束时间,格式为 YEAR-MONTH-DAY HOUR:MINUTE:SECOND,仅适用于操作类型为列表
show_packet smallint 是,如果 response_url 未指定 如果此参数为1,XML请求的结果将返回给调用脚本,否则结果将发送到 response_url 指定的地址
response_url string 如果 show_packet 为0 如果 show_packet 为0,XML请求的结果将通过POST方法发送到指定的地址。

注意:起始时间和结束时间的差异不得超过6天。

同时,需要生成一个数字签名,格式为 md5 (hall_secret + XML_request (string) + hall_secret),其中 hall_secret 是厅的密钥。

限制条件: 最大选择时间段为14天。 日志在我们的服务器上最多保存14天。 我们建议每小时选择一次日志并将其保存到数据库中,以减少服务器负载并提高系统运行速度。 分析游戏日志时,我们会单独生成一个已编码的html代码 (base64格式),图片链接指向我们的服务器。

请求成功时,您将收到一个base64格式编码的XML包和包的签名。 包中将包含以下字段:

字段 类型 描述
version float API版本号
status string 操作状态,如果成功则为 success,失败则为 failure。
code string 错误代码
hall_id integer 用户厅号
logs_count integer 记录数量
operation string 选定的操作类型
timestamp bigint UNIX时间戳格式的时间戳

游戏日志数组内容:

字段 类型 描述
dataid bigint 游戏日志ID
gameid integer 游戏索引
uid integer 玩家ID
type bigint 我们数据库中的系统日志类型
freegame smallint 1 表示免费游戏日志,0 表示普通日志
date datetime 游戏日期和时间,格式为 YEAR-MONTH-DAY HOUR:MINUTE:SECOND
bet bigint BET 字段 (投注)
win bigint WIN 字段 (赢得)
lines bigint LINES 字段
balance bigint 用户余额
gname string 游戏名称

失败时的错误代码:

错误代码 描述
request_not_exists POST请求中未找到必需字段 reg_xml
invalid_xml_sended 发送的XML文档格式不正确
wrong_api_version API版本号错误 (支持0.5和0.4)
required_fields_are_empty XML请求中未填写所有必需字段
no_path_to_send_packet 当 show_packet 为0时,未指定 response_url
wrong_hallid 厅ID指定错误
hall_secret_is_wrong 厅密钥错误
time_periods_are_empty 当操作类型为列表时,period_start 或 period_end 字段为空
invalid_date_format period_start 或 period_end 字段的日期格式不正确
time_period_more_that_six_days 选择时间段超过6天
invalid_operation_name operation 字段填写错误,只接受 list 和 log。




数据保护


信息安全在现代商业中非常重要,任何数据泄露都可能成为严重的问题。

数据保护 内容: 我们系统的主要特点: 无法检测隐藏信息 无法捕获密码 集中管理 我们的系统配备了报警按钮 安装简便 信息安全在现代商业中非常重要,任何数据泄露都可能成为严重的问题。 StarGame 致力于提供安全性并提出了独特的解决方案。 我们的安全系统易于安装且安全可靠。 它将加密并使您计算机上的所有敏感信息不可见。

我们系统的主要特点:

无法检测隐藏信息。

您的数据加密由TrueCrypt进行。 在过去的10年中,该软件已被证明是加密和隐藏计算机上敏感信息的可靠工具。

加密后的信息看起来像随机字节,其内容无法被识别。

如果您的计算机丢失或被盗,即使使用现代加密实验室的分析技术,也没有人能够检测到任何隐藏的信息或软件,也无法获取您的登录名和密码。

这一点得到了2014年TrueCrypt独立审计的确认,结论是该软件在安全性上没有任何问题,也没有故意削弱加密以允许开发人员或安全服务访问加密信息的行为。

无法截取密码。

所有加密数据的密码都在我们的服务器上创建并安全存储。 密码不会存储在您的计算机上,且没有人知道它们。

集中管理。

管理员软件安装在您的其中一台计算机上,用于管理您所有的指定计算机。 通过这台管理员电脑,您可以启动或停止任何一台或所有计算机上的软件。

我们的系统配备了报警按钮。

我们的系统配备了一个报警按钮,允许您立即阻止所有登录和密码,停止软件,使所有敏感信息不可见,并锁定我们服务器上的所有加密密钥。

在按下警报按钮后,您将无法访问您的信息,也无法在计算机上重新运行软件。 您的加密密钥将保留在我们的服务器上,在这种情况下,无法解密存储在计算机上的任何信息或访问它。

如果您想恢复对加密信息的访问,请联系我们,我们将帮助您恢复。 您的设置不会丢失,软件将再次运行。

安裝方便

轻松安装 我们的安全系统可以在几分钟内安装完成。 我们可以为您提供所有的安装说明。 如果您遇到任何问题,请联系我们,我们的专家将安排远程访问您的电脑并安装系统。




集成类型

集成示例

介绍

将我们的系统集成到您的游戏系统中过程如下。 当您在网站上注册玩家时,您也必须通过相应的 API 方法在我们的系统中注册该玩家。 在您的系统中对玩家进行授权时,您必须在游戏服务器上创建其会话。 这是通过远程用户会话控制完成的 。 接收到的会话数据应传递给游戏客户端。

游戏评审有演示模式,无需用户注册。

演示模式

演示模式 玩家可以通过演示模式试玩不同的游戏。 在这种情况下,应该发送以下会话参数:SID = 777, KEY1 = 777, KEY2 = 777。

演示模式下的胜利不会被保存。 用户使用的是演示积分,当游戏以该模式运行时会自动获得。

游戏选择器实现

为了实现游戏选择器,需要从游戏服务器获取一个游戏列表。 可以通过不同的方法来完成。 我们在 PHP 中的示例描述了请求 JSON 格式游戏列表的方法。

示例:

<?php
	$games_json = file_get_contents("https://apiserver.solutions/remote_games_list?format=json");
	$games = json_decode($games_json, true);
?>

创建一个游戏选择器,允许玩家选择他们想要玩的游戏。

<?php
foreach($games["gamelist"] as $family)
{
	$family = $family["family"];

	foreach($family["games"] as $game)
	{
		$result .= "<div class="game" familyid="".$family["id"]."" gameid="".$game["id"]."" gamename="".$game["name"]."" gameurl="".$game["url"]."" isaristocrat="".$game["isaristocrat"]."" style="background-image: url(".$game["icon"].");"></div>";
	}
}

echo $result;
?>

为了显示游戏选择器,我们将创建一个用于 HTML 页面显示的模板。 我们将使用 jQuery 和 SWFObject 库以方便操作。

<!DOCTYPE html>
<html>
	<head>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
		<script type="text/javascript">

		</script>
		<style type="text/css" media="screen">
		</style>
	</head>
	<body>
		<div id="main">
			<!--Game selector will be displayed here -->
		</div>
		<div id="overlay"></div>
		<div id="game_container">
		<div id="game_flash"></div>
		</div>
	</body>
</html>

我们需要以下 CSS 样式集来正确显示页面元素.

body, html	{
	margin: 0;
	padding: 0;
	background: #000000;
}
a, img	{
	border: 0;
}
a:active, a:focus, img, div	{
	outline: 0;
}
#main	{
	position: absolute;
	width: 100%;
	height: 100%;
	text-align: center;
	z-index: 1;
}
.game {
	position: relative;
	display: inline-block;
	margin: 5px;
	width: 218px;
	height: 64px;
	background: #000000 0 0 no-repeat;
	cursor: pointer;
}
#overlay	{
	position: fixed;
	width: 100%;
	height: 100%;
	background: rgba(0, 0, 0, 0.85);
	z-index: 1000;
	display: none;
}
#game_container {
	position: absolute;
	width: 800px;
	height: 600px;
	left: 50%;
	margin-left: -400px;
	top: 50%;
	margin-top: -300px;
	z-index: 1001;
	display: none;
}

将终端迁移到新大厅

终端迁移操作是通过使用 POST 方法发送 XML 请求到地址 https://apiserver.solutions/api_user_move 完成的。 请注意,两个大厅应使用相同的货币

进入 XML 请求中必填的字段:

字段 类型 必填 描述
version float API 版本,应为 0.6
user_id integer 用户 ID
hall_id integer 旧大厅 ID
hall_id_new integer 新大厅 ID
show_packet smallint 是,如果未提供 response_url 如果参数等于 1,则 XML 请求的结果将返回给调用脚本,否则结果将通过 response_url 参数传递的 URL 地址发送
response_url string 是,如果参数 show_packet 等于 0 如果参数 show_packet 等于 0,则结果通过 POST 方法发送到指定地址。

数据包签名: 类型 1 (使用 hall_secret) 重要!在此操作中,第二个大厅密钥应属于新的大厅:md5 (hall_secret + XML_request (line) + hall_secret2),其中 hall_secret 为当前大厅密钥,hall_secret2 为新大厅密钥。

请求示例:

<?php
	数据包签名
	$signature = md5($secret_word.$XML_REQUEST.$secret_word2);

	// 使用 base64_encode 对 XML 请求进行编码
	$base64_result = base64_encode($XML_REQUEST);

	// 要发送到服务器的数据数组
	$post_request = array(
									'reg_xml' => $base64_result,
									'reg_sign' => $signature
								);

	// 初始化 cURL
	$ch = curl_init ();

	// 设置 cURL 选项
	curl_setopt($ch, CURLOPT_URL, 'https://apiserver.solutions/api_user_move');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_POST, 1);

	// 通过 cURL 发送数据
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_request);

	// 启用 SSL
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);

	//完成请求
	$result = curl_exec($ch);
?>

如果请求成功,您将收到一个以 base64 格式编码的 XML 数据包和数据包签名。 数据包包含以下字段:

字段 类型 描述
version float API 版本
status string 操作状态。 成功为 "success",失败为 "failure"。
code string 错误代码 (仅在失败时出现)
hall_id integer 用户大厅 ID
hall_id_new integer 新大厅 ID
time bigint 时间戳,以 Unix 时间戳格式
user_id integer 用户 ID

在失败的情况下,数据包中的 code 字段将包含错误代码:

错误代码 描述
request_not_exists POST 请求中未找到必填字段 (reg_xml)
invalid_xml_format 请求的 XML 文档格式不正确
required_fields_are_empty XML 请求中的所有必填字段未填写
wrong_userid 错误的 user_id
user_not_isset 用户不存在
wrong_signature 大厅密钥错误
wrong_api_version API 版本错误
hall_not_exist 大厅不存在
halls_belongs_to_different_managers 大厅属于不同的超级代理 (允许不同的代理,但不建议更换所有者以免影响统计)
halls_have_different_currencies 大厅使用不同的货币
user_hall_wrong 旧用户大厅不正确 (不属于用户)

输出 XML 请求示例:

<request>
	<version>0.6</version>
	<hall_id>125</hall_id>
    <hall_id_new>126</hall_id_new>
	<user_id>345</user_id>
	<show_packet>1</show_packet>
	<response_url></response_url>
</request>

成功请求的服务器响应示例:

<request>
	<version>0.6</version>
	<status>success</status>
	<user_id>345</user_id>
	<hall_id>125</hall_id>
	<hall_id_new>126</hall_id_new>
	<time>1390780004</time>
</request>

失败情况下的响应示例:

<request>
	<version>0.6</version>
	<status>failure</status>
	<code>hall_not_exist</code>
	<hall_id>125</hall_id>
</request>

钱包 API

钱包 API 允许您使用我们系统的第三方支付处理功能。

要为您的大厅启用钱包 API,您需要在管理面板中添加您的服务器地址。 为此,请打开大厅页面,进入大厅设置,在“通用大厅设置”部分找到“钱包 API”字段。输入您的服务器名称并点击保存按钮。 您可以在文档中找到更多详细信息

网页上的游戏展示

提供两种游戏输出方式:

  1. 1. 使用 postMessage (HTML5)
  2. 2. 使用基于 JavaScript 的快速集成 (推荐)
  3. 3. 直接集成

使用 HTML5

通过接收到的 postMessage 消息,通过 Cashout 按钮关闭包含游戏的弹出窗口。 关闭操作由我们的服务器处理。 以下是示例代码 (使用 jQuery 插件 Facebox 作为窗口弹出框。 如果您使用的是常规弹出窗口,请将 $.facebox.close (); 改为 window.close ();,或根据所使用的库替换为其他处理程序):

<script type="text/javascript">
        window.addEventListener("message", function (event) {
            var msg = event.data.msg;
            switch(msg) {
                case "panic":
                    location.replace(event.data.url);
                    break;
                case "closeGame":
                    $('.modal-close').click ();
                    break;
            }


        });
</script>

通过 ID 启动游戏的示例:

<script type="text/javascript">
    function doStartGame (gameid, login, pass ) {
        var commandline = 'https://apiserver.solutions/tote_opbetting3?gameid=' + gameid + '&
                          ulogin='+ login + '&upass=' +pass+'&x=' + Math.random () +
                          "jsoncallback=?";

        if (login=='none')
            window.location.href = "/login";

        var html = '<iframesrc="' + commandline + '" width="450"
                     height="340" align="left">Your browser doesn not support iframes!
                   </iframe>';

        $.facebox (html);
        return false;
    }
</script>

对于标记为红色的文本,请参阅文档末尾的备注

通过授权引用输出游戏列表:

<div class="games">
  <?php
    $i = 1;
    foreach($games as $game):
  ?>
  <div class="images-overview <?php echo($i % 4 == 0 ? 'last' : ''); ?>">
     <span><?php echo $game['name']; ?></span>
     <img src="<?php echo $game['icon']; ?>" alt="
            <?php echo $game['id']; ?>" title="<?php echo $game['id']; ?>">
     <a href="#" title="<?php echo $game['name']; ?>"
            onclick="return doStartGame( <?php echo $game['gid']; ?>,
            <?php echo $login; ?>,<?php echo $pass; ?>;">
     <span class="text-link">play</span></a>
     <div class="details">
        <p><?php echo $game['name']; ?></p>
     </div>
  </div>
  <?php $i++;
     endforeach;
  ?>
</div>

其中 $login 是系统中的用户登录名,$pass 是系统中用户密码的 MD5 值.m

如果用户未登录,您应添加事件处理程序,将用户重定向到您的系统登录页面.

在用户未登录的情况下,您需要添加处理程序并将其重定向到系统的登录页面。 在 ID 游戏启动的示例中,如果没有登录名,则 $login='none',应添加 (条款 5.1)重定向至网站的登录页面的功能调用 (在示例中标红的部分):

<script type="text/javascript">
function doStartGame(gameid, login, pass){
   var commandline = 'https://apiserver.solutions/tote_opbetting3?gameid=' + gameid + '&
                     ulogin=' + login + '&upass=' +pass+'&x=' + Math.random() + "
                     jsoncallback=?";

   if(login=='none')
      window.location.href = "/login";

   var html = '<iframe src="' + commandline + '" width="800"
                        height="600" align="left">
                        Your browser does not support iframes!</iframe>';

   $.facebox(html);
   return false;
}
</script>

快速集成 (推荐)

快速集成允许您无需花费时间在 API 实现上,即可将游戏放置在您的网站上。 您只需在页面中添加几行代码。

要在您的网站上运行游戏,您需要注册为我们系统中的代理,拥有当前大厅以及附属于该大厅的用户。 若需注册,请联系我们的经理,联系方式请参见“联系我们”。 示例:1334,游戏大厅编号 1890,大厅密钥为 secret,游戏 ID 为 219. in "Contacts".

为了快速集成,您应该放置一个特殊代码。 该代码可以放在任何位置,但最好将其放入 <head></head>。 标签中。 下面的代码示例展示了可以使用的所有参数。 作为示例,以下是测试数据:玩家登录 1334, 游戏大厅编号 1890, 大厅密码 secret, 游戏 ID 219

<script type="text/javascript" charset="utf-8">
var starconfig = {
	login: 1334,
	hash: "1a250ab682fd877c2117c87addf312e4",
	gameid: 219,
	width: 1024,
	height: 788,
	balanceChange: "changeMyBalance",
	closeWindow: "closeMyWindow",
	logo:  'My Company',
	logoword: 'CompanyName',
};
</script>
<script type="text/javascript" src="http://stargame.solutions/embed/embed.js" charset="utf-8"></script>

需要发送以下参数:

参数名称 必填 描述
login 登录名 (游戏终端 ID)
hash md5 散列,串联 (大厅编号 + 密钥 + 用户 ID)
gameid 游戏 ID
width 游戏窗口宽度
height 游戏窗口高度
balanceChange 用户余额发生变化时,游戏在您页面上调用的 JavaScript 函数名
closeWindow 游戏在您页面上调用的关闭标签页的 JavaScript 函数名
logo 游戏窗口右下角的版权文本 (显示在游戏启动时),最多 20 个字符,仅允许字母、数字和空格
logoword 版权文本,显示在游戏加载时。 仅允许拉丁字母,不含空格,最多 9 个字符。

对于 Aristocrat 类型的游戏,建议的游戏窗口尺寸为 1024x788,其他游戏为 800x600。 如果设置不同于最佳尺寸,建议保持原始高宽比。 您可以在 API游戏列表中查看窗口尺寸。 游戏窗口的高度和宽度可设置为百分比。

<script type="text/javascript" charset="utf-8">
var starconfig = {
	login: 1334,
	hash: "1a250ab682fd877c2117c87addf312e4",
	gameid: 114,
	width: "80%",
	height: "80%"
};
</script>
<script type="text/javascript" src="http://mainamagames.com/embed2.js" charset="utf-8"></script>

直接集成 (使用指向 Flash 加载器的直接链接)

要在您的网站上实现游戏加载,请使用直接链接 https://apiserver.solutions/public/tote/GameLoader.swf

运行游戏的 JS 脚本示例:

   <script type="text/javascript">
       function doStartGameAll(gameid, login, pass) {
         if(login == 'none')
           window.location.href = "/login";

         var commandline = "";
         $.ajax({
           url: " /frame?gameid=" + gameid,
           type: "GET",
           success: function(results){
              commandline = results;
           },
           complete: function (){
              $.facebox(commandline);
           },
           error: function(xhr,err){

           }
         });
       }
   </script>

上述示例在包含 Flash 加载器的页面中打开 facebox 窗口。 您应传递 4 个参数到生成该页面的脚本:sid、key1、key2、config.

演示站点的会话参数: sid – 777, key1 – 777, key2 – 777, config - https://apiserver.solutions/flashconfig.php

游戏页面示例 (带有 Flash 加载器的页面):

  <?php
    <script type="text/javascript">
    function thisMovie(movieName) {
       if(navigator.appName.indexOf("Microsoft") != -1){
          return window[movieName];
       } else {
          return document[movieName];
       }
    }

    function callFlashMethod() {
       document.getElementById('flashapp').externalClose();
    }

    function closePopup(){
       callFlashMethod();
       $.facebox.close();
       return false;
    }


    </script>


<div>
  <object id="_MainApp" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
        width="<? echo $width;?>" height="<? echo $height;?>"
        wmode="direct" allowscriptaccess="always">
    <param name="movie" value="https://apiserver.solutions/public/tote/GameLoader.swf" />
    <param name="allowfullscreen" value="true" />
    <param name="wmode" value="direct" />
    <param name="allowscriptaccess" value="always" />
    <param name="flashvars" value="SID=<? echo $sid;?>&KEY1=
        <? echo $key1;?>&KEY2=<? echo $key2;?>&gameid=<? echo $gid;?>&
        config=<? echo $config;?>" />
      <!-- [if !IE]> -->
      <object type="application/x-shockwave-flash" id="flashapp" wmode="direct"
            allowscriptaccess="always" allowfullscreen="true"
            data="https://apiserver.solutions/public/tote/GameLoader.swf"
            width="<? echo $width;?>" height= "<? echo $height;?>"
            flashvars="SID=<? echo $sid;?>&KEY1=<? echo $key1;?>&KEY2=<? echo $key2;?>
            &gameid=<? echo $gid;?>&config=<? echo $config;?>" >
         <param name="wmode" value="direct" />
		   <param name="allowscriptaccess" value="always" />
		    <param name="allowfullscreen" value="true" />
    <param name="flashvars" value="SID=<? echo $sid;?>&KEY1=
        <? echo $key1;?>&KEY2=<? echo $key2;?>&gameid=<? echo $gid;?>&
        config=<? echo $config;?>" />
      <!-- <![endif] -->
         <div>
           <h3>_MainApp</h3>
         </div>
      <!-- [if !IE]> -->
        </object>
      <!-- <![endif] -->
  </object>
</div>
?>

JS 函数 closePopup () 用于从网站端关闭游戏窗口 (不使用 Cashout 按钮)。 如果未添加此功能,游戏窗口中将不显示“关闭”按钮。 它还会额外调用 callFlashMethod () 函数,该函数会调用 Flash 游戏的 externalClose () 函数。 该功能在游戏过程中保存用户余额时是必须的。关于实时余额变动,请参见注释 2*

变量 $width 和 $height 包含弹出游戏窗口的宽度和高度。 对于普通 Flash 游戏:$width = 800px,$height = 600px;对于 Aristocrat 游戏:$width = 1024px,$height = 768px。 我们建议针对每个游戏调整弹出窗口大小以匹配游戏的原始比例。

备注

备注 1:

若要实时更改余额,请添加 JavaScript 函数 gameBalanceChange (amount),并将 externalClose () 事件绑定到 Flash 游戏的退出事件。 Flash 游戏将在实时传递更新的余额给 gameBalanceChange 函数。一旦用户关闭游戏,externalClose () 函数将确保数据完整性 (例如,当转轴尚未停止而用户关闭了窗口的情况下)

函数示例::

<script type="text/javascript">
  functiongameBalanceChange(amount) {
     var am = amount;
     $('#balance').html (am);
     $.ajax({
        type: "POST",
        url: "/ru-RU/usercab?changebalance=1",
        data: {amount: am},
        success: function(data) {
        }
     });
  }
</script>