2016-10-31 13 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

、髪を抜くの多くの後、私は次のような問題がありますので、同じようにURLエンコードする必要が

  1. sha1ハッシュ:

    でurlencode(BASE64_ENCODE(hash_hmac( 'SHA1'、$をベースストリング、$キー、真))));

  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))); 
    }