Я использую 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-ошибки, полученные и обработанные?
Класс находится в пространстве имен, поэтому мне нужно ссылаться на исключение класса absolut – \Services_Twilio_RestException
– в catch.
Он работает с этим кодом:
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
недействителен и не является TwilioException
. Вместо этого вы должны использовать 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);