RegisterController.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Facade\RedisConnect;
  4. use App\Facade\TableName;
  5. use App\Http\logic\api\ExtensionLogic;
  6. use App\Models\GamePhoneVerityCode;
  7. use App\Services\StoredProcedure;
  8. use App\Util;
  9. use App\Utility\SetNXLock;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\DB;
  12. use Illuminate\Support\Facades\Log;
  13. use Illuminate\Support\Facades\Redis;
  14. use function Composer\Autoload\includeFile;
  15. class RegisterController
  16. {
  17. protected $InsurePass = '111111';
  18. protected $MachineID = 'Web';
  19. protected $Type = 2;
  20. // 注册逻辑
  21. public function index(Request $request)
  22. {
  23. return apiReturnFail(__('messages.api.register.multiple_accounts_ip'));
  24. Util::WriteLog('login_header',$request->header());
  25. $post = $request->post();
  26. extract($post);
  27. $Phone = $phoneNum ?? $Phone ?? '';
  28. if (empty($Phone)) {
  29. return apiReturnFail(__('messages.api.register.phone_empty'));
  30. }
  31. if (mb_strlen($PhoneCode) > 6) {
  32. return apiReturnFail(__('messages.api.register.phone_code_too_long'));
  33. }
  34. $Accounts = (string)$this->randAccounts();
  35. $FaceI = (int)mt_rand(1, 16);
  36. $Gender = (int)mt_rand(0, 1);
  37. $ip = (string)$request->ip();
  38. $SpreadID = (int)$SpreadID;
  39. $Phone = trim($Phone);
  40. Log::info('注册开始' . $Phone);
  41. $redisKey = 'register_'.$Phone;
  42. if (!SetNXLock::getExclusiveLock($redisKey)) {
  43. return apiReturnFail(__('messages.api.withdraw_info.try_again_later'));
  44. }
  45. // 查看手机号是否已经绑定
  46. $first = DB::connection('write')->table('QPAccountsDB.dbo.AccountPhone')
  47. ->where('PhoneNum', $Phone)
  48. ->first();
  49. if ($first) {
  50. SetNXLock::release($redisKey);
  51. return apiReturnFail(__('messages.api.register.phone_already_bound')); // 电话号码已绑定
  52. }
  53. if (!is_numeric($PhoneCode)) {
  54. SetNXLock::release($redisKey);
  55. return apiReturnFail(__('messages.api.register.code_incorrect'));
  56. }
  57. $verifyCode = GamePhoneVerityCode::verifyCode($Phone, $PhoneCode);
  58. if ($verifyCode != trim($PhoneCode)) {
  59. SetNXLock::release($redisKey);
  60. return apiReturnFail(__('messages.api.register.code_incorrect'));
  61. }
  62. GamePhoneVerityCode::clearPhoneCode($Phone);
  63. $AccountsInfo = DB::connection('write')->table('QPAccountsDB.dbo.AccountsInfo')
  64. ->where('GameID', $SpreadID)
  65. ->select('Channel', 'UserID')
  66. ->first();
  67. if (!$AccountsInfo) {
  68. SetNXLock::release($redisKey);
  69. return apiReturnFail(__('messages.api.register.parent_id_not_exist')); // 上级ID不存在
  70. }
  71. // 官网包固定渠道号100
  72. $Channel = env('REGION_24680_DEFAULT_CHANNEL',100);
  73. $PackageName = 'com.ouro777.online';
  74. $res = StoredProcedure::ALLRegisterAccounts(
  75. $Accounts,
  76. '1',
  77. $SpreadID,
  78. $Password,
  79. $this->InsurePass,
  80. $FaceI,
  81. $Gender,
  82. 1,
  83. $Phone,
  84. $ip,
  85. $this->MachineID,
  86. $this->Type,
  87. $Channel,
  88. $PackageName
  89. );
  90. $ReturnValue = $res['ReturnValue'] ?? 0;
  91. Log::info('注册结果 ' . $ReturnValue);
  92. $message = '';
  93. if ($ReturnValue > 0) {
  94. switch ($ReturnValue) {
  95. case 1: # 注册暂停
  96. $message = 'Registro suspenso';
  97. break;
  98. case 2: # 登录暂停
  99. $message = 'Pausa de login';
  100. break;
  101. case 8: # 帐号已存在,请换另一帐号名字尝试再次注册!
  102. $message = 'A conta já existe, altere outro nome de conta e tente se registrar novamente!';
  103. break;
  104. case 10: # IP最大注册数量
  105. $message = __('messages.api.register.multiple_accounts_ip');
  106. break;
  107. }
  108. }
  109. if (!empty($message)) {
  110. SetNXLock::release($redisKey);
  111. return apiReturnFail($message);
  112. }
  113. //Log::info('注册成功,绑定手机号' . $Phone . '-' . $Password . '-' . $res['UserID']);
  114. // 绑定手机号
  115. //StoredProcedure::bindSms($Phone, $Password, $res['UserID']);
  116. // 裂变开始
  117. $UserID = $res['UserID'] ?? 0;
  118. (new ExtensionLogic())->userProfit($UserID);
  119. // 插入裂变表数据
  120. DB::table(TableName::QPAccountsDB().'FissionUser')
  121. ->insert([
  122. 'UserID' => $UserID,
  123. 'Channel' => $Channel,
  124. 'HigherChannel' => $AccountsInfo->Channel,
  125. 'SpreadID' => $AccountsInfo->UserID,
  126. 'CreateTime' => now()
  127. ]);
  128. // $redis = new RedisConnect();
  129. // $redis->redis()->zincrby('Channel_Fissile_'.date('Ymd'),1,$AccountsInfo->Channel);
  130. SetNXLock::release($redisKey);
  131. // 注册成功
  132. return apiReturnSuc([], 'o login foi bem sucedido', 'o login foi bem sucedido');
  133. }
  134. // 加载注册页面
  135. public function registerView()
  136. {
  137. $info = DB::connection('write')->table('QPAccountsDB.dbo.SystemStatusInfo')
  138. ->where('StatusName', 'WhatsApp')
  139. ->first();
  140. return view('api.register.register', compact('info'));
  141. }
  142. // 加载下载页面
  143. public function download()
  144. {
  145. return view('api.register.download');
  146. }
  147. // 随机账号
  148. public function randAccounts()
  149. {
  150. return substr(md5(uniqid(microtime(true), true)), 2);
  151. }
  152. public function customerService()
  153. {
  154. $info = DB::connection('write')->table('QPAccountsDB.dbo.SystemStatusInfo')
  155. ->where('StatusName', 'WhatsApp')
  156. ->first();
  157. return apiReturnSuc([
  158. 'url' => $info->StatusString ?? ''
  159. ]);
  160. }
  161. }