在google api的3腿认证中获取错误“来自服务提供商的授权令牌与提供的请求令牌详细信息不匹配”

时间:2014-02-13 13:02:14

标签: php zend-framework oauth google-oauth

我想在google api中实施3条腿的身份验证。

代码: -

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

define('REDIRECT_URI',  'http://example.com/gmail/index.php');
require_once 'Zend/Oauth/Consumer.php';
session_start();

$CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com';
$CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxx';

// Multi-scoped token.
$SCOPES = array(
  'https://docs.google.com/feeds/',
  'https://spreadsheets.google.com/feeds/'
);

$oauthOptions = array(
  'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER,
  'version' => '2.0',
  'consumerKey' => $CONSUMER_KEY,
  'consumerSecret' => $CONSUMER_SECRET,
  'signatureMethod' => 'HMAC-SHA1',
  'callbackUrl' => REDIRECT_URI,
  'requestTokenUrl' => 'https://www.google.com/accounts/OAuthGetRequestToken',
  'userAuthorizationUrl' => 'https://www.google.com/accounts/OAuthAuthorizeToken',
  'accessTokenUrl' => 'https://www.google.com/accounts/OAuthGetAccessToken'
);

$consumer = new Zend_Oauth_Consumer($oauthOptions);

// When using HMAC-SHA1, you need to persist the request token in some way.
// This is because you'll need the request token's token secret when upgrading
// to an access token later on. The example below saves the token object as a session variable.
if (!isset($_SESSION['ACCESS_TOKEN'])) {
  $_SESSION['REQUEST_TOKEN'] = serialize($consumer->getRequestToken(array('scope' => implode(' ', $SCOPES))));
}

$approvalUrl = $consumer->getRedirectUrl(array('hd' => 'default'));
echo "<a href=\"$approvalUrl\">Grant access</a>";
// $consumer->redirect(array('hd' => 'default'));


if (!isset($_SESSION['ACCESS_TOKEN'])) {
  if (!empty($_GET) && isset($_SESSION['REQUEST_TOKEN'])) {
    $_SESSION['ACCESS_TOKEN'] = serialize($consumer->getAccessToken($_GET, unserialize($_SESSION['REQUEST_TOKEN'])));
  }
}

print_r($_SESSION);

我收到以下错误

  

致命错误:带有消息的未捕获异常'Zend_Oauth_Exception'    '来自服务提供商的授权令牌与提供的令牌不匹配    请求/var/www/gmail/Zend/Oauth/Consumer.php:215中的令牌详细信息        堆栈跟踪:        #0 /var/www/gmail/index.php(58):Zend_Oauth_Consumer-&gt; getAccessToken(Array,    对象(Zend_Oauth_Token_Request))        #1 {main}          在第215行的/var/www/gmail/Zend/Oauth/Consumer.php中引用

提前致谢。

0 个答案:

没有答案