美文网首页
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