7 Неверная подпись цифрового API

Не могли бы вы мне помочь пожалуйста. Я пытаюсь сгенерировать хэш HMAC-SHA1 для Premium API 7 Digital, но не могу получить правильную подпись. Я следил за этим постом https://oauth1.wp-api.org/docs/basics/Signing.html и получили следующий код:

 public function __construct(){
$this->timestamp = time();
$this->_nonce = rand();
$this->consumerKey = 'KEY';
$this->consumerSecret = 'SECRET';
$this->signitureMethod = 'HMAC-SHA1';}

public function buildSignature()
{
$method = 'GET&';
$url = 'https://api.7digital.com/1.2/oauth/requesttoken';
$params = 'oauth_consumer_key='.$this->consumerKey.'&oauth_nonce='.$this->_nonce.'&oauth_signature_method=HMAC-SHA1&oauth_timestamp='.$this->timestamp.'&oauth_version=1.0';
$baseString = $method.urlencode($url).'&'.urlencode($params);
$key = $this->consumerKey . '&' . $this->consumerSecret;

$signature = hash_hmac( 'sha1', $baseString,  $key );
$string = 'https://api.7digital.com/1.2/oauth/requesttoken?oauth_consumer_key='.$this->consumerKey.'&oauth_nonce='.$this->_nonce.'&oauth_signature_method=HMAC-SHA1&oauth_timestamp='.$this->timestamp.'&oauth_version=1.0&oauth_signature='.$signature;
echo $string;

}

Обратите внимание, что я также пытался закодировать подпись с помощью base64_encode, но он не работал, а также пытался кодировать ключ следующим образом:

            $key = urlencode($this->consumerKey) . '&' . urlencode($this->consumerSecret);

Я также использовал там страницу ссылки.

Вышеуказанные выводы:

https://api.7digital.com/1.2/oauth/requesttoken?oauth_consumer_key=KEY&oauth_nonce = 495776478&oauth_signature_method = HMAC-SHA1&oauth_timestamp = 1477934267&oauth_version = 1,0&oauth_signature = fe3a5c61618d2a144b608570ce2be36f4c3b3e55

Ваша помощь будет высоко ценится, спасибо заранее!

2

Решение

Итак, после много выдергивания волос у меня возникают следующие проблемы:

  1. Хэш sha1 необходимо кодировать следующим образом:

    urlencode (base64_encode (hash_hmac (‘sha1’, $ baseString, $ key, true)));

  2. $ BaseString имеет & в конце URL.
  3. Ключ — это просто ваш oauth_consumer_secret, за которым следует &

Вот это в полной мере для тех, кто с этой проблемой!

    public function buildUrl() {
$params = [
'method' => $this->method,
'url' => urlencode($this->url),
'additionalParams' =>  urlencode($this->additionalParams . '&'),
'params' => urlencode($this->params),
];
if ($this->additionalParams) {
$baseString = $params['method'] . '&' . $params['url'] . '&' . $params['additionalParams'] . $params['params'];
}
else{
$baseString = $params['method'] . '&' . $params['url'] . '&' .  $params['params'];
}
$this->_signiture =  $this->getSigniture($baseString, $this->key);

if ($params['additionalParams']) {
$url = urldecode($params['url']) . '?' . urldecode($params['additionalParams']) . urldecode($params['params']) . '&oauth_signature='.$this->_signiture;
}
else {
$url = urldecode($params['url']) . '?' . urldecode($params['params']) . '&'. urldecode($params['additionalParams']) . '&oauth_signature='.$this->_signiture;
}
echo $url;
}
function getSigniture($baseString, $key){
return   urlencode(base64_encode(hash_hmac( 'sha1' , $baseString,  $key , true)));
}
2

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector