hooman-mirghasemi/laravel-iran-sms

此包最新版本(1.2.1)无可用许可证信息。

Laravel Sms

1.2.1 2024-06-02 18:00 UTC

This package is auto-updated.

Last update: 2024-09-02 18:43:20 UTC


README

Laravel Iran Sms

Software License Latest Version on Packagist Total Downloads on Packagist StyleCI Maintainability Quality Score

这是一个用于短信发送器集成的 Laravel 包。此包支持 Laravel 8+,所有测试均通过 Laravel 8、9、10 和 11 的测试!

此包的优点

  • 多种驱动程序
  • 支持创建自定义驱动程序
  • 内置假驱动程序,可以发送成功或失败的短信/语音通话消息。(可在开发和测试模式下使用)
  • 将短信报告存储在数据库中
  • 仅开发模式中有工具,可在 https:///sms/get-sms-list 中使用(您的前端开发者可以使用它来访问使用假驱动程序发送的最新短信,例如,当他们在开发诸如忘记密码等部分时需要 otp 码)

目录列表

可用驱动程序列表

注意:要使用它们中的任何一个,请检查配置文件,并在您的 .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- 使用通道

使用外观操作

您可以在代码的任何地方使用SmsVoiceCall门面,如下所示

// 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:当发送短信时发生。(该包使用它将报告收集到数据库中)

贡献

请参阅CONTRIBUTINGCONDUCT以获取详细信息。

致谢

许可证

MIT许可证(MIT)。请参阅许可文件以获取更多信息。