prgayman / laravel-sms
Laravel 发送短信包
Requires
- php: ^7.3|^8.0
- guzzlehttp/guzzle: ^7.0.1
Requires (Dev)
- nunomaduro/collision: ^5.10
- orchestra/testbench: ^6.24
- phpunit/phpunit: ^9.0
- twilio/sdk: ^6.33
README
Laravel SMS 允许您使用多个短信服务提供商从您的 Laravel 应用程序发送短信,并允许添加自定义短信服务提供商
要求
- php
^7.3|^8.0
- guzzlehttp/guzzle
^7.0.1
安装
要获取项目中 laravel-sms 的最新版本,请从 "composer" 中要求它
$ composer require prgayman/laravel-sms
或者您可以直接在 composer.json 文件中添加它
{ "require": { "prgayman/laravel-sms": "1.5.0" } }
Laravel
直接在您的 app 配置文件 config/app.php 中注册提供者 config/app.php
Laravel >= 5.5 提供了包自动发现功能,感谢 rasmuscnielsen 和 luiztessadri 在 Zatca 中帮助实现此功能,提供者和外观的注册可能不再必要。
'providers' => [ Prgayman\Sms\SmsServiceProvider::class, ]
在相同文件中添加外观别名
'aliases' => [ 'Sms' => Prgayman\Sms\Facades\Sms::class, 'SmsHistory' => Prgayman\Sms\Facades\SmsHistory::class, ]
Lumen
在您的 bootstrap app 文件 boostrap/app.php
中注册提供者
在文件的 "注册服务提供者" 部分底部添加以下行。
$app->register(Prgayman\Sms\SmsServiceProvider::class);
对于外观,在 "创建应用程序" 部分中添加以下行。
class_alias(\Prgayman\Sms\Facades\Sms::class, 'Sms'); class_alias(\Prgayman\Sms\Facades\SmsHistory::class, 'SmsHistory');
运行迁移
使用以下 artisan 命令发布迁移
$ php artisan vendor:publish --tag=laravel-sms-migrations
配置
您可以使用以下 artisan 命令发布配置文件
$ php artisan vendor:publish --tag=laravel-sms-config
可用的 SMS 提供商
可用的 SMS 驱动器本地开发
事件
\Prgayman\Sms\Events\MessageSending::class
\Prgayman\Sms\Events\MessageSent::class
\Prgayman\Sms\Events\MessageFailed::class
类型
\Prgayman\Sms\SmsTypes::GENERAL
\Prgayman\Sms\SmsTypes::OTP
\Prgayman\Sms\SmsTypes::WELCOME
\Prgayman\Sms\SmsTypes::AD
使用
设置默认驱动器
使用 .env
SMS_DRIVER=log
使用外观
/** * Set the default sms driver name. * * @param string $driver */ Prgayman\Sms\Facades\Sms::setDefaultDriver("array");
启用使用数据库的短信历史记录(不支持存储历史记录的多联系人发送)
-
在
.env
文件中启用密钥SMS_HISTORY_ENABLED
SMS_HISTORY_ENABLED=true
-
确保使用以下 artisan 命令发布迁移
$ php artisan vendor:publish --tag=laravel-sms-migrations
-
使用以下 artisan 命令运行迁移
$ php artisan migrate
发送消息
您可以简单地发送一条消息,如下所示
# Send message using facade use Prgayman\Sms\Facades\Sms; $to = "+962790000000"; $from = "SenderName"; $message = "Test Send Message"; /** * Send using default driver sms * * @return \Prgayman\Sms\SmsDriverResponse */ $response = Sms::to($to)->from($from)->message($message)->send(); # Get Message $response->getMessage(); # Get Request $response->getRequest(); # Get driver response $response->getResponse(); # Check is successfuly send sms message $response->successful(); # Check is failed send sms message $response->failed();
使用选择驱动器发送
Sms::driver("array") ->to($to) ->from($from) ->message($message) ->send();
发送多个联系人
// please sure driver is support send multiple contacts Sms::to([ "+962792994123", "+962792994124", "+962792994125", ]) ->from($from) ->message($message) ->send();
使用自定义类型发送
Sms::driver("array") ->type(\Prgayman\Sms\SmsTypes::OTP) ->to($to) ->from($from) ->message($message) ->send();
发送多条消息(运行事件并按消息存储历史记录)
$items = [ [ "to" => "+962792994123", "from" => "SenderName", "message" => "New message" ], [ "to" => "+962792994124", "from" => "SenderName", "message" => "Send Message" ] ]; /** * @param $items must contain message, to, and from keys per item * @return \Prgayman\sms\SmsDriverResponse[] */ $response = Sms::sendArray($items); // Or send using helper function $response = sms()->sendArray($items);
使用默认驱动器的辅助函数发送
sms() ->to($to) ->from($from) ->message($message) ->send();
使用辅助函数和选择驱动器发送
sms("array") ->to($to) ->from($from) ->message($message) ->send();
使用辅助函数和自定义类型发送
sms("array") ->type(\Prgayman\Sms\SmsTypes::OTP) ->to($to) ->from($from) ->message($message) ->send();
创建自定义驱动器
-
创建一个从
\Prgayman\Sms\Drivers\Driver
继承的类,并处理发送函数 -
如果驱动器支持发送多个联系人,请实现
Prgayman\Sms\Contracts\DriverMultipleContactsInterface
use Prgayman\Sms\Drivers\Driver; use Prgayman\Sms\SmsDriverResponse; use Prgayman\Sms\Contracts\DriverMultipleContactsInterface; class CustomDriver extends Driver implements DriverMultipleContactsInterface { # You not need to run events or store history # package automatically run all events and store history public function send() : SmsDriverResponse { $request = [ "to" => $this->getTo(), 'from' => $this->getFrom(), 'body' => $this->getMessage(), ]; try { # Handler send message $response = null; return new SmsDriverResponse($request, $response, true); } catch (\Exception $e) { return new SmsDriverResponse($request, null, false, $e->getMessage()); } } }
-
在
config/sms.php
中添加驱动器配置"drivers"=>[ ....... # Use custom driver 'your-driver-name'=>[ 'handler'=> \App\SmsDrivers\CustomDriver::class ], # Use supported drivers but different name # Copy driver object and change name "new-log-driver" => [ "driver" => "log", 'channel' => env('SMS_LOG_CHANNEL'), ], ]
-
使用自定义驱动器发送消息
# Use driver Sms::driver("your-driver-name") ->to($to) ->from($from) ->message($message) ->send(); # Or set custom driver in default driver or set # SMS_DRIVER=your-driver-name in dotenv file Sms::setDefaultDriver("your-driver-name"); Sms::to($to) ->from($from) ->message($message) ->send();
通道使用
首先,您必须使用 php artisan make:notification
命令创建您的通知。然后,可以像下面这样使用 Prgayman\Sms\Channels\SmsChannel::class
作为通道
use Illuminate\Notifications\Notification; use Prgayman\Sms\SmsNotification; class SendSmsNotification extends Notification { /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return ['sms']; # add this channel } /** * @param mixed $notifiable * @return \Prgayman\Sms\SmsNotification */ public function toSms($notifiable) { # Send message with default driver return (new SmsNotification) ->to("+962790000000") ->from("SenderName") ->message("Test New Message"); # Send message with select driver return (new SmsNotification) ->driver('array') ->to("+962790000000") ->from("SenderName") ->message("Test New Message"); } }
SMS 历史记录
use Prgayman\Sms\Facades\SmsHistory; # Get all $histories = SmsHistory::get(); # Use Filters all filter is optional $histories = SmsHistory::recipients("+962790000000") ->senders(["SendName"]) ->statuses([ Prgayman\Sms\Models\SmsHistory::SUCCESSED, Prgayman\Sms\Models\SmsHistory::FAILED, ]) ->drivers(["log","array"]) ->driverNames(["custom_name"]) ->get(); # Or can use helper function $histories = smsHistory() ->recipients("+962790000000") ->senders(["SendName"]) ->statuses([ Prgayman\Sms\Models\SmsHistory::SUCCESSED, Prgayman\Sms\Models\SmsHistory::FAILED, ]) ->drivers(["log","array"]) ->driverNames(["custom_name"]) ->get();
测试
composer test
许可证
此库是开源软件,许可协议为 MIT 许可证。