2016-06-16 5 views
4

Я реализую видео призывающего апи для моего проекта, когда я создаю Токен доступа из https://www.twilio.com/user/account/video/dev-tools/testing-tools по «Создать маркер доступа» вариант это даст мне новые генерироваться маркер и, когда я использую его, как показано нижеTwilio Video Calling API реализация

var accessToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImN0eSI6InR3aWxpby1mcGE7dj0xIn0.eyJqdGkiOiJTSzk3ZDI2NGIyOTU1YjM2OWMyOGU4MjA4M2E5MjlmMmE0LTE0NjYwODE1NzQiLCJpc3MiOiJTSzk3ZDI2NGIyOTU1YjM2OWMyOGU4MjA4M2E5MjlmMmE0Iiwic3ViIjoiQUM5ZWE5YjY3ZmM3ZjBjMzE2NTBjNGRmNzkyYzhjYjI2NiIsImV4cCI6MTQ2NjA4NTE3NCwiZ3JhbnRzIjp7ImlkZW50aXR5IjoiQUM5ZWE5YjY3ZmM3ZjBjMzE2NTBjNGRmNzkyYzhjYjI2NiIsInJ0YyI6eyJjb25maWd1cmF0aW9uX3Byb2ZpbGVfc2lkIjoiVlMwNmYzZDdiNTczNGVlYTJhZDdjMWEzYzY4YmMzNjhjNSJ9fX0.976iQ2bMB_tAORxjGkgZFJ-UYGfTidTwfvV0fzySMP0"; 

var accessManager = new Twilio.AccessManager(accessToken); 

он отлично подойдет для меня.

Теперь, когда я использую 2-й вариант «Создать маркер доступа через вспомогательную библиотеку с PHP» и попытаться создать маркер с

// Create an Access Token 
$token = new Services_Twilio_AccessToken(
    $accountSid, 
    $apiKeySid, 
    $apiKeySecret, 
    $ttl=3600, 
    $identity=$identity 
); 

// Grant access to Conversations 
$grant = new Services_Twilio_Auth_ConversationsGrant(); 
$grant->setConfigurationProfileSid($configurationProfileSid); 
$token->addGrant($grant); 

echo json_encode(array(
    'identity' => $identity, 
    'token' => $token->toJWT(), 
)); 

он также будет генерировать маркер для меня, но когда я использовать созданный маркер, как

Response Токен:

