首页 » SEO优化 » 阿里年夜于php实例技巧_thinkphp32实现新版阿里大年夜于短信验证功能

阿里年夜于php实例技巧_thinkphp32实现新版阿里大年夜于短信验证功能

duote123 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

这篇文章即参考了江南极客的博客:http://blog.csdn.net/sinat_35861727/article/details/75666875,又参考了源鱼人生的CSDN博客:http://blog.csdn.net/m0_37587812/article/details/77575265?locationNum=3&fps=1,只是根据自己的须要,做了部分大略的修正!

第一步:阿里大于配置

(1)注册或登录你的阿里云账号,创建自己的Access Key秘钥

阿里年夜于php实例技巧_thinkphp32实现新版阿里大年夜于短信验证功能

(2)点击:产品与做事–>云打算根本做事–>云通信–>短信服务,进入自己的短信服务管理掌握台!
设置设置的短信署名和短信模板,由于须要审核,以是请提前申请

阿里年夜于php实例技巧_thinkphp32实现新版阿里大年夜于短信验证功能
(图片来自网络侵删)

(3)下载阿里大于SDK和demo

下载地址:https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55451.6.569.3psCY5

解压后:

(4)创建api

在tp3.2根目录下创建Api文件夹并把api_sdk放进去,并修正名称为:dysms

第二步:TP3.2掌握器开拓

(1)利用命名空间办法引入阿里大于

namespace Admin\Controller;

use Think\Controller;

use Aliyun\Core\Config;

use Aliyun\Core\Profile\DefaultProfile;

use Aliyun\Core\DefaultAcsClient;

use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;

(2)开拓掌握器方法(大部分直接复制的源鱼人生博客)

public function index(){

$this->display();

}

/

数据处理

/

