几乎尝试完全按照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->消息调用,所以我知道那里有一个对象,并且只能假设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或示例代码有问题?任何和所有的帮助表示赞赏。
答案 0 :(得分:0)
PHP错误仍然是一个谜,因为$ client-> account->消息中有一个对象。
也就是说,我可以通过直接使用CURL请求而不是使用他们的帮助库来与我的Twilio帐户中的媒体进行交互,这似乎是get函数被破坏的地方(无法确认这一点和没有人在这里或在Twilio有任何帮助清除它 - 没有时间挖掘他们的图书馆试图诊断它)。
本文指出了如何进行CURL交互: How do I make a request using HTTP basic authentication with PHP curl?
如上所述,您可以使用Twilio帮助库函数$ client-> account->消息来获取您帐户中的所有消息。也就是说,据我所知,他们的几篇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,$ 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);
}
可能不是最优雅的解决方案,但它确实有效。