thinkPHP3.2.3实现阿里大于短信验证的方法


Posted in PHP onJune 06, 2018

注册并登录阿里云

点击控制台后?>鼠标滑到你的用户名称(右边倒数第二个)?>点击accesskeys?>获取

点击控制台后?>产品与服务?>云计算基础服务?>云通信?>短信服务

如果没有送测试短信签名和模板?>添加签名?>添加模板

下载SDK

https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55451.6.569.0uXt4J

进入后选择PHP,会得到dysmsapi_demo_sdk__php.zip,解压得到下图目录

thinkPHP3.2.3实现阿里大于短信验证的方法

放置API

在TP根目录下创建文件夹Api,并将api_sdk整个文件夹复制进去,改名dysms(可自由取名)

thinkPHP3.2.3实现阿里大于短信验证的方法thinkPHP3.2.3实现阿里大于短信验证的方法

引入API文件

在自己需要调用的控制器头部引入如下路径

use Aliyun/Core/Config;
use Aliyun/Core/Profile/DefaultProfile;
use Aliyun/Core/DefaultAcsClient;
use Aliyun/Api/Sms/Request/V20170525/SendSmsRequest;

thinkPHP3.2.3实现阿里大于短信验证的方法

8.正真的撸码现在开始

上源码:

/**
* 数据处理
*/
public function send_message(){
$phone=I("post.phone");
//查找是否已经注册
$user = D('User') -> where("user_phone = {$phone}") -> find();
if ($user) {
echo "手机号已注册!";
}else{
$this->send_phone($phone);
}
// $this->ajaxReturn($data,"JSON");
}
/**
* 生成短信验证码
* @paraminteger $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 = '换成自己的';
$accessKeySecret = '换成自己的';
$templateCode = '换成自己的'; //短信模板ID
//短信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("换成自己的");
$smsData = array('code'=>$code);//所使用的模板若有变量 在这里填入变量的值我的变量名为username此处也为username
//选填-假如模板中存在变量需要替换则为必填(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("Smsverif")->add($data);
if($result){
$data="发送成功";
}else{
$data="发送失败";
}
} else{
$data="发送失败";
}
return $data;
}
/**
* 验证短信验证码是否有效,前端用jquery validate的remote
* @return [type] [description]
*/
public function checkSMSCode(){
$phone = $_POST['phone'];
$code = $_POST['verify'];
$nowTimeStr = time();
$smscodeObj = D("Smsverif")->where("phone={$phone} and code = {$code}")->find();
if($smscodeObj){
$smsCodeTimeStr = $smscodeObj['send_time'];
$recordCode = $smscodeObj['code'];
$flag = $this->checkTime($nowTimeStr, $smsCodeTimeStr);
if($flag!=true || $code !== $recordCode){
echo 'no';
}else{
echo 'ok';
}
}
}
/**
* 验证验证码是否在可用时间
*@param[json] $nowTimeStr[发送结果]
* @param[type] $smsCodeTimeStr [手机号]
*/
public function checkTime ($nowTimeStr,$smsCodeTimeStr) {
$time = $nowTimeStr - $smsCodeTimeStr;
if ($time>900) {
return false;
}else{
return true;
}
}

在来点前端js码:

温馨提示:html还请诸君能自己发挥

代码有了,效果怎么可能没有呢!(实例是用户注册,我的手机号已经注册过了,所以效果是使用的找回密码)

thinkPHP3.2.3实现阿里大于短信验证的方法

到这里就OK了

总结

以上所述是小编给大家介绍的thinkPHP3.2.3实现阿里大于短信验证的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
thinkPHP多表查询及分页功能实现方法示例
Jul 03 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
关于Yii中模型场景的一些简单介绍
Sep 22 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 #PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 #PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 #PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 #PHP
PHP实现的超长文本分页显示功能示例
Jun 04 #PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 #PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
Jun 04 #PHP
You might like
php动态生成JavaScript代码
2009/03/09 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
javascript+html5+css3自定义提示窗口
2017/06/21 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
python DataFrame 取差集实例
2019/01/30 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
python使用smtplib模块发送邮件
2020/12/17 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
暑期实习鉴定
2013/12/16 职场文书
关于爱情的广播稿
2014/01/16 职场文书
故意伤害辩护词
2015/05/21 职场文书
科技馆观后感
2015/06/08 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS