hooman-mirghasemi / laravel-iran-sms
Laravel Sms
Requires
- php: ^8.0.2
- kavenegar/laravel: *
- laravel/framework: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- laravel/legacy-factories: ^1.4
- orchestra/testbench: ^6.40|^7.37|^8.17|^9.0
- phpunit/phpunit: ^9.0|^10.5
README
Laravel Iran Sms
这是一个用于短信发送器集成的 Laravel 包。此包支持 Laravel 8+
,所有测试均通过 Laravel 8、9、10 和 11 的测试!
此包的优点
- 多种驱动程序
- 支持创建自定义驱动程序
- 内置假驱动程序,可以发送成功或失败的短信/语音通话消息。(可在开发和测试模式下使用)
- 将短信报告存储在数据库中
- 仅开发模式中有工具,可在 https:///sms/get-sms-list 中使用(您的前端开发者可以使用它来访问使用假驱动程序发送的最新短信,例如,当他们在开发诸如忘记密码等部分时需要 otp 码)
目录列表
可用驱动程序列表
- 假短信发送器 ✔️(两者:语音通话/短信)
- Avanak ✔️(语音通话驱动程序)
- Kavenegar ✔️(短信)
- Magfa ✔️(短信)
- Sms Online ✔️(短信)
注意:要使用它们中的任何一个,请检查配置文件,并在您的 .env 文件中使用所需的 env,例如用户名/密码或 API 密钥,具体取决于您使用的驱动程序。
注意:要使用 magfa/sms online/avanak,您应该安装 php ext-soap。
每个驱动程序的环境变量文件
假短信发送器
// 在您的本地 .env 文件中使用
SMS_DRIVER=fake
// 如果您想设置一个号码,这是可选的
FAKE_SENDER_NUMBER=101010
Kavenegar
// 如果您想使用 Kavenegar 作为默认短信驱动程序,请在使用您的生产 .env 文件中设置
SMS_DRIVER=kavenegar
// 您的 Kavenegar 账户 API 密钥
KAVENEGAR_API_KEY=fsdf452fd
Magfa
// 如果您想使用 Magfa 作为默认短信驱动程序,请在使用您的生产 .env 文件中设置
SMS_DRIVER=magfa
SMS_MAGFA_USERNAME=您的 Magfa 用户名
SMS_MAGFA_PASSWORD=您的 Magfa 密码
SMS_MAGFA_DOMAIN=您的 Magfa 域名
SMS_MAGFA_SENDER_NUMBER=您要在 Magfa 中发送短信的号码
Sms Online
// 如果您想使用 Sms Online 作为默认短信驱动程序,请在使用您的生产 .env 文件中设置
SMS_DRIVER=smsonline
SMS_ONLINE_USERNAME=您的 smsonline 用户名
SMS_ONLINE_PASSWORD=您的 smsonline 密码
SMS_ONLINE_SENDER_NUMBER=您要在 smsonline 中发送短信的号码
Avanak(语音通话)
// 如果您想使用 Sms Online 作为默认短信驱动程序,请在使用您的生产 .env 文件中设置
VOICE_CALL_DRIVER=avanak
VOICE_AVANAK_USERNAME=您的 avanak 用户名
VOICE_AVANAK_PASSWORD=您的 avanak 密码
如果列表中不存在,您可以创建自己的自定义驱动程序,请阅读
创建自定义驱动程序
部分。
安装
通过 Composer
$ composer require hooman-mirghasemi/laravel-iran-sms
发布供应商文件
这是可选的,并且仅当您需要时,您可以通过以下命令发布供应商文件
- 发布配置文件
php artisan vendor:publish --tag=iran-sms-config
- 发布自定义视图
php artisan vendor:publish --tag=iran-sms-views
- 发布迁移
php artisan vendor:publish --tag=iran-sms-migrations
.env 文件
您可以使用SMS_DRIVER
环境变量来设置默认短信驱动程序。(在本地环境中不要更改它,默认设置为模拟驱动程序)
还可以使用VOICE_CALL_DRIVER
环境变量。它与SMS_DRIVER类似,但用于语音呼叫。
如何使用
使用此包有两种选项
1- 使用门面
2- 使用通道
使用外观操作
您可以在代码的任何地方使用Sms
或VoiceCall
门面,如下所示
// At the top of the file. use HoomanMirghasemi\Sms\Facades\Sms; ... Sms::to('+989121234567')->message('your sms text')->send(); //Also you can set driver in run time: Sms::driver('magfa')->to('+989121234567')->message('your sms text')->send();
可用方法
to
:设置应接收短信的移动电话号码。message
:文本消息可以是简单的字符串或实现HoomanMirghasemi\Sms\Contracts\Message接口的类的对象。send
:发送消息。
使用频道(使用 Laravel 通知类)
创建一个Laravel通知类,通过SmsChannel
设置,如下所示
// At the top of the file. use HoomanMirghasemi\Sms\Channels\SmsChannel; use HoomanMirghasemi\Sms\Contracts\Message\Message; ... public function __construct(public SomeModel $someModel) { $this->via = SmsChannel::class; } public function toSms(User $notifiable) { $smsMessage = 'make your sms text '; // only if using kavehnegar set the pattern name $pattern = 'kavenagarMyPatternName'; $message = new Message($smsMessage); $message->useTemplateIfSupports( $pattern, [ 'token1' => 'test', 'token10' => $notifiable->name, 'token20' => $this->family ] ); return Sms::to($notifiable->mobile) ->message($message); }
更改显示短信列表页面的条件
默认情况下,当您的Laravel应用程序处于生产模式时,此页面将返回404。但如果你想要不同的条件,发布配置文件并更改此部分,如下所示,或者你想要的任何东西
// default config is: 'dont_show_sms_list_page_condition' => function() { return config('app.env') == 'production'; } // you can check domain: 'dont_show_sms_list_page_condition' => function() { return config('app.env') == 'production' || config('app.url') == 'https://yourproductiondomain.com'; }
现在,如果您忘记将app.env设置为生产或临时更改它,它将是安全的并返回404。
创建自定义驱动程序
选项A
我们欢迎您的参与,创建您的驱动程序并发送拉取请求。
选项A:此包使用策略设计模式和Laravel Manager
类。因此,您可以轻松创建自己的驱动程序,如下所示
<?php namespace App; use HoomanMirghasemi\Sms\Abstracts\Driver; class MyCustomDriver extends Driver { public static bool $successSend = true; public function __construct(protected array $settings) { $this->from = data_get($this->settings, 'from'); } public function send(): bool { // write api of sending sms by your custom provider return parent::send(); } public function getBalance(): string { // write api of getting account balance from your custom provider return $balance; } }
并在任何服务提供者类中将它注册到管理器类中,如下所示
$smsManager = app('sms'); $smsManager->extend('myCustomDriver', function ($app) { $setting = ['from' => '22336']; return new MyCustomDriver($setting); }); // or using laravel ioc $this->app->bind(MyCustomDriver::class, function () { $setting = ['from' => '22336']; return new MyCustomDriver($config); }); $smsManager->extend('myCustomDriver', function ($app) { return $this->container->make(MyCustomDriver::class); }); // or you can publish config file and add setting of your driver into it. then: $this->app->bind(MyCustomDriver::class, function () { $config = config('sms.drivers.mycustomdriver') ?? []; return new MyCustomDriver($config); }); $smsManager->extend('myCustomDriver', function ($app) { return $this->container->make(MyCustomDriver::class); });
事件
您可以监听此事件
- SmsSentEvent:当发送短信时发生。(该包使用它将报告收集到数据库中)
贡献
请参阅CONTRIBUTING和CONDUCT以获取详细信息。
致谢
许可证
MIT许可证(MIT)。请参阅许可文件以获取更多信息。