LoginController.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. namespace app\api\controller\login;
  3. use app\api\controller\ZskkDefaultController;
  4. use app\api\validate\login\LoginValidate;
  5. use app\api\servies\login\LoginService;
  6. use think\Exception;
  7. //use app\api\validate\test\LoginValidate;
  8. class LoginController extends ZskkDefaultController
  9. {
  10. protected $needToken = false;
  11. protected $logName = "LoginController";
  12. /**
  13. * 用户登录接口
  14. * @author liuguiyan LoginService $service
  15. */
  16. public function login(LoginService $service)
  17. {
  18. $params = $this->getParams();
  19. LoginValidate::check($params);
  20. $user = $service->login($params);
  21. return $this->success($user);
  22. }
  23. public function loginNoPass(LoginService $service)
  24. {
  25. $params = $this->getParams();
  26. if (isset($params['appId']) && !empty($params['appId']) && empty($params['username'])){
  27. $params['username'] = \think\Db::table('PLATFROM_ACCOUNT')->where('APPID',$params['appId'])->value('RIS_USERNAME');
  28. }
  29. //获取账号
  30. if (isset($params['username']) && !empty($params['username']) ){
  31. $data['username'] = $params['username'];
  32. }
  33. //todo 默认值
  34. if (empty($data['username'])){
  35. $data['username'] = 'www';
  36. }
  37. //测试环境不验证token
  38. if (isset($params['appId']) && isset($params['certificate']) && isset($params['token'])){
  39. $data['appId'] = $params['appId'];
  40. $data['tripartiteVoucher'] = $params['certificate'];
  41. $data['token'] = $params['token'];
  42. if (!$data['appId'] || !$data['tripartiteVoucher'] || !$data['token'] || !$data['username']){
  43. $this->error(__('参数错误'), '/admin/index/login');
  44. }
  45. //todo: 这里的url需要改成配置项
  46. $url = 'http://10.25.14.7:30082/system/sys-sub/token/checkToken';
  47. $response = $this->httpGet(
  48. $url,
  49. $data
  50. );
  51. if ($response === false) {
  52. $this->error(__('验证token失败'), '/admin/index/login');
  53. }
  54. }
  55. $user = $service->loginNoPass($data['username']);
  56. return $this->success($user);
  57. }
  58. /**
  59. * 发送POST JSON请求
  60. *
  61. * @param string $url 请求URL
  62. * @param array $data 请求数据
  63. * @return string|false 返回响应内容,失败返回false
  64. */
  65. private function httpPostJson($url, $data)
  66. {
  67. $jsonData = json_encode($data);
  68. $ch = curl_init();
  69. curl_setopt($ch, CURLOPT_URL, $url);
  70. curl_setopt($ch, CURLOPT_POST, true);
  71. curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
  72. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  73. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  74. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  75. curl_setopt($ch, CURLOPT_TIMEOUT, 60);
  76. // 设置请求头
  77. curl_setopt($ch, CURLOPT_HTTPHEADER, [
  78. 'Content-Type: application/json',
  79. 'Content-Length: ' . strlen($jsonData)
  80. ]);
  81. $response = curl_exec($ch);
  82. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  83. $error = curl_error($ch);
  84. curl_close($ch);
  85. if ($error) {
  86. error_log("CURL错误: " . $error);
  87. return false;
  88. }
  89. if ($httpCode != 0) {
  90. error_log("HTTP错误: " . $httpCode);
  91. return false;
  92. }
  93. return $response;
  94. }
  95. /**
  96. * HTTP GET 请求
  97. * @param string $url 请求 URL
  98. * @param array $params 查询参数
  99. * @return mixed 响应结果,失败返回 false
  100. */
  101. private function httpGet($url, $params = [])
  102. {
  103. // 如果有参数,拼接到 URL 后面
  104. if (!empty($params)) {
  105. $queryString = http_build_query($params);
  106. $url .= (strpos($url, '?') !== false ? '&' : '?') . $queryString;
  107. }
  108. $ch = curl_init();
  109. curl_setopt($ch, CURLOPT_URL, $url);
  110. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  111. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  112. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  113. curl_setopt($ch, CURLOPT_TIMEOUT, 60);
  114. // 设置请求头
  115. curl_setopt($ch, CURLOPT_HTTPHEADER, [
  116. 'Content-Type: application/json'
  117. ]);
  118. $response = curl_exec($ch);
  119. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  120. $error = curl_error($ch);
  121. curl_close($ch);
  122. if ($error) {
  123. error_log("CURL 错误:" . $error);
  124. return false;
  125. }
  126. if ($httpCode != 200 && $httpCode != 201) {
  127. error_log("HTTP 错误:" . $httpCode);
  128. return false;
  129. }
  130. return $response;
  131. }
  132. public function send_message_again(LoginService $service)
  133. {
  134. $params = $this->getParams();
  135. LoginValidate::checkPhone($params);
  136. $user = $service->send_message_again($params);
  137. return $this->success($user);
  138. }
  139. public function check_code(LoginService $service)
  140. {
  141. $params = $this->getParams();
  142. LoginValidate::checkCode($params);
  143. $user = $service->check_code($params);
  144. return $this->success($user);
  145. }
  146. public function loginOut(LoginService $service)
  147. {
  148. try{
  149. $user = $service->logout($this->getToken());
  150. return $this->success($user);
  151. } catch (Exception $exception){
  152. $this->throwError('系统异常',0001);
  153. }
  154. }
  155. public function out(LoginService $service)
  156. {
  157. try{
  158. $params = $this->getParams();
  159. $data = $service->out($params['session']);
  160. return $this->success($data);
  161. } catch (Exception $exception){
  162. $this->throwError('系统异常',0001);
  163. }
  164. }
  165. }