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;
    }
}

results matching ""

    No results matching ""