Неправильная подпись PHP Oauth с несколькими параметрами запроса

PHP OAuth генерирует неверную подпись при отправке запросов на URL с несколькими параметрами запроса:

$uri = 'https://example.com/api/v1/person/search?sort=0&keyword=Tyler&keyword=Marissa'

$oauth = new \OAuth($consumerKey, $secret, \OAUTH_SIG_METHOD_HMACSHA1, \OAUTH_AUTH_TYPE_AUTHORIZATION);
$oauth->setVersion('1.0');

echo \oauth_get_sbs('GET', $uri);
// GET&https%3A%2F%2Fexample.com%2Fapi%2Fv1%2Fperson%2Fsearch&keyword%3DMarissa%26sort%3D0

$client = new Client([
RequestOptions::HEADERS => ['Accept' => 'application/json']
]);

return $client->get($uri, [
RequestOptions::HEADERS => ['Authorization' => $oauth->getRequestHeader('GET', $uri)]
]);

Как вы можете видеть на выходе oauth_get_sbs функция, сгенерированная сигнатура базовой строки полностью отсутствует первая keyword значение параметра.

Глядя на исходный код библиотеки Oauth PECL, похоже, что генерация подписи должна соответствовать спецификации (см. *oauth_generate_sig_base). Я немного потерян после oauth_parse_str а также oauth_http_build_query.

Я знаю что parse_str сохраняет только последнее значение, если нет квадратных скобок. Вызываемая служба ожидает keyword и не keyword[] поэтому я не могу просто изменить имя, чтобы включить квадратные скобки.

Я делаю что-то не так или это ограничение PHP библиотеки Oauth? Если да, есть ли какие-либо альтернативы, которые я могу использовать для межсерверных API-вызовов с использованием OAuth 1.0a? Большинство библиотек, которые я видел, ориентированы на Twitter / Tumblr и включают весь трехсторонний поток OAuth 1.0a с URL-адресами обратного вызова и токенами.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]