【问题标题】:Twilio Media - Call to a member function get() on a non-object - Twilio helper library broken?Twilio Media - 在非对象上调用成员函数 get() - Twilio 帮助程序库损坏了吗?
【发布时间】:2015-08-01 02:02:28
【问题描述】:

几乎尝试完全按照 Twilio REST API 网站上的示例中定义的方式进行操作。

https://www.twilio.com/docs/api/rest/media

在示例中,以下代码删除帐户库中的媒体。

$client->account->messages->get("MM800f449d0399ed014aae2bcc0cc2f2ec")->media->delete("ME557ce644e5ab84fa21cc21112e22c485");

并且此代码应该返回与特定消息关联的媒体资产列表:

foreach ($client->account->messages->get('MM800f449d0399ed014aae2bcc0cc2f2ec')->media as $media) {
     echo $media->content_type;
 }

问题是这两个例子都返回了错误:

在非对象上调用成员函数 get()

我不是 PHP 专家,我已尽我所能尝试调试它。我在脚本的其他地方成功地使用了对 $client->account->messages 的完全相同的调用,所以我知道那里有一个对象,并且只能假设 get() 方法以某种方式被破坏了。

我已阅读以下内容,但似乎没有回答我的问题:
Reference - What does this error mean in PHP?
PHP Error: "Call to member function create() on a non-object" Twilio code
calling to a member function create() on a non-object

有 Twilio 经验的人熟悉这里的问题吗?有什么方法可以至少确认这是我的 PHP 错误还是 Twilio Media API 或示例代码有问题?感谢您提供任何和所有帮助。

【问题讨论】:

  • 不,get 方法没有损坏。 PHP 告诉你,在脚本中的那个时候,$client->account->messages 不是一个对象。您是否尝试将其转储到屏幕上以查看它是什么?追溯使用它的最后一行是否有效?
  • $client->account->messages 返回一个对象,其中包含指定 Twilio 帐户的我的消息列表,正如他们的文档所预期的那样。似乎缺少 gt 函数。
  • 阅读错误信息。这是一个基本的 PHP 错误。

标签: php twilio


【解决方案1】:

PHP 错误仍然是个谜,因为在 $client->account->messages 中有一个对象。

也就是说,我能够通过直接使用 CURL 请求而不是使用他们的帮助程序库与我的 Twilio 帐户中的媒体进行交互,这似乎是 get 函数被破坏的地方(无法确认这一点,这里没有人或者在 Twilio 得到了任何帮助来解决这个问题——没有时间去挖掘他们的库来尝试诊断它)。

这篇文章指出了如何进行 CURL 交互: How do I make a request using HTTP basic authentication with PHP curl?

如上所述,您可以使用 Twilio 帮助程序库函数 $client->account->messages 从您的帐户中获取所有消息。也就是说,据我所知,他们的几篇 How To 文章中描述的 get 函数不起作用,因此您无法在不知道 URL 的情况下提取单个消息。

$messages = $client->account->messages;
foreach($messages as $message) {
     #code here to get and use the data from your message list
}

这使我可以获取在消息中发送给我的媒体资产的 URL,但它仍然不允许我从帐户中删除媒体以节省存储空间。为此,我必须执行以下操作($url 是我要删除的媒体资产的 url,$sid 和 $token 是我的 Twilio 帐户 SID 和 Auth Token):

function deleteMedia($url,$sid,$token) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERPWD, $sid.":".$token);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
}

可能不是最优雅的解决方案,但它确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多