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)。有关更多信息,请参阅 许可证文件。