input('gid');
$level=$request->input('level',1);
$user = $request->user();
$userid=$user->UserID;
if($user->Channel!=99){
http_response_code(404);
exit();
}
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';;
$api = 'https://int.onlyplay.net/api/get_frame';
$AccountsInfoModel = new AccountsInfo();
// 用户余额
$score = $AccountsInfoModel->Score($userid);
$baseInfo = [
'game_bundle' => $gid,
'callback_url' => GameBasicConfig::$ApiServer,
'partner_id' => 949,
'user_id' => strval($userid),
'balance' => intval($score),
'currency' => env('CONFIG_24680_CURRENCY'),
'decimals' => 2,
'lang' => $clientLang,
'token' => sha1(time())
];
$baseInfo['sign'] = $this->_sign($baseInfo);
$headers = [
'Content-Type' => 'application/json',
];
$retryTimes=0;
$rs=null;
while ($rs==null&&$retryTimes<3) {
try {
$rs = Util::curlPost2($api, json_encode($baseInfo), true, $headers);
$rs = json_decode($rs, true);
}catch (\Exception $e){
}
usleep(100*1000);
$retryTimes++;
}
$url = $rs['url'];
if($url){
$gamecard=GameCard::where('gid',$gid)->where('brand','OnlyPlay')->first();
//$gamecard->increment('play_num',1);
//$this->logGameClick($gamecard->id,$userid);
LogGamecardClick::recordClick($gamecard->id,$userid);
//LogGamecardClick::recordClick($gameid,$UserID);
//dd($rs);exit();
echo "";
//header("Location:$url");
exit();
}else{
echo "";
exit();
}
}
private function _sign($params)
{
$secretKey = 'j7OEDKE4Gd1r1PYO7rni13wA3iapu1QPVoG6NoklJoe74j3hCAh84NutR1JG';
ksort($params);
$sign_string = '';
foreach ($params as $key => $value) {
if(is_array($value)){
$value = json_encode($value);
}
if($value === true){
$value = 1;
}
if($value === false){
$value = 0;
}
$sign_string .= $key.$value;
}
$sign = sha1($sign_string . $secretKey);
return $sign;
}
private function _checkSign($data){
//return true;
Util::WriteLog('callback_data',$data);
if(!is_array($data) ||!@$data['sign']){
Util::WriteLog('24680_sign_error',$data);
return false;
}
$sign = $data['sign'];
unset($data['sign']);
return $sign==$this->_sign($data);
}
public function platformInfo(Request $request)
{
$post = $request->post();
//Util::WriteLog('game_test_data',$post);
if (!is_array($post)) {
$post = \GuzzleHttp\json_decode($post, true);
}
if(!$this->_checkSign($post)){
return ['success' => false,'code' => 3100,'message' => 'Sent data is not secure, wrong sign'];
}
$UserID = $post['user_id'];
$AccountsInfoModel = new AccountsInfo();
// 用户余额
$score = $AccountsInfoModel->Score($UserID);
return ['success' => true,'balance' => intval($score)];
}
public function platformBet(Request $request)
{
$post = $request->post();
if (!is_array($post)) {
$post = \GuzzleHttp\json_decode($post, true);
}
if(!$this->_checkSign($post)){
return ['success' => false,'code' => 3100,'message' => 'Sent data is not secure, wrong sign'];
}
$UserID = $post['user_id'];
$AccountsInfoModel = new AccountsInfo();
// 用户余额
$score = intval($AccountsInfoModel->Score($UserID));
$res = SetNXLock::getExclusiveLock('bet'.$post['tx_id'], 86400);
if (!$res) {
Util::WriteLog('24680_bet_error',$post);
return ['success' => true,'balance' => intval($score)];
//return ['success' => false,'code' => 2401,'message' => 'Session not found or expired.'];
}
GameCard::$enableStateCheck=false;
$gamecard=GameCard::where('gid',$post['game_bundle'])->first();
$in_gameid = OuroGameService::getUserInGame($UserID);
if(!$gamecard){
$gamecard="notfind :::: ".$post['game_bundle'];
Util::WriteLog('24680game', compact('in_gameid', 'gamecard', 'UserID'));
}else {
if ($in_gameid != intval($gamecard->id)) {
Util::WriteLog('24680game', compact('in_gameid', 'gamecard', 'UserID'));
// die;
}
}
$bet = intval($post['amount']);
if($bet>$score){
return ['success' => false,'code' => 5001,'message' => 'Insufficient funds'];
}
DB::connection('write')->table('QPTreasureDB.dbo.GameScoreInfo')->where('UserID', $UserID)->decrement('Score', $bet);
//用户cancel的时候
Redis::set('bet_amount_'.$post['tx_id'],$bet);
Redis::expire('bet_amount_'.$post['tx_id'],120);
PlatformService::platformBet('only',$post['game_bundle'],$bet,$UserID);
Util::WriteLog('24680_only_bet_success',array_merge($post, ['success' => true,'balance' => intval($score)-$bet]));
return ['success' => true,'balance' => intval($score)-$bet];
}
public function platformWin(Request $request)
{
$post = $request->post();
if (!is_array($post)) {
$post = \GuzzleHttp\json_decode($post, true);
}
if(!$this->_checkSign($post)){
return ['success' => false,'code' => 3100,'message' => 'Sent data is not secure, wrong sign'];
}
$UserID = $post['user_id'];
$AccountsInfoModel = new AccountsInfo();
// 用户余额
$score = intval($AccountsInfoModel->Score($UserID));
$res = SetNXLock::getExclusiveLock('win_'.$post['tx_id'], 86400);
if (!$res) {
Util::WriteLog('24680_win_error',$post);
//return ['success' => false,'code' => 2401,'message' => 'Session not found or expired.'];
return ['success' => true,'balance' => intval($score)];
}
$betKey = 'bet_amount_'.$post['ref_tx_id'];
$win = intval($post['amount']);
$bet = Redis::get($betKey)?:0;
if(true){
PlatformService::platformWin($UserID,'only',$post['game_bundle'],$win,$bet,$score+$win);
}
Redis::del($betKey);
Util::WriteLog('24680_only_win_success',array_merge($post, ['success' => true,'balance' => intval($score)+$win]));
return ['success' => true,'balance' => intval($score)+$win];
}
public function platformCancel(Request $request)
{
$post = $request->post();
if (!is_array($post)) {
$post = \GuzzleHttp\json_decode($post, true);
}
if(!$this->_checkSign($post)){
return ['success' => false,'code' => 3100,'message' => 'Sent data is not secure, wrong sign'];
}
$UserID = $post['user_id'];
$AccountsInfoModel = new AccountsInfo();
// 用户余额
$score = intval($AccountsInfoModel->Score($UserID));
$bet=0;
$key='bet_amount_'.$post['ref_tx_id'];
if(Redis::exists($key)){
$bet=Redis::get($key);
if($bet>0){
DB::connection('write')->table('QPTreasureDB.dbo.GameScoreInfo')->where('UserID', $UserID)->increment('Score', $bet);
PlatformService::platformBet('only',$post['game_bundle'],-$bet,$UserID);
}
Redis::del($key);
}
$score+=$bet;
Util::WriteLog('24680_only_cancel_success',array_merge($post, ['success' => true,'balance' => intval($score)]));
return ['success' => true,'balance' => intval($score)];
}
public function roundInfo(Request $request){
$api = 'https://int.onlyplay.net/api/get_frame';
$baseInfo = [
'round_id' => $request->input('round'),
'partner_id' => 949,
'date' => date('Y-m-d')
];
$baseInfo['sign'] = $this->_sign($baseInfo);
$headers = [
'Content-Type' => 'application/json',
];
$rs = Util::curlPost2($api,json_encode($baseInfo),true,$headers);
dd($rs);
}
}