在第三方网站上显示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
步骤指南:
- 您需要生成一个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)
- XML请求应具有以下格式:$xml = '
XML data '; - 然后,您应使用base64编码对XML请求进行编码,并使用POST方法将其发送到指定的URL:字段 reg_xml => base64_encode(XML_request),字段reg_sign => signature
- 如果请求成功,您将收到一个以base64格式编码的XML数据包及其签名.每个API描述中都有响 应字段的详细说明.您可以在下面查看通用响应格式:
<request> <version>0.6</version> <status>success</status> <time>timestamp (unix_timestamp)</time> ... </request>
- 如果出现任何故障,响应将包含以下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版本指定不正确 |
获取游戏列表
有三种不同的游戏列表可供获取:
- https://apiserver.solutions/remote_games_list_new – 返回至少16款新游戏;
- https://apiserver.solutions/remote_games_list_pop – 返回至少16款热门游戏;
- 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 – 通用数据:
- actualdate – 服务器端游戏列表的创建日期和时间
- gamescount – 此集合中的游戏数量
- config – Flash加载器的配置路径
family – 该类别的游戏描述:
- id – 类别ID
- name – 类别名称
- games – 游戏列表
game – 每个游戏的参数:
- id – 游戏ID
- name – 游戏名称
- icon – 游戏图标链接
- url – 游戏链接
- width – 游戏窗口宽度
- height – 游戏窗口高度
- 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 | 否 | 电话号码.仅包含数 字,无空格且不含 "+" 号. |
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 | 用户密码 |
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操作) |
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. 使用 postMessage (HTML5)
- 2. 使用基于 JavaScript 的快速集成(推荐)
- 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>