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教程 基本语法
Oct 23 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
PHP生成sitemap.xml地图函数
Nov 13 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 PHP
php生成短域名函数
Mar 23 PHP
php实现中文字符截取防乱码方法汇总
Apr 29 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
YII框架常用技巧总结
Apr 27 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
Apr 22 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的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
CI框架数据库查询之join用法分析
2016/05/18 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
浅谈PHP进程管理
2019/03/08 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
使用js+jquery实现无限极联动
2013/05/23 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
Python序列操作之进阶篇
2016/12/08 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
花店创业计划书范文
2014/02/07 职场文书
法人委托书范本
2014/09/15 职场文书
初中毕业生自我评价
2015/03/02 职场文书
戒赌保证书
2015/05/11 职场文书