2016-10-31 3 views
2

제발 도와주세요. 나는 7 디지털 프리미엄 API에 대한 HMAC - SHA1 해시를 생성하려고하지만 올바른 서명을 얻을 수 없습니다. 이 게시물 https://oauth1.wp-api.org/docs/basics/Signing.html을 수행 한 다음 코드를 가지고 :7 디지털 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))); 
    }