PgSoftTestController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <?php
  2. namespace App\Http\Controllers\Game;
  3. use App\Facade\TableName;
  4. use App\Game\GameCard;
  5. use App\Game\GlobalUserInfo;
  6. use App\Game\LogGamecardClick;
  7. use App\Game\Services\OuroGameService;
  8. use App\Game\Services\PgSoftService;
  9. use App\Game\Services\PgSoftTestService;
  10. use App\Game\Services\PlatformService;
  11. use App\Http\helper\NumConfig;
  12. use App\Models\AccountsInfo;
  13. use App\Util;
  14. use App\Utility\SetNXLock;
  15. use Illuminate\Http\Request;
  16. use Illuminate\Routing\Controller;
  17. use Illuminate\Support\Facades\DB;
  18. use Illuminate\Support\Facades\Redis;
  19. class PgSoftTestController extends Controller
  20. {
  21. protected $pgSoftService;
  22. protected $Currency='';
  23. public function __construct(PgSoftTestService $pgSoftService)
  24. {
  25. $this->pgSoftService = $pgSoftService;
  26. $this->Currency = env('CONFIG_24680_CURRENCY');
  27. }
  28. public function gameLunch(Request $request)
  29. {
  30. $gid=$request->input('gid');
  31. $user = $request->user();
  32. $userid=$user->UserID;
  33. GameCard::$enableStateCheck=false;
  34. $gamecard=GameCard::where('gid',$gid)->first();
  35. $in_gameid=OuroGameService::getUserInGame($userid,$user->GlobalUID);
  36. if($in_gameid!=intval($gamecard->id)){
  37. Util::WriteLog('24680game',compact('in_gameid','gamecard','user'));
  38. // die;
  39. }
  40. $gamecard=GameCard::where('gid',$gid)->where('brand','PG')->first();
  41. $gamecard->increment('play_num',1);
  42. //$this->logGameClick($gamecard->id,$userid);
  43. LogGamecardClick::recordClick($gamecard->id,$userid);
  44. $lang=GlobalUserInfo::getLocale();
  45. $supportLang = ['en','da','de','es','fi','fr','id','it','ja','ko','nl','no','pl','pt','ro','ru','sv','th','tr','vi','zh','my'];
  46. if(!in_array($lang,$supportLang)){
  47. $lang = 'en';
  48. }
  49. echo "<script>
  50. parent.postMessage({cmd:\"closeLoading\"},\"*\");
  51. </script>";
  52. header("Cache-Control: no-cache, no-store, must-revalidate");
  53. //header("Pragma: no-cache"); // HTTP 1.0
  54. header("Expires: 0"); // 禁止客户端缓存
  55. return $this->pgSoftService->getLaunchURLHTML($gid,$user->GlobalUID,$request->ip(),$lang);
  56. }
  57. public function gameList()
  58. {
  59. $response = $this->pgSoftService->getGamesList();
  60. return response()->json($response);
  61. }
  62. public function VerifySession(Request $request)
  63. {
  64. $post = $request->all();
  65. Util::WriteLog('pg_token',$post);
  66. if(!$this->pgSoftService->VerifySession(@$post['operator_token'], @$post['secret_key'])){
  67. return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
  68. }
  69. $playerId = @$post['operator_player_session'];
  70. $user = GlobalUserInfo::getGameUserInfo('GlobalUID', $playerId);
  71. if(!$user) return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
  72. Util::WriteLog('pg_token',$user);
  73. Util::WriteLog('pg_token',['data' => ['player_name' => $playerId,'nickname' => $user->NickName,'currency' => $this->Currency],'error' => null]);
  74. return response()->json(['data' => ['player_name' => $playerId,'nickname' => $user->NickName,'currency' => $this->Currency],'error' => null]);
  75. }
  76. public function balance(Request $request)
  77. {
  78. $post = $request->all();
  79. Util::WriteLog('pg_balance',$post);
  80. if(!$this->pgSoftService->VerifySession(@$post['operator_token'], @$post['secret_key'])){
  81. return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
  82. }
  83. $playerId = @$post['player_name'];
  84. $user = GlobalUserInfo::getGameUserInfo('GlobalUID', $playerId);
  85. if(!$user) return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
  86. $score = GlobalUserInfo::getScoreByUserID($user->UserID);
  87. Util::WriteLog('pg_balance',['data' => ['currency_code' => $this->Currency,'balance_amount' => $score,'updated_time' => Util::getUnixTimestampMillis()],'error' => null]);
  88. return response()->json(['data' => ['currency_code' => $this->Currency,'balance_amount' => $score,'updated_time' => Util::getUnixTimestampMillis()],'error' => null]);
  89. }
  90. public function cashTransferInOut(Request $request)
  91. {
  92. $post = $request->all();
  93. Util::WriteLog('pg_inout',$post);
  94. if(!$this->pgSoftService->VerifySession(@$post['operator_token'], @$post['secret_key'])){
  95. return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
  96. }
  97. $playerId = @$post['player_name'];
  98. $user = GlobalUserInfo::getGameUserInfo('GlobalUID', $playerId);
  99. if(!$user) return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
  100. Util::WriteLog('pg_inout',$user);
  101. if(@$post['currency_code'] != $this->Currency){
  102. return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
  103. }
  104. $transactionId = $post['transaction_id'];
  105. $score = GlobalUserInfo::getScoreByUserID($user->UserID);
  106. $isBet = @$post['is_wager'];
  107. $bet = $post['bet_amount'];
  108. $win = $post['win_amount'];
  109. $transfer = $post['transfer_amount'];
  110. if(round($transfer,2) != round($win - $bet,2)){
  111. Util::WriteLog('pg_inout',['transfer_error' => 1, 'data' => ['transfer_amount' => $transfer,'win' => $win,'bet' => $bet],'error' => null]);
  112. return response()->json(['data' => null,'error' => ['code' => 3073,'message' => 'BetFailedException']]);
  113. }
  114. if(isset($post['real_transfer_amount'])){
  115. if($transfer != $post['real_transfer_amount']){
  116. return response()->json(['data' => null,'error' => ['code' => 3107,'message' => 'BetFailedException']]);
  117. }
  118. }
  119. $exists = Redis::exists('pg_inout_'.$transactionId);
  120. if ($exists) {
  121. Util::WriteLog('pg_inout',Redis::get('pg_inout_'.$transactionId));
  122. return response()->json(json_decode(Redis::get('pg_inout_'.$transactionId),true));
  123. //return response()->json(['data' => ['currency_code' => $this->Currency,'balance_amount' => $score,'updated_time' => (int)$post['updated_time']],'error' => null]);
  124. }
  125. if($bet>0){
  126. if($score<$bet){
  127. Util::WriteLog('pg_inout',['yichu' => 1,'data' => ['currency_code' => $this->Currency,'balance_amount' => $score,'updated_time' => (int)$post['updated_time']],'error' => null]);
  128. Redis::setex('pg_inout_'.$transactionId,300,json_encode(['data' => null,'error' => ['code' => 3202,'message' => 'NotEnoughBalanceException']]));
  129. return response()->json(['data' => null,'error' => ['code' => 3202,'message' => 'NotEnoughBalanceException']]);
  130. }
  131. PlatformService::platformBet('pg',@$post['game_id'],intval($bet*100),$user->UserID);
  132. }
  133. if($transfer){
  134. if($transfer+$score<0){
  135. $transfer = -$score;
  136. }
  137. DB::connection('write')->table('QPTreasureDB.dbo.GameScoreInfo')->where('UserID', $user->UserID)->increment('Score', $transfer*NumConfig::NUM_VALUE);
  138. $score = round($score + $transfer,2);
  139. PlatformService::platformWin($user->UserID,'pg',@$post['game_id'],intval($win*NumConfig::NUM_VALUE),intval($bet*NumConfig::NUM_VALUE),intval($score*NumConfig::NUM_VALUE),false);
  140. }
  141. if(isset($post['real_transfer_amount'])){
  142. $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];
  143. }else{
  144. $output = ['data' => ['currency_code' => $this->Currency,'balance_amount' => $score,'updated_time' => (int)$post['updated_time']],'error' => null];
  145. }
  146. Redis::setex('pg_inout_'.$transactionId,88600,json_encode($output));
  147. Util::WriteLog('pg_inout',$output);
  148. return response()->json($output);
  149. }
  150. public function cashAdjustment(Request $request)
  151. {
  152. $post = $request->all();
  153. Util::WriteLog('pg_adjust',$post);
  154. if(!$this->pgSoftService->VerifySession(@$post['operator_token'], @$post['secret_key'])){
  155. return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
  156. }
  157. $playerId = @$post['player_name'];
  158. $user = GlobalUserInfo::getGameUserInfo('GlobalUID', $playerId);
  159. if(!$user) return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
  160. Util::WriteLog('pg_adjust',$user);
  161. if(@$post['currency_code'] != $this->Currency){
  162. return response()->json(['data' => null,'error' => ['code' => 1034,'message' => 'invalid session']]);
  163. }
  164. $transactionId = $post['adjustment_transaction_id'];
  165. $score = GlobalUserInfo::getScoreByUserID($user->UserID);
  166. $transfer = $post['transfer_amount'];
  167. if($transfer+$score<0){
  168. return response()->json(['data' => null,'error' => ['code' => 3202,'message' => 'BetFailedException']]);
  169. }
  170. if(isset($post['real_transfer_amount'])){
  171. if($transfer != $post['real_transfer_amount']){
  172. return response()->json(['data' => null,'error' => ['code' => 3107,'message' => 'BetFailedException']]);
  173. }
  174. }
  175. $exists = Redis::exists('pg_adjust_'.$transactionId);
  176. if ($exists) {
  177. return response()->json(json_decode(Redis::get('pg_adjust_'.$transactionId),true));
  178. }
  179. if($transfer){
  180. DB::connection('write')->table('QPTreasureDB.dbo.GameScoreInfo')->where('UserID', $user->UserID)->increment('Score', $transfer*NumConfig::NUM_VALUE);
  181. }
  182. $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];
  183. if(isset($post['real_transfer_amount'])){
  184. $output['data']['real_transfer_amount'] = round($post['real_transfer_amount'],2);
  185. }
  186. Redis::setex('pg_adjust_'.$transactionId,88600,json_encode($output));
  187. return response()->json($output);
  188. }
  189. public function cashUpdateBetDetail()
  190. {
  191. return response()->json(['data' => ['is_success' => 1],'error' => null]);
  192. }
  193. }