3

我按照这些步骤“http://developer.yahoo.com/oauth/guide/oauth-auth-flow.html”并从经过身份验证的用户那里获得了 oauth 令牌和 GUID。现在我正在尝试通过 GUID 检索所有联系人,正如我在使用此 url“http://social.yahooapis.com/v1/user/GUID_HERE/contacts”搜索网络时看到的并通过标题传递授权数据但我只是得到这个回复:

<?xml version='1.0' encoding='UTF-8'?><yahoo:errorxmlns:yahoo='http://yahooapis.com/v1/base.rng' xml:lang='en-US'><yahoo:description>Please provide valid credentials. OAuth oauth_problem="signature_invalid", realm="yahooapis.com"</yahoo:description></yahoo:error><!-- ws129.socdir.sp2.yahoo.com uncompressed/chunked Tue Aug 28 06:22:40 PDT 2012 -->

我正在使用 cURL (PHP) 执行请求,就像这里写的“http://developer.yahoo.com/oauth/guide/oauth-make-request.html”(我已经检查过并且我使用我的消费者秘密作为 ouath_signature ):

$header = array(
'GET http://social.yahooapis.com/v1/user/' . $guid[1] . '/contacts',
'Authorization: OAuth realm="yahooapis.com", '.
                                     'oauth_consumer_key="'.$yahoo_consumer_key.'", '.
                                     'oauth_nonce="'.uniqid().'", '.
                                     'oauth_signature_method="HMAC-SHA1", '.
                                     'oauth_timestamp="'.time().'", '.
                                     'oauth_token="'.$ouathToken[1].'", '.
                                     'oauth_version="1.0", '.
                                     'oauth_signature="'.$yahoo_consumer_secret.'"');
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => true,
              CURLOPT_FOLLOWLOCATION => TRUE,
              CURLOPT_SSL_VERIFYPEER => false,
              CURLOPT_SSL_VERIFYHOST => 0,
              //CURLOPT_HTTPGET => true,
              CURLOPT_URL => 'http://social.yahooapis.com/v1/user/' . $guid[1] . '/contacts',
              CURLOPT_HTTPHEADER => $header
    ));

任何人都可以帮忙吗?

4

3 回答 3

2

OAuth 签名不仅仅是消费者的秘密。雅虎有一些关于如何签署请求的文档,这就是 oauth_signature 字段中的内容。

于 2012-08-29T13:48:42.240 回答
1

似乎创建的签名是错误的。对于创建签名,首先创建通过规范化您的 url 创建的基本字符串。

有关基本字符串的更多详细信息,请访问 http://developer.yahoo.com/oauth/guide/oauth-signing.htmlhttp://oauth.net/core/1.0/#anchor16

创建一个基本字符串后,创建一个签名密钥,该密钥是通过将 COSUMER SECRET 和令牌秘密与 & 连接起来而开发的。像这样,

$signatureKey = CONSUMER_SECRET."&".{yourtokensecret};

然后创建签名试试这个代码: $signature = urlencode(base64_encode(hash_hmac('sha1',{baseString}, $signatureKey, true)));

于 2012-08-30T09:20:24.720 回答
0

这里有一个出色的签名功能。

于 2015-07-28T16:04:42.813 回答