0
votes

I am new in Google API and I am trying to create a login system, fetch email id and youtube channel data through Oauth Google API. Below my code is worked perfectly for fetching data but I am not able to create a login system also when I refresh the page I lost whole data and its again ask for login. Pls guide me how to acheive login system and also please check my code is correct or can be shorten

$client_id = "xxxxxxxxxxxxxxxxxxx";
$client_secret = "xxxxxxxxxxxxxxx";
$redirect_uri = "http://localhost/mysite/oauth2callback";
$code = $_GET["code"];

$oauth2token_url = "https://accounts.google.com/o/oauth2/token";
$clienttoken_post = array(
        "code" => $code,
        "client_id" => $client_id,
        "client_secret" => $client_secret,
        "redirect_uri" => $redirect_uri,
        "grant_type" => "authorization_code"
);

$curl = curl_init($oauth2token_url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $clienttoken_post);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  

$json_response = curl_exec($curl); 
curl_close($curl);
$authObj = json_decode($json_response);
$access_token = $authObj->access_token;
$token_type = $authObj->token_type;
$expires_in = $authObj->expires_in;
$refresh_token = $authObj->refresh_token;
$Id_token = $authObj->id_token;

session_start();
$_SESSION['access_token'] = $access_token;  

//getting the email id
$email_url = 'https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token='.$_SESSION['access_token'];
$em = curl_init();
curl_setopt( $em, CURLOPT_URL, $email_url );
curl_setopt($em, CURLOPT_HEADER, 0);    
curl_setopt( $em, CURLOPT_RETURNTRANSFER, 1 );
$eamilOBJ = json_decode( curl_exec( $em ) );
$email = $eamilOBJ->email;


if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {        
    $url = 'https://www.googleapis.com/youtube/v3/channels?fields=items(id,snippet(title,description,customUrl,thumbnails(default)),statistics(viewCount,subscriberCount))&part=snippet%2Cstatistics&mine=true&access_token='.$_SESSION['access_token'];

    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt($ch, CURLOPT_HEADER, 0);    
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
    $channelOBJ = json_decode( curl_exec( $ch ) );

    $channel_id = $channelOBJ->items[0]->id;
    $thumbnail_url = $channelOBJ->items[0]->snippet->thumbnails->default->url;
    $youtubetitle = $channelOBJ->items[0]->snippet->title;
    $description = $channelOBJ->items[0]->snippet->description;
    $total_subscriber = $channelOBJ->items[0]->statistics->subscriberCount;

    echo 'Email ID : '.$email;
    echo 'Image: URL: '.$thumbnail_url;
    echo 'Channel Title: '.$youtubetitle;
    echo 'Total Subscriber: '.$total_subscriber;    
}
else{
    echo '<a href="https://accounts.google.com/o/oauth2/auth?
        redirect_uri=http://localhost/mysite/oauth2callback&
        response_type=code&
        client_id=xxxxxxxxxxxxxxx&
        scope=https://www.googleapis.com/auth/youtube.readonly+https://www.googleapis.com/auth/userinfo.email&
        approval_prompt=force&
        access_type=offline">
        <button class="loginBtn loginBtn--google">Sign in with Google</button></a>';
   }
1
try and use the google php client library it will make it easer for you. if you dont want to do this just use the refresh token to gain access again. - DaImTo
Can you please tell me where I use refresh_token in my code to gain access again - Yajuvendra pratap singh

1 Answers

0
votes

The access_token you get from the above request is what you will be using to make requests to the service. After one hour your access token will have expired you will need to request a new access_token you take the refresh_token that you got above and HTTP Post it to: Note: grant_type=refresh_token

https://accounts.google.com/o/oauth2/token
client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token

This is the response:

{
"access_token" : "ya29.1.AADtN_XK16As2ZHlScqOxGtntIlevNcasMSPwGiE3pe5ANZfrmJTcsI3ZtAjv4sDrPDRnQ",
"token_type" : "Bearer",
"expires_in" : 3600
}