您的位置:澳门新葡萄京娱乐网站 > 编程知识 > 使用 laravel sms 构建短信验证码发送校验功能,

使用 laravel sms 构建短信验证码发送校验功能,

2019-12-22 01:39

4.sms函数收取多少个数组参数 ,一个是殡葬的数量的数组,贰个是初步化endPoint、accessKey、secretAccessKey的数组,若是不想在类中稳固开始化的key,则传出第3个参数就可以。例:BaiduSms::sms

使用 laravel sms 营造短信验证码发送校验成效,laravelsms

laravel 完成短信验证码功效,寻找资料开采相比盛行的有四个包:

一个是laravel sms 地址 

一个是easy sms 地址

花色中供给落实一个发送和表明短信验证码的作用。在此以前的章程稍显烦琐。经高人指导,开采能够用 laravel-sms 这些包代替。且结议和运用轻便命理术数。故有了那篇示例。

本例使用了Laravel 5.5、 Api Starter Kit 以致 Laravel Sms 2.6。

本例使用的短信服务商为云片。

安装

在品种根目录下实行(推荐):

composer require toplan/laravel-sms:~2.6
composer require toplan/laravel-sms:~2.6 

也足以在 composer.json 的 require 字段中充足:

"toplan/laravel-sms": "2.6"
"toplan/laravel-sms": "2.6" 

然后在档期的顺序根目录下实行:

composer update
composer update

 在 config/app.php 的 providers 数组中加上:

ToplanPhpSmsPhpSmsServiceProvider::class,
ToplanSmsSmsManagerServiceProvider::class,
ToplanPhpSmsPhpSmsServiceProvider::class,
ToplanSmsSmsManagerServiceProvider::class, 

并在 aliases 数组里拉长:

'PhpSms' => ToplanPhpSmsFacadesSms::class,
'SmsManager' => ToplanSmsFacadesSmsManager::class,
'PhpSms' => ToplanPhpSmsFacadesSms::class,
'SmsManager' => ToplanSmsFacadesSmsManager::class,

在品种根目录下实施:

php artisan vendor:publish --provider="ToplanPhpSmsPhpSmsServiceProvider"
php artisan vendor:publish --provider="ToplanSmsSmsManagerServiceProvider"
php artisan vendor:publish --provider="ToplanPhpSmsPhpSmsServiceProvider"
php artisan vendor:publish --provider="ToplanSmsSmsManagerServiceProvider" 

会在 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 数组中云片的代理器消息。

'YunPian' => [
 //用户唯一标识,必须
 'apikey' => '在这里填写你的 APIKEY',
],
'YunPian' => [
 //用户唯一标识,必须
 'apikey' => '在这里填写你的 APIKEY',
],

安装 scheme 数组,配置均衡调节方案。

'scheme' => [
 'YunPian',
],
'scheme' => [
 'YunPian',
], 

配置 laravel-sms.php

设置内置路由。 

'route' => [
 'enable'  => true,
 'prefix'  => 'laravel-sms', 
 'middleware' => ['api'],
],
'route' => [
 'enable'  => true,
 'prefix'  => 'laravel-sms', 
 'middleware' => ['api'],
],

设置需要间距,单位为秒。

'interval' => 60,
'interval' => 60, 

设置号码证实准则。

'validation' => [
 'phone_number' => [ //需验证的字段
 'isMobile' => true, //本字段是否为手机号
 'enable'  => true, //是否需要验证
 'default'  => 'mobile_required', //默认的静态规则
 'staticRules' => [ //全部静态规则
  'mobile_required'  => 'required|zh_mobile',
 ],
 ],
],
'validation' => [
 'phone_number' => [ //需验证的字段
 'isMobile' => true, //本字段是否为手机号
 'enable'  => true, //是否需要验证
 'default'  => 'mobile_required', //默认的静态规则
 'staticRules' => [ //全部静态规则
  'mobile_required'  => 'required|zh_mobile',
 ],
 ],
],

设置验证码法规。

'code' => [
 'length'  => 4, //验证码长度
 'validMinutes' => 10, //验证码有效时间长度,单位为分钟
 'repeatIfValid' => true, //验证码有效期内是否重复使用
 'maxAttempts' => 0, //验证码最大尝试验证次数,0 或负数则不启用
],
'code' => [
 'length'  => 4, //验证码长度
 'validMinutes' => 10, //验证码有效时间长度,单位为分钟
 'repeatIfValid' => true, //验证码有效期内是否重复使用
 'maxAttempts' => 0, //验证码最大尝试验证次数,0 或负数则不启用
],

