RegisterController.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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. $AccountsInfo = DB::connection('write')->table('QPAccountsDB.dbo.AccountsInfo')
  63. ->where('GameID', $SpreadID)
  64. ->select('Channel', 'UserID')
  65. ->first();
  66. if (!$AccountsInfo) {
  67. SetNXLock::release($redisKey);
  68. return apiReturnFail(__('messages.api.register.parent_id_not_exist')); // 上级ID不存在
  69. }
  70. // 官网包固定渠道号100
  71. $Channel = env('REGION_24680_DEFAULT_CHANNEL',100);
  72. $PackageName = 'com.ouro777.online';
  73. $res = StoredProcedure::ALLRegisterAccounts(
  74. $Accounts,
  75. '1',
  76. $SpreadID,
  77. $Password,
  78. $this->InsurePass,
  79. $FaceI,
  80. $Gender,
  81. 1,
  82. $Phone,
  83. $ip,
  84. $this->MachineID,
  85. $this->Type,
  86. $Channel,
  87. $PackageName
  88. );
  89. $ReturnValue = $res['ReturnValue'] ?? 0;
  90. Log::info('注册结果 ' . $ReturnValue);
  91. $message = '';
  92. if ($ReturnValue > 0) {
  93. switch ($ReturnValue) {
  94. case 1: # 注册暂停
  95. $message = 'Registro suspenso';
  96. break;
  97. case 2: # 登录暂停
  98. $message = 'Pausa de login';
  99. break;
  100. case 8: # 帐号已存在,请换另一帐号名字尝试再次注册!
  101. $message = 'A conta já existe, altere outro nome de conta e tente se registrar novamente!';
  102. break;
  103. case 10: # IP最大注册数量
  104. $message = __('messages.api.register.multiple_accounts_ip');
  105. break;
  106. }
  107. }
  108. if (!empty($message)) {
  109. SetNXLock::release($redisKey);
  110. return apiReturnFail($message);
  111. }
  112. //Log::info('注册成功,绑定手机号' . $Phone . '-' . $Password . '-' . $res['UserID']);
  113. // 绑定手机号
  114. //StoredProcedure::bindSms($Phone, $Password, $res['UserID']);
  115. // 裂变开始
  116. $UserID = $res['UserID'] ?? 0;
  117. (new ExtensionLogic())->userProfit($UserID);
  118. // 插入裂变表数据
  119. DB::table(TableName::QPAccountsDB().'FissionUser')
  120. ->insert([
  121. 'UserID' => $UserID,
  122. 'Channel' => $Channel,
  123. 'HigherChannel' => $AccountsInfo->Channel,
  124. 'SpreadID' => $AccountsInfo->UserID,
  125. 'CreateTime' => now()
  126. ]);
  127. // $redis = new RedisConnect();
  128. // $redis->redis()->zincrby('Channel_Fissile_'.date('Ymd'),1,$AccountsInfo->Channel);
  129. SetNXLock::release($redisKey);
  130. // 注册成功
  131. return apiReturnSuc([], 'o login foi bem sucedido', 'o login foi bem sucedido');
  132. }
  133. // 加载注册页面
  134. public function registerView()
  135. {
  136. $info = DB::connection('write')->table('QPAccountsDB.dbo.SystemStatusInfo')
  137. ->where('StatusName', 'WhatsApp')
  138. ->first();
  139. return view('api.register.register', compact('info'));
  140. }
  141. // 加载下载页面
  142. public function download()
  143. {
  144. return view('api.register.download');
  145. }
  146. // 随机账号
  147. public function randAccounts()
  148. {
  149. return substr(md5(uniqid(microtime(true), true)), 2);
  150. }
  151. public function customerService()
  152. {
  153. $info = DB::connection('write')->table('QPAccountsDB.dbo.SystemStatusInfo')
  154. ->where('StatusName', 'WhatsApp')
  155. ->first();
  156. return apiReturnSuc([
  157. 'url' => $info->StatusString ?? ''
  158. ]);
  159. }
  160. }