Does anyone know how I can get the user email address?
My code is below:
require_once("sm/google/Google_Client.php");
require_once("sm/google/contrib/Google_PlusService.php");
require_once("sm/google/contrib/Google_Oauth2Service.php");
include_once("ErrorReporting.php");
$objError = new ErrorReporting();
$client = new Google_Client();
$client->setApplicationName("myproject");
//$client->setHttpClient($httpClient);
// Visit https://code.google.com/apis/console?api=plus to generate your
// client id, client secret, and to register your redirect uri.
$client->setClientId(GOOGLE_CLIENT_ID);
$client->setClientSecret(GOOGLE_CLIENT_SECRET);
$client->setRedirectUri($callbackurl);
$client->setDeveloperKey(GOOGLE_API_KEY);
$client->setAccessType("online");
$client->setApprovalPrompt("auto");
$client->setScopes(array('https://www.googleapis.com/auth/userinfo.email','https://www.googleapis.com/auth/userinfo.profile'));
$oauth2Service = new Google_Oauth2Service($client);
$plus = new Google_PlusService($client);
$userinfo = $oauth2Service->userinfo;
print_r($userinfo->get());
if (isset($_GET['code'])) {
try {
$client->authenticate();
} catch(Exception $e) {
$objError->reportError("Error! while authenticate through google",$e ,'dev');
}
$token = $client->getAccessToken();
try {
$userProfile = $plus->people->get("me");
print_r($userProfile);
exit();
} catch(Exception $e) {
//echo $e;
$objError->reportError("Error! while login through google",$e ,'dev');
}
$id = $userProfile['id'];
return array(
'user' => $id,
'network' => 'google',
'userprofile' => $userProfile,
'token' => $token,
'loginUrl' => null,
'logoutUrl' => null
);
} else {
$authUrl = $client->createAuthUrl();
return array(
'user' => 0,
'network' => 'google',
'userprofile' => $userProfile,
'token' => null,
'loginUrl' => $authUrl,
'logoutUrl' => null
);
}
}
So not sure how I can get the email address using google oauth2service. As I tried to access it but no error appearing on screen but also no email address is fatched. I looked at the contrib/Google_Oauth2Service.php class file and don’t find the get() method so not sure what I am missing here.
Following two line of code is not returning any email information:
$userinfo = $oauth2Service->userinfo;
print_r($userinfo->get());
My PHP version is 5.3
My Google_Oauth2Service.php file looks like below:
<?php
/*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
/**
* The "userinfo" collection of methods.
* Typical usage is:
* <code>
* $oauth2Service = new Google_Oauth2Service(...);
* $userinfo = $oauth2Service->userinfo;
* </code>
*/
class Google_UserinfoServiceResource extends Google_ServiceResource {
/**
* (userinfo.get)
*
* @param array $optParams Optional parameters.
* @return Google_Userinfo
*/
public function get($optParams = array()) {
$params = array();
$params = array_merge($params, $optParams);
$data = $this->__call('get', array($params));
if ($this->useObjects()) {
return new Google_Userinfo($data);
} else {
return $data;
}
}
}
/**
* The "v2" collection of methods.
* Typical usage is:
* <code>
* $oauth2Service = new Google_Oauth2Service(...);
* $v2 = $oauth2Service->v2;
* </code>
*/
class Google_UserinfoV2ServiceResource extends Google_ServiceResource {
}
/**
* The "me" collection of methods.
* Typical usage is:
* <code>
* $oauth2Service = new Google_Oauth2Service(...);
* $me = $oauth2Service->me;
* </code>
*/
class Google_UserinfoV2MeServiceResource extends Google_ServiceResource {
/**
* (me.get)
*
* @param array $optParams Optional parameters.
* @return Google_Userinfo
*/
public function get($optParams = array()) {
$params = array();
$params = array_merge($params, $optParams);
$data = $this->__call('get', array($params));
if ($this->useObjects()) {
return new Google_Userinfo($data);
} else {
return $data;
}
}
}
/**
* Service definition for Google_Oauth2 (v2).
*
* <p>
* Lets you access OAuth2 protocol related APIs.
* </p>
*
* <p>
* For more information about this service, see the
* <a href="https://developers.google.com/accounts/docs/OAuth2" target="_blank">API Documentation</a>
* </p>
*
* @author Google, Inc.
*/
class Google_Oauth2Service extends Google_Service {
public $userinfo;
public $userinfo_v2_me;
/**
* Constructs the internal representation of the Oauth2 service.
*
* @param Google_Client $client
*/
public function __construct(Google_Client $client) {
$this->servicePath = '';
$this->version = 'v2';
$this->serviceName = 'oauth2';
$client->addService($this->serviceName, $this->version);
$this->userinfo = new Google_UserinfoServiceResource($this,
$this->serviceName, 'userinfo', json_decode('{"methods": {"get": {"id": "oauth2.userinfo.get", "path": "oauth2/v2/userinfo", "httpMethod": "GET", "response": {"$ref": "Userinfo"}, "scopes": ["https://www.googleapis.com/auth/plus.login", "https://www.googleapis.com/auth/plus.me", "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile"]}}}', true));
$this->userinfo_v2_me = new Google_UserinfoV2MeServiceResource($this, $this->serviceName, 'me', json_decode('{"methods": {"get": {"id": "oauth2.userinfo.v2.me.get", "path": "userinfo/v2/me", "httpMethod": "GET", "response": {"$ref": "Userinfo"}, "scopes": ["https://www.googleapis.com/auth/plus.login", "https://www.googleapis.com/auth/plus.me", "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile"]}}}', true));
}
}
class Google_Tokeninfo extends Google_Model {
public $access_type;
public $audience;
public $email;
public $expires_in;
public $issued_to;
public $scope;
public $user_id;
public $verified_email;
public function setAccess_type( $access_type) {
$this->access_type = $access_type;
}
public function getAccess_type() {
return $this->access_type;
}
public function setAudience( $audience) {
$this->audience = $audience;
}
public function getAudience() {
return $this->audience;
}
public function setEmail( $email) {
$this->email = $email;
}
public function getEmail() {
return $this->email;
}
public function setExpires_in( $expires_in) {
$this->expires_in = $expires_in;
}
public function getExpires_in() {
return $this->expires_in;
}
public function setIssued_to( $issued_to) {
$this->issued_to = $issued_to;
}
public function getIssued_to() {
return $this->issued_to;
}
public function setScope( $scope) {
$this->scope = $scope;
}
public function getScope() {
return $this->scope;
}
public function setUser_id( $user_id) {
$this->user_id = $user_id;
}
public function getUser_id() {
return $this->user_id;
}
public function setVerified_email( $verified_email) {
$this->verified_email = $verified_email;
}
public function getVerified_email() {
return $this->verified_email;
}
}
class Google_Userinfo extends Google_Model {
public $birthday;
public $email;
public $family_name;
public $gender;
public $given_name;
public $hd;
public $id;
public $link;
public $locale;
public $name;
public $picture;
public $timezone;
public $verified_email;
public function setBirthday( $birthday) {
$this->birthday = $birthday;
}
public function getBirthday() {
return $this->birthday;
}
public function setEmail( $email) {
$this->email = $email;
}
public function getEmail() {
return $this->email;
}
public function setFamily_name( $family_name) {
$this->family_name = $family_name;
}
public function getFamily_name() {
return $this->family_name;
}
public function setGender( $gender) {
$this->gender = $gender;
}
public function getGender() {
return $this->gender;
}
public function setGiven_name( $given_name) {
$this->given_name = $given_name;
}
public function getGiven_name() {
return $this->given_name;
}
public function setHd( $hd) {
$this->hd = $hd;
}
public function getHd() {
return $this->hd;
}
public function setId( $id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setLink( $link) {
$this->link = $link;
}
public function getLink() {
return $this->link;
}
public function setLocale( $locale) {
$this->locale = $locale;
}
public function getLocale() {
return $this->locale;
}
public function setName( $name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
public function setPicture( $picture) {
$this->picture = $picture;
}
public function getPicture() {
return $this->picture;
}
public function setTimezone( $timezone) {
$this->timezone = $timezone;
}
public function getTimezone() {
return $this->timezone;
}
public function setVerified_email( $verified_email) {
$this->verified_email = $verified_email;
}
public function getVerified_email() {
return $this->verified_email;
}
}
Thanks
2
Answers
I noticed a couple things on your end that could be causing you some grief. Your order of operations seems to be reversed. You shouldn’t be calling this:
before this:
Also, you should be sending the code along with the client.
So, something like this should get you some proper output:
Give that a try, and then let us know if you’re on the right track. Also, Google Plus has been deprecated, so I would recommend you don’t use those libraries any longer.
I don’t know how you’re using this but I’ve tried with
v1-master
branch of googleapiclient
and I’m able to fetch user’s email addressPlease share your composer.json file, so that I can try with your configurations to provide a better solution.