【问题标题】:PHP :How to fix hash_hmac() expects parameter 2 to be stringPHP:如何修复 hash_hmac() 期望参数 2 是字符串
【发布时间】:2025-12-26 22:20:08
【问题描述】:

我正在尝试使用 Twitter 和 TwitPic API 将图片发布到 TwitPic。但我收到以下错误。

hash_hmac() 期望参数 2 是字符串,对象在 twitpic.php 第 36 行给出

我认为错误就在这里

$content = $connection->get('account/verify_credentials');

这里再次使用$content时

$signature = urlencode(base64_encode(hash_hmac('sha1', $content, $key, true)));

我该如何解决这个问题?谢谢。

【问题讨论】:

  • 在尝试 hash_hmac 之前先尝试一个 var_dump($content),它可能是一个非字符串变量,比如 null
  • $content 从 Twitter 获取用户信息,Twitter 将信息作为 JSON 结果发送
  • No var_dump($content) 不起作用,仍然得到 hash_hmac() 期望参数 2 是字符串,给定对象
  • 它告诉你问题,给定的对象,那么 $content 是什么类型的对象,你可以通过调用它的函数来将它转换为字符串
  • Rukshan 阅读人们发布的内容并对其进行思考,不要盲目尝试。你需要一个字符串。 var_dump($content) 表示 $content 是一个对象。有你的问题。解决方案?将您的$content 对象转换为字符串或从$content 获取您需要使用hash_hmac 发送的字符串部分。

标签: php oauth twitter-oauth


【解决方案1】:

这是因为 hash_hmac() 确实需要两个参数。第一个参数是散列算法,第二个是要散列的字符串。 Check the signature and get some examples here. 正如 Rukshan 所指出的,类型必须是指定的。

【讨论】: