2016-10-31 3 views
2

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

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 не работает, а также попытались UrlEncode ключ как так:

  $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, необходимый для быть urlencoded как так:

    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))); 
    } 
Смежные вопросы