Commit fc16e61e1fcdf4347f4a9883232bbcf1cacb5214

Authored by Deepseath
1 parent b75885cd

完善 token 过期认证

Showing 2 changed files with 45 additions and 11 deletions
src/Api/User.php
@@ -43,7 +43,8 @@ class User @@ -43,7 +43,8 @@ class User
43 'email' => '' 43 'email' => ''
44 ], $params); 44 ], $params);
45 45
46 - return $this->service->apiRequest('get', 'employeeList', $params); 46 + $result = $this->service->apiRequest('get', 'employeeList', $params);
  47 + return isset($result['employeeList']) ? $result['employeeList'] : (isset($result['data']) ? $result['data'] : []);
47 } 48 }
48 49
49 /** 50 /**
@@ -101,6 +102,7 @@ class User @@ -101,6 +102,7 @@ class User
101 private function _fieldCheck(array $params) : bool 102 private function _fieldCheck(array $params) : bool
102 { 103 {
103 // 必须提供的参数 104 // 必须提供的参数
  105 + /*
104 $requires = [ 106 $requires = [
105 'nameZH', // *员工姓名(中文) 107 'nameZH', // *员工姓名(中文)
106 'nameEN', // *员工姓名(英文) 108 'nameEN', // *员工姓名(英文)
@@ -131,6 +133,7 @@ class User @@ -131,6 +133,7 @@ class User
131 throw new \Exception('Add user lose params "'.$_key.'"', 91001); 133 throw new \Exception('Add user lose params "'.$_key.'"', 91001);
132 } 134 }
133 } 135 }
  136 + */
134 137
135 return true; 138 return true;
136 } 139 }
src/Hris.php
@@ -114,7 +114,7 @@ class Hris @@ -114,7 +114,7 @@ class Hris
114 public function getTokenInfo(bool $force = false) : array 114 public function getTokenInfo(bool $force = false) : array
115 { 115 {
116 $token = $this->_cache->getItem('token'); 116 $token = $this->_cache->getItem('token');
117 - if ($token->isHit() || $force !== false) { 117 + if ($token->isHit() && $force === false) {
118 return $token->get(); 118 return $token->get();
119 } 119 }
120 120
@@ -126,13 +126,17 @@ class Hris @@ -126,13 +126,17 @@ class Hris
126 'token' => $this->_originToken 126 'token' => $this->_originToken
127 ]; 127 ];
128 // 请求接口 128 // 请求接口
129 - $this->_http->headers([ 129 + $headers = [
130 'Authorization' => $this->_originToken, 130 'Authorization' => $this->_originToken,
131 'Content-Type' => 'application/json;charset=utf-8' 131 'Content-Type' => 'application/json;charset=utf-8'
132 - ]); 132 + ];
  133 + $this->_http->headers($headers);
  134 + $this->log($url, 'Get Token');
  135 + $this->log($params, 'Request');
  136 + $this->log($headers, 'Header');
133 $response = $this->_http->post($url, $params, 'json'); 137 $response = $this->_http->post($url, $params, 'json');
134 $newTokenInfo = $response->json(true); 138 $newTokenInfo = $response->json(true);
135 - 139 + $this->log($newTokenInfo, 'Result');
136 if (empty($newTokenInfo) || !isset($newTokenInfo['code'])) { 140 if (empty($newTokenInfo) || !isset($newTokenInfo['code'])) {
137 throw new \Exception('request hris token error' . var_export($newTokenInfo, true) . '|' . $url . var_export($params, true), 9001); 141 throw new \Exception('request hris token error' . var_export($newTokenInfo, true) . '|' . $url . var_export($params, true), 9001);
138 } 142 }
@@ -148,7 +152,8 @@ class Hris @@ -148,7 +152,8 @@ class Hris
148 } else { 152 } else {
149 $expire = $this->_tokenExpire; 153 $expire = $this->_tokenExpire;
150 } 154 }
151 - $token->expiresAfter($expire - 60 * 5); 155 + $token->expiresAfter($expire - 10);
  156 + $this->log($token->get(), 'Save Token');
152 $this->_cache->save($token); 157 $this->_cache->save($token);
153 158
154 return $newTokenInfo; 159 return $newTokenInfo;
@@ -173,12 +178,18 @@ class Hris @@ -173,12 +178,18 @@ class Hris
173 if ($tryCount > 3) { 178 if ($tryCount > 3) {
174 throw new \Exception('hris SDK Error: Get token error, retry maximum number.'); 179 throw new \Exception('hris SDK Error: Get token error, retry maximum number.');
175 } 180 }
176 - $this->_http->headers([ 181 + $headers = [
177 'Content-Type' => 'application/json;charset=utf-8', 182 'Content-Type' => 'application/json;charset=utf-8',
178 'Authorization' => $this->getTokenInfo($flushToken)['data']['token'] 183 'Authorization' => $this->getTokenInfo($flushToken)['data']['token']
179 - ]); 184 + ];
  185 + $this->_http->headers($headers);
180 $url = $this->_baseUrl . $path; 186 $url = $this->_baseUrl . $path;
181 $method = strtolower($method); 187 $method = strtolower($method);
  188 +
  189 + $this->log($url, 'Url');
  190 + $this->log($method, 'Method');
  191 + $this->log($headers, 'Header');
  192 + $this->log($data, 'Request');
182 if ($method == 'post') { 193 if ($method == 'post') {
183 $dataString = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); 194 $dataString = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
184 $response = $this->_http->post($url, $dataString, 'json'); 195 $response = $this->_http->post($url, $dataString, 'json');
@@ -186,14 +197,34 @@ class Hris @@ -186,14 +197,34 @@ class Hris
186 $response = $this->_http->get($url, $data); 197 $response = $this->_http->get($url, $data);
187 } 198 }
188 $result = $response->json(true); 199 $result = $response->json(true);
189 - if (!isset($result['code']) || $result['code'] != 0) {  
190 - if ($result['code'] == 3001) { 200 + $this->log($result, 'Result');
  201 + if (!isset($result['code']) || $result['code'] != 200) {
  202 + if (isset($result['code']) && ($result['code'] == '3001' || $result['code'] == '30010')) {
191 // token 无效,尝试重新刷新 token 203 // token 无效,尝试重新刷新 token
  204 + $this->log($tryCount, 'Try count');
192 return $this->apiRequest($method, $path, $data, true); 205 return $this->apiRequest($method, $path, $data, true);
193 } 206 }
194 - throw new \Exception('hris SDK Error: ' . $result['msg'] . ':' . $result['code'], $result['code']); 207 + if (isset($result['msg']) && isset($result['code'])) {
  208 + throw new \Exception('hris SDK Error: ' . $result['msg'] . ':' . $result['code'] . '='. print_r($result, true), $result['code']);
  209 + } else {
  210 + throw new \Exception('hris SDK Error: Result NULL.' .var_export($result, true), 9999);
  211 + }
195 } 212 }
196 213
  214 +
197 return isset($result['data']) ? $result['data'] : []; 215 return isset($result['data']) ? $result['data'] : [];
198 } 216 }
  217 +
  218 + /**
  219 + * 打印调试日志
  220 + * @param mixed $info
  221 + */
  222 + public function log($info, $title = '', $level = 'info')
  223 + {
  224 + if ($this->_debug) {
  225 + $info = is_scalar($info) ? $info : json_encode($info, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
  226 + $title = $title ? "[{$title}]" : '';
  227 + \think\facade\Log::write($title . $info, 'info');
  228 + }
  229 + }
199 } 230 }