Hi,
I am trying to integrate Zoom meetings with my php application, for integration using Zoom API. when I am sending a request to Zoom server to create a meeting getting {“code”:124,“message”:“Invalid access token.”} error. I have also verified token in “https://jwt.io ”. but not working in my application.
I am able to successfully create a meeting with same API key and API Secret in my another wordpress application but not working in my custom application.
I am using free basic trial account in zoom.
Please help me.
Thanks.
tommy
(Tommy Gaessler)
June 30, 2020, 9:21pm
2
Hey @tiwari.jyoti.05 ,
How are you setting the authorization header? If it is working on another application, but not on yours, there must be something off with how you are sending the request or generating the JWT Token.
Thanks,
Tommy
Hi Tommy,
Thanks for reply, below is php code of integration, please review this code and let me know where I am doing wrong
<?php
namespace Drupal\ridishu_zoom_meeting\Controller;
require_once 'G:\php\xampp\htdocs\drupal-8.8.5\drupal-8.8.5\vendor\firebase\php-jwt\src\BeforeValidException.php';
require_once 'G:\php\xampp\htdocs\drupal-8.8.5\drupal-8.8.5\vendor\firebase\php-jwt\src\ExpiredException.php';
require_once 'G:\php\xampp\htdocs\drupal-8.8.5\drupal-8.8.5\vendor\firebase\php-jwt\src\SignatureInvalidException.php';
require_once 'G:\php\xampp\htdocs\drupal-8.8.5\drupal-8.8.5\vendor\firebase\php-jwt\src\JWT.php';
use \Firebase\JWT\JWT;
use Drupal\zoomapi;
use Drupal\Core\Controller\ControllerBase;
/**
* Defines Zoom_meeting_controller class.
*/
class Zoom_meeting_controller extends ControllerBase {
/**
* Display the markup.
*
* @return array
* Return markup array.
*/
private $zoom_api_key = 'key';
private $zoom_api_secret = 'key';
public function start_meeting() {
$zoom_meeting = new Zoom_meeting_controller();
try{
$z = $zoom_meeting->createAMeeting(array(
'start_date'=>date("Y-m-d h:i:s", strtotime('tomorrow')),
'meetingTopic'=>'Example Test Meeting',
'timezone'=>'Asia/Tashkent',
'alternative_host_ids'=>'ab@gmail.com'
));
print_r($z);
return $z;
} catch (Exception $ex) {
echo "error in main method............";
//echo $ex;
}
}
public function createAMeeting( $data = array() ) {
$post_time = $data['start_date'];
$start_time = gmdate( "Y-m-d\TH:i:s", strtotime( $post_time ) );
$createAMeetingArray = array();
$alternative_host_ids='';
$createAMeetingArray['topic'] = $data['meetingTopic'];
$createAMeetingArray['agenda'] = ! empty( $data['agenda'] ) ? $data['agenda'] : "";
$createAMeetingArray['type'] = ! empty( $data['type'] ) ? $data['type'] : 2; //Scheduled
$createAMeetingArray['start_time'] = $start_time;
$createAMeetingArray['timezone'] = $data['timezone'];
$createAMeetingArray['password'] = ! empty( $data['password'] ) ? $data['password'] : "";
//echo "1..................";
$createAMeetingArray['duration'] = ! empty( $data['duration'] ) ? $data['duration'] : 60;
$createAMeetingArray['settings'] = array(
'join_before_host' => ! empty( $data['join_before_host'] ) ? true : false,
'host_video' => ! empty( $data['option_host_video'] ) ? true : false,
'participant_video' => ! empty( $data['option_participants_video'] ) ? true : false,
'mute_upon_entry' => ! empty( $data['option_mute_participants'] ) ? true : false,
'enforce_login' => ! empty( $data['option_enforce_login'] ) ? true : false,
'auto_recording' => ! empty( $data['option_auto_recording'] ) ?
$data['option_auto_recording'] : "none",
'alternative_hosts' => $alternative_host_ids
);
return $this->sendRequest($createAMeetingArray);
}
protected function sendRequest($data) {
$email="";
$request_url="https://api.zoom.us/v2/users/".$email."/meetings";
$jwt_token=$this->generateJWTKey();
//$jwt_token="token";
$headers = array(
"Authorization: Bearer ".$jwt_token,
"content-type: application/json"
);
$postFields = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_URL, $request_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
$response = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);
if(!$response){
return $err;
}
return json_decode($response);
}
//function to generate JWT
private function generateJWTKey() {
$key = "";
$secret = "";
$token = array(
"iss" => $key,
"exp" => time() + 3600 //60 seconds as suggested
);
echo "<br>";
return JWT::encode( $token, $secret );
}
}
?>
Thank,
Jyoti
Hi Tommy,
Thanks for reply, below is php code of integration, please review this code and let me know where I am doing wrong
require_once 'G:\php\xampp\htdocs\drupal-8.8.5\drupal-8.8.5\vendor\firebase\php-jwt\src\BeforeValidException.php';
require_once 'G:\php\xampp\htdocs\drupal-8.8.5\drupal-8.8.5\vendor\firebase\php-jwt\src\ExpiredException.php';
require_once 'G:\php\xampp\htdocs\drupal-8.8.5\drupal-8.8.5\vendor\firebase\php-jwt\src\SignatureInvalidException.php';
require_once 'G:\php\xampp\htdocs\drupal-8.8.5\drupal-8.8.5\vendor\firebase\php-jwt\src\JWT.php';
use \Firebase\JWT\JWT;
use Drupal\zoomapi;
use Drupal\Core\Controller\ControllerBase;
/**
* Defines Zoom_meeting_controller class.
*/
class Zoom_meeting_controller extends ControllerBase {
/**
* Display the markup.
*
* @return array
* Return markup array.
*/
private $zoom_api_key = 'key';
private $zoom_api_secret = 'key';
public function start_meeting() {
$zoom_meeting = new Zoom_meeting_controller();
try{
$z = $zoom_meeting->createAMeeting(array(
'start_date'=>date("Y-m-d h:i:s", strtotime('tomorrow')),
'meetingTopic'=>'Example Test Meeting',
'timezone'=>'Asia/Tashkent',
'alternative_host_ids'=>''
));
print_r($z);
return $z;
} catch (Exception $ex) {
echo $ex;
}
}
public function createAMeeting( $data = array() ) {
$post_time = $data['start_date'];
$start_time = gmdate( "Y-m-d\TH:i:s", strtotime( $post_time ) );
$createAMeetingArray = array();
$alternative_host_ids='';
$createAMeetingArray['topic'] = $data['meetingTopic'];
$createAMeetingArray['agenda'] = ! empty( $data['agenda'] ) ? $data['agenda'] : "";
$createAMeetingArray['type'] = ! empty( $data['type'] ) ? $data['type'] : 2; //Scheduled
$createAMeetingArray['start_time'] = $start_time;
$createAMeetingArray['timezone'] = $data['timezone'];
$createAMeetingArray['password'] = ! empty( $data['password'] ) ? $data['password'] : "";
//echo "1..................";
$createAMeetingArray['duration'] = ! empty( $data['duration'] ) ? $data['duration'] : 60;
$createAMeetingArray['settings'] = array(
'join_before_host' => ! empty( $data['join_before_host'] ) ? true : false,
'host_video' => ! empty( $data['option_host_video'] ) ? true : false,
'participant_video' => ! empty( $data['option_participants_video'] ) ? true : false,
'mute_upon_entry' => ! empty( $data['option_mute_participants'] ) ? true : false,
'enforce_login' => ! empty( $data['option_enforce_login'] ) ? true : false,
'auto_recording' => ! empty( $data['option_auto_recording'] ) ?
$data['option_auto_recording'] : "none",
'alternative_hosts' => $alternative_host_ids
);
return $this->sendRequest($createAMeetingArray);
}
protected function sendRequest($data) {
$email="";
$request_url="https://api.zoom.us/v2/users/".$email."/meetings";
$jwt_token=$this->generateJWTKey();
//$jwt_token="token";
$headers = array(
"Authorization: Bearer ".$jwt_token,
"content-type: application/json"
);
$postFields = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_URL, $request_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
$response = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);
if(!$response){
return $err;
}
return json_decode($response);
}
//function to generate JWT
private function generateJWTKey() {
$key = "";
$secret = "";
$token = array(
"iss" => $key,
"exp" => time() + 3600 //60 seconds as suggested
);
echo "<br>";
return JWT::encode( $token, $secret );
}
}
?>
Thanks,
Jyoti
tommy
(Tommy Gaessler)
July 6, 2020, 10:33pm
7
Hey @tiwari.jyoti.05 ,
I am not an expert in PHP so please try referencing PHP documentation or stack overflow.
You can also use one of the PHP libraries listed here to generate a JWT:
Thanks,
Tommy
Hi Tommy,
Thanks for help, now my code is working and I am able to create a meeting in Zoom from my application.
Thanks,
Jyoti
1 Like
Hi Jyoti,
Can you please help me with generating the access token. i’m facing the same issue.
Thanks in advance!!!
tommy
(Tommy Gaessler)
July 9, 2020, 5:41pm
10
Happy to hear you got it working @tiwari.jyoti.05 !
Thanks,
Tommy
tommy
(Tommy Gaessler)
July 9, 2020, 5:42pm
11
Hey @sandipchavan1990 ,
Please provide more details about your issue. If you are trying to generate a token in PHP, use one of the PHP libraries listed here:
Thanks,
Tommy
Hi Tommy,
As I updated earlier now my code is working fine. thanks for help.
Thanks.
1 Like
tommy
(Tommy Gaessler)
July 24, 2020, 9:17pm
13
Great! Happy to hear you got it working!
Thanks,
Tommy