我正在使用Laravel 5.1,并且想发送SMS消息,所以我安装了Aloha库: https://github.com/aloha/laravel-twilio
我使用以下命令编辑了.env文件:
TWILIO_SID=AC7556934234234234234uuuuuuuuuu3
TWILIO_TOKEN=ca8xxxxxb9b60e66666666666666d355cfe315
TWILIO_FROM=+555555555555
现在,我尝试发送一条包含以下代码的短信:
...
use Twilio;
use Illuminate\Database\Eloquent\Model;
use Aloha\Twilio\TwilioInterface;
use Services_Twilio_RestException;
class AdminController extends Controller {
public function send() {
try {
Twilio::message('+77777777777', 'test test test');
} catch (\Services_Twilio_RestException $e) {
dd($e);
}
当我运行功能send()
时,什么都没发生(黑屏)-catch {}没有错误,但是我也没有收到短信。当我查看Twilio SMS日志时,也什么也没有。
如何获取错误消息? 为什么此代码不发送消息?
答案 0 :(得分:1)
转到Twilio Web控制台,然后尝试发送消息。如果未成功发送消息,通常会给出消息或错误代码。
由于特定国家/地区的电信政策不接受来自未经请求的用户/帐户的消息,我遇到了Twilio无法发送消息的问题。
答案 1 :(得分:1)
这里有Avid Twilio用户。我建议在aloha / twilio上使用Twilio的本机PHP SDK。默认情况下,我认为aloha / twilio依赖于它,它会拉入twilio / sdk,但是我会删除aloha / twilio并仅使用twilio / sdk。
composer require twilio/sdk
然后,我建议在“ Services / Twilio.php”内部创建一个Twilio类,您可以在其中注入Twilio的客户端,创建一个新实例,并使用您的twilio配置数据实例化它。在此Service类中,您现在可以将所有Twilio方法(例如sendSMS(),sendMMS(),validatePhoneNumber()等)放入,并通过将新的Twilio服务类注入到控制器的构造函数中来访问它们。
它可能看起来像这样:
请注意,我的sendSMS()实现使用MessagingServiceSid而不是发件人号码。如果您未在平台中使用Twilio CoPilot消息服务,则可以用'from'替换'messagingServiceSid'。
服务/Twilio.php
namespace App\Services;
use Twilio\Rest\Client;
class Twilio
{
/**
* @var Client
*/
protected $twilio;
public function __construct() {
try {
$this->twilio = new Client(config('twilio.SID'), config('twilio.TOKEN'));
}
catch (\Exception $e) {
//do something with the exception, client could not be instantiated.
}
}
//My sendSMS allows for the passing of an array in the $to argument, letting you send to
//multiple numbers (or just one)
public function sendSMS($to, $message)
{
if (is_array($to)) {
foreach($to as $value) {
$this->twilio->messages->create($value, ['messagingServiceSid' => config('twilio.MESSAGING_SERVICE_SID'), 'body' => $message]);
}
return true;
}
$this->twilio->messages->create($to, ['messagingServiceSid' => config('twilio.MESSAGING_SERVICE_SID'), 'body' => $message]);
}
}
AdminController.php
use App\Services\Twilio;
class AdminController extends Controller {
protected $twilio;
public function __construct(Twilio $twilio)
{
$this->twilio = $twilio;
}
public function index()
{
$this->twilio->sendSMS('5551234567', 'Test message');
return 'Message was sent.';
}
}
如果以这种方式实现Twilio,您将能够在控制器内使用任何Twilio逻辑,而不必重复创建新的Twilio客户端或传递任何配置数据。
我希望这会有所帮助。