设置验证码内容短信。

'content' => function ($code, $minutes, $input) {
 return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)";
},
'content' => function ($code, $minutes, $input) {
 return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)";
},

假设有供给,能够拉开数据库日志。必要提前运转 php artisan migrate 生成 laravel_sms 表。

'dbLogs' => 'ture',
'dbLogs' => 'ture',

 API 实现

在 app/Utils 下新建 SmsCodeUtil.php,并在里边完毕验证码发送和校验成效。那样任何类能够任何时候调用,进步代码的复用性。

发送模块

出殡前供给对手提式有线电话机号举办校验,包涵:

validateSendable() :验证是否满足发送间隔 
validateFields() :验证数据合法性

通过验证后,再选拔 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']);
 }
}

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 上朝气蓬勃度交由了代码,稍作矫正即可。

public function validateSmsCode()
{
 //验证数据
 $validator = Validator::make(inputAll(), [
 'phone_number' => 'required|confirm_mobile_not_change|confirm_rule:mobile_required',
 'sms_code'  => 'required|verify_code',
 ]);

 if ($validator->fails()) {
 //验证失败后建议清空存储的发送状态,防止用户重复试错
 SmsManager::forgetState();
 respondUnprocessable(formatValidationErrors($validator));
 }
}
public function validateSmsCode()
{
 //验证数据
 $validator = Validator::make(inputAll(), [
 'phone_number' => 'required|confirm_mobile_not_change|confirm_rule:mobile_required',
 'sms_code'  => 'required|verify_code',
 ]);
 if ($validator->fails()) {
 //验证失败后建议清空存储的发送状态,防止用户重复试错
 SmsManager::forgetState();
 respondUnprocessable(formatValidationErrors($validator));
 }
}

功效测量试验

接下去配置路由和调整器,测验下效果是还是不是正常。

能够何况开拓 host-domain/laravel-sms/info查阅验证码短信发送和校验状态。

若启用了数据库日志,能够在 laravel_sms 表中查看短信发送结果的详细消息。

先在 api.php 中添加:

$api->post('/auth/send-sms-code', 'Auth[email protected]');
$api->post('/auth/validate-sms-code', 'Auth[email protected]');
$api->post('/auth/send-sms-code', 'Auth[email protected]');
$api->post('/auth/validate-sms-code', 'Auth[email protected]');

再在 LoginController.php 中添加:

use AppUtilsSmsCodeUtil;
class LoginController extends Controller {
 use SmsCodeUtil;
 ...
}
use AppUtilsSmsCodeUtil;
class LoginController extends Controller {
 use SmsCodeUtil;

 ...
}

然后接受 Postman 或其余相仿工具测量检验 Api 功效。

出殡验证码 

POST 服务器地址/api/auth/send-sms-code
{
  "phone_number": "手机号"
}
POST 服务器地址/api/auth/send-sms-code
{
  "phone_number": "手机号"
}

若通过验证并发送成功,则会回来:

{
  "message": "短信验证码发送成功,请注意查收",
  "status_code": 200
}
{
  "message": "短信验证码发送成功,请注意查收",
  "status_code": 200
}

还要填写的手提式有线电话机号选取到验证码。

若验证失利或发送败北,则会回去对应的错误信息。

校验验证码

POST 服务器地址/api/auth/validate-sms-code
{
  "phone_number": "手机号",
  "sms_code": "验证码"
}

POST 服务器地址/api/auth/validate-sms-code
{
  "phone_number": "手机号",
  "sms_code": "验证码"
}

若通过验证,则无再次回到。

若验证战败,则会回来对应的错误消息。

本地化提醒消息语言

在 laravel-sms.php 中提供了部分提示新闻的自定义。想要将盈余部分的提醒音讯转变为本土语言,须要再度管理。

第生龙活虎保证 config/app.php 中的语言设置科学。这里安装为 zh_cn。

'locale' => 'zh_cn',
'locale' => 'zh_cn', 

然后在 resourceslangzh_cn 文件夹下新建 validation.php,并填入本地化音信:

