Я реализую Twilio в моем приложении Laravel 5. Чтобы использовать его в рамках, которые я использую aloha/laravel-twilio
интеграция.
Отправка действительного запроса с тест-учетные работает отлично. У меня есть проблемы, когда я хочу реализовать обработка ошибок.
По какой-то причине перехват не получает ошибку, которая приводит к сбою приложения. Ошибка, кажется, в twilio-sdk
если я правильно прочитал сообщение об ошибке.
Вот что я сделал до сих пор:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
use Aloha\Twilio\TwilioInterface;
class Activation extends Model {
protected $fillable = array( 'a', 'b', 'c');
public static function send() {
// Testaccount
// $toNumber = '+15005550006'; // valid number; works fine
$toNumber = '+15005550001'; // @todo will throw an exeption, and breaks the app
try {
\Twilio::message( $toNumber, 'Pink Elephants and Happy Rainbows');
} catch ( Services_Twilio_RestException $e ) {
elog( 'EACT', $e->getMessage( ) , __FUNCTION__ ); // this is not called when an twilio error occurs
}
}
}
Это приводит к следующей ошибке:
Whoops, looks like something went wrong.
Services_Twilio_RestException in /path/to/my/laravel/vendor/twilio/sdk/Services/Twilio.php line 297
Exception_message: The 'To' number +15005550001 is not a valid phone number.
Из документации должна быть выброшена эта ошибка (не действительный номер телефона), но у меня должна быть возможность отловить и обработать ее. В настоящее время это не работает. Я не получаю ошибку поймали …
Как я могу получить и обработать twilio-ошибки?
Класс находится в пространстве имен, поэтому я должен сослаться на исключение абсолютного класса — \Services_Twilio_RestException
— в улове.
Это работает с этим кодом:
try {
\Twilio::message( $toNumber, 'Pink Elephants and Happy Rainbows');
} catch ( \Services_Twilio_RestException $e ) {
elog( 'EACT', $e->getMessage( ) , __FUNCTION__ );
}
Сегодня (19 мая-2017) код такой:
// Step 1: set our AccountSid and AuthToken from https://twilio.com/console
$AccountSid = "XXX";
$AuthToken = "XXX";
$client = new Client($AccountSid, $AuthToken);
try {
$sms = $client->account->messages->create(
// the number we are sending to - Any phone number
$number,
array(
// Step 2: Change the 'From' number below to be a valid Twilio number
// that you've purchased
'from' => "+XXXXXXXXXXX",
// the sms body
'body' => $sms
)
);
// Display a confirmation message on the screen
echo "Sent message to $name";
} catch (TwilioException $e) {
die( $e->getCode() . ' : ' . $e->getMessage() );
}
Смотрите ниже, который действует с сегодняшнего дня. TwilioException
не действует и не является Services_Twilio_RestException
, Вы должны использовать Exception
вместо.
Мой вариант использования — мне пришлось отправить в базу данных номеров, а не из-за неправильного номера телефона сломать мой сценарий. Месяц или два назад мы проделали некоторую работу, которая включала ведение журнала при отправке сообщения и проверку cron, где мы останавливались каждые две минуты … неэффективно при отправке десятков тысяч текстовых сообщений.
require_once '../Twilio/autoload.php'; // Loads the library
use Twilio\Rest\Client;
//some test fail numbers
$arr = array(1234567890,"11855976lend1",321619819815,198198195616516);
/* ==================================================================================
//create a function to send SMS using copilot (uses an SID instead of a phone number)
================================================================================*/
function sendSMS($to){
// Download the PHP helper library from twilio.com/docs/php/install
// These vars are your accountSid and authToken from twilio.com/user/account
$account_sid = 'xxx';
$auth_token = 'xxx';
$client = new Client($account_sid, $auth_token);
//this nifty little try/catch will save us pain when we encounter bad phone numbers
try{
$client->messages->create(
$to,
array(
'messagingServiceSid' => "MGxxx",
'body' => "This is the body we're sending.")
);
//sent successfully
echo "sent to $to successfully<br>";
}catch(Exception $e){
echo $e->getCode() . ' : ' . $e->getMessage()."<br>";
}
}
foreach($arr as &$value){
sendSMS($value);
}
//remember to unset the pointer so you don't run into issues if re-using
unset($value);