2010-08-31 149 views
0

API集成說明
的API需要被張貼到一些輸入字段和客戶令牌API URL形式發佈參數API URL後沒有發生。 API處理,然後在我的服務器上發佈對callback.php文件的響應。我可以在該文件中使用$ _POST訪問發佈的val。這就是現有的方法,它工作正常。回調從服務器端

要求
隱藏客戶端的客戶令牌值。所以我開始發送服務器端發佈請求。

問題
我試着用很多的選擇,但回調並未出現 -

1)CURL方法

$ch = curl_init(API_URL); 
$encoded = ''; 
$_postArray['customer_token'] = API_CUSTOMER_TOKEN; 

foreach($_postArray as $name => $value) 
{ 
    $encoded .= urlencode($name).'='.urlencode($value).'&'; 
} 

// chop off last ampersand 
$encoded = substr($encoded, 0, strlen($encoded)-1); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded); 
$resp = curl_exec($ch); 
curl_close($ch); 
echo $resp; 

$ RESP呼應1,如果該行curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);被刪除,但回調不不會發生。我在回調腳本中設置了一個會話變量進行驗證。它是否需要該API同步才能使用curl方法,以便curl_exec返回響應?

2)無捲曲在Posting parameters to a url using the POST method without using a form

給出,但回調沒有發生。

我也嘗試了以下代碼,但看起來像我的pecl未正確安裝,因爲HttpRequest()未定義。

$req = new HttpRequest($apiUrl, HttpRequest::METH_POST); 
$req->addQueryData($params); 

try 
{ 
    $r->send(); 
    if ($r->getResponseCode() == 200) 
    { 
    echo "success"; 
     // success! 
    } 
    else 
    { 
    echo "failure"; 
     // got to the API, the API returned perhaps a RESTful response code like 404 
    } 
} 
catch (HttpException $ex) 
{ 
    // couldn't get to the API (probably) 
} 

請幫我一把!我只需要輕鬆發送服務器端發佈請求並在回調文件中獲取響應。

+1

我猜這個問題在別處。回調完全是API的職責,只要方法1(cURL)返回'1'(我猜是輸出結果),問題就不在這裏。 – shamittomar 2010-08-31 12:54:22

回答

0

嘗試使用curl_get_info()函數來調試您的要求:

$header = curl_getinfo($ch); 
print_r($header); 

你的要求可能是好的,但我將導致錯誤404。

編輯:如果要執行POST請求,將它添加到您的代碼:

curl_setopt($ch, CURLOPT_POST, true); 

編輯:別的東西,我在你的代碼中提到:您在使用一個「1」 「CURLOPT_RETURNTRANSFER」,但應該是「真」:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

至少這是如何我通常做它,你永遠不知道,如果該功能也就會明白「1」爲「真」;

編輯:真正的問題:我複製粘貼源,並用它在我的網頁收到此錯誤之一:

Warning: urlencode() expects parameter 1 to be string, array given in C:\xampp\htdocs\phptests\test.php on line 8 

的錯誤是在這一行:

foreach($_postArray as $name => $value) 

$ _postArray是一個數組,其中一個值保存其他值,您需要另一個foreach或者您可以簡單地使用它:

foreach($_postArray['customer_token'] as $name => $value) 
+0

'curl_getinfo($ ch)'的輸出給出 - Array [url] => http:// [content_type] => text/html [http_code] => 200 [header_size] => 163 [request_size] = > 743 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.183987 [namelookup_time] => 0.175189 [connect_time] => 0.175267 [pretransfer_time] => 0.175276 [size_upload] => [size = red] 0> [0] [0] [0] [0] [0] [0] [0] [0] http_code'是200(看起來沒有錯誤)。 – 2010-08-31 14:18:21

+0

比你的請求只是空的。但是我剛剛看到,您正在嘗試發佈帖子請求。比你還必須告訴CURL這件事。看我的編輯。 – 2ndkauboy 2010-08-31 14:21:35

+0

我沒有寫錯'curl_setopt($ ch,CURLOPT_POST,true);'在我的問題中。現在添加。謝謝,但我展示的數組輸出是針對'curl_setopt($ ch,CURLOPT_POST,true);'存在於代碼中的情況。 – 2010-08-31 14:28:00

0

正如在previous question中討論的那樣,回調與您的請求完全是分開的。回調也不會有您的會話變量,因爲遠程API充當回調腳本的客戶端,並且擁有自己的會話

你應該真的在這裏展示一些API文檔。也許我們彼此之間有誤解,但據我所知,你試圖做的事情(在最初的CURL請求中獲得回調值)是徒勞的,並且通過詢問兩次並不會變得更加無用。

+0

在同意你的解釋之後,我已經試圖在我之前的問題中獲得初始CURL請求中的回調值。現在我只是試圖在回調文件中設置一個會話值,但這並沒有發生。 – 2010-08-31 14:21:27

+0

@sandeepan是的,在回調文件中,API充當「瀏覽器」,因此它將具有與當前不同的會話。通常,API應該在回調中返回一個唯一的密鑰,以便您可以知道它屬於哪個請求(如果密鑰是會話ID,甚至可以繼續會話)。你的API真的沒有這個效果嗎?這很奇怪。 – 2010-08-31 14:25:25

+0

關於這個API有很多奇怪的事情,因此我掙扎了很多。它仍然在修正錯誤,並且當我們發現錯誤時它們會發生變化。 – 2010-08-31 14:30:53