2011-12-26 8 views
1

私はPHPのgetomeating APIの実装を作成しようとしています。私は正常にaccess_tokenを取得しましたが、他のリクエストに対してはエラー応答が返されます。これは私のコードです:php api(oauth)の実装をゴシエートする

<?php 
session_start(); 

$key = '#'; 
$secret = '#'; 

$domain = $_SERVER['HTTP_HOST']; 
$base = "/oauth/index.php"; 
$base_url = urlencode("http://$domain$base"); 

$OAuth_url = "https://api.citrixonline.com/oauth/authorize?client_id=$key&redirect_uri=$base_url"; 
$OAuth_exchange_keys_url = "http://api.citrixonline.com/oauth/access_token?grant_type=authorization_code&code={responseKey}&client_id=$key"; 

if($_SESSION['access_token']) CreateForm();else 
if($_GET['send']) OAuth_Authentication($OAuth_url); 
elseif($_GET['code']) OAuth_Exchanging_Response_Key($_GET['code'],$OAuth_exchange_keys_url); 

function OAuth_Authentication ($url){ 
    $_SESSION['access_token'] = false; 
    header("Location: $url"); 
} 

function CreateForm(){ 
    $data = getURL('https://api.citrixonline.com/G2M/rest/meetings?oauth_token='.$_SESSION['access_token'],false); 
} 

function OAuth_Exchanging_Response_Key($code,$url){ 
    if($_SESSION['access_token']){ 
     CreateForm(); 
     return true; 
    } 
    $data = getURL(str_replace('{responseKey}',$code,$url)); 

    if(IsJsonString($data)){ 
     $data = json_decode($data); 
     $_SESSION['access_token'] = $data->access_token; 
     CreateForm(); 
    }else{ 
     echo 'error'; 
    } 
} 

/* 
* Helper functions 
*/ 

/* 
* checks if a string is json 
*/ 
function IsJsonString($str){ 
    try{ 
     $jObject = json_decode($str); 
    }catch(Exception $e){ 
     return false; 
    } 
    return (is_object($jObject)) ? true : false; 
} 
/* 
* CURL function to get url 
*/ 
function getURL($url,$auth_token = false,$data=false){ 

    // Initialize session and set URL. 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $url); 

    // Set so curl_exec returns the result instead of outputting it. 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

    if($auth_token){ 
     curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: OAuth oauth_token='.$auth_token)); 
    } 

    if($data){ 
     curl_setopt($ch, CURLOPT_POST,true); 
     $d = json_encode('{ "subject":"test", "starttime":"2011-12-01T09:00:00Z", "endtime":"2011-12-01T10:00:00Z", "passwordrequired":false, "conferencecallinfo":"test", "timezonekey":"", "meetingtype":"Scheduled" }'); 

     echo implode('&', array_map('urlify',array_keys($data),$data)); 
      echo ';'; 
     curl_setopt($ch, CURLOPT_POSTFIELDS, 
      implode('&', array_map('urlify',array_keys($data),$data)) 
     ); 

    } 

    // Get the response and close the channel. 
    $response = curl_exec($ch); 

    /* 
    * if redirect, redirect 
    */ 
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
         if ($code == 301 || $code == 302) { 
          preg_match('/<a href="(.*?)">/', $response, $matches); 
          $newurl = str_replace('&amp;','&',trim(array_pop($matches))); 
        $response = getURL($newurl); 
         } else { 
          $code = 0; 
         } 

    curl_close($ch); 

    return $response; 
} 

function urlify($key, $val) { 
    return urlencode($key).'='.urlencode($val); 
} 

あなたはFITH = 1を送信するPHPファイルへのリクエストを作成する必要が接続プロセスを開始します。私は会議のリストを得るために異なった試練を試みましたが、良い反応を得ることはできませんでした。

誰にもこれに先行する問題があったのですか、それともこの解決策を知っていましたか?

編集:

これはカールエラーではありません、サーバが、彼らはそれが動作するはずと言うCitrixのフォーラムで、エラーメッセージで応答し、私が持っている場合、それは、仕事をdosen't理由には、さらに詳細ませんoauthまたは要求コードを実装する方法の問題。私が得る最もコモンエラーは、フォーラムに記載されていない "error code:31305"です。

+0

何*正確に*問題ですか?何がうまくいかない? 'curl_error()は何を言っているのですか? –

+4

こんにちは、秘密鍵を常に_secret_にしておかないといけませんか?ここに投稿することで、あなたはそれを公開しています。 –

+1

******私は幸運にもこれはデモ口座です:) ty – cuzzea

答えて

1

[私もCitrix Developer Forumsに投稿が、完全を期すためにも、ここでそれを言及します。]

を我々はまだこれらのインターフェイスのドキュメントを最終決定されており、オプションとして書かれているいくつかのパラメータが実際に必要とされています。上記のあなたの例と比較すると

、必要な変更は以下のとおりです。67へ

  • セットtimezonekey(太平洋時間)
  • ハイブリッド(意味に
  • 偽セットconferencecallinfoにPASSWORDREQUIREDセット:PSTNとVOIPの両方の意志)

口座にそれらの変更を取る提供され、あなたのサンプルデータは、より次のようになります。

{"subject":"test meeting", "starttime":"2012-02-01T08:00:00", 
"endtime":"2012-02-01T09:00:00", "timezonekey":"67", 
"meetingtype":"Scheduled", "passwordrequired":"false", 
"conferencecallinfo":"Hybrid"}

また、私が作成した作業PHPのサンプルアプリをチェックアウトすることができます:http://pastebin.com/zE77qzAz

+0

私はほとんど応答がありますが、これは日付/時刻エラーを返します。ところで、私はデモアカウントを使用しています、これは問題を引き起こす可能性がありますか? – cuzzea

関連する問題