我想在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中引用
提前致谢。