美文网首页
Laravel 发送短信验证码

Laravel 发送短信验证码

作者: Hesunfly | 来源:发表于2019-01-06 12:10 被阅读0次

    安装扩展包

    使用 Composer 包管理工具进行安装,在项目根目录执行如下命令:

    composer require "overtrue/easy-sms" 
    

    配置

    config 目录中创建配置文件 sms.php:

    touch config/sms.php 
    

    写入以下内容(由于本人有云片和腾讯云两个短信平台的账户,所以在下方的发送网关中配置了两个短信提供商的简称,该扩展可支持更多的短信平台,请查看: easy-sms

    <?php 
    
    return [     
        // HTTP 请求的超时时间(秒)     
        'timeout' => 5.0,     
        // 默认发送配置     
        'default' => [         
            // 网关调用策略,默认:顺序调用         
            'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class,         
            // 默认可用的发送网关         
            'gateways' => [ 
                //云片
                'yunpian',  
                //腾讯云 
                'qcloud'     
            ],     
        ],     
        // 可用的网关配置     
        'gateways' => [         
            'errorlog' => [             
                'file' => '/tmp/easy-sms.log',
                ],         
            'yunpian' => [             
                'api_key' => '云片短信平台账户api_key',         
                ],         
            'qcloud' => [             
                'sdk_app_id' => '腾讯云短信平台sdk_app_id',             
                'app_key' => '腾讯云短信平台app_key',             
                'sign_name' => '腾讯云短信平太签名'  (此处可设置为空,默认签名)        
                ],    
         ], 
    ]; 
    

    在项目根目录执行命令创建服务提供者:

    php artisan make:provider SmsServiceProvider 
    

    执行上述命令会在 app/Providers 目录下生成对应的代码文件。

    修改 SmsServiceProvider 中的内容:

    <?php  
    
    namespace App\Providers;  
    
    use Illuminate\Support\ServiceProvider; 
    use Overtrue\EasySms\EasySms;  
    
    class SmsServiceProvider extends ServiceProvider 
    {     
        public function boot()    
        {     
        
        }   
        
        public function register()     
        {         
            $this->app->singleton(EasySms::class, function ($app) {
                return new EasySms(config('sms'));         
            });    
            
            $this->app->alias(EasySms::class, 'sms');     
        } 
    } 
    

    然后注册该服务提供者,在 config/app.php 中写入:

    'providers' => [    
        ...    
        ...    
        ...          
        \App\Providers\SmsServiceProvider::class
     ], 
    

    使用

    为了方便在多处使用发送短信的功能,本人在 App 目录下建立了 Service 目录用来存放可提供公共服务的代码,然后创建 SmsService.php 文件,内容如下:

    <?php  
    
    use Illuminate\Support\Facades\Log; 
    use Overtrue\EasySms\Exceptions\NoGatewayAvailableException;  
    
    class SmsService extends Service 
    {      
        public static function sendVerifyCode($phone)     
        {         
            $sms = app('sms');          
            try {             
                $sms->send($phone, [
                        //content针对云片平台发送的短信内容                     
                        'content' => '您的验证码是'. self::verifyCode() .'。如非本人操作,请忽略                     本短信',                     
                        //下面两个参数针对腾讯云平台发送短信的参数                     
                        'template' => '腾讯云短信平台短信模板id',                     
                        'data' => [                         
                            //关联短信模板的参数                         
                            '1' => self::verifyCode(),                         
                            '2' => 1                         
                        ],                 
                    ],                  
                    //指定使用哪个网关进行发送                 
                    ['qcloud']              
                );         
             } catch (NoGatewayAvailableException $exception) {             
                //发送失败,记录错误日志             
                Log::error('短信发送失败', ['phone' => $phone, 'message' => $exception-                   >getException('qclond')->getMessage()]);         
                }     
             }    
             
             public static function verifyCode()     
             {         
                return mt_rand(100000, 999999);     
             } 
            
    }  
    

    发送短信,调用 sendVerifyCode('phone_number') 方法发送短信,记得传入对应的手机号码!

    use App\Service\SmsService;
    
    SmsService::sendVerifyCode('176****6177');
    

    End!

    文章同步发布在我的个人博客中,传送门Hesunfly Blog

    相关文章

      网友评论

          本文标题:Laravel 发送短信验证码

          本文链接:https://www.haomeiwen.com/subject/hafsrqtx.html