{"identity":"GoldenZeldaGunsight","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImN0eSI6InR3aWxpby1mcGE7dj0xIn0 
.eyJqdGkiOiJTSzk3ZDI2NGIyOTU1YjM2OWMyOGU4MjA4M2E5MjlmMmE0LTE0NjYxMzc4MTkiLCJpc3MiOiJTSzk3ZDI2NGIyOTU 
1YjM2OWMyOGU4MjA4M2E5MjlmMmE0Iiwic3ViIjoiQUM5ZWE5YjY3ZmM3ZjBjMzE2NTBjNGRmNzkyYzhjYjI2NiIsIm5iZiI6MTQ 
2NjEzNzgxOSwiZXhwIjoxNDY2MTQxNDE5LCJncmFudHMiOnsiaWRlbnRpdHkiOiJHb2xkZW5aZWxkYUd1bnNpZ2h0IiwicnRjIjp7ImNvbmZpZ3VyYXRpb25fcHJvZmlsZV9zaWQiOiJWUzA2ZjNkN2I1NzM0ZWVhMmFkN2MxYTNjNjhiYzM2OGM1In19fQ 
.vkOxI1tMIWNQVm1AUL1ySTZY5ZyjYDTdvWCKnVIkLmk"} 

Я использую это Ответный токен в

var accessManager = new Twilio.AccessManager(data.token); 

он не будет работать для меня. это даст мне ошибку как

"Не удалось подключиться к Twilio: не определено ..."

Ответ:

Thu Jun 23 2016 13:22:58 GMT+0530 (India Standard Time) | sip.transport | received WebSocket text message: 

SIP/2.0 403 Forbidden 
CSeq: 81 REGISTER 
Call-ID: 4704t9hejng0hmhih2ui8m 
From: <sip:[email protected]cb266.endpoint.twilio.com>;tag=l3bsmhddlr 
To: <sip:[email protected]cb266.endpoint.twilio.com>;tag=72132201_50f4772f_8dc5c7c0-ce8e-4a6e-803a-72f6c761338b 
Via: SIP/2.0/WSS 127.0.0.1:60911;branch=z9hG4bK2792018;rport=60911 
Server: Twilio 
X-Twilio-Error: 31201 Authentication failed 
Content-Length: 0 

Также я испытал как маркер на https://jwt.io, его работа идеально подходит для меня.

Может кто-нибудь, пожалуйста, помогите мне в этом вопросе, где я ошибаюсь с кодом, если вы хотите, я могу передать другие данные учетных данных?

Заранее благодарен.

решаемые

Ребята, I'v получили решение этой проблемы с помощью поддержки.

Решение

В моей старой версии /Services/Twilio/AccessToken.php, у меня есть атрибут "НСБ": 1466743969 (not-before time), which means it is not valid until 4:52:49 UTC . However according to the timestamp in the log file it was 4:50:27 UTC (10:20:27 IST) ` , Если системные часы сервера, генерирующего токен доступа, быстро заканчиваются на пару минут, это приведет к недействительным не-перед временем.

Более поздние версии библиотеки twilio-php по умолчанию не учитывают атрибут "nbf" из-за этой проблемы с перекосом часов. Если вы получаете последнюю версию AccessToken.php здесь:

https://github.com/twilio/twilio-php/blob/master/Services/Twilio/AccessToken.php 

он будет генерировать маркеры доступа без "nbf".

Альтернативное исправление заключается в том, чтобы время сервера было точным, но для его настройки вам потребуется доступ администратора.

+0

, пожалуйста, покажите, как вы создаете свой объект JS данных – alepeino

+0

. Я дал все здесь, не могли бы вы рассказать мне, какой объект данных «данных» вы говорите? –

+0

, когда вы делаете новый Twilio.AccessManager (data.token); 'вы извлекаете данные с помощью запроса ajax? – alepeino

ответ

0

I'v получил решение этого вопроса с помощью поддержки.

Решение

В моей старой версии /Services/Twilio/AccessToken.php, у меня есть атрибут "nbf": 1466743969(not-before time), что означает, что он не является действительным до 04:52:49 UTC. Однако согласно отметке времени в файле журнала это было 04:50:27 UTC (10:20:27 IST) `. Если системные часы сервера, генерирующего токен доступа, быстро заканчиваются на пару минут, это приведет к недействительным не-перед временем.

Более поздние версии библиотеки twilio-php по умолчанию не учитывали атрибут «nbf» из-за этой проблемы с перекосом часов. Если вы получаете последнюю версию AccessToken.php здесь:

https://github.com/twilio/twilio-php/blob/master/Services/Twilio/AccessToken.php 

он будет генерировать маркеры доступа без «НСБ».

Альтернативное исправление заключается в том, чтобы время сервера было точным, но для его настройки вам потребуется доступ администратора.

3

Возможно, вы не указали возможность twilio's возможности.php. Согласно twilio docs, Ваш PHP должен быть похож на этот

include '/pathto/Services/Twilio/Capability.php'; 

// Twilio API credentials here 
$accountSid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; 
$authToken = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'; 

$capability = new Services_Twilio_Capability($accountSid, $authToken); 
$capability->allowClientOutgoing('APabe7650f654fc34655fc81ae71caa3ff'); 
$token = $capability->generateToken(); 

вы получите доступ к токен с помощью JS:

 <script type="text/javascript"> 

     Twilio.Device.setup("<?php echo $token; ?>"); 

     Twilio.Device.ready(function (device) { 
     $("#log").text("Ready"); 
     }); 

     Twilio.Device.error(function (error) { 
     $("#log").text("Error: " + error.message); 
     }); 

     Twilio.Device.connect(function (conn) { 
     $("#log").text("Successfully established call"); 
     }); 

     function call() { 
     Twilio.Device.connect(); 
     } 
    </script> 

Я надеюсь, что это ставит вас на правильном пути.

EDIT:

я не понял, выше сценарий был для аудио, так что просто для будущих пользователей, думал, что я выкладываю видео скрипты здесь

  1. Клиент: запрос доступа Токен (использование JQuery)

    $.getJSON('/token', function(data) { 
    // The data sent back from the server should contain a long string - this is 
    // the JWT token you need to initialize the SDK. Read more about JWT 
    // (JSON Web Token) at http://jwt.io 
    console.log(data.token); 
    
    //If your app has an existing authentication system, you can use 
    // the e-mail address or username that uniquely identifies a user instead. 
    console.log(data.identity); 
    }); 
    
  2. Сервер: Создать маркер доступа (PHP)

    <?php 
        require_once('./twilio-php/Services/Twilio.php'); 
        require_once('./randos.php'); 
        require_once('./config.php'); 
    
        // choose a random username for the connecting user 
        $identity = randomUsername(); 
    
        // Create access token, which we will serialize and send to the client 
        $token = new Services_Twilio_AccessToken(
        $TWILIO_ACCOUNT_SID, 
        $TWILIO_API_KEY, 
        $TWILIO_API_SECRET, 
        3600, 
        $identity 
        ); 
    
        // Grant access to Conversations 
        $grant = new Services_Twilio_Auth_ConversationsGrant(); 
        $grant->setConfigurationProfileSid($TWILIO_CONFIGURATION_SID); 
        $token->addGrant($grant); 
    
        // return serialized token and the user's randomly generated ID 
        echo json_encode(array(
        'identity' => $identity, 
        'token' => $token->toJWT(), 
    )); 
    
  3. Клиент: Инициализировать SDK с токена доступа

    // Create an AccessManager to manage our Access Token 
    var accessManager = new Twilio.AccessManager('$TWILIO_ACCESS_TOKEN'); 
    
    // Create a Conversations Client and connect to Twilio's backend 
    conversationsClient = new Twilio.Conversations.Client(accessManager); 
    conversationsClient.listen().then(function() { 
        console.log('Connected to Twilio!'); 
    }, function (error) { 
        console.log('Could not connect to Twilio: ' + error.message); 
    }); 
    

Существует дополнительная информация на The Twilio Video Docs и больше информации о работе с разговорами here

+0

более подробные документы здесь http://twilio-php.readthedocs.io/en/latest/usage/token-generation.html –

+0

Привет, Рейчел, спасибо, что предложил вам свою помощь. Могу ли я отправить вам футболку, чтобы сказать спасибо? Электронная почта: [email protected] –

+0

@MeganSpeir haha ​​Megan, я надеюсь, что это бесплатно :) Я могу просто взять тебя на это! lol –