2012-02-14 25 views
5

Tôi đã cố gắng tìm ra gotowebinar api trong php nhưng không nhận được nó. Vì vậy, tôi đã cố gắng viết một lớp đơn giản có thể hữu ích. Nó thực hiện xác thực tương tự cho gotowebinar, thu thập và nghỉ ngơi. Nó tìm kiếm hội thảo trên web sắp tới, tất cả hội thảo trên web, thông tin về hội thảo trên web duy nhất, các trường đăng ký và cũng tạo người đăng ký. Bây giờ tất cả các bạn có thể tăng cường nó như bạn muốn. Bất kỳ gợi ý nào cũng sẽ được nhiều người sử dụng.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. 

Lớp này là chưa hoàn chỉnh, tôi đã đặt ra nền tảng cơ bản

, bây giờ bạn có thể tiếp tục thêm các chức năng khác. Bất kỳ

đề xuất từ ​​phía bạn sẽ được đánh giá cao. Cảm ơn.

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

Bạn có điều này trên GitHub hay ở bất cứ đâu? Tôi phải tham gia tích hợp với GoToWebinar và sẽ rất vui khi đóng góp cho lớp học này. –

Trả lời

0

ni mã ce. Tôi muốn sử dụng tài khoản này với tài khoản GoToMeeting của mình.

Bước đầu tiên của bạn có nội dung "1) Trước tiên hãy thay đổi GOTO_WEBINAR_API_KEY". Tôi muốn xác nhận là số GOTO_WEBINAR_API_KEY bạn đã đề cập là Khóa API từ một ứng dụng được tạo trên tài khoản nhà phát triển?

Xin cảm ơn,

+0

Có chính xác, nó giống nhau. Cảm ơn bạn đã đánh giá cao. – Gaurav

1

Đề xuất # 1: LỚP NHẤT! :)

Đề xuất # 2: Vì tôi không thực sự phải thực hiện bất kỳ "công việc" thực tế nào để triển khai lớp học của bạn, tôi gặp một số rắc rối khi gửi câu trả lời câu hỏi tùy chỉnh khi tạo người đăng ký.

này là bởi vì nếu bạn sử dụng các lĩnh vực tùy chỉnh, bạn cần phải thêm một tham số bổ sung cho tiêu đề:

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

Ngoài ra lớp này là tiền trong ngân hàng! Cảm ơn bạn đã tiết kiệm cho tôi một TON thời gian (và chỉ phải tập trung vào một vấn đề thay vì 30).

0

Mã này vẫn hợp lệ? Tôi muốn biết điều này bởi vì tôi nhận được điều này, và khóa API của tôi là chính xác.

stdClass Object ([int_err_code] => InvalidToken [msg] => thẻ không hợp lệ thông qua)

0

Tôi đã cố gắng lớp này và nó thực sự hữu ích và tuyệt vời. :)

Vấn đề duy nhất tôi gặp phải là khi nó chuyển hướng đến GotoWebinar, trước tiên nó sẽ yêu cầu tôi nhập tên người dùng và mật khẩu của mình trước khi trả về Array chứa các hội thảo trên web sắp tới.

Có cách nào để tự động đăng nhập vào GotoWebinar bằng cách sử dụng POST hoặc bất kỳ mã nào khác để tôi không phải nhập tên người dùng và mật khẩu theo cách thủ công không? Đây là mã hiện tại của tôi cho authorize.php.

Tôi đã thử Đăng nhập trực tiếp, https://developer.citrixonline.com/page/direct-login. Tuy nhiên, nó sẽ trả về thông tin tài khoản người dùng của tôi. Nhưng nó sẽ không chuyển hướng đến trang sẽ tạo ra các hội thảo trên web.

Cảm ơn rất nhiều!