我按照这些步骤“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
));
任何人都可以提供帮助吗?
答案 0 :(得分:2)
OAuth签名不仅仅是消费者的秘密。雅虎有一些documentation on how sign the request,这就是oauth_signature字段中的内容。
答案 1 :(得分:1)
似乎创建的签名是错误的。要创建签名,请先创建基本字符串,该字符串是通过规范化您的网址创建的。
有关基本字符串的详细信息,请访问http://developer.yahoo.com/oauth/guide/oauth-signing.html。 http://oauth.net/core/1.0/#anchor16
创建基本字符串后,创建一个签名密钥,该密钥是通过将COSUMER SECRET和令牌密钥与&amp;。连接而开发的。
$ signatureKey = CONSUMER_SECRET。“&amp;”。{yourtokensecret};
然后对于创建签名,请尝试以下代码: $ signature = urlencode(base64_encode(hash_hmac('sha1',{baseString},$ signatureKey,true)));
答案 2 :(得分:0)
There is an excellent signing function available here.