TokenController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: qiuzijian
  5. * Date: 4/1/22
  6. * Time: 6:29 PM
  7. */
  8. namespace Modules\Admin\Http\Controllers\Api;
  9. use App\Enum\ApiEnum;
  10. use App\Http\Controllers\Controller;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Input;
  13. use Modules\Admin\Entities\User;
  14. use Modules\Admin\Http\Requests\TokenRequest;
  15. use Modules\Staff\Entities\Staff;
  16. use Symfony\Component\HttpFoundation\Response;
  17. class TokenController extends Controller
  18. {
  19. public function token(Request $request)
  20. {
  21. $result['status'] = true;
  22. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  23. $result['data'] = [];
  24. $username = $request->input('username');
  25. $user = \App\User::where('staff_num', $username)->first();
  26. if (!$user) {
  27. return $this->error(1001, '用户不存在');
  28. }
  29. $result = $this->issueToken($request, 'password');
  30. if ($result->getStatusCode() == 401) {
  31. return $this->error(1002, '密码错误');
  32. }
  33. $data = json_decode($result->getContent(), true);
  34. $result = [
  35. 'code' => 0,
  36. 'message' => 'SUCCESS',
  37. 'data' => $data
  38. ];
  39. return response()->json($result);
  40. }
  41. protected function error($code = 1, $msg = '')
  42. {
  43. return [
  44. 'code' => $code,
  45. 'message' => $msg,
  46. ];
  47. }
  48. /**
  49. * Passport 接口请求
  50. * @param Request $request
  51. * @param $grant_type
  52. * @param string $provider
  53. * @param string $scope
  54. * @return Response
  55. */
  56. protected function issueToken(Request $request, $grant_type, $provider = 'users', $scope = '*'): Response
  57. {
  58. $client = config('passport.password');
  59. if($request->password != 'Zhks2025!@#$%'){
  60. $request->password = base64_decode($request->password);
  61. }
  62. $params = [
  63. 'grant_type' => $grant_type,
  64. 'client_id' => $client['client_id'],
  65. 'client_secret' => $client['client_secret'],
  66. 'username' => $request->username ?: $request->email,
  67. 'password' => $request->password,
  68. 'provider' => $provider,
  69. 'scope' => $scope,
  70. ];
  71. $proxy = $request::create('oauth/token', 'POST');
  72. $proxy->request->add($params);
  73. return app()->handle($proxy);
  74. }
  75. public function checkToken(Request $request){
  76. $ts = Input::get('ts', '');
  77. $loginid = Input::get('loginid', '');
  78. $token = Input::get('token', '');
  79. $salt = 'aqgltx@2022';
  80. $year = substr($ts, 0, 4);
  81. $month = substr($ts, 4, 2);
  82. $day = substr($ts, 6, 2);
  83. $hour = substr($ts, 8, 2);
  84. $minute = substr($ts, 10, 2);
  85. $second = substr($ts, 12, 2);
  86. $formattedDateString = "$year-$month-$day $hour:$minute:$second";
  87. $timestamp = strtotime($formattedDateString);
  88. if(time() - $timestamp > 10){
  89. return $this->error(1003, '已超时');
  90. }
  91. $md5 = md5($loginid.'|'.$ts.'|'.$salt);
  92. if($md5 != $token){
  93. return $this->error(1003, '验证失败');
  94. }
  95. $data['username'] = 'admin';
  96. $data['password'] = 'Zhks2025!@#$%';
  97. $result = $this->httpRequest(env('VIDEO_SYSTEM_URL').'/api/oauth/token','post',$data);
  98. return $result;
  99. }
  100. public function httpRequest($url, $format = 'get', $data = null){
  101. //设置头信息
  102. $headerArray =array("Content-type:application/json;","Accept:application/json");
  103. $curl=curl_init();
  104. curl_setopt($curl, CURLOPT_URL, $url);
  105. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  106. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  107. if ($format == 'post') {
  108. //post传值设置post传参
  109. curl_setopt($curl, CURLOPT_POST, 1);
  110. if ($data) {
  111. $data = json_encode($data);
  112. curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  113. }
  114. }
  115. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  116. curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
  117. $data=json_decode(curl_exec($curl), true);
  118. curl_close($curl);
  119. //返回接口返回数据
  120. return $data;
  121. }
  122. }