Laravel SMS 短信发送包

因为各种业务需求原因,又重复造轮子了,造的不好,欢迎大家指正。

build

基于业务需求在 overtrue/easy-sms 进行扩展开发,主要实现如下功能:

  1. 支持短信验证码直接在 config 中配置模板ID
  2. 支持短信验证码自定义长度
  3. 支持短信验证码有效分钟,默认5分钟
  4. 支持短信验证码重试次数,防止用户意外输错验证码导致需要再次发送验证码的问题
  5. 支持短信验证码未验证时,用户再次请求验证码,在有效分钟内验证码保持一致
  6. 集成短信发送路由,支持 web 和 api 发送方式
  7. 支持验证码调试,debug 模式下可直接查询手机号目前有效的验证码,debug 模式下同时不会验证验证码的正确性
  8. 支持验证码发送记录到数据库,方便查看发送日志和错误原因

包地址:ibrand/laravel-sms

TODO:

  1. 支持语音验证码

安装

composer require ibrand/laravel-sms:~1.0 -vvv

低于 Laravel5.5 版本

config/app.php 文件中 'providers' 添加

iBrand\Sms\ServiceProvider::class

config/app.php 文件中 'aliases' 添加

'Sms'=> iBrand\Sms\Facade::class

使用

发送验证码

实现了发送短信验证码路由,支持 web 和 api ,可以自定义路由的 prefix。

'route' => [
        'prefix' => 'sms',
        'middleware' => ['web'],
    ],

or

'route' => [
        'prefix' => 'sms',
        'middleware' => ['api'],
    ],

POST请求 http://your.domain/sms/verify-code

参数:mobile

备注:为了支持开发时的调试,在发送验证码时不去验证手机号本身的有效性,请在发送验证码前自行验证。

返回参数:

{
    "status": true,
    "message": "短信发送成功"
}

验证验证码

    use iBrand\Sms\Facade as Sms;

    if (!Sms::checkCode(\request('mobile'), \request('code'))) {
            //验证失败,处理自身业务
        }

配置模板 ID

config/ibrand/sms.phpgateways 参数可以直接添加 code_template_id 来配置模板 id

    // 可用的网关配置
        'gateways' => [

            'errorlog' => [
                'file' => '/tmp/easy-sms.log',
            ],

            'yunpian' => [
                'api_key' => '824f0ff2f71cab52936axxxxxxxxxx',
            ],

            'aliyun' => [
                'access_key_id' => 'dalvTXXX',
                'access_key_secret' => 'XXXX',
                'sign_name' => '阿里云短信测试专用',
                'code_template_id' => 'SMS_80215252'
            ],

            'alidayu' => 
                //...
            ],
        ],

配置 Content

非模板类通道,可以通过 config/ibrand/sms.php 自定义短信内容

'content' => '【your signature】亲爱的用户,您的验证码是%s。有效期为%s分钟,请尽快验证。'

debug

在实际开发中会存在并不用真实发出验证码的情况,因此在 debug 模式下,可以通过

http://your.domain/api/sms/info?mobile=1898888XXXX 来直接只看某个手机号当前有效验证码信息。

欢迎大家 star 和提交 issue :)

本作品采用《CC 协议》,转载必须注明作者和本文链接
公众号:前程序员陈彼得
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

好轮子!看功能很吸引人,很实用

问一下,提到的增加的功能是否可用于生产环境了?

5年前 评论

@fasthold 已经在生产环境跑了很久了。

5年前 评论
游离不2

这个应该叫smsotp吧

5年前 评论

为什么都只写发送不写验证的

4年前 评论

增加一段web端用的js吧

4年前 评论

好像有bug,使用定义的短信类发送内容后面实际缓存的验证码与实际类里发送的不是一个,

file 实际上是发送的是参数data里的code,但是缓存和入库的是send方法里重新生成的code

2年前 评论
小帅 (作者) 2年前

file怎么重写这部分正则验证 不改vender前提下

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!