| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- <?php
- namespace App\Http\Controllers\Game;
- use App\Facade\TableName;
- use App\Game\BetBy\ErrorItem;
- use App\Game\GameCard;
- use App\Game\GlobalUserInfo;
- use App\Game\LogGamecardClick;
- use App\Game\Services\OuroGameService;
- use App\Game\Services\PgSoftService;
- use App\Game\Services\PlatformService;
- use App\Game\Services\ServerService;
- use App\Http\helper\NumConfig;
- use App\Models\AccountsInfo;
- use App\Notification\TelegramBot;
- use App\Util;
- use App\Utility\SetNXLock;
- use GuzzleHttp\Client;
- use GuzzleHttp\Exception\RequestException;
- use Illuminate\Http\Request;
- use Illuminate\Routing\Controller;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Redis;
- class PgSoftController extends Controller
- {
- protected $pgSoftService;
- protected $client;
- protected $Currency;
- public function __construct(PgSoftService $pgSoftService)
- {
- $this->client = new Client();
- $this->pgSoftService = $pgSoftService;
- $this->Currency=env('CONFIG_24680_CURRENCY');
- }
- private function handleRequestException(\Exception $e)
- {
- TelegramBot::getDefault()->sendMsgWithEnv($e->getMessage().$e->getTraceAsString());
- }
- private function callSubApi($ext_player_id,$method,$request)
- {
- $apiurl=ServerService::GetApiByGUID($ext_player_id);
- try {
- // 获取当前请求的 GET 和 POST 数据
- $getData = $request->query(); // 获取 GET 数据
- $postData = $request->post(); // 获取 POST 数据
- $response = $this->client->post( $apiurl . '/game/pgpro/'.$method, [
- 'verify'=>false,
- 'query' => $getData, // 传递 GET 数据
- 'form_params' => $postData, // 传递 POST 数据
- ]);
- $res=json_decode($response->getBody(),true);
- Util::WriteLog('pgsub',$res);
- return $res;
- } catch (RequestException $e) {
- return $this->handleRequestException($e);
- }
- }
- public function gameLunch(Request $request)
- {
- $gid=$request->input('gid');
- $user = $request->user();
- $userid=$user->UserID;
- if($user->Channel!=99&&$user->Channel!=44){
- if(in_array($gid,PgSimController::$readyGames)){
- $existOne=GameCard::where('gid',$gid)->where('brand','PGSoft')->first();
- if($existOne){
- return (new PgSimController())->gameLunch($request);
- }
- }
- 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;
- }
- $gamecard=GameCard::where('gid',$gid)->where('brand','PG')->first();
- $gamecard->increment('play_num',1);
- //$this->logGameClick($gamecard->id,$userid);
- LogGamecardClick::recordClick($gamecard->id,$userid);
- $lang=GlobalUserInfo::getLocale();
- $supportLang = ['en','da','de','es','fi','fr','id','it','ja','ko','nl','no','pl','pt','ro','ru','sv','th','tr','vi','zh','my'];
- if(!in_array($lang,$supportLang)){
- $lang = 'en';
- }
- echo "<script>
- parent.postMessage({cmd:\"closeLoading\"},\"*\");
- </script>";
- header("Cache-Control: no-cache, no-store, must-revalidate");
- //header("Pragma: no-cache"); // HTTP 1.0
- header("Expires: 0"); // 禁止客户端缓存
- $res=null;
- while(!is_string($res)){
- $res=$this->pgSoftService->getLaunchURLHTML($gid,$user->GlobalUID,$request->ip(),$lang);
- if(!is_string($res))sleep(1);
- }
- return $res;
- }
- public function gameList()
- {
- $response = $this->pgSoftService->getGamesList();
- return response()->json($response);
- }
- public function VerifySession(Request $request)
- {
- $post = $request->all();
- Util::WriteLog('pg_token',$post);
- if(!$this->pgSoftService->VerifySession(@$post['operator_token'], @$post['secret_key'])){
- return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
- }
- $playerId = @$post['operator_player_session'];
- if(!ServerService::IsLocalUser($playerId)) {
- return $this->callSubApi($playerId,'VerifySession',$request);
- }
- $user = GlobalUserInfo::getGameUserInfo('GlobalUID', $playerId);
- if(!$user) return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
- Util::WriteLog('pg_token',$user);
- Util::WriteLog('pg_token',['data' => ['player_name' => $playerId,'nickname' => $user->NickName,'currency' => $this->Currency],'error' => null]);
- return response()->json(['data' => ['player_name' => $playerId,'nickname' => $user->NickName,'currency' => $this->Currency],'error' => null]);
- }
- public function balance(Request $request)
- {
- ///ff
- ///
- // Route::any('/pgsub/game_list', 'Game\PgSoftController@gameList');
- // Route::any('/pgsub/VerifySession', 'Game\PgSoftController@VerifySession');
- // Route::any('/pgsub/Cash/Get', 'Game\PgSoftController@balance');
- $post = $request->all();
- Util::WriteLog('pg_balance',$post);
- if(!$this->pgSoftService->VerifySession(@$post['operator_token'], @$post['secret_key'])){
- return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
- }
- $playerId = @$post['player_name'];
- if(!ServerService::IsLocalUser($playerId)) {
- return $this->callSubApi($playerId,'Cash/Get',$request);
- }
- $user = GlobalUserInfo::getGameUserInfo('GlobalUID', $playerId);
- if (!$user) return response()->json(['data' => null, 'error' => ['code' => 1034, 'message' => 'invalid session']]);
- $score = GlobalUserInfo::getScoreByUserID($user->UserID);
- Util::WriteLog('pg_balance', ['data' => ['currency_code' => $this->Currency, 'balance_amount' => $score, 'updated_time' => Util::getUnixTimestampMillis()], 'error' => null]);
- return response()->json(['data' => ['currency_code' => $this->Currency, 'balance_amount' => $score, 'updated_time' => Util::getUnixTimestampMillis()], 'error' => null]);
- }
- // Route::any('/pgsub/Cash/TransferInOut', 'Game\PgSoftController@cashTransferInOut');
- public function cashTransferInOut(Request $request)
- {
- $post = $request->all();
- Util::WriteLog('pg_inout',$post);
- if(!$this->pgSoftService->VerifySession(@$post['operator_token'], @$post['secret_key'])){
- return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
- }
- $playerId = @$post['player_name'];
- if(!ServerService::IsLocalUser($playerId)) {
- return $this->callSubApi($playerId,'Cash/TransferInOut',$request);
- }
- $user = GlobalUserInfo::getGameUserInfo('GlobalUID', $playerId);
- if(!$user) return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
- Util::WriteLog('pg_inout',$user);
- if(@$post['currency_code'] != $this->Currency){
- return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
- }
- $transactionId = $post['transaction_id'];
- $score = GlobalUserInfo::getScoreByUserID($user->UserID);
- $isBet = @$post['is_wager'];
- $bet = $post['bet_amount'];
- $win = $post['win_amount'];
- $transfer = $post['transfer_amount'];
- if(round($transfer,2) != round($win - $bet,2)){
- Util::WriteLog('pg_inout',['transfer_error' => 1, 'data' => ['transfer_amount' => $transfer,'win' => $win,'bet' => $bet],'error' => null]);
- return response()->json(['data' => null,'error' => ['code' => 3073,'message' => 'BetFailedException']]);
- }
- if(isset($post['real_transfer_amount'])){
- if($transfer != $post['real_transfer_amount']){
- return response()->json(['data' => null,'error' => ['code' => 3107,'message' => 'BetFailedException']]);
- }
- }
- $exists = Redis::exists('pg_inout_'.$transactionId);
- if ($exists) {
- Util::WriteLog('pg_inout',Redis::get('pg_inout_'.$transactionId));
- return response()->json(json_decode(Redis::get('pg_inout_'.$transactionId),true));
- //return response()->json(['data' => ['currency_code' => $this->Currency,'balance_amount' => $score,'updated_time' => (int)$post['updated_time']],'error' => null]);
- }
- if($bet>0){
- if($score<$bet){
- Util::WriteLog('pg_inout',['yichu' => 1,'data' => ['currency_code' => $this->Currency,'balance_amount' => $score,'updated_time' => (int)$post['updated_time']],'error' => null]);
- Redis::setex('pg_inout_'.$transactionId,300,json_encode(['data' => null,'error' => ['code' => 3202,'message' => 'NotEnoughBalanceException']]));
- return response()->json(['data' => null,'error' => ['code' => 3202,'message' => 'NotEnoughBalanceException']]);
- }
- PlatformService::platformBet('pg',@$post['game_id'],intval($bet*NumConfig::NUM_VALUE),$user->UserID);
- }
- if($transfer){
- if($transfer+$score<0){
- $transfer = -$score;
- }
- DB::connection('write')->table('QPTreasureDB.dbo.GameScoreInfo')->where('UserID', $user->UserID)->increment('Score', $transfer*NumConfig::NUM_VALUE);
- $score = round($score + $transfer,2);
- }
- PlatformService::platformWin($user->UserID,'pg',@$post['game_id'],intval($win*NumConfig::NUM_VALUE),intval($bet*NumConfig::NUM_VALUE),intval($score*NumConfig::NUM_VALUE),false);
- if(isset($post['real_transfer_amount'])){
- $output = ['data' => ['currency_code' => $this->Currency,'balance_amount' => $score,'updated_time' => (int)$post['updated_time'],'real_transfer_amount' => round($post['real_transfer_amount'],2)],'error' => null];
- }else{
- $output = ['data' => ['currency_code' => $this->Currency,'balance_amount' => $score,'updated_time' => (int)$post['updated_time']],'error' => null];
- }
- Redis::setex('pg_inout_'.$transactionId,88600,json_encode($output));
- Util::WriteLog('pg_inout',$output);
- return response()->json($output);
- }
- // Route::any('/pgsub/Cash/Adjustment', 'Game\PgSoftController@cashAdjustment');
- // Route::any('/pgsub/Cash/UpdateBetDetail', 'Game\PgSoftController@cashUpdateBetDetail');
- public function cashAdjustment(Request $request)
- {
- $post = $request->all();
- Util::WriteLog('pg_adjust',$post);
- if(!$this->pgSoftService->VerifySession(@$post['operator_token'], @$post['secret_key'])){
- return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
- }
- $playerId = @$post['player_name'];
- if(!ServerService::IsLocalUser($playerId)) {
- return $this->callSubApi($playerId,'Cash/Adjustment',$request);
- }
- $user = GlobalUserInfo::getGameUserInfo('GlobalUID', $playerId);
- if(!$user) return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
- Util::WriteLog('pg_adjust',$user);
- if(@$post['currency_code'] != $this->Currency){
- return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
- }
- $transactionId = $post['adjustment_transaction_id'];
- $score = GlobalUserInfo::getScoreByUserID($user->UserID);
- $transfer = $post['transfer_amount'];
- if($transfer+$score<0){
- return response()->json(['data' => null,'error' => ['code' => 3202,'message' => 'BetFailedException']]);
- }
- if(isset($post['real_transfer_amount'])){
- if($transfer != $post['real_transfer_amount']){
- return response()->json(['data' => null,'error' => ['code' => 3107,'message' => 'BetFailedException']]);
- }
- }
- $exists = Redis::exists('pg_adjust_'.$transactionId);
- if ($exists) {
- return response()->json(json_decode(Redis::get('pg_adjust_'.$transactionId),true));
- }
- if($transfer){
- DB::connection('write')->table('QPTreasureDB.dbo.GameScoreInfo')->where('UserID', $user->UserID)->increment('Score', $transfer*NumConfig::NUM_VALUE);
- }
- $output = ['data' => ['currency_code' => $this->Currency, 'adjust_amount' => $transfer, 'balance_before' => $score, 'balance_after' => round($transfer+$score,2), 'updated_time' => (int)$post['adjustment_time']],'error' => null];
- if(isset($post['real_transfer_amount'])){
- $output['data']['real_transfer_amount'] = round($post['real_transfer_amount'],2);
- }
- Redis::setex('pg_adjust_'.$transactionId,88600,json_encode($output));
- return response()->json($output);
- }
- public function cashUpdateBetDetail()
- {
- return response()->json(['data' => ['is_success' => 1],'error' => null]);
- }
- }
|