我将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);
那里有什么问题?我认为它与签名生成有关。但那里有什么问题?几周前,这段代码运作良好。
由于
答案 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'
...