Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
154 views
in Technique[技术] by (71.8m points)

gotowebinar api php

I tried to find out gotowebinar api in php but didn't get it. So, I have tried to write a simple class which can be useful. It does authentication which is same for gotowebinar, gotomeeting and rest. It fetches the upcoming webinar, all webinars, single webinar information, registrants fields and also create registrant. Now you all can enhance it as you want. Any suggestion would be much appericiated.

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.

This class is not complete, I have laid down the basic

foundation, now you can keep on adding the other functions. Any

suggestion from your side would be much appriciated. Thanks.

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Suggestion #1: AMAZING CLASS! :)

Suggestion #2: Because I didn't really have to do any actual "work" to implement your class, I had some trouble with submitting custom question responses when creating a registrant.

This is because if you use custom fields, you need to add an additional parameter to the header:

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

Other than that this class is MONEY IN THE BANK! Thanks for this you saved me a TON of time (and only had to focus on one problem instead of 30).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...