3

这是我的代码:

$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 和 1.11 之间是否发生了使相同代码失败的事情?错误信息如下:

“异常 'Zend_Oauth_Exception' 带有消息'无法从令牌 URL 检索有效的令牌响应:'”

该错误似乎表明没有发送任何 URL。现在,Zend 1.10 和 1.11 的“siteUrl”配置选项似乎相同,所以不可能是这样,对吧?

在我的 Linux 主机上手动构建 URL 并使用 CURL 时,我得到了正确的响应,因此它不会是网络或阻塞问题。

当将 URL 更改为“/accounts”时(即使其成为不正确的 URL),它使用此代码为 Mac 和 Linux 返回 HTML 404 代码。

我在这里不知所措。有谁知道如何解决这个问题?

4

2 回答 2

0

I found the exception in the code for Zend_Oauth_Http it seems as tho the response is failing a scheme check, you might want to explicitly set the scheme.

the code:

 /**
     * 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')
                );
        }
    }

Hope it helps.

于 2012-08-05T16:10:53.670 回答
0

404 表示未找到,因此服务器无法为 URL 提供文档,不应该与 auth 有任何关系... Auth failures 应该是 403。如果您只在 auth on 的情况下获得 404,则 404 可能是在重定向...您应该尝试使用 Charles 代理或类似的代理来调试请求。

编辑我重读并看到 404 是故意的......我仍然会尝试调试请求

于 2012-08-05T15:43:41.267 回答