Как вызвать API-интерфейс CITRIX (LogMeIn) через PHP для регистрации нового посетителя GotoWebinar?
Я использую приведенный ниже код для регистрации пользователя на вебинаре:
$headers = array(
'HTTP/1.1',
'Accept: application/json',
'Accept: application/vnd.citrix.g2wapi-v1.1+json',
'Content-Type: application/json',
'Authorization: OAuth oauth_token='.$access_token,
'Name_First:test',
'Name_Last:ank',
'Email:ankinfo@yahoo.com',
);
$gtw_url = "https://api.citrixonline.com/G2W/rest/organizers/{organizerkey}/webinars/{webinarkey}/registrants";
$curl = @curl_init();
@curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
@curl_setopt($curl, CURLOPT_URL, $gtw_url);
@curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
@curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
@curl_exec($curl);
@curl_close($curl);
Я передал ключ вебинара и ключ организатора. Я должен получить вывод, как:
HTTP/1.1 201 OK Content-Type: application/json
{
"registrantKey":5678,
"joinUrl":"https://www1.gotomeeting.com/join/123456789/5678"
}
Проблема в том, что когда я запускаю файл, я получаю вывод
[
{
"registrantKey":106660361,
"firstName":"test",
"lastName":"1",
"email":"rohankapoor99@yahoo.com",
"status":"WAITING",
"registrationDate":"2012-06-29T21:07:10Z",
"joinUrl":"https://www1.gotomeeting.com/join/141654337/106660361",
"timeZone":"America/Denver"
}
]
Я использую URL-адрес создания вебинара, так почему я получаю информацию о пользователе, который уже зарегистрирован?
2 ответа
<?php
if (isset($_POST['registration-submission'])) {
$base_url = 'https://api.citrixonline.com/G2W/rest';
$org_key = $_POST['organizer_key'];
$web_key = $_POST['webinar_key'];
$access_token = 'xxxxx';
$gtwPost = (object) array(
'firstName' => $POST['fname'],
'lastName' => $POST['lname'],
'email'=> $POST['email'],
);
$newRegistrantFields = json_encode($gtwPost);
$headers = array(
'HTTP/1.1',
'Accept: application/vnd.citrix.g2wapi-v1.1+json',
'Content-Type: application/json',
'Authorization: OAuth oauth_token=xxxxx',
'Content-Length:' . strlen( $newRegistrantFields )
);
//Set POST URL for GoToWebinar
$gtw_url = $base_url.'/organizers/'.$org_key.'/webinars/'.$web_key.'/registrants?resendConfirmation=false';
//Start GoToWebinar submission
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $gtw_url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0 );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $curl, CURLOPT_POST, 1);
curl_setopt( $curl, CURLOPT_POSTFIELDS,$newRegistrantFields );
$newRegistrants = curl_exec($curl);
curl_close($curl);
$newRegistrantsArray = json_decode($newRegistrants,true);
if( array_key_exists( 'registrantKey', $newRegistrantsArray ) && array_key_exists( 'joinUrl', $newRegistrantsArray ) ) {
$form_data[ 'status' ] = true;
$form_data[ 'code' ] = $_POST[ 'Email' ] . ' successfully registered with webinar';
$form_data[ 'error' ] = 'E300';
//echo json_encode( $form_data );
//exit;
}
}
?>
the code is not working. Please help me with this.
Вопросу 3 года, но, учитывая нынешнее плачевное состояние документации по API CITRIX (теперь LogMeIn), я предлагаю следующий фрагмент в качестве возможного решения:
Очевидно, что нам понадобятся ключ организатора и данные токена доступа для нашей учетной записи...
$organizer_key= '10000000000XXXXXXX';
$access_token = 'GwsiiPWaJbHIiaIiocxxxxxxxxxx';
Получить минимально необходимые поля для вебинара (например, из формы HTML) и JSON кодировать данные...
$newRegFields = (object) array(
'firstName' => $_POST[ 'FirstName' ],
'lastName' => $_POST[ 'LastName' ],
'email' => $_POST[ 'Email' ],
);
$newRegistrantFields = json_encode( $newRegFields );
//echo '<br><br>' . $newRegistrantFields;
Получить вебинар...
$webinarID = preg_replace( "/[^0-9]/", "", $_POST[ "WebinarKey" ] );
Установите URL для API LogMeIn (опция resendConfirmation не требуется)...
$gtw_url = "https://api.citrixonline.com/G2W/rest/organizers/" . $organizer_key . "/webinars/" . $webinarID . "/registrants?resendConfirmation=false";
Отформатируйте наши заголовки POST...
$headers = array(
"HTTP/1.1",
"Accept: application/json",
"Content-Type: application/json",
"Authorization: OAuth oauth_token=$access_token",
"Content-Length: " . strlen( $newRegistrantFields )
);
Установите наши параметры cURL, гарантируя, что мы указываем POST с CURLOPT_POST, 1...
$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, $gtw_url );
curl_setopt( $curl, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0 );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_POST, 1 );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $newRegistrantFields );
$newRegistrants = curl_exec( $curl );
curl_close( $curl );
Наш вызов cURL вернулся с данными в кодировке JSON, будь то сообщение об ошибке сервера или подтверждение регистрации. Теперь давайте превратим ответ в удобный ассоциативный массив...
$newRegistrantsArray = json_decode( $newRegistrants, true );
//echo '<br><br>' . $newRegistrants . '<br><br>';
//echo '<pre>'; print_r( $newRegistrantsArray ); echo '</pre>';
Если ключ errorCode был возвращен, то регистрация сработала. Все, что я делаю здесь, это извлекает реальное описание ошибки с сервера и загружает его, чтобы вернуться к моей вызывающей HTML-странице, но это совершенно необязательно...
if( array_key_exists( 'errorCode', $newRegistrantsArray )) {
$form_data[ 'status' ] = false;
$form_data[ 'code' ] = $newRegistrantsArray[ 'description' ];
$form_data[ 'error' ] = 'E200';
//echo json_encode( $form_data );
//exit;
}
Теперь, если регистрация прошла успешно, сервер вернет что-то вроде...
(
[registrantKey] => 2.5022062212198E+18
[joinUrl] => https://global.gotowebinar.com/join/6552167171182613761/103193261
)
... и поэтому я просто проверяю, были ли возвращены эти ключи, и если да, я знаю, что регистрация прошла успешно.
if( array_key_exists( 'registrantKey', $newRegistrantsArray ) && array_key_exists( 'joinUrl', $newRegistrantsArray ) ) {
$form_data[ 'status' ] = true;
$form_data[ 'code' ] = $_POST[ 'Email' ] . ' successfully registered with webinar';
$form_data[ 'error' ] = 'E300';
//echo json_encode( $form_data );
//exit;
}