return [
 'required' => '缺少:attribute参数',
 'zh_mobile'         => '非标准的中国大陆手机号',
 'confirm_mobile_not_change' => '提交的手机号已变更',
 'verify_code'        => '验证码不合法或无效',
 'attributes' => [
  'phone_number' => '手机号',
  'sms_code'  => '验证码',
 ],
];
return [
 'required' => '缺少:attribute参数',
 'zh_mobile'         => '非标准的中国大陆手机号',
 'confirm_mobile_not_change' => '提交的手机号已变更',
 'verify_code'        => '验证码不合法或无效',
 'attributes' => [
  'phone_number' => '手机号',
  'sms_code'  => '验证码',
 ],
];

重复 POST 相关地点,能够看占星应的提醒信息语言已经本地化。

总结

上述所述是小编给我们介绍的采用 laravel-sms 构建短信验证码发送校验模块,希望对大家有着扶持,若是我们有此外疑问请给自个儿留言,小编会及时回复我们的。在这里也特别多谢我们对帮客之家网站的支撑!

laravel sms 创设短信验证码发送校验功能,laravelsms laravel 达成短信验证码作用,寻找资料开掘比较盛行的有三个包: 三个是laravel sms 地...

*@paramstring $templateCode

百度云 sms php版本

if($result['Message']!='OK'){

$to = [//"invokeId" => "", //如果在类中已经设定好,则此处无需再写//"templateCode" => "", //如果在类中已经设定好,则此处无需再写"phoneNumber" => "188********","contentVar" => ["code" => str_shuffle //模板里面的变量]];$re = BaiduSms::sms;//发送//var_dump; //打印返回结果/**********打印结果START************/object {["code"]=>string "1000"["message"]=>string "成功"["requestId"]=>string "9b2fbcca-6da9-4bfc-a458-93a676dcbb48"}/**********打印结果END************/

//扩张服务结点

如上就是本文的全部内容,希望对大家的求学抱有助于,也指望大家多多指教脚本之家。

1.下载SDK,接口在Ali大鱼官网,自个儿使用版本为前年16月下载,不保障持续官方SDK会相通,本人SDK版本地址百度云: 密码:oy7c;下载后放到TP5增添目录extend下,如图:

2.改过命名空间,改善第二行的namespace,修正成为本身的目录。(laravel为例,我是位于app/Http/Library 下)

*

合法未有给出php版本的短信发送sdk, 在那借鉴 [ 点击这里 ] ,并在这里基本功大校艺术改成 单例模式 在原来的底蕴上更是轻巧调用

*@paramstring $phoneNumbers必填,短信选择号码(e.g. 12345678901卡塔尔(قطر‎

BaiduSms

澳门新葡萄京娱乐网站 1

先是给出github地址:

}

1.开采 BaiduSms.php 改良 sms函数中 accessKey 、 secretAccessKey 那八个参数登入百度云账号,在右上角头像的拉萨注明中能够赢得

$templateCode='此间写短信模板';//短信模板 如:SMS_105200000

假诺发送模板固定,能够改善 init_array 中的 invokeId、templateCode,那样今后调用时,就无需在传那多少个参数。

$signName='此处写具名';//签名

//可选,设置模板参数

ini_set("display_errors","on");

*@paramstring $accessKeySecret必填,AccessKeySecret

如有别的疑问能够在本文留言!

session('home_reg.phone',$phoneNumbers);

*构造器

}

$phoneNumbers=$mobile;

useAliyunCoreConfig;

*

* Class SmsDemo

if(checkMobile{

上面是SMS接口代码,须求的网民可以直接下载 密码:5w1x

usethinkSession;

}

*@paramstring $accessKeyId必填,AccessKeyId

session('home_reg.verifycode',$verifycode);

$acsResponse=$this->acsClient->getAcsResponse;

//加载区域结点配置

*

Ali大鱼短信配置相当轻便,只需引进Ali大鱼完整SDK,然后在温馨的门类里面援引SDK目录autoload.php文件,然后在接口调用demo接口就好了!

//早先化AcsClient用于发起号令

namespaceapphomecontroller;

*发送短信模范

$region="cn-hangzhou";

* (e.g. SMS_0001)

useAliyunCoreDefaultAcsClient;

$domain="dysmsapi.aliyuncs.com";

到这一步,引进SDK就完事了,剩下的正是复制sdk的 demo函数,创设叁个协调的startSendSms(卡塔尔发送函数就能够了。

$request=newSendSmsRequest();

}

$request->setTemplateCode($templateCode);

*/

//暂且不支持多Region

/**

returnApiError('验证码发送战败:'.$result['Message']);

//必填,设置模板CODE

//可选,设置流水号

/**

returnApiSuccess('验证码发送成功,请在乎查收'卡塔尔(قطر‎;

session('home_reg.time',time;//10分钟

public functionsendSms($signName,$templateCode,$phoneNumbers,$templateParam,$outId=null){

概念后,大家就能够引进SDK加载路线了,我们在home调整器新建sms调整器,然后引进SDK供给的命名空间如图

$result=$this->sendSms($signName,$templateCode,$phoneNumbers,$templateParam,$outId=null); //调用SDK接口

澳门新葡萄京娱乐网站 2

如此那般全数短信配置就完了了,前端只要求调用你的这一个sms/startSendSms接口就足以发短信了!想必会遭逢的难点SDK autoload.PHP引进不科学。**

2,仿照SDK的demo,编写本身的短信发送接口,这里的前提是引进SDK目录autoload.php文件,应用程式_EXTEND宏定义目录 SDK路线;应用软件_EXTEND定义地点在输入文件index.php中,define('APP_EXTEND',__DIR__.'/extend/');

}

//必填,设置签订左券名称

//服务结点

//短信API付加物域名

if($templateParam){

DefaultProfile::addEndpoint($endPointName,$region,$product,$domain);

if{

returnApiError('手提式有线电话机号码格式不精确'卡塔尔;

*

*@paramarray|null $templateParam

//短信API产品名

usethinkController;

public function startSendSms(卡塔尔(قطر‎{ //这里是和睦写的出殡和安葬函数,里面一贯调用SDK的sendSms接口就能够了

return$acsResponse;

return;

}

$result=json_decode(json_encode,true);

*@paramstring|null $outId [optional]选填,发送短信流水号(e.g. 1234卡塔尔国

}

$mobile=input;//传递的编号

$endPointName="cn-hangzhou";

Config::load();

// var_dump($acsResponse);

useAliyunApiSmsRequestV20170525QuerySendDetailsRequest;

*

return;

}

*/

if($mobile==""){

require_onceAPP_EXTEND.'Alidayu/api_sdk/vendor/autoload.php';

//必填,设置雉短信选择号码

$request->setOutId;

}

//最早化SendSmsRequest实例用于安装发送短信的参数

{

$templateParam=array('code'=>$verifycode);

$product="Dysmsapi";

//发起访谈乞求

public function__construct($accessKeyId='这里要写你本身的短信accessKeyId',$accessKeySecret='这里要写你和煦的短信accessKeySecret'卡塔尔国

useAliyunCoreProfileDefaultProfile;

*必填,短信模板Code,应从严按"模板CODE"填写,参谋:短信模板页

//打字与印刷央求结果

//起头化客商Profile实例

澳门新葡萄京娱乐网站 3

*@paramstring $signName

/**

*@returnstdClass

returnApiError('手机号码不能够为空'卡塔尔(英语:State of Qatar);

$profile=DefaultProfile::getProfile($region,$accessKeyId,$accessKeySecret);

*

$request->setTemplateParam(json_encode($templateParam));

*选填,假如模板中存在变量需求替换则为必填项(e.g. Array("code"=>"12345", "product"=>"Ali通讯"卡塔尔国卡塔尔(英语:State of Qatar)

澳门新葡萄京娱乐网站 4

$request->setSignName($signName);

*@propertyAliyunCoreDefaultAcsClient acsClient

*/

黄金时代,先说现实落到实处际境况势,最终附加源码包!

//调用发送短信接口

$verifycode=strval(rand(1000,9999卡塔尔(قطر‎卡塔尔;//验证码数字4位 验证码遵照自个儿索要编写制定

*必填,短信签字,应严苛"签字名称"填写,参照他事他说加以调查:短信具名页

{

$request->setPhoneNumbers($phoneNumbers);

useAliyunApiSmsRequestV20170525SendSmsRequest;

$this->acsClient=newDefaultAcsClient;

return;

classSmsextendsController

本文由澳门新葡萄京娱乐网站发布于编程知识,转载请注明出处:使用 laravel sms 构建短信验证码发送校验功能,

关键词: