(Я нашел ответ. Он указан как ответ ниже, на случай, если у кого-то возникнет такая же проблема.)
Для вызова API WordPress с использованием OAuth 1.0, Postman создает код PHP cURL, который работаетв совершенстве.Итак, я знаю, пробуя их код «как есть», что генерируемый ими oauth_signature правильный.
Но, следуя каждому уроку и вопросу переполнения стека, которые я могу найти по этому вопросу, я не могу заставить свою реализацию создатьoauth_signature, совпадающее с тем, которое генерирует Postman с использованием тех же переменных.
Обычно одноразовые номера и текущее время будут уникальными значениями, но, конечно, я копирую их из данных Postman, чтобы у меня были все те же данныепри попытке создать подпись, совпадающую с подписью, которую придумывает Почтальон.
Вот мой код, и это именно те данные, которые были введены в Почтальон, даже если есть фиктивный URL и фиктивные токены.Я ищу помощи на этапе генерации подписи, а не на самом деле подключения к API (эта часть работает нормально).
Я считаю, что есть проблема с моим методом генерации подписи, потому что всеelse соответствует, и единственная информация, которую мне не нужно проверять, - это исходный код Postman, чтобы точно узнать, как Postman генерирует подпись с данными, которые вы ей предоставляете, поэтому я ищу помощи в этой реализации.
Да, я знаю, что есть библиотеки (и я посмотрел на некоторые из них, чтобы сравнить реализацию моего кода с их), но я пытаюсь сделать это без библиотеки, поскольку это действительно не должно быть так сложно.
<?php
$oauthconsumerkey = "oconsumerkey";
$oauthtoken = "otoken";
$clientsecret = "oclientsecret";
$tokensecret = "otokensecret";
$key = rawurlencode($clientsecret) . "&" . rawurlencode($tokensecret);
$method = "GET";
$baseurl = "https://test.com/wp-json/wp/v2/users/me/";
// these 2 variables were generated by Postman
$nonce = "1TT5UggZswB";
$timenow = "1548458598";
$paramstring = "oauth_consumer_key=" . $oauthconsumerkey . "&oauth_token=" . $oauthtoken . "&oauth_signature_method=HMAC-SHA1" . "&oauth_timestamp=" . $timenow . "&oauth_nonce=" . $nonce;
$encodeurl = $method . "&" . rawurlencode($baseurl) . "&" . rawurlencode($paramstring);
$signature = hash_hmac( 'sha1', $encodeurl, $key, TRUE );
$signature = base64_encode( $signature );
$curlurl = $baseurl . "?" . $paramstring . "&oauth_signature=" . $signature;
print $signature;
?>
Из этих переменных почтальон дает подпись: 4TJtCPkjrkBnIthdUujQ4j / RHtY =
Но приведенный выше код дает подпись: plKJeIp4tWC4J2RebyNuelr7vgg =1023 * (Я также понимаю, что в моей строке есть «&» для генерации подписи, но «?» В моем URL-адресе cURL. «?» В URL-адресе cURL - то, как это имеет Postman, и это требуется для сайта, чтобыузнайте маршрут. И чтобы быть уверенным, я попытался сгенерировать подпись в обоих направлениях, используя «&» или «?», потому что я видел, как разные люди говорили разные вещи о том, что требуется в спецификации для генерации подписи.)