首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >7数字API签名无效

7数字API签名无效
EN

Stack Overflow用户
提问于 2016-11-01 01:22:23
回答 1查看 148关注 0票数 2

你能帮帮我吗?我正在尝试为7 Digital的Premium API生成HMAC-SHA1散列,但是我无法获得正确的签名。我在https://oauth1.wp-api.org/docs/basics/Signing.html上关注了这篇文章,得到了以下代码:

代码语言:javascript
复制
 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编码,如下所示:

代码语言:javascript
复制
            $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

您的帮助将不胜感激,提前谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2016-11-01 19:51:51

因此,在大量拔出头发之后,我遇到了以下问题:

  1. sha1散列需要像这样进行The编码:

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

  • $baseString的url末尾有一个&。

  • 密钥就是您的oauth_consumer_secret,后跟一个&

这是给其他有这个问题的人的完整的!

代码语言:javascript
复制
    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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40347264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档