https://blog.csdn.net/uknow0904/article/details/80336941

本人在自己博客(Laravel)的注册部分 使用手机号注册,需要发送短信验证码。

 使用云片(https://www.yunpian.com/)的 短信服务提供商,当然具体短信服务提供商大家可以自由选择。

1,实现流程

输入手机号,点击获取验证码
提交正确的短信验证码后,注册完成

2,实现思路图

3,注册 云片,以及开发信息认证,模板设置,这里就不详细展开了

4, 安装 easy-sms,easy-sms 是安正超写的一个短信发送组件,利用这个组件,我们可以快速的实现短信发送功能。

 composer require "overtrue/easy-sms"
//新建配置文件
touch config/easysms.php

然后在 easysms.php 文件内 添加以下内容:

 <?php

   return [

       'timeout'=>5.0,
'default'=>[
// 网关调用策略,默认:顺序调用
'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class, // 默认可用的发送网关
'gateways' => [
'yunpian',
],
],
// 可用的网关配置
'gateways' => [
'errorlog' => [
'file' => '/tmp/easy-sms.log',
],
'yunpian' => [
'api_key' => env('YUNPIAN_API_KEY'),
],
], ];

然后创建一个 ServiceProvider

  php artisan make:provider EasySmsServiceProvider

修改文件

app/providers/EasySmsServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Overtrue\EasySms\EasySms; class EasySmsServiceProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
} /**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->singleton(EasySms::class,function ($app){ return new EasySms(config('easysms')); }); $this->app->alias(EasySms::class,'easysms');
}
}

最后 打开config/app.php 在 providers 中增加

 App\Providers\EasySmsServiceProvider::class,

5,获取云片的API_KEY

在 .env中配置 YUNPIAN_API_KEY,注意下面需要替换为你自己的 key

6,控制器代码 获取验证码(将code 以及key存入缓存)

public function getVerificationCode($request)
{
if(FALSE === $this->validateApiRequest($request->all(),
['mobile' => 'required|regex:/^1[34578]\d{9}$/|unique:users'],[
'mobile.required'=>'请输入手机号',
'mobile.regex'=>'手机号格式不正确',
'mobile.unique'=>'手机号已存在'
])){
return false;
} $mobile = trim($request->get('mobile'));
$code = str_pad(random_int(1,9999),4,0,STR_PAD_LEFT); try{
$easySms->send($mobile,
['content'=>"【UKNOW】您的验证码是{$code}。如非本人操作,请忽略本短信"] ); }catch(\GuzzleHttp\Exception\ClientException $exception){ $response = $exception->getResponse();
$result =json_decode($response->getBody()->getContents(),true);
$this->setMsg($result['msg']?? '短信发送异常');
return false;
} $key = 'verificationCode'.str_random(15);
$expiredAt = now()->addMinutes(1);
Cache::put($key,['mobile'=>$mobile,'code'=>$code],$expiredAt); return [
'verification_key'=>$key,
'expiredAt'=>$expiredAt->toDateTimeString(),
'verification_code'=>$code
];
}

7,对比验证码

public function userStore($mobile, $verification_key,$code,$password,$password_confirmation)
{ $params = [
'mobile'=>$mobile,
'verification_key'=>$verification_key,
'code'=>$code,
'password'=>$password,
'password_confirmation'=>$password_confirmation
];
//参数判断
if (
FALSE === $this->validateApiRequest($params, [
'mobile' => 'required|regex:/^1[34578]\d{9}$/|unique:users',
'code' => 'required',
'verification_key'=>'required',
'password' => 'required|min:6|confirmed',
'password_confirmation' => 'required',
], [
'mobile.required' => '请输入手机号',
'mobile.regex' => '手机号格式不正确',
'mobile.unique' => '手机号已存在',
'code.required' => '请输入短信验证码',
'password.required' => '请输入密码',
'password.min' => '密码不得小于6位',
'password.confirmed' => '密码前后不一致',
'password_confirmation.required'=>'请再次输入密码',
'verification_key.required'=>'请输入短信验证码'
])
) {
return false;
} $verifyData = Cache::get($verification_key);
if( !$verifyData){
$this->setMsg('验证码已失效');
return false;
}
if(!hash_equals($code,(string)$verifyData['code'])){
$this->setMsg('验证码错误');
return false;
} Cache::forget($verification_key);
$user = User::create([
'mobile'=>$mobile,
'password'=>bcrypt($password)
]);
if(!$user){
$this->setMsg('注册失败');
return false;
}
return true;
}
 

PHP 手机短信验证码 laravel 实现流程的更多相关文章

  1. Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用

    近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限, ...

  2. Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结

    Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码  用户操作 ,比如 ...

  3. 四:java调接口实现发送手机短信验证码功能

    1.点击获取验证码之前的样式: 2.输入正确的手机号后点击获取验证码之后的样式: 3.如果手机号已经被注册的样式: 4.如果一个手机号一天发送超过3次就提示不能发送: 二:前台的注册页面的代码:reg ...

  4. atitit.破解 拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结

    atitit.破解  拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结 1. 自动获取手机短信方式的原理 1 2. 调用api 1 3. ----核心代码 2 4.  ...

  5. java后台通过Servlet给用户发送手机短信验证码,第一次写勿喷,欢迎转载

    短信验证码跟自己在Servlet画的验证码不一样,我们不用管短信验证码是怎么产生的,我们只需要关注如何调用短信验证码,在短信验证码里面添加 自己需要的随机数或者其他的内容. 现在直接上流程 第一步找一 ...

  6. php短信验证码接口接入流程及代码示例

    对于绝大部分企业来说,所使用的短信验证码接口都是第三方短信服务商所提供,目前市场上短信服务商有很多,在此向大家推荐一家动力思维乐信,运营13年,值得信赖! 就拿动力思维乐信短信验证码接口为例,详细介绍 ...

  7. python 自动获取手机短信验证码

    需要一个有权限的 APK 在手机实时存储短信到手机内存 /sdcard/smslog.txt 里(外部SD卡也可以知道能通过adb命令访问到): /***** ...... try {long tim ...

  8. <自动化测试>之<自动获取手机短信验证码>

    第一次写博,最近解决了做自动化测试短信验证码自动获取填入的方法减少了脚本的人工干预,并非拦截短信,所以不存在安全警报提醒,拿出来分享给大家,有感兴趣的大家可以加Q1856100 目前在职测试开发,,写 ...

  9. django之集成阿里云通信(发送手机短信验证码)

    python3 + django2.0 集成 "阿里云通信" 服务: (SDK文档地址:https://help.aliyun.com/document_detail/55491. ...

随机推荐

  1. Tomcate 启动异常,java.net.BindException: Address already in use: JVM_Bind:80的解决办法

    一直用Tomcat,但是前几天突然报错:           java.net.BindException: Address already in use: JVM_Bind:80 第一反应就是80端 ...

  2. springmvc 视图解析器工作不正常

    参考了如下 https://blog.csdn.net/typa01_kk/article/details/45902783 今天搭建了一个新的工程,从头开始搞的,处理完发现,能正常进入control ...

  3. history-之前发生了什么

    查看一下之前服务器上执行过的命令.看一下总是没错的,加上前面看的谁登录过的信息,应该有点用.另外作为admin要注意,不要利用自己的权限去侵犯别人的隐私哦. 到这里先提醒一下,等会你可能会需要更新 H ...

  4. linux文件系统配置文件

    文件系统 内核提供了一个接口,用来显示一些它的数据结构,这些数据结构对于决定诸如使用的中断.初始化的设备和内存统计信息之类的系统参数可能很有用.这个接口是作为一个独立但虚拟的文件系统提供的,称为 /p ...

  5. tinkcmf视频上传大小限制

    /application/Common/Common/function.php 找到upload_max_filesize把后面的数值改成合适的大小(单位是KB)

  6. JS函数式编程 - 概念

    最近在看Typescript,顺便看了一些函数式编程,然后半个国庆假期就没有了.做个笔记,分几个部分写吧. 最开始接触函数式编程的时候,第一个接触的概念就是高阶函数,和柯里化.咋一看,这不就是长期用来 ...

  7. 2018-9-30-C#-winforms-输入颜色转换颜色名

    title author date CreateTime categories C# winforms 输入颜色转换颜色名 lindexi 2018-09-30 18:27:49 +0800 2018 ...

  8. 洛谷 P3434 [POI2006]KRA-The Disks 贪心

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输出样例 输出样例 说明 思路 AC代码 题面 题目链接 P3434 [POI2006]KRA-The Disks 题目 ...

  9. 【转】基于OLSR路由协议实现Ad-Hoc组网

    一.软件包的安装 1. olsrd软件包的安装 libpthread_0.9.33.2-1_ar71xx.ipk olsrd_0.6.6.2-4_ar71xx.ipk 2. luci的安装 olsrd ...

  10. windows10 中微信(UWP)版本不显示通知消息

    前言: 前段时间笔者更换了升级了WINDOWS10系统,从应用商店安装微信后,使用期间不会推送消息通知,右下角的通知栏也无法添加微信图标.搜索百度和Google后,发现很多人都是这样,这是微信(UWP ...