allanvb / laravel-semysms
Laravel 的 SemySMS 集成
Requires
- php: >=7.1
- ext-json: *
- guzzlehttp/guzzle: ^6.3|^7.0
README
Laravel SMS 邮件服务 SemySMS 的包
将 SemySMS API 集成到您的 Laravel 5 应用中的包。
安装
composer require allanvb/laravel-semysms
Laravel 5.5+
如果您正在使用 Laravel 5.5 或更高版本,该包将自动注册提供者和外观。
Laravel 5.4 及以下
将 Allanvb\LaravelSemysms\SemySmsServiceProvider 添加到您的 config/app.php 文件中的 providers 数组中
'providers' => [ // Other service providers... Allanvb\LaravelSemysms\SemySmsServiceProvider::class, ],
在您的 config/app.php 中添加一个别名
'aliases' => [ ... 'SemySMS' => Allanvb\LaravelSemysms\Facades\SemySMS::class, ],
或者您可以在需要时使用外观类
use Allanvb\Semysms\Facades\SemySMS;
概述
查看以下主题之一以了解有关 SemySMS 包的更多信息。
配置
您可以使用 php artisan vendor:publish 命令将配置文件复制到您的应用的配置目录
$ php artisan vendor:publish --provider="Allanvb\LaravelSemysms\SemySmsServiceProvider" --tag="config"
然后更新 config/semy-sms.php 以包含您的凭据。您还可以更新您的 .env 文件
SEMYSMS_TOKEN=your_access_token SEMYSMS_DEVICE_ID=default_device_id
所有方法都使用 Validator 验证传递的数据。
默认情况下,方法将尝试使用您在 SEMYSMS_DEVICE_ID 变量中指定的设备。
使用
要使用 SemySMS 库,您可以访问外观,或从服务容器中请求实例
SemySMS::sendOne([ 'to' => '+1234567890', 'text' => 'My first message.' ]);
或者
app('semy-sms')->sendOne([ 'to' => '+1234567890', 'text' => 'My first message.' ]);
- 所有号码都必须使用国际格式。
所有方法和事件都将返回一个 Collection,因此您可以使用所有可用方法来操作响应。例如:SemySMS::getInbox()->sortByDesc('date');
示例
发送简单消息
SemySMS::sendOne([ 'to' => '+1234567890', 'text' => 'Test message' ]);
可用参数
to- (string) 国际格式电话号码 (必需)。text- (string) 短信文本,最多 255 个符号 (必需)。device_id- (string) 设备 ID 或 active。
device_id 参数也可以接受 active 值,这意味着服务将新短信分配给所有您的活动设备。
发送多条消息
SemySMS::sendMultiple([ 'to' => ['+1234567890','+1567890234','+1902345678'], 'text' => 'Test message' ]);
可用参数
to- (array) 国际格式电话号码列表 (必需)。text- (string) 短信文本,最多 255 个符号 (必需)。
如果您想对发送多条消息有更多控制,可以使用链式方法。
$messages = SemySMS::multiple(); $messages->addRecipient([ 'to' => '+1234567890', 'text' => 'Test message', ]); $messages->addRecipient([ 'to' => '+1567890234', 'text' => 'Test message 2', ]); $messages->send();
可用参数
to- (string) 国际格式电话号码 (必需)。text- (string) 短信文本,最多 255 个符号 (必需)。device_id- (int) 设备 ID。my_id- (string) 您的会计系统中的短信代码
发送 USSD 请求
- 此功能仅适用于 Android 8.0+
SemySMS::ussd([ 'to' => '*123#' ]);
您可以使用 'device_id' 参数从特定设备执行 USSD 请求。
已发送短信列表
SemySMS::getOutbox();
可选,您可以使用 Interval 助手指定要获取的时间间隔,如下所示。
SemySMS::getOutbox([ 'interval' => Interval::days(3) ]);
已接收短信列表
SemySMS::getInbox();
删除已发送短信
SemySMS::deleteOutbox();
删除已接收短信
SemySMS::deleteInbox();
deleteOutbox() 和 deleteInbox() 方法将返回已删除的消息。
可选,您可以使用过滤器使用 getOutbox()、getInbox()、deleteOutbox() 和 deleteInbox() 方法。
可用参数
interval- (Interval) 时间间隔。device_id- (int) 设备 ID。start_id- (int) 列表过滤器的起始 ID。end_id- (int) 列表过滤器的结束 ID。list_id- (array) 短信代码列表。phone- (string) 电话号码。
设备列表
SemySMS::getDevices();
默认情况下,此方法将返回连接到账户的所有设备的列表。
可用参数
status- (字符串) 活跃|存档。list_id- (数组) 设备列表。
取消发送短信
SemySMS::cancelSMS();
此方法将取消所有未发送到默认设备的信息。
您可以通过传递 device_id 来请求取消特定设备的所有短信,或者通过传递数组中的 sms_id 来取消特定信息。
事件
该包内置了事件。您可以选择以下三个事件进行监听。
通知频道
此包还提供了 SemySMS 的通知通道。
要使用通知通道,您必须在通知类的 via 方法中使用 SemySmsChannel::class。之后,您将能够使用 toSemySms() 方法发送消息。
请参见以下示例。
use Illuminate\Notifications\Notification; use Allanvb\LaravelSemysms\Channels\SemySmsChannel; use Allanvb\LaravelSemysms\Channels\SemySmsMessage; class MyNotification extends Notification { public function via($notifiable) { return [SemySmsChannel::class]; } public function toSemySms($notifiable) { return (new SemySmsMessage) ->text('My first notification message.'); } }
您可以通过两种方式添加收件人。
- 第一种是通过在您的通知模型中使用以下
routeNotificationForSemySMS()。
// User model public function routeNotificationForSemySMS() { return $this->phone; }
- 第二种方式是在您的通知内部使用
to()方法。
public function toSemySms($notifiable) { return (new SemySmsMessage) ->to('+1234567890') ->text('My second notification message.'); }
如果您两者都使用,则 to() 方法将被用作主要方法。
异常
该包可能会抛出以下异常
额外
接收设备消息
如果您想从您的设备获取传入的消息,您可以使用
https://yourdomain.com/semy-sms/receive 路径在您的 SemySMS 控制面板中。
要使此路由正常工作,您需要进行一些操作
- 将配置文件中的
catch_incoming更改为true。 - 将
semy-sms/receive路径添加到VerifyCsrfToken中间件的$except变量中。
之后,您将能够监听 semy-sms.received 事件。
如果您执行了 USSD 请求,您可以监听 semy-sms.ussd-response 事件来处理 USSD 响应。
如果您的 USSD 响应以短信的形式接收,您可以将发送者名称添加到配置文件中的 ussd_senders。
有关事件的信息,请参阅 Laravel 官方文档
间隔
间隔类提供了以下方法: hours()、days()、weeks()、months() 和 years()。
如果您想对 Interval 有更多控制,可以向对象传递一个 startDate 和一个 endDate。
$startDate = Carbon::yesterday()->subDays(1); $endDate = Carbon::yesterday(); Interval::create($startDate, $endDate);
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。