magein/laravel-sms

laravel框架扩展的短信功能

dev-master 2022-06-21 06:24 UTC

This package is auto-updated.

Last update: 2024-12-21 12:11:39 UTC


README

简介

laravel项目中使用的短信平台

已经集成的运营商

  1. 阿里云

安装

composer require magein/laravel-sms:*@dev -vvv -o

注册服务提供者

在config/app.php中注册服务提供者,并且添加Sms的facades

$providers=[
    // 此处省略其他的服务提供者
    Magein\Sms\SmsServiceProvider::class
];

发送 && 验证

// 跨域问题请在config/cors.php中添加
[
    'paths' => ['api/*', 'admin/*', 'view/*', 'sms/*'],
]

// 发送验证码
Magein\Sms\Facades\Sms::code($phone);
Magein\Sms\Facades\Sms::code($phone,\Magein\Sms\Lib\SmsCode::SCENE_LOGIN);
Magein\Sms\Facades\Sms::code($phone,\Magein\Sms\Lib\SmsCode::SCENE_REGISTER);
Magein\Sms\Facades\Sms::code($phone,\Magein\Sms\Lib\SmsCode::SCENE_FINDPASS);
// 发送短信 手机号码 短信内容 内容里面的变量
Magein\Sms\Facades\Sms::send($phone,$message,$replace);

// 指定平台,平台需要继承 \Magein\Sms\Lib\Platform\SmsPlatform 抽象类
Magein\Sms\Facades\Sms::platform(\Magein\Sms\Lib\Platform\AliPlatform::class)->send();

// 不传递参数将从自动使用request()->input('phone');request()->input('code')
Magein\Sms\Facades\Sms::validate();
// 传递场景值(login、register、findPass)等场景,phone、code自动获取
Magein\Sms\Facades\Sms::validate($scene);
// 传递全部参数
Magein\Sms\Facades\Sms::validate($scene,$phone,$code);

配置文件

src/Config.php中提供了配置文件,需要修改可以在项目的config目录下新增sms.php

return [
    'default' => [
        // 使用的驱动,支持 db、redis、session,默认db
        'driver' => 'db',
        // 发送短信使用的平台
        'platform' => \Magein\Sms\Lib\Platform\AliPlatform::class,
        // 短信签名
        'signature' => '',
    ],

    /**
     * 阿里云的配置
     */
    'ali' => [
        // 平台名称
        'name' => 'ali',
        'access_key_id' => '',
        'access_key_secret' => '',
        'endpoint' => '',
        // 签名
        'signature' => '',
        // 模板列表
        'template' => [
            // key是模板编号 value是模板中的变量
            'SMS_205407022' => ['code'],
            'SMS_235812009' => ['name', 'account']
        ],
        // 发送验证码使用的模板
        'code' => 'SMS_205407022',
    ],
]

api请求发送验证码

后端无需实现此接口,注册服务提供者后,会自动调用src/Router路由文件

request
{
    url:"http://host.com/sms/code",
    method:"post",
    data:{
        phone:"",
        code:'',
    }
}

response
{
    code:0,
    msg:'发送成功',
    data:null
}

批量发送

今天大部分运营商都提供了批量发送的接口,项目中不提供批量发送的接口

实现:

  1. 创建任务,包含任务名称,短信内容、发送时间、目标号码
  2. 开启定时任务检测是否有批量发送的内容
  3. 加入到队列中
  4. 发送结果可监控(在项目中,而不是去登录运营商平台)

提供的函数

// 提取手机号码,可以传递字符串,可以传递一个文件
readPhoneNumbers($filepath);