Не удалось получить токен доступа из REST API служб мультимедиа Azure с помощью PHP

У меня есть следующий код в php:

define("TOKEN_URL", "https://wamsprodglobal001acs.accesscontrol.windows.net/v2/OAuth2-13");



 $arrData = array(
                'grant_type=client_credentials',
                'client_id='.CLIENT_ID,
                'client_secret='.urlencode(ACCESS_KEY),
                'scope=urn%3aWindowsAzureMediaServices'
            );


            $arrHeader = array(
                'Content-length:'.strlen($this->generateData($arrData))
            );

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, TOKEN_URL);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $this->generateData($arrData));
            curl_setopt($ch, CURLOPT_HTTPHEADER, $arrHeader);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $data = curl_exec($ch);
            curl_close($ch);
            $arrToken = json_decode($data);

Я не могу получить код токена. Пожалуйста, может кто-нибудь проверить, что может быть не так?


person Shraddha Bandekar    schedule 19.02.2013    source источник
comment
Что возвращает generateData()? Он json отформатирован?   -  person Ja͢ck    schedule 19.02.2013


Ответы (1)


Может быть несколько вопросов:

  1. Вы можете упростить несколько вещей и использовать http_build_query():

    $data = http_build_query(array(
        'grant_type' => 'client_credentials',
        'client_id' => CLIENT_ID,
        'client_secret' => ACCESS_KEY,
        'scope' => 'urn:WindowsAzureMediaServices',
    ));
    $ch = curl_init(TOKEN_URL);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if (($res = curl_exec($ch)) === false) {
        die(curl_error($ch));
    }
    $arrToken = json_decode($res);
    
  2. Если есть ошибка, первое, что нужно проверить, это наличие обновленного списка сертификатов ЦС.

person Ja͢ck    schedule 19.02.2013
comment
частная функция generateData($arrData){ return implode('&', $arrData); } просто возвращает это. $data пусто без ошибок. Я использую Windows XP. - person Shraddha Bandekar; 19.02.2013
comment
@ShraddhaBandekar Я упростил несколько вещей. - person Ja͢ck; 19.02.2013
comment
Я попробовал приведенный выше код, который дает мне следующее: Получите новый токен из проблемы с сертификатом SSL API, убедитесь, что сертификат CA в порядке. Подробности: ошибка: 14090086: процедуры SSL: SSL3_GET_SERVER_CERTIFICATE: ошибка проверки сертификата. Я не понимаю, что касается сертификатов CA и как решить эту ошибку. - person Shraddha Bandekar; 19.02.2013
comment
@ShraddhaBandekar Я добавил ссылку на более старый ответ, в котором это обсуждается. - person Ja͢ck; 19.02.2013
comment
Спасибо, это можно исправить. Но все же произошел сбой аутентификации, говорящий о недопустимом клиенте, код ACS50012. Просто чтобы подтвердить, это правильный идентификатор клиента: tstms.origin.mediaservices.windows.net? - person Shraddha Bandekar; 19.02.2013
comment
@ShraddhaBandekar Это сообщение об ошибке уровня обслуживания, поэтому было бы лучше проверить форумы msdn или что-то в этом роде. - person Ja͢ck; 19.02.2013
comment
давайте продолжим обсуждение в чате - person Shraddha Bandekar; 20.02.2013