使用 laravel sms 构建短信验证码发送校验功能
laravel 实现短信验证码功能,搜索资料发现比较流行的有两个包: 一个是laravel sms 地址 一个是easy sms 地址, 项目中需要实现一个发送和验证短信验证码的功能。以前的办法稍显繁琐。经高人指点,发现可以用 laravel-sms 这个包替代。且配置和使用简单易学。故有了这篇示例。 本例使用了、 以及 本例使用的短信服务商为。 安装在项目根目录下执行(推荐): 也可以在 composer.json 的 require 字段中添加: 然后在项目根目录下执行: 在 config/app.php 的 providers 数组中添加: 并在 aliases 数组里添加: ToplanPhpSmsFacadesSms::class,'SmsManager' => ToplanSmsFacadesSmsManager::class,'PhpSms' => ToplanPhpSmsFacadesSms::class,
在项目根目录下执行: 会在 config 文件夹中生成两个配置文件:phpsms.php 和 laravel-sms.php。 在 phpsms.php 中可以配置代理器信息及均衡调度方案。 在 laravel-sms.php 中可以配置验证码的发送与验证方案。 同时会向 databasemigrations 中复制 2015_12_21_111514_create_sms_table.php 文件。用于生成 laravel_sms 表。 配置这里仅以云片为例。 配置 phpsms.php 设置 phpsms.php 中 agnets 数组中云片的代理器信息。 [
//用户唯一标识,必须
'apikey' => '在这里填写你的 APIKEY',],'YunPian' => [
//用户唯一标识,必须
'apikey' => '在这里填写你的 APIKEY',
设置 scheme 数组,配置均衡调度方案。 [
'YunPian','scheme' => [
'YunPian',
配置 laravel-sms.php 设置内置路由。 [
'enable' => true,'prefix' => 'laravel-sms','middleware' => ['api'],'route' => [
'enable' => true,
设置请求间隔,单位为秒。 60,'interval' => 60,
设置号码验证规则。 [
'phone_number' => [ //需验证的字段
'isMobile' => true,//本字段是否为手机号
'enable' => true,//是否需要验证
'default' => 'mobile_required',//默认的静态规则
'staticRules' => [ //全部静态规则
'mobile_required' => 'required|zh_mobile','validation' => [
'phone_number' => [ //需验证的字段
'isMobile' => true,
设置验证码规则。 [
'length' => 4,//验证码长度
'validMinutes' => 10,//验证码有效时间长度,单位为分钟
'repeatIfValid' => true,//验证码有效期内是否重复使用
'maxAttempts' => 0,//验证码最大尝试验证次数,0 或负数则不启用
],'code' => [
'length' => 4,
设置验证码内容短信。 function ($code,$minutes,$input) {
return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)";
},'content' => function ($code,
如果有需要,可以开启数据库日志。需要提前运行 php artisan migrate 生成 laravel_sms 表。 'ture','dbLogs' => 'ture',
API 实现在 app/Utils 下新建 SmsCodeUtil.php,并在里面实现验证码发送和校验功能。这样其他类可以随时调用,提高代码的复用性。 发送模块发送前需要对手机号进行校验,包括: 通过验证后,再使用 requestVerifySms() 发送验证码。 具体代码如下: use SmsManager;
trait SmsCodeUtil { public function sendSmsCode() { $result = SmsManager::validateSendable(); if(!$result['success']) { return respondUnprocessable($result['message']); } $result = SmsManager::validateFields(); if(!$result['success']) { return respondUnprocessable($result['message']); } $result = SmsManager::requestVerifySms(); if(!$result['success']) { return respondUnprocessable($result['message']); } return respondSuccess($result['message']); } } 校验模块登入时,可能需要校验手机号和验证码。所以需要在 SmsCodeUtil.php 中添加验证码校验功能。这里官方 Github 上已经给出了代码,稍作修改即可。 'required|confirm_mobile_not_change|confirm_rule:mobile_required','sms_code' => 'required|verify_code',]);
if ($validator->fails()) { 功能测试接下来配置路由和控制器,测试下功能是否正常。 可以同时打开 若启用了数据库日志,可以在 laravel_sms 表中查看短信发送结果的详细信息。 先在 api.php 中添加: post('/auth/send-sms-code','AuthLoginController@sendSmsCode');
$api->post('/auth/validate-sms-code','AuthLoginController@validateSmsCode');
$api->post('/auth/send-sms-code','AuthLoginController@validateSmsCode');
再在 LoginController.php 中添加: ...
} 然后使用 Postman 或其他类似工具测试 Api 功能。 发送验证码若通过验证并发送成功,则会返回: 同时填写的手机号接受到验证码。 若验证失败或发送失败,则会返回对应的错误信息。 校验验证码POST 服务器地址/api/auth/validate-sms-code
{ "phone_number": "手机号","sms_code": "验证码" } 若通过验证,则无返回。 若验证失败,则会返回对应的错误信息。 本地化提示信息语言 在 laravel-sms.php 中提供了部分提示信息的自定义。想要将剩余部分的提示信息转换为本地语言,需要另行处理。 首先确保 config/app.php 中的语言设置正确。这里设置为 zh_cn。 'zh_cn','locale' => 'zh_cn',
然后在 resourceslangzh_cn 文件夹下新建 validation.php,并填入本地化信息: '缺少:attribute参数','zh_mobile' => '非标准的中国大陆手机号','confirm_mobile_not_change' => '提交的手机号已变更','verify_code' => '验证码不合法或无效','attributes' => [
'phone_number' => '手机号','sms_code' => '验证码',];
return [
'required' => '缺少:attribute参数',];
重新 POST 相关地址,可以看到对应的提示信息语言已经本地化。 总结以上所述是小编给大家介绍的使用 laravel-sms 构建短信验证码发送校验模块,希望对大家有所帮助。程序员遇到问题都会上(编程之家52php.cn)查找问题解答方法!如果觉得站点还不错,随手转发给程序员朋友一下! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |