Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
googleapi与PHP_Php_Google Api_Google Plus_Google Oauth_Google Api Php Client - Fatal编程技术网

googleapi与PHP

googleapi与PHP,php,google-api,google-plus,google-oauth,google-api-php-client,Php,Google Api,Google Plus,Google Oauth,Google Api Php Client,编辑 问题解决了。我错过了呼叫会话\ u start()。真是愚蠢的错误(但是,现在它工作正常!\o/ 原始问题 我正在尝试使用谷歌API应用谷歌在 客户端和服务器端代码都工作正常:我能够连接,客户端向服务器发送信息(/plus.php?storeToken),服务器进行身份验证,我能够调用$objGooglePlusService->people->get('me'); 在第一次调用期间,我能够获得所有用户信息。我还使用$\u SESSION['token']=$objGoogleClient

编辑

问题解决了。我错过了呼叫会话\ u start()。真是愚蠢的错误(但是,现在它工作正常!\o/

原始问题

我正在尝试使用谷歌API应用谷歌在

客户端和服务器端代码都工作正常:我能够连接,客户端向服务器发送信息(/plus.php?storeToken),服务器进行身份验证,我能够调用
$objGooglePlusService->people->get('me');

在第一次调用期间,我能够获得所有用户信息。我还使用
$\u SESSION['token']=$objGoogleClient->getAccessToken()存储Google服务器提供的令牌
以执行以后的请求。然后,在成功访问/plus.php?storeToken之后,尝试访问/plus.php?getInfo,我将无法再访问用户信息。即使在调用
$objGoogleClient->setAccessToken($\u会话['token'))之后,在尝试访问用户数据之前;

未捕获的异常“Google_ServiceException”,消息为“Error” 呼叫GET : (401)无效凭证

我想我错过了什么,但我想不出是什么。你能帮我吗

谢谢

plus.PHP的PHP代码

$objResponse=new stdClass();
$strCallback=NULL;
如果($\u服务器['REQUEST\u METHOD']!='POST'){
$strCallback='showError';
$objResponse->status=500;
$objResponse->message='Bad method';
}否则{
需要_once'lib/google/google_Client.php';
需要_once'lib/google/contrib/google_PlusService.php';
需要一次'lib/xmas/Person.class.php';
$objGoogleClient=新的Google_客户端();
$objGoogleClient->setApplicationName('xmas');
$objGoogleClient->setClientId('XXXXX.apps.googleusercontent.com');//在真实环境中插入真实凭证。
$objGoogleClient->setClientSecret('XXXX');
$objGoogleClient->setRedirectUri('postmessage');
$objGoogleClient->setDeveloperKey('XXXX');
$objGooglePlusService=新的Google_PlusService($objGoogleClient);
$objResponse=new stdClass();
如果(isset($\u GET['storeToken'])){
$strCode=文件\u获取\u内容(“php://input");
$objGoogleClient->authenticate($strCode);
$strToken=$objGoogleClient->getAccessToken();
$objToken=json_decode($strToken);
//验证令牌
$strRequestUrl=https://www.googleapis.com/oauth2/v1/tokeninfo?access_token='.$objToken->访问令牌;
$objGoogleHttpRequest=新的Google_HttpRequest($strRequestUrl);
$strTokenInfo=json_decode($objGoogleClient::getIo()->authenticatedRequest($objGoogleHttpRequest)->getResponseBody());
如果($strTokenInfo->error){
//如果令牌信息中有错误,请中止。
$strCallback='showError';
$objResponse->status=500;
$objResponse->message=$strokeninfo->错误;
}elseif($strTokenInfo->userid!=$gPlusId){
//确保我们获得的令牌是为目标用户提供的。
$strCallback='showError';
$objResponse->status=401;
$objResponse->message=“Le jeton associéa l'ID use our ne correct pas l'ID use our fourni”;
}elseif($strokeninfo->publications!=“XXXX.apps.googleusercontent.com”){
//确保我们获得的令牌用于我们的应用程序。
$strCallback='showError';
$objResponse->status=401;
$objResponse->message=“Le jeton associéa l'ID client ne correct pasácelui de l'application”;
}否则{
//将令牌存储在会话中以供以后使用。
$\会话['token']=$strToken;
$arrMe=$objGooglePlusService->people->get('me');
$objPerson=\Xmas\Person::search($arrMe['id']);
如果(为空($objPerson->getID()){
$objPerson->setGoogleID($arrMe['id']);
$objPerson->setDisplayName($arrMe['displayName']);
如果(数组\键\存在('name',$arrMe)){
$objPerson->setFamilyName(数组_key_存在('familyName',$arrMe['name'])?$arrMe['name']['familyName']:'';
$objPerson->setGivenName(数组_键_存在('givenName',$arrMe['name'])?$arrMe['name']['givenName']:'';
}
$objPerson->setImage($arrMe['image']['url']);
$objPerson->setURL($arrMe['url']);
foreach($arrMe['emails']作为$arrMailData){
$objMail=new-Xmas\Mail();
$objMail->setValue($arrMailData['value']);
$objMail->setType($arrMailData['type']);
$objPerson->addMail($objMail);
}
$objPerson->save();
}
$strCallback='getInfo';
$objResponse->status=200;
$objResponse->message='Token stored';
$objResponse->token=$strToken;
$objResponse->me=$objGooglePlusService->people->get('me');
$\会话['person']=$objPerson;
}
}
如果(isset($\u会话['token'])){
$objGoogleClient->setAccessToken($_会话['token']);
}否则{
$strCallback='showError';
$objResponse->status=402;
$objResponse->message='Session expired';
}
如果(isset($\u GET['getInfo'])){
$arrMe=$objGooglePlusService->people->get('me');
$strCallback='showInfo';
$objResponse->status=200;
$objResponse->time=time();
$objResponse->target=strotime('2013-12-01 00:00:00');
$objResponse->me=$arrMe;
$intTime=time();
如果($intTimestatus=200;
$objResponse->time=time();
$ob
$objResponse = new stdClass();
$strCallback = NULL;

if ($_SERVER['REQUEST_METHOD'] != 'POST') {
    $strCallback = 'showError';
    $objResponse->status = 500;
    $objResponse->message = 'Bad method';
} else {
    require_once 'lib/google/Google_Client.php';
    require_once 'lib/google/contrib/Google_PlusService.php';
    require_once 'lib/xmas/Person.class.php';

    $objGoogleClient = new Google_Client();
    $objGoogleClient->setApplicationName('xmas');
    $objGoogleClient->setClientId('XXXXX.apps.googleusercontent.com'); // Real credential are inserted in real environment.
    $objGoogleClient->setClientSecret('XXXX');
    $objGoogleClient->setRedirectUri('postmessage');
    $objGoogleClient->setDeveloperKey('XXXX');
    $objGooglePlusService = new Google_PlusService($objGoogleClient);

    $objResponse = new stdClass();

    if (isset($_GET['storeToken'])) {
        $strCode = file_get_contents("php://input");
        $objGoogleClient->authenticate($strCode);
        $strToken = $objGoogleClient->getAccessToken();
        $objToken = json_decode($strToken);

        // Verify the token
        $strRequestUrl = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=' . $objToken->access_token;
        $objGoogleHttpRequest = new Google_HttpRequest($strRequestUrl);

        $strTokenInfo = json_decode($objGoogleClient::getIo()->authenticatedRequest($objGoogleHttpRequest)->getResponseBody());

        if ($strTokenInfo->error) {
            // If there was an error in the token info, abort.
            $strCallback = 'showError';
            $objResponse->status = 500;
            $objResponse->message = $strTokenInfo->error;
        } elseif ($strTokenInfo->userid != $gPlusId) {
            // Make sure the token we got is for the intended user.
            $strCallback = 'showError';
            $objResponse->status = 401;
            $objResponse->message = "Le jeton associé à l'ID utilisateur ne correspond pas l'ID utilisateur fourni";
        } elseif ($strTokenInfo->audience != 'XXXX.apps.googleusercontent.com') {
            // Make sure the token we got is for our app.
            $strCallback = 'showError';
            $objResponse->status = 401;
            $objResponse->message = "Le jeton associé à l'ID client ne correspond pas à celui de l'application";
        } else {
            // Store the token in the session for later use.
            $_SESSION['token'] = $strToken;
            $arrMe = $objGooglePlusService->people->get('me');

            $objPerson = \Xmas\Person::search($arrMe['id']);

            if (is_null($objPerson->getID())) {
                $objPerson->setGoogleID($arrMe['id']);
                $objPerson->setDisplayName($arrMe['displayName']);
                if (array_key_exists('name', $arrMe)) {
                    $objPerson->setFamilyName(array_key_exists('familyName', $arrMe['name']) ? $arrMe['name']['familyName'] : '');
                    $objPerson->setGivenName(array_key_exists('givenName', $arrMe['name']) ? $arrMe['name']['givenName'] : '');
                }
                $objPerson->setImage($arrMe['image']['url']);
                $objPerson->setURL($arrMe['url']);

                foreach ($arrMe['emails'] as $arrMailData) {
                    $objMail = new Xmas\Mail();
                    $objMail->setValue($arrMailData['value']);
                    $objMail->setType($arrMailData['type']);
                    $objPerson->addMail($objMail);
                }

                $objPerson->save();
            }

            $strCallback = 'getInfo';
            $objResponse->status = 200;
            $objResponse->message = 'Token stored';
            $objResponse->token = $strToken;
            $objResponse->me = $objGooglePlusService->people->get('me');

            $_SESSION['person'] = $objPerson;
        }
    }

    if (isset($_SESSION['token'])) {
        $objGoogleClient->setAccessToken($_SESSION['token']);
    } else {
        $strCallback = 'showError';
        $objResponse->status = 402;
        $objResponse->message = 'Session expired';
    }

    if (isset($_GET['getInfo'])) {
        $arrMe = $objGooglePlusService->people->get('me');

        $strCallback = 'showInfo';
        $objResponse->status = 200;
        $objResponse->time = time();
        $objResponse->target = strtotime('2013-12-01 00:00:00');
        $objResponse->me = $arrMe;

        $intTime = time();
        if ($intTime < strtotime('2013-12-01 00:00:00')) {
            // STEP - MONTRE CHRONO 1
            $strCallback = 'showCountDown';
            $objResponse->status = 200;
            $objResponse->time = time();
            $objResponse->target = strtotime('2013-12-01 00:00:00');
            $objResponse->me = $arrMe;
        } elseif (($intTime >= strtotime('2013-12-01 00:00:00')) && ($intTime < strtotime('2013-12-14 00:00:00'))) {
            // STEP - DEMANDE COORDONNEES

            $strCallback = 'askPostal';
            $objResponse->status = 200;
            $objResponse->name = $arrMe['displayName'];
            $objResponse->mail = '';
            foreach ($arrMe['emails'] as $arrMailData) {
                if ($arrMailData['type'] == 'account') {
                    $objResponse->mail = $arrMailData['value'];
                    break;
                }
            }
        }
    }
}

header('Content-type: application/json');
echo ($strCallback ? "{$strCallback}(" . json_encode($objResponse) . ");" : json_encode($objResponse));
ob_flush();