laravel 实现短信验证码功能,搜索资料发现比较流行的有两个包:
一个是laravel sms 地址 /toplan/laravel-sms
一个是easy sms 地址/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
数组中,找到你想要使用的代理器,并填写好配置信息。(注意阿里云的短信服务和阿里大鱼不是一个东西,不要弄混了)博主选用的阿里云的短信服务,此处配置如下
主要是修改参数,阿里云短信服务,相关参数从管理后台获得,注意signName就是在短信服务后台申请的签名名称。
获取accessKeyId,accessKeySecret的方法请参考/knowledge_detail/38738.html(实际上进入控制台点击用户名即可看到)
代理器均衡调度
在config/phpsms.php中设置代理器的均衡调度方案。
'scheme' => [ //被使用概率为2/3 'Luosimao' => '20', //被使用概率为1/3,且为备用代理器 'YunPian' => '10 backup', //仅为备用代理器 'YunTongXun' => '0 backup',];
调度方案解析:如果按照以上配置,那么系统首次会尝试使用
Luosimao
或YunPian
发送短信,且它们被使用的概率分别为2/3
和1/3
。 如果使用其中一个代理器发送失败,那么会启用备用代理器,按照配置可知备用代理器有YunPian
和YunTongXun
,那么会依次调用直到发送成功或无备用代理器可用。 值得注意的是,如果首次尝试的是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
中设置dbLogs
为true
。'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-/topics/1612/laravel-sms-v2-new-reconstruction-from
/packages/toplan/phpsms