【问题标题】:Can't get OAuth signature for Twitter with PHP base64_encode无法使用 PHP base64_encode 获取 Twitter 的 OAuth 签名
【发布时间】:2013-03-25 10:47:36
【问题描述】:

我正在通过 Twitter 的 Creating a Signature Doc 工作。

按照文档中的建议,我已获取示例签名基本字符串和示例签名密钥,并将其传递给 hash_hmac 函数:

$sig_base_str = 'POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521';
$sig_key = 'kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE';
$sha = hash_hmac('sha1', $sig_base_str, $sig_key);
$sha = strtoupper($sha);
$output = str_split($sha,2);
$output = implode(' ',$output);
echo $output;

这给了我与示例中完全相同的二进制文件:B6 79 C0 AF 18 F4 E9 C5 87 AB 8E 20 0A CD 4E 48 A9 3F 8C B6

现在,文档说将其转换为 base64。我相信我可以使用PHP的base64_encode()函数:

$sha = hash_hmac('sha1', $sig_base_str, $sig_key);
echo base64_encode($sha);

但这为我的 OAuth_signature 提供了不正确的值:

YjY3OWMwYWYxOGY0ZTljNTg3YWI4ZTIwMGFjZDRlNDhhOTNmOGNiNg==

查看http://ideone.com/Bu0CZi 以查看正在运行的功能。

我做错了什么?请注意,我还尝试转换为大写并在 base64_encode() 函数之前包含空格。我在使用 Twitter API 时遇到了麻烦,我认为这是因为我无法正确获取签名,即使在文档中的示例中也是如此。

【问题讨论】:

    标签: php hash oauth twitter base64


    【解决方案1】:

    我得到了十六进制字符的正确散列值,但我需要原始二进制数据:

    $sha = hash_hmac('sha1', $sig_base_str, $sig_key, true);
    echo base64_encode($sha);
    

    输出:tnnArxj06cWHq44gCs1OSKk/jLY= 与 Twitter 文档中的内容完全相同。

    通过查找 twitteroauth 库得到我的答案:https://github.com/abraham/twitteroauth/blob/master/twitteroauth/OAuth.php#L116

    【讨论】:

      猜你喜欢
      • 2014-04-07
      • 2011-07-24
      • 2011-11-12
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      • 2011-03-27
      相关资源
      最近更新 更多