2013-02-14 32 views
2

我正在使用第三方服務,這需要我通過OAuth1進行身份驗證才能發出請求。我可以使用GET成功認證並獲取大部分電話的數據,但有些電話需要POST,這就是問題所在。爲了驗證我使用下面的:不要將OAuth傳遞給POST變量 - PHP OAuth Pecl庫

$oauth = new OAuth(MY_KEY,MY_SECRET); 
$oauth->setNonce(rand());  
$oauth->setToken('',''); 

那麼對於一個GET調用我做類似如下:

$array = array(
    'partnerId'=>'1234' 
    ); 

$call = $oauth->fetch("https://domain.co.uk/api/getInfo/",$array); 
$data = $oauth->getLastResponse(); 

這所有的作品完美,我可以打印出$數據

但是與POST要求:

$oauth = new OAuth(MY_KEY,MY_SECRET); 
$oauth->setNonce(rand());  
$oauth->setToken('',''); 
$oauth->enableDebug(); 
$oauth->setAuthType(OAUTH_AUTH_TYPE_AUTHORIZATION); 

$array = array(
    'rid' => "$restaurantId", 
    'datetime' => "$datetime", 
    'partysize' => $covers, 
    'timesecurityID' => "$securityId", 
    'resultskey' => "$resultskey" 
); 

$call = $oauth->fetch("https://domain.co.uk/api/booking/?pid=1234&st=0",$array,OAUTH_HTTP_METHOD_POST); 
$data = $oauth->getLastResponse(); 

我不斷收到錯誤:Invalid Consumer Signature

說起自己的科技人,他建議

Your sbs value indicates that you’re signing with all of the POST parameters, whereas you only need to sign with the query string. In this case it would be 「pid=1234&st=0」. Unfortunately, I’m not familiar with the PHP libs and don’t have any recommendations on how to alter the behavior.

和還提到了PHP實現共同以前的問題是:

  1. PHP的HTTP LIB將下降查詢字符串,一旦方法是 從GET更改爲POST。
  2. PHP oAuth lib將使用發佈數據 來簽署請求,而不是查詢字符串或兩者。

如果我傾倒出來的頭,我得到:

[sbs] => POST&https%3A%2F%2Fdomain.co.uk%2Fapi%2Fbooking%2F&datetime%3D2013-02-21T10%253A30%253A00%26oauth_consumer_key%3DMySiteV3TT%26oauth_nonce%3D1213111151%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1360835965%26oauth_token%3D%26oauth_version%3D1.0%26partysize%3D2%26pid%3D1531%26resultskey%3DfoqgEnYK%25252bIzRd6BV3T8eGQ%25253d%25253d%26rid%3D31852%26st%3D0%26timesecurityID%3D349367809 
[headers_sent] => POST /api/booking/?pid=1234&st=0 HTTP/1.1 

它看起來就像是與文章的其餘發送OAuth的數據,我只想這個發送的授權頭(它還派)

Authorization: OAuth oauth_consumer_key="MySite",oauth_signature_method="HMAC-SHA1",oauth_nonce="1772854358",oauth_timestamp="1360768712",oauth_version="1.0",oauth_token="",oauth_signature="2%2B7xb%2BJ5cdbUDC5UHfsdfsNpFM1pE%3D" 

所以我覺得我需要從發佈請求剝離OAuth的數據,但把它作爲一個授權頭,但就是無法找到神奇方式來做到這一點!

回答

0

我見過這個。在取(),嘗試URL編碼您的$陣列,並把它當作形式的字符串:

rid=[restaurantId]&datetime=[datetime]&... 

也給頭(讀取的最後一個參數()):

Content-Type: application/x-www-form-urlencoded