簡體   English   中英

PHP,Dropbox API,OAuth簽名和非拉丁符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM