WithDrawInfoController.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Facade\TableName;
  4. use App\Models\AccountsInfo;
  5. use App\Util;
  6. use App\Utility\SetNXLock;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\DB;
  9. use Illuminate\Support\Facades\Log;
  10. class WithDrawInfoController
  11. {
  12. public function withDrawInfo(Request $request)
  13. {
  14. // return apiReturnFail('params error');
  15. $UserID = $request->input('UserID');
  16. $RequestDynamicPass = $request->input('DynamicPass');
  17. $PixType = $request->input('cbPixType');
  18. $BankNO = $request->input('bank');
  19. $AccountsBank = urldecode($request->input('account'));
  20. $BankUserName = urldecode($request->input('userName'));
  21. $BankUserName=Util::filterNickName($BankUserName);
  22. $PhoneNumber = $request->input('phone');
  23. $EmailAddress = $request->input('email');
  24. $IFSCNumber = $request->input('IFSC');
  25. $PANNumber = $request->input('PAN');
  26. $AdhaarNumber = $request->input('adhaar');
  27. $BranchBank = $request->input('branceBank');
  28. $PixNum = $request->input('PixNum');
  29. $redisKey = 'withDrawInfo_withDrawInfo_'.$UserID;
  30. if (!SetNXLock::getExclusiveLock($redisKey)) {
  31. Util::WriteLog("withdrawInfo",[1, $request->all()]);
  32. return apiReturnFail(__('messages.api.withdraw_info.try_again_later'));
  33. }
  34. if (!$UserID) {
  35. Util::WriteLog("withdrawInfo",[2, $request->all()]);
  36. Log::info('miss UserID', $request->all());
  37. SetNXLock::release($redisKey);
  38. return apiReturnFail(__('messages.api.withdraw_info.params_error'));
  39. }
  40. if (empty($PixType)) {
  41. Util::WriteLog("withdrawInfo",[3, $request->all()]);
  42. SetNXLock::release($redisKey);
  43. return apiReturnFail(__('messages.api.withdraw_info.missing_pix_type'));
  44. }
  45. // 验证PixNum绑定次数
  46. if (!empty($PixNum)) {
  47. $BindCount = DB::table(TableName::QPRecordDB() . 'RecordBankCardBind')
  48. ->where('BankCard', $PixNum)
  49. ->lock('WITH(NOLOCK)')
  50. ->count();
  51. if ($BindCount >= 8) {
  52. Util::WriteLog("withdrawInfo",[4, $request->all()]);
  53. SetNXLock::release($redisKey);
  54. return apiReturnFail(['web.withdraw.cpf_number_used',__('messages.api.withdraw_info.cpf_number_used')], [], 302);
  55. }
  56. }
  57. // if(!is_numeric($PixNum)){
  58. // return apiReturnFail(['web.withdraw.pix_failed','The CPF number has been used several times and cannot be saved'], [], 302);
  59. // }
  60. // 验证玩家信息
  61. $DynamicPass = DB::table(TableName::QPAccountsDB() . 'AccountsInfo')
  62. ->where('UserID', $UserID)
  63. ->lock('WITH(NOLOCK)')
  64. ->value('DynamicPass');
  65. if ($DynamicPass != $RequestDynamicPass || empty($DynamicPass)) {
  66. SetNXLock::release($redisKey);
  67. Util::WriteLog("withdrawInfo",[5, $request->all()]);
  68. return apiReturnFail(__('messages.api.withdraw_info.player_info_inconsistent'));
  69. }
  70. if ($PixType < 10) {
  71. $data = compact('PixType', 'BankUserName', 'PhoneNumber', 'EmailAddress', 'PixNum');
  72. } else {
  73. $data = compact('PixType', 'BankNO', 'AccountsBank', 'IFSCNumber', 'PANNumber', 'AdhaarNumber', 'BranchBank');
  74. $PixNum = $BankNO;
  75. }
  76. foreach ($data as $key => &$val) {
  77. $data[$key] = trim($val);
  78. }
  79. unset($val);
  80. $AccountWithDrawInfo = DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  81. ->lock('WITH(NOLOCK)')
  82. ->where('UserID', $UserID)
  83. ->first();
  84. if (!$AccountWithDrawInfo) {
  85. $data['UserID'] = $UserID;
  86. $data['Achieves'] = 0;
  87. $data['HistoryWithDraw'] = 0;
  88. try {
  89. DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  90. ->where('UserID', $UserID)
  91. ->insert($data);
  92. } catch (\Exception $e) {
  93. Log::error('insert AccountWithDrawInfo failed', ['data' => $data]);
  94. Util::WriteLog("withdrawInfo",[6, $request->all(),$data]);
  95. }
  96. } else {
  97. $data = array_filter($data, function ($value) {
  98. return !is_null($value) && $value !== '';
  99. });
  100. DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  101. ->where('UserID', $UserID)
  102. ->update($data);
  103. }
  104. // 添加绑定记录
  105. if (empty($AccountWithDrawInfo->PixNum) || $AccountWithDrawInfo->PixNum != $PixNum) {
  106. try {
  107. if(!DB::table(TableName::QPRecordDB() . 'RecordBankCardBind')->where('UserID', $UserID)->exists()&&is_numeric($PixNum)) {
  108. DB::table(TableName::QPRecordDB() . 'RecordBankCardBind')
  109. ->insert([
  110. 'UserID' => $UserID,
  111. 'BankCard' => $PixNum ?: '',
  112. 'BindDate' => now()
  113. ]);
  114. Util::WriteLog('update_pix', [
  115. 'UserID' => $UserID,
  116. 'BankCard' => $PixNum ?: '',
  117. 'BindDate' => now()
  118. ]);
  119. }
  120. } catch (\Exception $e) {
  121. Log::error('insert RecordBankCardBind failed', ['data' => $data]);
  122. Util::WriteLog("withdrawInfo",[7, $request->all(),$data]);
  123. }
  124. }
  125. SetNXLock::release($redisKey);
  126. return apiReturnSuc();
  127. }
  128. public function withDrawInfoPK(Request $request)
  129. {
  130. // return apiReturnFail('params error');
  131. $UserID = $request->input('UserID');
  132. $RequestDynamicPass = $request->input('DynamicPass');
  133. $PixType = $request->input('cbPixType');
  134. $AccountsBank = urldecode($request->input('account'));
  135. $BankUserName = urldecode($request->input('userName'));
  136. $BankUserName=Util::filterNickName($BankUserName);
  137. $PhoneNumber = $request->input('phone');
  138. $EmailAddress = $request->input('email');
  139. $PixNum = $request->input('PixNum');
  140. $redisKey = 'withDrawInfo_withDrawInfo_'.$UserID;
  141. if (!SetNXLock::getExclusiveLock($redisKey)) {
  142. Util::WriteLog("withdrawInfo",[1, $request->all()]);
  143. return apiReturnFail(__('messages.api.withdraw_info.try_again_later'));
  144. }
  145. if (!$UserID) {
  146. Util::WriteLog("withdrawInfo",[2, $request->all()]);
  147. Log::info('miss UserID', $request->all());
  148. SetNXLock::release($redisKey);
  149. return apiReturnFail(__('messages.api.withdraw_info.params_error'));
  150. }
  151. if (empty($PixType)) {
  152. Util::WriteLog("withdrawInfo",[3, $request->all()]);
  153. SetNXLock::release($redisKey);
  154. return apiReturnFail(__('messages.api.withdraw_info.missing_pix_type'));
  155. }
  156. // 验证PixNum绑定次数
  157. if (!empty($PixNum)) {
  158. $BindCount = DB::table(TableName::QPRecordDB() . 'RecordBankCardBind')
  159. ->where('BankCard', $PixNum)
  160. ->lock('WITH(NOLOCK)')
  161. ->count();
  162. if ($BindCount >= 8) {
  163. Util::WriteLog("withdrawInfo",[4, $request->all()]);
  164. SetNXLock::release($redisKey);
  165. return apiReturnFail(['web.withdraw.cpf_number_used',__('messages.api.withdraw_info.cpf_number_used')], [], 302);
  166. }
  167. }
  168. // if(!is_numeric($PixNum)){
  169. // return apiReturnFail(['web.withdraw.pix_failed','The CPF number has been used several times and cannot be saved'], [], 302);
  170. // }
  171. // 验证玩家信息
  172. $DynamicPass = DB::table(TableName::QPAccountsDB() . 'AccountsInfo')
  173. ->where('UserID', $UserID)
  174. ->lock('WITH(NOLOCK)')
  175. ->value('DynamicPass');
  176. if ($DynamicPass != $RequestDynamicPass || empty($DynamicPass)) {
  177. SetNXLock::release($redisKey);
  178. Util::WriteLog("withdrawInfo",[5, $request->all()]);
  179. return apiReturnFail(__('messages.api.withdraw_info.player_info_inconsistent'));
  180. }
  181. $data = compact('PixType', 'BankUserName', 'PhoneNumber', 'EmailAddress', 'PixNum');
  182. foreach ($data as $key => &$val) {
  183. $data[$key] = trim($val);
  184. }
  185. unset($val);
  186. $AccountWithDrawInfo = DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  187. ->lock('WITH(NOLOCK)')
  188. ->where('UserID', $UserID)
  189. ->first();
  190. if (!$AccountWithDrawInfo) {
  191. $data['UserID'] = $UserID;
  192. $data['Achieves'] = 0;
  193. $data['HistoryWithDraw'] = 0;
  194. try {
  195. DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  196. ->where('UserID', $UserID)
  197. ->insert($data);
  198. } catch (\Exception $e) {
  199. Log::error('insert AccountWithDrawInfo failed', ['data' => $data]);
  200. Util::WriteLog("withdrawInfo",[6, $request->all(),$data]);
  201. }
  202. } else {
  203. $data = array_filter($data, function ($value) {
  204. return !is_null($value) && $value !== '';
  205. });
  206. DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  207. ->where('UserID', $UserID)
  208. ->update($data);
  209. }
  210. // 添加绑定记录
  211. if (empty($AccountWithDrawInfo->PixNum) || $AccountWithDrawInfo->PixNum != $PixNum) {
  212. try {
  213. if(!DB::table(TableName::QPRecordDB() . 'RecordBankCardBind')->where('UserID', $UserID)->exists()&&is_numeric($PixNum)) {
  214. DB::table(TableName::QPRecordDB() . 'RecordBankCardBind')
  215. ->insert([
  216. 'UserID' => $UserID,
  217. 'BankCard' => $PixNum ?: '',
  218. 'BindDate' => now()
  219. ]);
  220. Util::WriteLog('update_pix', [
  221. 'UserID' => $UserID,
  222. 'BankCard' => $PixNum ?: '',
  223. 'BindDate' => now()
  224. ]);
  225. }
  226. } catch (\Exception $e) {
  227. Log::error('insert RecordBankCardBind failed', ['data' => $data]);
  228. Util::WriteLog("withdrawInfo",[7, $request->all(),$data]);
  229. }
  230. }
  231. SetNXLock::release($redisKey);
  232. return apiReturnSuc();
  233. }
  234. public function withDrawInfoSA(Request $request)
  235. {
  236. // return apiReturnFail('params error');
  237. $UserID = $request->input('UserID');
  238. $RequestDynamicPass = $request->input('DynamicPass');
  239. $PixType = $request->input('cbPixType');
  240. $BankNO = $request->input('bank');
  241. $AccountsBank = urldecode($request->input('account'));
  242. $BankUserName = urldecode($request->input('userName'));
  243. // 原始代码
  244. $BankUserName = Util::filterNickName($BankUserName);
  245. // 新增处理:在大写字母前加空格
  246. $BankUserName = preg_replace('/(?<!^)([A-Z])/', ' $1', $BankUserName);
  247. $PhoneNumber = $request->input('phone');
  248. $EmailAddress = $request->input('email');
  249. $IFSCNumber = $request->input('IFSC');
  250. $PANNumber = $request->input('PAN');
  251. $AdhaarNumber = $request->input('adhaar');
  252. $BranchBank = $request->input('branceBank');
  253. $PixNum = $request->input('PixNum');
  254. $redisKey = 'withDrawInfo_withDrawInfo_'.$UserID;
  255. if (!SetNXLock::getExclusiveLock($redisKey)) {
  256. Util::WriteLog("withdrawInfo",[1, $request->all()]);
  257. return apiReturnFail(__('messages.api.withdraw_info.try_again_later'));
  258. }
  259. if (!$UserID) {
  260. Util::WriteLog("withdrawInfo",[2, $request->all()]);
  261. Log::info('miss UserID', $request->all());
  262. SetNXLock::release($redisKey);
  263. return apiReturnFail(__('messages.api.withdraw_info.params_error'));
  264. }
  265. if (empty($PixType)) {
  266. Util::WriteLog("withdrawInfo",[3, $request->all()]);
  267. SetNXLock::release($redisKey);
  268. return apiReturnFail(__('messages.api.withdraw_info.missing_pix_type'));
  269. }
  270. // Util::validateSouthAmericanPhone('',)
  271. // 验证PixNum绑定次数
  272. if (!empty($PixNum)) {
  273. $BindCount = DB::table(TableName::QPRecordDB() . 'RecordBankCardBind')
  274. ->where('BankCard', $PixNum)
  275. ->lock('WITH(NOLOCK)')
  276. ->count();
  277. if ($BindCount >= 8) {
  278. Util::WriteLog("withdrawInfo",[4, $request->all()]);
  279. SetNXLock::release($redisKey);
  280. return apiReturnFail(['web.withdraw.cpf_number_used',__('messages.api.withdraw_info.cpf_number_used')], [], 302);
  281. }
  282. }
  283. // if(!is_numeric($PixNum)){
  284. // return apiReturnFail(['web.withdraw.pix_failed','The CPF number has been used several times and cannot be saved'], [], 302);
  285. // }
  286. // 验证玩家信息
  287. $DynamicPass = DB::table(TableName::QPAccountsDB() . 'AccountsInfo')
  288. ->where('UserID', $UserID)
  289. ->lock('WITH(NOLOCK)')
  290. ->value('DynamicPass');
  291. if ($DynamicPass != $RequestDynamicPass || empty($DynamicPass)) {
  292. SetNXLock::release($redisKey);
  293. Util::WriteLog("withdrawInfo",[5, $request->all()]);
  294. return apiReturnFail(__('messages.api.withdraw_info.player_info_inconsistent'));
  295. }
  296. $data = compact('PixType', 'BankUserName', 'PhoneNumber', 'EmailAddress', 'PixNum','BankNO', 'AccountsBank', 'IFSCNumber', 'PANNumber', 'AdhaarNumber', 'BranchBank');
  297. foreach ($data as $key => &$val) {
  298. $data[$key] = trim($val);
  299. }
  300. unset($val);
  301. $AccountWithDrawInfo = DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  302. ->lock('WITH(NOLOCK)')
  303. ->where('UserID', $UserID)
  304. ->first();
  305. if (!$AccountWithDrawInfo) {
  306. $data['UserID'] = $UserID;
  307. $data['Achieves'] = 0;
  308. $data['HistoryWithDraw'] = 0;
  309. try {
  310. DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  311. ->where('UserID', $UserID)
  312. ->insert($data);
  313. } catch (\Exception $e) {
  314. Log::error('insert AccountWithDrawInfo failed', ['data' => $data]);
  315. Util::WriteLog("withdrawInfo",[6, $request->all(),$data]);
  316. }
  317. } else {
  318. $data = array_filter($data, function ($value) {
  319. return !is_null($value) && $value !== '';
  320. });
  321. DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  322. ->where('UserID', $UserID)
  323. ->update($data);
  324. }
  325. // 添加绑定记录
  326. if (empty($AccountWithDrawInfo->PixNum) || $AccountWithDrawInfo->PixNum != $PixNum) {
  327. try {
  328. if(!DB::table(TableName::QPRecordDB() . 'RecordBankCardBind')->where('UserID', $UserID)->exists()&&is_numeric($PixNum)) {
  329. DB::table(TableName::QPRecordDB() . 'RecordBankCardBind')
  330. ->insert([
  331. 'UserID' => $UserID,
  332. 'BankCard' => $PixNum ?? '',
  333. 'BindDate' => now()
  334. ]);
  335. Util::WriteLog('update_pix', [
  336. 'UserID' => $UserID,
  337. 'BankCard' => $PixNum ?? '',
  338. 'BindDate' => now()
  339. ]);
  340. }
  341. } catch (\Exception $e) {
  342. Log::error('insert RecordBankCardBind failed', ['data' => $data]);
  343. Util::WriteLog("withdrawInfo",[7, $request->all(),$data]);
  344. }
  345. }
  346. SetNXLock::release($redisKey);
  347. return apiReturnSuc();
  348. }
  349. // 获取提现信息
  350. public function getWithDrawInfo(Request $request)
  351. {
  352. $UserID = $request->input('UserID');
  353. $RequestDynamicPass = $request->input('DynamicPass');
  354. if(strstr("&",$UserID)){
  355. Util::WriteLog("urlError",$request->header());
  356. parse_str('UserID='.$UserID,$params);
  357. $UserID=$params['UserID'];
  358. $RequestDynamicPass=$params['DynamicPass'];
  359. }
  360. // 验证玩家信息
  361. $DynamicPass = DB::table(TableName::QPAccountsDB() . 'AccountsInfo')
  362. ->where('UserID', $UserID)
  363. ->lock('WITH(NOLOCK)')
  364. ->value('DynamicPass');
  365. if ($DynamicPass != $RequestDynamicPass || empty($DynamicPass)) return apiReturnFail(__('messages.api.withdraw_info.player_info_inconsistent'));
  366. $info = DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  367. ->where('UserID', $UserID)
  368. ->lock('WITH(NOLOCK)')
  369. ->first();
  370. $info=(array)$info;
  371. if (!$info) { // 赋值 -- 避免客户端报错
  372. $info = [
  373. 'BankNO' => '',
  374. 'AccountsBank' => '',
  375. 'BankUserName' => '',
  376. 'PhoneNumber' => '',
  377. 'IFSCNumber' => '',
  378. 'EmailAddress' => '',
  379. 'Achieves' => '',
  380. 'PANNumber' => '',
  381. 'AdhaarNumber' => '',
  382. 'BranchBank' => '',
  383. 'PixNum' => '',
  384. 'PixType' => '',
  385. ];
  386. }
  387. $AccountsInfoModel = new AccountsInfo();
  388. $total = $AccountsInfoModel->accountTotalStatistics([$UserID]);
  389. $totalRecharge = @$total[0]->Recharge ?? 0;
  390. $info['total_recharge'] = intval($totalRecharge);
  391. $info['withdraw_level'] = env('MIN_RECHARGE',20);
  392. return apiReturnSuc(compact('info'));
  393. }
  394. }