2012-02-14 13 views
5

Ho cercato di scoprire gotowebinar api in php ma non l'ho capito. Quindi, ho provato a scrivere una classe semplice che può essere utile. Fa l'autenticazione che è lo stesso per gotowebinar, gotomeeting e resto. Raccoglie i prossimi webinar, tutti i webinar, le informazioni sui singoli webinar, i campi dei dichiaranti e crea anche il registrante. Ora tutti voi potete valorizzarlo come volete. Qualsiasi suggerimento sarebbe molto appericiato.gotowebinar api php

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. 

Questa classe non è completo, ho stabilito di base

fondazione, ora è possibile continuare ad aggiungere le altre funzioni. Qualsiasi

consiglio da parte vostra sarebbe molto appriciato. Grazie.

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); 
} 

get-all-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"=>"[email protected]", 
); 

$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(); 
} 
*/ 
+0

Avete questo su GitHub o dovunque? Devo fare un'integrazione con GoToWebinar e sarei felice di contribuire a questo corso. –

risposta

0

ni codice ce Mi piacerebbe usare questo con il mio account GoToMeeting.

Il primo passo che dice "1) Sostituire prima il GOTO_WEBINAR_API_KEY". Volevo confermare che lo GOTO_WEBINAR_API_KEY che hai citato sia la chiave API da un'applicazione creata nell'account sviluppatore?

Grazie,

+0

Sì esattamente, è lo stesso. Grazie per l'apprezzamento. – Gaurav

1

Suggerimento # 1: AMAZING CLASSE! :)

Suggerimento n. 2: Poiché non ho realmente dovuto fare alcun "lavoro" reale per implementare la tua classe, ho avuto qualche problema con l'invio di risposte alle domande personalizzate durante la creazione di un registrante.

Questo perché se si utilizzano campi personalizzati, è necessario aggiungere un parametro aggiuntivo per l'intestazione:

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

Diverso da quello che questa classe è il denaro in banca! Grazie per questo mi hai risparmiato un sacco di tempo (e ho dovuto concentrarmi solo su un problema invece di 30).

0

Questo codice è ancora valido? Sto volendo sapere questo perché ottengo questo, e la mia chiave API è corretta.

stdClass Object ([int_err_code] => InvalidToken [msg] => Token non valido passato)

0

Ho provato questa classe ed è davvero disponibile e ottimo. :)

L'unico problema che sto incontrando è che quando si reindirizza a GoToWebinar, sarebbe prima mi chiederà di inserire il nome utente e la password prima che restituisce l'Array che contiene i prossimi webinar.

C'è un modo per accedere automaticamente a GotoWebinar utilizzando POST o qualsiasi altro codice in modo che non debba inserire manualmente nome utente e password? Ecco il mio codice corrente per authorize.php.

Ho provato l'accesso diretto, https://developer.citrixonline.com/page/direct-login. Tuttavia, restituirebbe le informazioni del mio account utente. Ma non reindirizzerebbe alla pagina che genererà i webinar.

Grazie mille!