Soundcloud api访问令牌(Oauth2)

时间:2012-08-17 13:16:41

标签: php api oauth access-token soundcloud

测试whit php-soundcloud

我尝试使用脚本php-soundcloud(Oauth 2),用户登录后遇到问题。
我正在完成教程wiki:https://github.com/mptre/php-soundcloud/wiki/Oauth-2

当用户接受该应用程序时,它会返回以下URL:http://mywebsite.com/?code=123456789123456789

我得到了正确的$_GET['code'],但函数accessToken()无法检索信息,它会给我一个 HTTP code 401 错误(参见下图)。

HTTP code 401 soundcloud

这是我的代码(最基本的):

<?php

include 'Services/Soundcloud.php';
$soundcloud = new Services_Soundcloud('_myClientId_', '_ClientSecret_', '_RedirectUri_');

echo '<a href="' . $soundcloud->getAuthorizeUrl() . '">Connect with SoundCloud</a><br />';

try {
    $accessToken = $soundcloud2->accessToken($_GET['code']);
} catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
    exit($e->getMessage());
}

以下是soundcloud的HTTP状态代码:http://developers.soundcloud.com/docs/api/guide#errors
他们说代码401是:确保您向我们发送client_idaccess_token  但我肯定会发送正确的ID和令牌! :/

如果有人已经操作SoundCloud API并知道我为什么会收到此错误,请告诉我任何解决方案。

2 个答案:

答案 0 :(得分:1)

好的,我找到了!这很容易......
我没有看到将令牌添加到类

的函数setAccessToken()
try {
    $accessToken = $soundcloud2->accessToken($_GET['code']);
    // this is the part that I was missing
    $soundcloud2->setAccessToken($accessToken["access_token"]);
} catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
    exit($e->getMessage());
}

答案 1 :(得分:0)

atmon3r的回答肯定是错的。 对setAccessToken()的调用完全没必要,因为对accessToken()的调用已经设置了访问令牌。此外,他在调用accessToken()时遇到异常,因此在发出异常的代码之后添加一行代码是不可能的。

我遇到了同样的错误,在我的情况下是由于没有第三个(redirect_uri)参数调用Services_Soundcloud构造函数引起的。添加这个参数(首先不需要它,因为它完全没用,但是SoundCloud API设计得很糟糕)使它适合我(不需要调用setAccessToken)。

除了API构思错误之外(因为它只允许在应用程序中配置一个固定的返回URL [已经是一个愚蠢且严重的限制]并且同时需要它作为参数[当它只能有一个有效的值]),PHP库是有缺陷的,因为如果你在没有第三个参数的情况下调用构造函数,它就不会抛出异常。

请注意,return_url的值必须与应用程序中配置的值匹配。