无需用户交互的自动Soundcloud PHP Api身份验证

时间:2012-01-03 06:39:04

标签: php api authentication oauth-2.0 soundcloud

在我的应用程序中,我想将Soundcloud API与我自己的Soundcloud用户一起使用。 Soundcloud API身份验证过程涉及将用户重定向到Soundcloud主页,登录并授权应用程序,以便该页面可以为该用户使用API​​。

我希望自动化整个过程,因为我自己的用户是唯一获得身份验证的用户。这可能吗?

到目前为止,这是我的代码:

    $soundcloud = new \Services_Soundcloud(
        '**',
        '**',
        'http://**'
    );

    $authorizeUrl = $soundcloud->getAuthorizeUrl();

    $accessToken = $soundcloud->accessToken();

    try {
        $me = json_decode($soundcloud->get('me'), true);
    } catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
        exit($e->getMessage());
    }

但是行$accessToken = $soundcloud->accessToken();抛出异常:

The requested URL responded with HTTP code 401.
500 Internal Server Error - Services_Soundcloud_Invalid_Http_Response_Code_Exception 

3 个答案:

答案 0 :(得分:4)

  

大家好,

     

在这里,我将与Soundcloud API(PHP)分享我的经验

请参阅我的问题:Link

Recently I started to work with Sound cloud API (PHP) and I decided to use PHP API by

https://github.com/mptre/php-soundcloud.

But When I was trying to get access token from Sound cloud server by this code:
// Get access token
try {
    $accessToken = $soundcloud->accessToken($_GET['code']);
} catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
    exit($e->getMessage());
}
     

我检查了$ _GET ['code']值。但奇怪的是没有任何东西   $ _GET ['code']这是空白的。 Soundcloud正在回归“The   请求的URL响应HTTP代码0“错误。那次我是   在WAMP Localhost上测试Soundcloud。

     

Allot of Goggling我找到了一个解决方案来修复“请求的URL”   回复HTTP代码0“问题。我已下载'cacert.pem'文件   并放入我们的演示项目文件夹(在Services / Soundcloud /中)。   然后我在'class Services_Soundcloud'中添加了一些代码

function protected function _request($url, $curlOptions = array()).
// My code in side function
$curlPath = realpath(getcwd().'\Services\cacert.pem');         
$curlSSLSertificate = str_replace("\\", DIRECTORY_SEPARATOR, $curlPath);        
curl_setopt($ch, CURLOPT_CAINFO, $curlSSLSertificate);
     

已保存“class Services_Soundcloud”文件,并在实时服务器上移动。后   将我的项目从WAMP移动到Live服务器我开始再次检查它。   当我打开index.php时,它要求我登录

enter image description here

I use my Facebook account to login.

enter image description here

after login it was asking to connect with Soundcloud

enter image description here

  

连接所有工作顺利后,我得到了

的信息
$me = json_decode($soundcloud->get('me'));
  

但是一个新问题开始出现,那是我的访问令牌   一次又一次地到期。然后我使用session:D

// code for access token
$code = $_GET['code'];
// Get access token
try {
    if(!isset($_SESSION['token'])){
        $accessToken = $soundcloud->accessToken($code);
        $_SESSION['token'] = $accessToken['access_token'];
    }else{
        $soundcloud->setAccessToken($_SESSION['token']);
    }   
} catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
    exit($e->getMessage());
}

现在一切都很棒。我可以获取所有细节,跟踪SC服务器上的所有内容

希望它能帮助你与Soundcloud API干杯战斗! :)

答案 1 :(得分:1)

我正在寻找相同的东西,但是根据soundcloud's api(检查在没有SoundCloud Connect屏幕的情况下进行身份验证段落):

// this example is not supported by the PHP SDK

..并且Javascript也不支持。

我尝试使用python进行身份验证:

# create client object with app and user credentials
client = soundcloud.Client(client_id='YOUR_CLIENT_ID',
                           client_secret='YOUR_CLIENT_SECRET',
                           username='YOUR_USERNAME',
                           password='YOUR_PASSWORD')

..然后上传python方法:

# upload audio file
track = client.post('/tracks', track={
    'title': 'This is my sound',
    'asset_data': open('file.mp3', 'rb')
})

它运作得很好。

所以,目前,您有两种方式:

  1. 使用另一种语言,Python或Ruby(实际支持此功能的唯一2个sdk)或使用小型python / ruby​​脚本作为满足此特定需求的桥梁;
  2. 将这个功能添加到PHP SDK中(我试图快速完成它,如果我成功了,我会分享;)

答案 2 :(得分:0)

在Python和Ruby SDK中实现它并没有什么神奇之处。 发生的事情是POST请求被发送到http://api.soundcloud.com/oauth2/token并带有以下参数:

   client_id='YOUR_CLIENT_ID'
   client_secret='YOUR_CLIENT_SECRET'
   username='YOUR_USERNAME'
   password='YOUR_PASSWORD'

Content-Type: application/x-www-form-urlencoded

响应正文包含access_token,可用于进一步授权您的请求。因此,您对GET端点的/me请求将如下所示:/me?oauth_token=YOUR_ACCESS_TOKEN&client_id=YOUR_CLIENT_ID。 (我相信,client_id在这里是多余的,但他们的所有应用都会不断添加它。)

以下是我为演示创建的邮递员文档:https://documenter.getpostman.com/view/3651572/soundcloud/7TT5oD9