Автоматическая аутентификация Soundcloud PHP Api без участия пользователя - PullRequest
5 голосов
/ 03 января 2012

В моем приложении я хочу использовать API Soundcloud с моим собственным пользователем 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 ]

4 голосов
/ 31 января 2013

Привет всем,

Здесь я собираюсь поделиться своим опытом с Soundcloud API (PHP)

См. Мой вопрос: Ссылка

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 возвращал ошибку «Запрошенный URL-адрес ответил HTTP-кодом 0».В то время я тестировал Soundcloud на локальном хосте WAMP.

Много возможностей Я нашел решение, чтобы исправить проблему «Запрошенный 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'));

, но начала возникать новая проблема, состоящая в том, что мой токен доступа истекает снова иснова.Тогда я использую сессию: 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 Cheers !!!!:)

1 голос
/ 28 мая 2012

Я ищу то же самое, но в соответствии с API Soundcloud (отметьте Аутентификация без экрана 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')
})

и все работает отлично.

Итак, на данный момент у вас есть 2 способа:

  1. Использовать другой язык, Python или Ruby (единственные 2 SDK, которые фактически поддерживают этоили используйте небольшой скрипт на python / ruby ​​в качестве моста для этой конкретной потребности;
  2. Добавьте эту функцию в PHP SDK (я пытаюсь сделать это быстро и грязно, если я добьюсь успеха,я поделюсь;)
0 голосов
/ 01 февраля 2018

В его реализации в 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

...