这是我的代码:
$key = "xxx";
$secret = "xxx";
$url = "https://oauth.withings.com/account";
$config = array(
"siteUrl" => $url,
"consumerKey" => $key,
"consumerSecret" => $secret,
"requestMethod" => "GET"
);
$consumer = new Zend_Oauth_Consumer($config);
try {
$token = $consumer->getRequestToken();
} catch (Zend_Oauth_Exception $e){
print $e;
}
当我在Mac上运行它(OSX 10.8,PHP 5.3.13,Zend 1.11.12)时,它可以正常工作。
但是当我在我的Linux服务器(Debian 6.0.5,PHP 5.3.3,Zend 1.10.6)上运行它时,它失败了。 Zend文档很薄,但是在1.10 och 1.11之间发生了一些事情,导致相同的代码失败了吗?错误消息如下:
“异常'Zend_Oauth_Exception',消息'无法从令牌网址检索有效的令牌响应:'”
错误似乎表明没有发送任何URL。现在,Zend 1.10和1.11的“siteUrl”配置选项似乎是相同的,所以不可能,对吗?
在我的Linux主机上手动构建URL并使用CURL时,我得到正确的响应,因此它不能是网络或阻塞问题。
将URL更改为“/ accounts”(即使其成为错误的URL)时,它会使用此代码返回Mac和Linux的HTML 404代码。
我在这里不知所措。有谁知道如何解决这个问题?
答案 0 :(得分:0)
404表示找不到,因此服务器无法为URL提供文档,不应该与auth有任何关系... Auth失败应该是403.如果你只获得带有auth的404, 404可能正在重定向......您应该尝试使用Charles代理或类似方法来调试请求。
编辑我重读并看到404是故意的......我仍然会尝试调试请求
答案 1 :(得分:0)
我在Zend_Oauth_Http
的代码中发现异常,似乎响应未通过方案检查,您可能希望明确设置方案。
代码:
/**
* Manages the switch from OAuth request scheme to another lower preference
* scheme during a request cycle.
*
* @param Zend_Http_Response
* @return void
* @throws Zend_Oauth_Exception if unable to retrieve valid token response
*/
protected function _assessRequestAttempt(Zend_Http_Response $response = null)
{
switch ($this->_preferredRequestScheme) {
case Zend_Oauth::REQUEST_SCHEME_HEADER:
$this->_preferredRequestScheme = Zend_Oauth::REQUEST_SCHEME_POSTBODY;
break;
case Zend_Oauth::REQUEST_SCHEME_POSTBODY:
$this->_preferredRequestScheme = Zend_Oauth::REQUEST_SCHEME_QUERYSTRING;
break;
default:
require_once 'Zend/Oauth/Exception.php';
throw new Zend_Oauth_Exception(
'Could not retrieve a valid Token response from Token URL:'
. ($response !== null
? PHP_EOL . $response->getBody()
: ' No body - check for headers')
);
}
}
希望它有所帮助。