aviatrixService = $aviatrixService;
}
/**
* 健康检查接口,不需要认证
*/
public function healthCheck()
{
Util::WriteLog('24680_aviatri','healthCheck');
$response = $this->aviatrixService->healthCheck();
return response()->json($response, 200);
}
/**
* 获取玩家信息
* 请求参数:
* - cid: string, 品牌标识
* - sessionToken: string, 会话令牌
* - timestamp: integer, 时间戳 (Unix时间格式)
* 示例请求数据:
* {
* "cid": "somebrand",
* "sessionToken": "abc123",
* "timestamp": 1617181723
* }
*/
public function getPlayerInfo(Request $request)
{
$post = $request->post();
$signature = $request->header('X-Auth-Signature');
if(!$this->aviatrixService->checkSignature($post,$signature)){
// return response()->json(['message' => 'Invalid authentication signature'], 400);
}
$sessionToken = $post['sessionToken'];
$sessionToken = str_pad(strtr($sessionToken, '-_', '+/'), strlen($sessionToken) % 4, '=', STR_PAD_RIGHT);
$UserID = Crypt::decryptString($sessionToken);
if(!$UserID){
return response()->json(['message' => 'Invalid session token'], 400);
}
$AccountsInfoModel = new AccountsInfo();
// 用户余额
$score = $AccountsInfoModel->Score($UserID);
$response = ['playerId' => strval($UserID),'country' => 'BR','balance' => intval($score),'currency' => env('CONFIG_24680_CURRENCY')];
return response()->json($response);
}
/**
* 玩家下注接口
* 请求参数:
* - cid: string, 品牌标识
* - sessionToken: string, 会话令牌
* - playerId: string, 玩家标识
* - productId: string, 游戏标识
* - txId: string, 事务标识
* - betId: string, 下注标识
* - roundId: string, 回合标识
* - amount: integer, 下注金额
* - currency: string, 货币类型
* - timestamp: integer, 时间戳 (Unix时间格式)
* - odds: float, 可选, 赔率
* - market: string, 可选, 市场类型
* - outcome: string, 可选, 结果
* - specifier: string, 可选, 规格
* - bonusId: string, 可选, 奖金标识
* - roundClosed: boolean, 可选, 回合是否关闭
* 示例请求数据:
* {
* "cid": "somebrand",
* "sessionToken": "abc123",
* "playerId": "john",
* "productId": "nft-aviatrix",
* "txId": "4df40f77-2b38-43f4-b264-1d850f5a6715",
* "betId": "bet123",
* "roundId": "round123",
* "amount": 100,
* "currency": "EUR",
* "timestamp": 1617181723,
* "odds": 1.5,
* "market": "win",
* "outcome": "success",
* "specifier": "specifier123",
* "bonusId": "bonus123",
* "roundClosed": true
* }
*/
public function placeBet(Request $request)
{
$post = $request->post();
$signature = $request->header('X-Auth-Signature');
if(!$this->aviatrixService->checkSignature($post,$signature)){
// return response()->json(['message' => 'Invalid authentication signature'], 400);
}
$sessionToken = $post['sessionToken'];
$sessionToken = str_pad(strtr($sessionToken, '-_', '+/'), strlen($sessionToken) % 4, '=', STR_PAD_RIGHT);
$UserID = Crypt::decryptString($sessionToken);
if(!$UserID){
return response()->json(['message' => 'Invalid session token'], 400);
}
$res = SetNXLock::getExclusiveLock('bet'.$post['betId'], 86400);
if (!$res) {
Util::WriteLog('24680_aviatrix_bet_error',$post);
return response()->json(['message' => 'Bet limit exceeded'], 403);
}
GameCard::$enableStateCheck=false;
$gamecard=GameCard::where('gid','aviatrix')->first();
$in_gameid = OuroGameService::getUserInGame($UserID);
if(!$gamecard){
$gamecard="notfind :::: ".'aviatrix';
Util::WriteLog('24680game', compact('in_gameid', 'gamecard', 'UserID'));
}else {
if ($in_gameid != intval($gamecard->id)) {
Util::WriteLog('24680game', compact('in_gameid', 'gamecard', 'UserID'));
// die;
}
}
$AccountsInfoModel = new AccountsInfo();
// 用户余额
$score = intval($AccountsInfoModel->Score($UserID));
$bet = intval($post['amount']);
if($bet>$score){
Util::WriteLog('24680_aviatrix_bet_error',[$score,$bet,$UserID]);
return response()->json(['message' => 'Bet limit exceeded'], 403);
}
Redis::set('bet_amount_'.$post['betId'],$bet);
Redis::expire('bet_amount_'.$post['betId'],120);
DB::connection('write')->table('QPTreasureDB.dbo.GameScoreInfo')->where('UserID', $UserID)->decrement('Score', $bet);
PlatformService::platformBet('aviatrix',$post['productId'],$bet,$UserID);
$response = ['createdAt' => date('Y-m-d\TH:i:s.vO'),'balance' => intval($score)-$bet];
Util::WriteLog('24680_aviatrix_bet_res',['createdAt' => date('Y-m-d\TH:i:s.vO'),'balance' => intval($score)-$bet]);
return response()->json($response);
}
/**
* 处理玩家赢得的奖金
* 请求参数:
* - cid: string, 品牌标识
* - sessionToken: string, 会话令牌
* - playerId: string, 玩家标识
* - productId: string, 游戏标识
* - txId: string, 事务标识
* - betId: string, 下注标识
* - roundId: string, 回合标识
* - amount: integer, 奖金金额
* - currency: string, 货币类型
* - timestamp: integer, 时间戳 (Unix时间格式)
* - operation: string, 操作类型 (例如 SettleBet, CancelBet)
* - odds: float, 可选, 赔率
* - market: string, 可选, 市场类型
* - outcome: string, 可选, 结果
* - specifier: string, 可选, 规格
* - bonusId: string, 可选, 奖金标识
* - roundClosed: boolean, 可选, 回合是否关闭
* 示例请求数据:
* {
* "cid": "somebrand",
* "sessionToken": "abc123",
* "playerId": "john",
* "productId": "nft-aviatrix",
* "txId": "4df40f77-2b38-43f4-b264-1d850f5a6715",
* "betId": "bet123",
* "roundId": "round123",
* "amount": 500,
* "currency": "EUR",
* "timestamp": 1617181723,
* "operation": "SettleBet",
* "odds": 1.5,
* "market": "win",
* "outcome": "success",
* "specifier": "specifier123",
* "bonusId": "bonus123",
* "roundClosed": true
*/
public function processWin(Request $request)
{
$post = $request->post();
Util::WriteLog('24680_aviatrix_win',$post);
$signature = $request->header('X-Auth-Signature');
if(!$this->aviatrixService->checkSignature($post,$signature)){
// return response()->json(['message' => 'Invalid authentication signature'], 400);
}
$sessionToken = $post['sessionToken'];
$sessionToken = str_pad(strtr($sessionToken, '-_', '+/'), strlen($sessionToken) % 4, '=', STR_PAD_RIGHT);
$UserID = Crypt::decryptString($sessionToken);
if(!$UserID){
return response()->json(['message' => 'Invalid session token'], 400);
}
$res = SetNXLock::getExclusiveLock('win_'.$post['betId'], 86400);
if (!$res) {
Util::WriteLog('24680_win_error',$post);
return response()->json(['message' => 'Invalid session token'], 400);
}
$AccountsInfoModel = new AccountsInfo();
// 用户余额
$score = intval($AccountsInfoModel->Score($UserID));
$win = intval($post['amount']);
$bet = Redis::get('bet_amount_'.$post['betId'])?:0;
//Util::WriteLog('win_data',$post);
if(true){
PlatformService::platformWin($UserID,'aviatrix',$post['productId'],$win,$bet,$score+$win);
}
$response = ['createdAt' => date('Y-m-d\TH:i:s.vO'),'balance' => intval($score)+$win];
return response()->json($response);
}
/**
* 处理玩家的促销奖金
* 请求参数:
* - cid: string, 品牌标识
* - sessionToken: string, 会话令牌
* - playerId: string, 玩家标识
* - txId: string, 事务标识
* - amount: integer, 奖金金额
* - currency: string, 货币类型
* 示例请求数据:
* {
* "cid": "somebrand",
* "sessionToken": "abc123",
* "playerId": "john",
* "txId": "4df40f77-2b38-43f4-b264-1d850f5a6715",
* "amount": 100,
* "currency": "EUR"
* }
*/
public function promoWin(Request $request)
{
$data = $request->validate([
'cid' => 'required|string',
'sessionToken' => 'required|string',
'playerId' => 'required|string',
'txId' => 'required|string',
'amount' => 'required|integer',
'currency' => 'required|string',
]);
$response = $this->aviatrixService->promoWin($data);
return response()->json($response);
}
/**
* 关闭比赛
* 请求参数:
* - cid: string, 品牌标识
* - playerId: string, 玩家标识
* - productId: string, 游戏标识
* - matchId: string, 比赛标识
* - txId: string, 事务标识
*/
public function closeMatch(Request $request)
{
$data = $request->validate([
'cid' => 'required|string',
'playerId' => 'required|string',
'productId' => 'required|string',
'matchId' => 'required|string',
'txId' => 'required|string',
]);
$response = $this->aviatrixService->closeMatch($data);
return response()->json($response);
}
public function gameLunch(Request $request)
{
$gid=$request->input('gid');
$level=$request->input('level',1);
$user = $request->user();
$userid=$user->UserID;
GameCard::$enableStateCheck=false;
$gamecard=GameCard::where('gid',$gid)->first();
$in_gameid=OuroGameService::getUserInGame($userid,$user->GlobalUID);
if($in_gameid!=intval($gamecard->id)){
Util::WriteLog('24680game',compact('in_gameid','gamecard','user'));
// die;
}
$lang=GlobalUserInfo::getLocale();
$clientLang='en';
if($lang=='pt')$clientLang='pt';
else if($lang=='es')$clientLang='es';
else $clientLang='en';;
$url = $this->aviatrixService->launchGame($userid, $clientLang);
LogGamecardClick::recordClick($gamecard->id,$userid);
echo "";
exit();
}
public function lunchGame(Request $request)
{
$userid=$request->input('uid',4688302);
$url = $this->aviatrixService->launchGame($userid, 'pt');
echo "";
exit();
}
}