在我的数据库中,我有一个在Twilio中不存在的呼叫SID。这是另一个问题,但这是事实。
以下代码:
$call = $client->account->calls->get(
'YYYYYYYYYYYY7'
);
var_dump($call->price);
抛出:
Services_Twilio_RestException
The requested resource /2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXX/Calls/YYYYYYYYYYYY7.json was not found
但是以下代码:
$call = $client->account->calls->get(
'YYYYYYYYYYYY7'
);
var_dump($call->sid);
工作正常:
string(34) "CAYYYYYYYYYYYYYYYYYY7"
如果我接受有效的呼叫SID,并执行此操作:
$call = $client->account->calls->get(
'CASSSSSSSSSSSSSSSSSSSSSSS'
);
var_dump(isset($call->price));
echo '<br />';
var_dump(!empty($call->duration));
echo '<br />';
var_dump($call->price);
echo '<br />';
var_dump($call->duration);
我会得到这个:
bool(false)
bool(false)
string(8) "-0.01400"
string(2) "32"
问题
编写了Twilio SDK,实际上在代码失败之前无法检查调用项是否具有某些属性。
当某些调用(或其他任何内容)可能不存在时,正确的代码应准备好处理这种情况。
所以我有一个问题:如何使用Twilio PHP SDK 验证呼叫SID ?
https://www.twilio.com/docs/php/install
P.S。
当然我做了
function validateCallSID($callsid) {
$ch = curl_init("https://api.twilio.com/2010-04-01/Accounts/" . TWILIO_SID . "/Calls/" . $callsid . ".json");
curl_setopt($ch, CURLOPT_USERNAME, TWILIO_SID);
curl_setopt($ch, CURLOPT_PASSWORD, TWILIO_ST);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
if (!empty($json)) {
$decoded = json_decode($json, true);
if (!empty($decoded['sid'])) {
return true;
}
}
return false;
}
但我确信由Twilio这样的大公司开发的Twilio SDK当然应该采用内置方式来实现,但我根本没有注意到它。
答案 0 :(得分:2)
Twilio开发者传道者在这里。
Twilio库都是基于从数组返回的属性而构建的,并且是惰性的,因此在您需要之前不要进行API调用。这解释了为什么isset($call->price)
property会返回false
,但之后会有一个值。
我对没有价格的电话SID很感兴趣,你介意把它发送到philnash@twilio.com所以我可以看看那里发生了什么。我可以看看修复API中的错误消息,因为它不是你所展示的404。