public function send_message(){

$phone=I(\"大众post.phone\公众);

//查找是否已经注册,他是验证有无注册,我这边不须要直接注释掉了

//$user = D('User') -> where(\"大众user_phone = {$phone}\"大众) -> find();

//if ($user) {

// echo \"大众<span style='color:red'>手机号已注册!
</span>\公众;

// }else{

// $this->send_phone($phone);

// }

$this->send_phone($phone);

}

/

天生短信验证码

@param integer $length [验证码长度]

该函数可以自定义生产随机验证码!

/

public function createSMSCode($length = 4){

$min = pow(10 , ($length - 1));

$max = pow(10, $length) - 1;

return rand($min, $max);

}

/

发送验证码

@param [integer] $phone [手机号]

/

public function send_phone($phone){

$code=$this->createSMSCode($length = 4);

require_once './Api/dysms/vendor/autoload.php'; //此处为你放置API的路径

Config::load(); //加载区域结点配置

$accessKeyId = ';您的accessKeyId

$accessKeySecret = ''; 您的accessKeySecret

$templateCode = ''; //短信模板ID 格式为:SMS_,只填写后边的

/以上三个参数可以存到系统配置里边通过C(‘’)办法引入/

//短信API产品名(短信产品名固定,无需修正)

$product = \公众Dysmsapi\公众;

//短信API产品域名(接口地址固定,无需修正)

$domain = \"大众dysmsapi.aliyuncs.com\公众;

//暂时不支持多Region(目前仅支持cn-hangzhou请勿修正)

$region = \公众cn-hangzhou\公众;

// 初始化用户Profile实例

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

// 增加做事结点

DefaultProfile::addEndpoint(\"大众cn-hangzhou\"大众, \"大众cn-hangzhou\公众, $product, $domain);

// 初始化AcsClient用于发起要求

$acsClient = new DefaultAcsClient($profile);

// 初始化SendSmsRequest实例用于设置发送短信的参数

$request = new SendSmsRequest();

// 必填,设置短信吸收号码

$request->setPhoneNumbers($phone);

// 必填,设置署名名称

$request->setSignName(\"大众您的署名\公众);

// 必填,设置模板CODE

$request->setTemplateCode(\公众您的短信id\公众);

$smsData = array('number'=>$code); //所利用的模板若有变量 在这里填入变量的值 即你的模板短信中涌现的变量!

//选填-如果模板中存在变量须要更换则为必填(JSON格式),交情提示:如果JSON中须要带换行符,请参照标准的JSON协议对换行符的哀求,比如短信内容中包含\r\n的情形在JSON中须要表示成\\r\\n,否则会导致JSON在做事端解析失落败

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

//发起访问要求

$acsResponse = $acsClient -> getAcsResponse($request);

//返回要求结果

$result = json_decode(json_encode($acsResponse), true);

$resp = $result['Code'];

$this->sendMsgResult($resp,$phone,$code);

}

/

验证手机号是否发送成功 前端用ajax,发送成功则提示倒计时,如50秒后可以重新发送

@param [json] $resp [发送结果]

@param [type] $phone [手机号]

@param [type] $code [验证码]

@return [type] [description]

/

private function sendMsgResult($resp,$phone,$code){

if ($resp == \"大众OK\"大众) {

$data['phone']=$phone;

$data['code']=$code;

$data['send_time']=time();

$result = D(\"大众sms\"大众)->add($data);//把已发送的存到数据库方便核对

if($result){

$data=\"大众发送成功\公众;

}else{

$data=\"大众发送失落败\"大众;

}

} else{

$data=\"大众发送失落败\"大众;

}

$this->ajaxReturn($data);//一样平常都是ajax验证,以是这里我改成了ajaxReturn返回!

}

/

验证短信验证码是否有效,前端用jquery validate的remote

@return [type] [description]

/

public function checkSMSCode(){

$phone = I(\"大众param.phone\公众);

$code = I(\"大众param.verify\"大众);

$nowTimeStr = time();

$where['phone'] = $phone;//改成通用tp3.2的模式

$where['code'] = $code;

$smscodeObj = D(\公众Sms\"大众)->where($where)->find();

$data = \"大众\公众;

if($smscodeObj){

$smsCodeTimeStr = $smscodeObj['send_time'];

$recordCode = $smscodeObj['code'];

$flag = $this->checkTime($nowTimeStr, $smsCodeTimeStr);

if($flag!=true || $code !== $recordCode){

if($flag){

$data = \"大众no\"大众;

}else{

$data = \"大众nos\公众;//多写了一个判断,用来判断验证码是否超时

}

}else{

$data = \公众ok\"大众;

}

}

$this->ajaxReturn($data);//同样引入ajaxRetrun办法

}

/

验证验证码是否在可用韶光

@param [json] $nowTimeStr [发送结果]

@param [type] $smsCodeTimeStr [手机号]

/

public function checkTime($nowTimeStr,$smsCodeTimeStr) {

$time = $nowTimeStr - $smsCodeTimeStr;

if ($time>900) {

return false;

}else{

return true;

}

}

第三步:前端设计

参考他们的博客,都没有写前端,由于前端都相对大略了,这里为了方便大家互换,我把我的代码贴了出来!
我利用的是layui的前端代码!

<table class=\"大众layui-table\"大众>

<tr>

<td width=\公众20%\"大众 align=\"大众right\"大众>手机号:</td>

<td width=\"大众80%\"大众>

<span class=\"大众table_span\"大众 style=\公众width:300px; float:left;\"大众><input name=\公众phone\"大众 type=\"大众text\"大众 id=\"大众phone\"大众 class=\"大众layui-input\公众></span>

<!--<span class=\公众table_txt\"大众 id=\"大众phone_tips\公众>ok</span>-->

<span class=\"大众table_txt\"大众 id=\公众times\公众></span>

<span class=\"大众table_txt\"大众 id=\"大众send\公众>发送验证码</span>

</td>

</tr>

<tr>

<td align=\"大众right\"大众>验证码:</td>

<td>

<span class=\"大众table_span\"大众 style=\公众width:300px; float:left;\公众><input type=\公众text\"大众 id=\公众verify\"大众 name=\公众verify\"大众 class=\"大众layui-input\公众></span>

<span class=\公众table_txt\"大众 id=\"大众chk_verify\公众></span></td>

</tr>

<tr>

<td align=\公众right\"大众></td>

<td valign=\"大众middle\公众>

<input type=\"大众submit\公众 name=\"大众Submit\"大众 id=\公众login\"大众 value=\"大众确&nbsp; &nbsp;定\"大众 class=\"大众layui-btn\公众 >

</td>

</tr>

</table>

AJAX代码:

$('#login').attr({'disabled':'false','title':'禁止提交'}).css({'background-Color':'#ccc'});

//验证码倒计时

function timetips(){

var i=60;

var timer=setInterval(function(){

i--;

$(\"大众#times\"大众).text(i);

if(i==0){

$(\"大众#send\"大众).css(\"大众display\"大众,\"大众block\"大众);

$(\公众#times\"大众).css(\公众display\"大众,\公众none\公众);

clearInterval(timer);

$(\"大众#times\"大众).text(60);

}

},1000);

};

$('#send').click(function(){

var phone = $('#phone').val();

$.ajax({

url: \"大众__CONTROLLER__/send_message\"大众,

data: {'phone': phone },

dataType: \"大众json\"大众,//改成了json办法

type: \公众POST\公众,

success: function(data) {

if (data == 2) {

$('#phone_tips').html('手机号已注册!
');//这一步我没用到,可以根据情形删除

}else{

$(\公众#send\"大众).css(\"大众display\"大众,\公众none\"大众);

$(\公众#times\"大众).css(\公众display\"大众,\"大众block\"大众);

timetips();

}

//console.log(data);

}

});

});

//判断验证码是否精确

//通过键盘事宜触发

$('#verify').keyup(function(){

var verify = $('#verify').val();

var phone = $('#phone').val();

$.ajax({

url: \"大众__CONTROLLER__/checkSMSCode\公众,

data: {'verify': verify,'phone': phone },

dataType: \"大众json\"大众,

type: \"大众POST\"大众,

success: function(data) {

if (data == 'ok') {

$('#login').attr({'disabled':'true','title':'登录'}).css({'background-Color':'#009688'});

}else if (data == 'nos'){

$('#login').attr({'disabled':'false','title':'禁止提交'}).css({'background-Color':'#ccc'});

$(\"大众#chk_verify\"大众).html(\"大众<font color=red>验证码超时</font>\"大众);//增加一个超时验证

}else if(data == 'no'){

$('#login').attr({'disabled':'false','title':'禁止提交'}).css({'background-Color':'#ccc'});

$(\"大众#chk_verify\公众).html(\公众<font color=red>验证码缺点</font>\"大众)

}

//console.log(data);

}

});

});

如果中间涌现任何缺点提示,可以参考阿里云帮助:https://help.aliyun.com/document_detail/55451.html?spm=5176.doc55359.6.556.ZG9vwi 进行修正!

至此所有的教程写完了,履历证无误!
终于搞定了!

版权所有,转载请注明出处!
(百度百家的朋友,请不要在抄袭了!

标签:

相关文章

php3个等号技巧_CSS3 多列

我们学的不仅是技能,更是梦想!我的头条里先容了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP...

SEO优化 2024-12-12 阅读0 评论0

php证书加签技巧_php若何实现验证码

2016-06-22 PHP技能分享证码在表单实现越来越多了,但是用js的写的验证码,总以为未便利,以是学习了下php实现的验证码...

SEO优化 2024-12-12 阅读0 评论0