getowebinar api php

Я попытался выяснить getowebinar api в php, но не понял. Итак, я попытался написать простой класс, который может быть полезен. Это аутентификация, которая одинакова для gotowebinar, gotomeeting и rest. Он выбирает предстоящий веб-семинар, все веб-семинары, информацию о веб-семинарах, регистранты, а также создает регистратора. Теперь вы можете улучшить его, как хотите. Любое предложение было бы очень оптимизировано.

help.txt

1) First change the GOTO_WEBINAR_API_KEY in gotoWebinarClass.php to your appication key. 2) Then change the REDIRECT_URL_AFTER_AUTHENTICATION in authorize.php. It is a url where one should be redirected after authentication. 3) Execute authorize.php. 4) After you autheticate, it would take you to REDIRECT_URL_AFTER_AUTHENTICATION with "code" in the query string. 5) Copy that code and execute the authorize.php again with ? code='your_code' in the query string. 6) If everything goes fine, we will get the token and we will set into session and be redirected to get-all-webinars.php which fetches user's all webinars. 

Этот класс не является полным, я определил основные

фундамент, теперь вы можете продолжать добавлять другие функции. Любые

предложение с вашей стороны было бы очень уместным. Благодарю.

gotoWebinarClass.php

 <?php define('GOTO_WEBINAR_API_KEY','your gotowebinar application key'); class OAuth_En{ protected $_accessToken; protected $_userId; protected $_organizerKey; protected $_refreshToken; protected $_expiresIn; public function getAccessToken(){ return $this->_accessToken; } public function setAccessToken($token){ $this->_accessToken = $token; } public function getUserId(){ return $this->_userId; } public function setUserId($id){ $this->_userId = $id; } public function getOrganizerKey(){ return $this->_organizerKey; } public function setOrganizerKey($key){ $this->_organizerKey = $key; } public function getRefreshToken(){ return $this->_refreshToken; } public function setRefreshToken($token){ $this->_refreshToken = $token; } public function getExpiresIn(){ return $this->_expiresIn; } public function setExpiresIn($expiresIn){ $this->_expiresIn = $expiresIn; } } class OAuth_Db{ function getToken(){ } } class OAuth{ protected $_redirectUrl; protected $_OAuthEnObj; protected $_curlHeader = array(); protected $_apiResponse; protected $_apiError; protected $_apiErrorCode; protected $_apiRequestUrl; protected $_apiResponseKey; protected $_accessTokenUrl; protected $_webinarId; protected $_registrantInfo = array(); protected $_apiRequestType; protected $_apiPostData; public function __construct(OAuth_En $oAuthEn){ $this->_OAuthEnObj = $oAuthEn; } public function getOAuthEntityClone(){ return clone $this->_OAuthEnObj; } public function getWebinarId(){ return $this->_webinarId; } public function setWebinarId($id){ $id = (int)$id; $this->_webinarId = empty($id) ? 0 : $id; } public function setApiErrorCode($code){ $this->_apiErrorCode = $code; } public function getApiErrorCode(){ return $this->_apiErrorCode; } public function getApiAuthorizationUrl(){ return 'https://api.citrixonline.com/oauth/authorize?client_id='.GOTO_WEBINAR_API_KEY.'&redirect_uri='.$this->getRedirectUrl(); } public function getApiKey(){ return GOTO_WEBINAR_API_KEY; } public function getApiRequestUrl(){ return $this->_apiRequestUrl; } public function setApiRequestUrl($url){ $this->_apiRequestUrl = $url; } public function setRedirectUrl($url){ $this->_redirectUrl = urlencode($url); } public function getRedirectUrl(){ return $this->_redirectUrl; } public function setCurlHeader($header){ $this->_curlHeader = $header; } public function getCurlHeader(){ return $this->_curlHeader; } public function setApiResponseKey($key){ $this->_apiResponseKey = $key; } public function getApiResponseKey(){ return $this->_apiResponseKey; } public function setRegistrantInfo($arrInfo){ $this->_registrantInfo = $arrInfo; } public function getRegistrantInfo(){ return $this->_registrantInfo; } public function authorizeUsingResponseKey($responseKey){ $this->setApiResponseKey($responseKey); $this->setApiTokenUsingResponseKey(); } protected function setAccessTokenUrl(){ $url = 'https://api.citrixonline.com/oauth/access_token?grant_type=authorization_code&code={responseKey}&client_id={api_key}'; $url = str_replace('{api_key}', $this->getApiKey(), $url); $url = str_replace('{responseKey}', $this->getApiResponseKey(), $url); $this->_accessTokenUrl = $url; } protected function getAccessTokenUrl(){ return $this->_accessTokenUrl; } protected function resetApiError(){ $this->_apiError = ''; } public function setApiTokenUsingResponseKey(){ //set the access token url $this->setAccessTokenUrl(); //set the url where api should go for request $this->setApiRequestUrl($this->getAccessTokenUrl()); //make request $this->makeApiRequest(); if($this->hasApiError()){ echo $this->getApiError(); }else{ //if api does not have any error set the token echo $this->getResponseData(); $responseData = json_decode($this->getResponseData()); $this->_OAuthEnObj->setAccessToken($responseData->access_token); $this->_OAuthEnObj->setOrganizerKey($responseData->organizer_key); $this->_OAuthEnObj->setRefreshToken($responseData->refresh_token); $this->_OAuthEnObj->setExpiresIn($responseData->expires_in); } } function hasApiError(){ return $this->getApiError() ? 1 : 0; } function getApiError(){ return $this->_apiError; } function setApiError($errors){ return $this->_apiError = $errors; } function getApiRequestType(){ return $this->_apiRequestType; } function setApiRequestType($type){ return $this->_apiRequestType = $type; } function getResponseData(){ return $this->_apiResponse; } function setApiPostData($data){ return $this->_apiPostData = $data; } function getApiPostData(){ return $this->_apiPostData; } function makeApiRequest(){ $header = array(); $this->getApiRequestUrl(); $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_URL, $this->getApiRequestUrl()); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if($this->getApiRequestType()=='POST'){ curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $this->getApiPostData()); } if($this->getCurlHeader()){ $headers = $this->getCurlHeader(); }else{ $headers = array( "HTTP/1.1", "Content-type: application/json", "Accept: application/json", "Authorization: OAuth oauth_token=".$this->_OAuthEnObj->getAccessToken() ); } curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $data = curl_exec($ch); $validResponseCodes = array(200,201,409); $responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $this->resetApiError(); if (curl_errno($ch)) { $this->setApiError(array(curl_error($ch))); } elseif(!in_array($responseCode, $validResponseCodes)){ if($this->isJsonString($data)){ $data = json_decode($data); } $this->setApiError($data); $this->setApiErrorCode($responseCode); }else { $this->_apiResponse = $data; $_SESSION['gotoApiResponse'] = $this->getResponseData(); curl_close($ch); } } function isAuthorizationRequiredAgain(){ $arrAuthorizationRequiredCodes = array(400,401,403,500); $isAuthRequired = 0; $error = $this->getApiError(); $responseCode = $this->getApiErrorCode(); //we might have to add more exception in this condition if(in_array($responseCode, $arrAuthorizationRequiredCodes)){ if($responseCode==400 && is_object($error)){ //because for 400 error sometime one needs to authenticate again foreach($error as $single){ $pos = strpos($single,'Authorization'); if($pos!==false){ $isAuthRequired = 1; } } }else{ $isAuthRequired = 1; } } return $isAuthRequired; } function getWebinars(){ $url = 'https://api.citrixonline.com/G2W/rest/organizers/'.$this->_OAuthEnObj->getOrganizerKey().'/webinars'; $this->setApiRequestUrl($url); $this->setApiRequestType('GET'); $this->makeApiRequest(); if($this->hasApiError()){ return null; } $webinars = json_decode($this->getResponseData()); return $webinars; } function getWebinar(){ if(!$this->getWebinarId()){ $this->setApiError(array('Webinar id not provided')); return null; } $this->setApiRequestType('GET'); $url = 'https://api.citrixonline.com/G2W/rest/organizers/'.$this->_OAuthEnObj->getOrganizerKey().'/webinars/'.$this->getWebinarId(); $this->setApiRequestUrl($url); $this->makeApiRequest(); if($this->hasApiError()){ return null; } $webinar = json_decode($this->getResponseData()); return $webinar; } function getUpcomingWebinars(){ $url = 'https://api.citrixonline.com/G2W/rest/organizers/'.$this->_OAuthEnObj->getOrganizerKey().'/upcomingWebinars'; $this->setApiRequestUrl($url); $this->setApiRequestType('GET'); $this->makeApiRequest(); if($this->hasApiError()){ return null; } $webinars = json_decode($this->getResponseData()); return $webinars; } function createRegistrant(){ if(!$this->getWebinarId()){ $this->setApiError(array('Webinar id not provided')); return null; } if(!$this->getRegistrantInfo()){ $this->setApiError(array('Registrant info not provided')); return null; } $this->setApiRequestType('POST'); $this->setApiPostData(json_encode($this->getRegistrantInfo())); $url = 'https://api.citrixonline.com/G2W/rest/organizers/'.$this->_OAuthEnObj->getOrganizerKey().'/webinars/'.$this->getWebinarId().'/registrants'; $this->setApiRequestUrl($url); $this->makeApiRequest(); if($this->hasApiError()){ return null; } $webinar = json_decode($this->getResponseData()); return $webinar; } function getWebinarRegistrantsFields(){ if(!$this->getWebinarId()){ $this->setApiError(array('Webinar id not provided')); return null; } $url = 'https://api.citrixonline.com/G2W/rest/organizers/'.$this->_OAuthEnObj->getOrganizerKey().'/webinars/'.$this->getWebinarId().'/registrants/fields'; $this->setApiRequestUrl($url); $this->setApiRequestType('GET'); $this->makeApiRequest(); if($this->hasApiError()){ return null; } $registrantFields = json_decode($this->getResponseData()); return $registrantFields; } function isJsonString($string){ $isJson = 0; $decodedString = json_decode($string); if(is_array($decodedString) || is_object($decodedString)) $isJson = 1; return $isJson; } } 

Authorize.php

 <?php include_once "gotoWebinarClass.php"; define('REDIRECT_URL_AFTER_AUTHENTICATION','http://url where we want to redirect'); //this is the url where your get token code would be written. session_start(); $obj = new OAuth_En(); $oauth = new OAuth($obj); if(!isset($_GET['code'])){ goForAuthorization(); }else{ //when user authenticates and redirect back to application redirect url, get the token $oauth->authorizeUsingResponseKey($_GET['code']); if(!$oauth->hasApiError()){ $objOAuthEn = $oauth->getOAuthEntityClone(); $_SESSION['oauthEn'] = serialize($objOAuthEn); header('Location: get-all-webinars.php'); } } //this function has been used for getting the key using which we can get the access token and organizer key function goForAuthorization(){ global $oauth; $oauth->setRedirectUrl(REDIRECT_URL_AFTER_AUTHENTICATION); $url = $oauth->getApiAuthorizationUrl(); header('Location: '.$url); } 

получить-все-webinars.php

 <?php include_once "gotoWebinarClass.php"; session_start(); $obj = unserialize($_SESSION['oauthEn']); /* this can be used to fetch the stored access token key and organizer key from database and use it without asking the authetication from user again $obj = new OAuth_En(); $obj->setAccessToken('token'); $obj->setOrganizerKey('organizer key'); */ $oauth = new OAuth($obj); $webinars = $oauth->getWebinars(); echo '<pre>'; if(!$oauth->hasApiError()){ print_r($webinars); }else{ print_r($oauth->getApiError()); } exit; /*$webinars = $oauth->getUpcomingWebinars(); if(!$oauth->hasApiError()){ print_r($webinars); }else{ print_r($oauth->getApiError()); } exit; $registrantInfo = array( "firstName"=>"ashish", "lastName"=>"mehta", "email"=>"test@test.com", ); $oauth->setWebinarId(525120321); $oauth->setRegistrantInfo($registrantInfo); $res = $oauth->createRegistrant(); echo $oauth->getApiErrorCode(); if(!$oauth->hasApiError()){ print_r($res); }else{ echo 'error'; print_r($oauth->getApiError()); } exit; $oauth->setWebinarId(525120321); $webinar = $oauth->getWebinar(); if(!$oauth->hasApiError()){ print_r($webinar); }else{ print_r($oauth->getApiError()); echo $oauth->getApiErrorCode(); } */ 

Предложение № 1: УДИВИТЕЛЬНЫЙ КЛАСС! 🙂

Предложение № 2: поскольку мне действительно не нужно было выполнять какую-либо фактическую «работу» для реализации вашего класса, у меня возникли проблемы с отправкой пользовательских ответов на вопросы при создании владельца регистрации.

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

 Accept: application/vnd.citrix.g2wapi-v1.1+json 

Кроме того, этот класс – ДЕНЬГИ В БАНКЕ! Спасибо за это, вы спасли меня TON времени (и только пришлось сосредоточиться на одной проблеме вместо 30).

хороший код. Я хотел бы использовать это с моей учетной записью GoToMeeting .

Ваш первый шаг, который гласит: «1) Сначала измените GOTO_WEBINAR_API_KEY ». Я хотел подтвердить, что GOTO_WEBINAR_API_KEY о GOTO_WEBINAR_API_KEY вы упомянули, является ключом API от приложения, созданного в учетной записи разработчика?

Благодаря,

Этот код остается в силе? Я хочу знать это, потому что получаю это, и мой API-ключ правильный.

stdClass Object ([int_err_code] => InvalidToken [msg] => Неверный токен прошел)

Я пробовал этот класс, и он очень полезен и велик. 🙂

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

Есть ли способ автоматического входа в GotoWebinar с помощью POST или любого другого кода, так что мне не нужно вручную вводить имя пользователя и пароль? Вот мой текущий код для authorize.php.

Я попробовал Direct Login, https://developer.citrixonline.com/page/direct-login . Однако он вернет информацию о моей учетной записи пользователя. Но это не будет перенаправлять на страницу, которая будет генерировать вебинары.

Большое спасибо!