Недавно я намеревался интегрировать Zoom в свое веб-приложение с помощью чистого / простого / ванильного JavasScript, но столкнулся с несколькими проблемами из-за документации и примеров кода:

  • В предоставленном образце кода были проблемы с безопасностью
  • Неполная документация для чистого JavaScript и PHP.

Я перечислю свои проблемы / решения, а затем предоставлю полнофункциональный пример JavaScript + PHP, который интегрирует Zoom в базовое веб-приложение.

Код в документации был для Angular; Мне нужен был простой JavaScript.

Проблема №1: Используйте правильные клавиши

Я просматривал документацию Zoom по теме «Создание приложения - SDK веб-клиента».

После того, как вы зарегистрируетесь в своей учетной записи Zoom Developer, первым делом необходимо выбрать тип приложения. Я выбрал «SDK», поскольку этот термин широко используется в руководстве. Я использовал свои значения ключа SDK / секрета SDK, но получал ошибки (в частности, «Тайм-аут присоединения к собранию»).

Оказывается, вместо этого мне нужны учетные данные для приложения JWT (JSON Web Token)!

Извлеченный урок

Если учетные данные SDK не работают, попробуйте JWT! Он называется «Ключ API / Секрет API», что соответствует тому, что он называется в примере кода.

Проблема № 2: Несогласованные переменные

Пример кода веб-клиента Zoom работает, но он использует функцию ZoomMtg. generateSignature (), которая требует от вас предоставления секрета API на стороне клиента, что представляет собой угрозу безопасности. Комментарии к коду и документация указывают на то, что вам следует вместо этого сгенерировать подпись, используя код на стороне сервера.

В качестве альтернативы вы можете следовать коду, приведенному в документации. Однако у меня были проблемы с тем, чтобы заставить его работать.

В обоих случаях предлагается передать объект. К сожалению, в документации был объект под названием meetConfig с такими элементами, как meetingNumber, тогда как в примере кода был meetingConfig с другими элементами, такими как mn для «номера встречи».

Я изо всех сил пытался объединить эти два образца кода (один работал, но был небезопасен, а другой не работал).

Проблема № 3: неполный пример PHP

Для создания подписи вам понадобится серверный код. Предоставленный PHP-код был большим подспорьем, но я хотел восполнить некоторые недостающие части для менее опытных.

Если вы следуете рекомендуемому подходу к передаче объекта (вместо отдельных значений), вам сначала нужно использовать функцию json_decode ().

Вот сокращенный фрагмент кода. полный код находится по ссылке в конце этого сообщения:

<?php
// fill in your API Secret (probably from the JWT, not the SDK!)
$apiSecret   = '...';
// if you're passing in a JSON object, decode it first
$meetingData  = json_decode(file_get_contents('php://input'), true);
// Make sure your variable names match!
$apiKey   = $meetingData['meetingData']['apiKey'];
$meetingNumber  = $meetingData['meetingData']['meetingNumber'];
$role    = $meetingData['meetingData']['role'];
print generate_signature( $apiKey, $apiSecret, $meetingNumber, $role);
function generate_signature ( $apiKey, $apiSecret, $meetingNumber, $role) {
 // use their code
}
?>

Проблема №4: Отсутствие чистого примера JavaScript

Примечание. В итоге я не использовал исправления кода в этой части, но хотел упомянуть об этом, если вам понадобится помощь в преобразовании кода из Angular.

В документации не было примера чистого JavaScript. Внесите следующие изменения в предоставленный код Angular:

  • Удалите «импорт», если вы используете CDN.
  • Добавьте ключевое слово «функция» перед getSignature ()
  • Отрегулируйте размещение ошибки; скриншот ниже

У меня все еще появляется ошибка Zoom «Тайм-аут присоединения к собранию»!

На момент написания статьи я не выяснил причину, но обходной путь заключается в том, что хост должен сначала войти в систему. Возможно, это ограничение моей «бесплатной» учетной записи Zoom?

Также: в идентификаторе встречи, который предоставляет Zoom, есть пробелы (что упрощает чтение). Вам нужно удалить пробелы, чтобы он работал.

Окончательный код SDK JavaScript для масштабирования

Полный код можно найти на GitHub здесь: