Code
- routing
routes\web.php
Route::get('getTimeV2', 'TestApi@getTimeV2');
- controller
app\Http\Controllers\TestApi.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Session;
use Carbon\Carbon;
class TestApi extends Controller
{
/**
* 取得 Token
*
*/
public function getToken(Request $request)
{
$request->request->add([
'grant_type' => 'client_credentials',
'client_id' => 3,
'client_secret' => 'FcmidD71HnHWn7kvFXGLclYldekirqf4WtLiL4GF',
]);
$proxy = Request::create(
'oauth/token',
'POST'
);
return json_decode(Route::dispatch($proxy)->getContent(), true);
}
/**
* Call api - token 存在 sesison
*
*/
public function getTimeV2(Request $request)
{
$this->checkToken($request);
$request = Request::create('api/time', 'GET');
$request->headers->set('Accept', 'application/json');
$request->headers->set('Authorization', 'Bearer ' . Session::get('token')['access_token']);
return Route::dispatch($request)->getContent();
}
/**
* 取得 Token - 紀錄在 session 中
*
*/
public function checkToken(Request $request)
{
$available = true;
$tokenSession = Session::get('token');
if(! empty($tokenSession['expire_time'])) {
$dtNow = Carbon::now();
$now = Carbon::create(
$dtNow->year,
$dtNow->month,
$dtNow->day,
$dtNow->hour,
$dtNow->minute,
$dtNow->second
);
$dtToken = Carbon::parse($tokenSession['expire_time']->toDateTimeString());
$token = Carbon::create(
$dtToken->year,
$dtToken->month,
$dtToken->day,
$dtToken->hour,
$dtToken->minute,
$dtToken->second
);
// 比對時間大小
$available = $now->lt($token);
}
if(! $available) {
// 取得 token
$getToken = $this->getToken($request);
// 存入 session
$time = Carbon::now()->addSeconds($getToken['expires_in']);
Session::put('token', [
'token_type' => $getToken['token_type'],
'expire_time' => $time,
'access_token' => $getToken['access_token'],
]);
}
return $available;
}
}