[英]PHP, Dropbox API, OAuth signature and Non-latin symbols
我有與Dropbox API集成的PHP應用程序。 它工作得很好,但是從前一段時間起,它停止使用非拉丁符號。 例如,如果我嘗試使用API創建一個保管箱文件夾,並在文件夾名稱中使用西里爾字母,則API請求將失敗,並顯示錯誤{“ error”:“ Unauthorized”}
我有PHP函數
function createOAuthSignature($apiurl, $params, $oauth_secret, $oauth_token_secret, $method='GET'){
$urlencoded_apiurl = urlencode($apiurl);
$urlencoded_params = urlencode($params);
$basestring = $method .'&'.$urlencoded_apiurl.'&'.$urlencoded_params;
$oauth_signature = base64_encode(hash_hmac('sha1', $basestring, $oauth_secret.'&'.$oauth_token_secret, true));
$oauth_signature = urlencode($oauth_signature);
return $oauth_signature;
}
調用代碼是
$fullname = $parent . $foldername;
$fullnameEnc = rawurlencode($fullname);
$apiurl = $this->api_url .'fileops/create_folder/';
$params = 'oauth_consumer_key='.$this->oauth_consumer_key
.'&oauth_nonce='. $this->createNonce()
.'&oauth_signature_method=HMAC-SHA1'
.'&oauth_timestamp='. time()
.'&oauth_token='.$oauth_token
.'&oauth_version=1.0'
.'&path='. $fullnameEnc
.'&root=dropbox';
$oauth_signature = $this->createOAuthSignature($apiurl, $params, $this->oauth_secret, $oauth_token_secret);
$params .= '&oauth_signature='.$oauth_signature;
$action = $apiurl .'?'. $params;
$s = $this->curl->get($action);
那里可能是什么問題? 我認為這與簽名生成有關。 但是那里有什么問題呢? 幾周前,這段代碼運行良好。
謝謝
正如Greg在上面的評論中提到的那樣,我們正在調查中,但是如果您想切換到PLAINTEXT簽名,這非常容易。 更改createOAuthSignature
即可:
function createOAuthSignature($apiurl, $params, $oauth_secret, $oauth_token_secret, $method='GET'){
return urlencode($oauth_secret.'&'.$oauth_token_secret);
}
然后在調用代碼中,將簽名方法更改為PLAINTEXT
:
$params = ...
.'&oauth_signature_method=PLAINTEXT'
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.