laravel5.4使用Laravel Sms和阿里云短信服务实现短信验证码功能

laravel 实现短信验证码功能,搜索资料发现比较流行的有两个包:

一个是laravel sms 地址  https://github.com/toplan/laravel-sms 

一个是easy sms 地址https://github.com/overtrue/easy-sms,


经过比较还是选择lara sms


按照guthub readme进行


安装:

在项目根目录下运行如下composer命令:(如果没有安装composer请先安装composer)

//推荐(博主使用的推荐选项)
composer require toplan/laravel-sms:~2.6
准备工作
 
   

1.注册服务提供器

在config/app.php文件中providers数组里加入:

Toplan\PhpSms\PhpSmsServiceProvider::class,
Toplan\Sms\SmsManagerServiceProvider::class,

在config/app.php文件中的aliases数组里加入

'PhpSms' => Toplan\PhpSms\Facades\Sms::class,
'SmsManager' => Toplan\Sms\Facades\SmsManager::class,

2.参数配置

  • 生成配置文件和migration文件,分别在根目录执行下面两条命令
php artisan vendor:publish --provider="Toplan\PhpSms\PhpSmsServiceProvider"
php artisan vendor:publish --provider="Toplan\Sms\SmsManagerServiceProvider"

这里会在config文件夹中生成两个配置文件,分别为phpsms.php和laravel-sms.php。database中生成migrations


  • 配置代理器参数

在config/phpsms.php的agents数组中,找到你想要使用的代理器,并填写好配置信息。(注意阿里云的短信服务和阿里大鱼不是一个东西,不要弄混了)

博主选用的阿里云的短信服务,此处配置如下

laravel5.4使用Laravel Sms和阿里云短信服务实现短信验证码功能_第1张图片

主要是修改参数,阿里云短信服务,相关参数从管理后台获得,注意signName就是在短信服务后台申请的签名名称。

获取accessKeyId,accessKeySecret的方法请参考https://help.aliyun.com/knowledge_detail/38738.html(实际上进入控制台点击用户名即可看到)

  • 代理器均衡调度

在config/phpsms.php中设置代理器的均衡调度方案。

'scheme' => [
    //被使用概率为2/3
    'Luosimao' => '20',

    //被使用概率为1/3,且为备用代理器
    'YunPian' => '10 backup',

    //仅为备用代理器
    'YunTongXun' => '0 backup',
];

调度方案解析: 如果按照以上配置,那么系统首次会尝试使用LuosimaoYunPian发送短信,且它们被使用的概率分别为2/31/3。 如果使用其中一个代理器发送失败,那么会启用备用代理器,按照配置可知备用代理器有YunPianYunTongXun,那么会依次调用直到发送成功或无备用代理器可用。 值得注意的是,如果首次尝试的是YunPian,那么备用代理器将会只会使用YunTongXun,也就是会排除使用过的代理器。


如果只使用阿里云短信服务,设置如下
 
      
 
      
 
      

发送前数据验证(没有特殊要求的话使用默认设置就好了,不做详细解释了)

如果需要再去自己看说明及测试。
 
      
 
      

验证码模块

1. [服务器端]配置短信内容/模板

阿里云使用的是模板ID

模版id

如果你使用了模板短信,需要配置到使用到的代理器的模板标示符。

配置文件为config/laravel-sms.php

'templates' => [
    'YunTongXun' => '短信模版id',
    'Alidayu'    => ['短信模版id', '语音模版id'],
]
具体配置如下

需要到控制台中找短信模板ID

2. [浏览器端]请求发送验证码短信

laravel-sms.js
文件放入公共目录,并在使用验证码文件中引入
<script src="/path/to/laravel-sms.js">script>
为发送按钮添加扩展方法
<script>
$('#sendVerifySmsButton').sms({
    //laravel csrf token
    token       : "{{csrf_token()}}",
    //请求间隔时间
    interval    : 60,
    //请求参数
    requestData : {
        //手机号
        mobile : function () {
            return $('input[name=mobile]').val();
        },
        //手机号的检测规则
        mobile_rule : 'mobile_required'
    }
});
</script>
 
       

 
       
 
       

3. [服务器端]合法性验证(根据需要验证,此处不做详解)

数据库日志

 
         

生成数据表

在根目录下运行如下命令在数据库中生成laravel_sms表。(数据库中会新生成一张表laravel_sms表)

php artisan migrate

2. 开启权限

在配置文件config/laravel-sms.php中设置dbLogstrue

'dbLogs' => true,

短信队列(本文为了实现基础功能,此处先不做详解)


其它不影响基本功能的实现,先不详细解释。此时返回前端,点击发送验证码,手机就可以收到验证码了,在后台写相应逻辑。

 
         


遇到错误 Class 'Toplan\PhpSms\PhpSmsServiceProvider' not found

解决方法:在本地测试可能不会出现这样的问题,上线就会出现这样的问题,推论:1少相关文件2权限问题。最后发现一些执行php artisan命令产生的一些文件没有添加到svn控制中去,添加,然后再产生的service.php文件所在目录权限有点问题,修改为777,问题解决。


遇到错误,总是提示验证码错误请重新发送
解决方法:使用不同的阿里云短信服务账号,一个是正常的,一个总是错误,判断程序没有什么问题,应该是修改的三个参数
Access Key ID   Access Key Secret  
'templates' => [
        'Aliyun'    => '',
    ],
其中之一有问题,后来发现此扩展包验证码用的变量code而模板中用了number,重新申请模板,问题解决。







 
      
 
     





 
    
参考文章:
https://laravel-china.org/topics/1612/laravel-sms-v2-new-reconstruction-from
https://packagist.org/packages/toplan/phpsms
 
   
 
   




你可能感兴趣的:(微信开发,laravel框架)