【问题标题】:Get contacts using Yahoo Contacts API使用 Yahoo Contacts API 获取联系人
【发布时间】:2012-08-24 03:17:52
【问题描述】:

我按照这些步骤“http://developer.yahoo.com/oauth/guide/oauth-auth-flow.html”从经过身份验证的用户那里获得了 oauth 令牌和 GUID。 现在我正在尝试通过 GUID 检索所有联系人,正如我在使用此网址“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
    ));

有人可以帮忙吗?

【问题讨论】:

    标签: php oauth yahoo-api


    【解决方案1】:

    OAuth 签名不仅仅是消费者的秘密。雅虎有一些documentation on how sign the request,这就是 oauth_signature 字段中的内容。

    【讨论】:

    • 我已经通过多种方式(使用'&',没有,之前,之后..)将消费者秘密与令牌秘密连接起来,并且响应是相同的,做一个测试,你会看到。跨度>
    • 您需要使用 HMAC_SHA1(如您的 signature_method 中所列)对请求进行签名,密钥为 CONSUMER_SECRET&TOKEN_SECRET。请参阅我上面链接中标题为“使用 HMAC-SHA1 签名请求”的部分,了解他们希望您如何进行签名。
    • 我明白,但我不知道如何生成这个“基本字符串”,我必须使用 PHP 的 bese64_encode 吗?有哪些价值观?你能指导我如何生成 oauth 签名吗?
    • 如果您想了解 OAuth 签名,here is one of the best articles(注意:它不适用于 Twitter,但它很好地解释了它)我在描述它时看到过。如果您想查看一个工作示例,这里是一个 previous question,其中包含一些您可以使用的示例代码。
    • 我已阅读 developer.yahoo.com/oauth/guide/oauth-signing.html,现在我正在创建我认为有效的签名,请参阅我的代码:pastebin.com/ZagMBrbM 但是,我仍然收到错误:请提供有效的凭据。 OAuth oauth_problem="signature_invalid", realm="yahooapis.com" 哪里出错了?
    【解决方案2】:

    似乎创建的签名是错误的。对于创建签名,首先创建通过规范化您的 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)));

    【讨论】:

    【解决方案3】:

    here 有一个出色的签名功能。

    【讨论】:

      猜你喜欢
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 2014-08-15
      • 1970-01-01
      相关资源
      最近更新 更多