Laravel SMS 簡訊傳送包

shjchen發表於2018-12-12

Laravel Sms

Laravel 貼合實際需求同時滿足多種通道的簡訊傳送元件

image.png

基於業務需求在 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\ServiceProvder::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 :)

討論交流

iBrand聯絡我們

相關文章