У меня были те же проблемы, пока я не понял, что параметры должны быть дважды закодированы для базовой строки. Все мои запросы GET работали нормально, но мои POST, особенно обновления статуса, не выполнялись. По догадке я попробовал POST без пробелов в параметре status
, и это сработало.
В PHP:
function encode($input) {
return str_replace('+', ' ', str_replace('%7E', '~', rawurlencode($input)));
}
$query = array();
foreach($parameters as $name => $value) {
$query[] = encode($name) . '=' .encode($value);
}
$base = encode(strtoupper($method)) . '&' .encode($norm_url) . '&' .
encode(implode('&', $query));
Обратите внимание на функцию encode
вокруг имен и значений параметров, а затем вокруг всей строки запроса. Пробел должен заканчиваться как %2520
, а не просто %20
.