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 相关文章推荐
使用eAccelerator加密PHP程序
Oct 03 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
PHP学习之字符串比较和查找
Apr 17 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 PHP
YII路径的用法总结
Jul 09 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
php集成动态口令认证
Jul 21 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
Jan 04 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
由php的call_user_func传reference引发的思考
2010/07/23 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
php 文本文件的读取效率
2012/02/10 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
Python文件读取的3种方法及路径转义
2015/06/21 Python
python破解zip加密文件的方法
2018/05/31 Python
python计算日期之间的放假日期
2018/06/05 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
高级技校毕业生自荐信
2013/11/18 职场文书
服务口号大全
2014/06/11 职场文书
机械工程师岗位职责
2014/06/16 职场文书
国际金融专业自荐信
2014/07/05 职场文书
北京故宫的导游词
2015/01/31 职场文书
幼师中班个人总结
2015/02/12 职场文书
会计工作能力自我评价
2015/03/05 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL