PHP,Dropbox API,OAuth签名和非拉丁符号

时间:2015-09-17 13:04:50

标签: php oauth dropbox-api

我将PHP应用程序与Dropbox API集成在一起。它运作良好,但从一段时间以来它停止使用非拉丁符号。 例如,如果我尝试使用API​​创建一个Dropbox文件夹并在文件夹名称中使用西里尔字母,那么API请求将失败并显示错误 {&#34;错误&#34;:&#34;未经授权&#34;} < / strong>

我有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);

那里有什么问题?我认为它与签名生成有关。但那里有什么问题?几周前,这段代码运作良好。

由于

1 个答案:

答案 0 :(得分:0)

正如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'
    ...