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中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
Dedecms V3.1 生成HTML速度的优化办法
Mar 18 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
抓取YAHOO股票报价的类
May 15 PHP
PHP中Date()时间日期函数的使用方法小结
Apr 20 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 PHP
php引用传值实例详解学习
Nov 06 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
Mar 19 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
Oct 10 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
php如何利用pecl安装mongodb扩展详解
Jan 09 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
Codeigniter发送邮件的方法
2015/03/19 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
js技巧之十几行的代码实现vue.watch代码
2018/06/09 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
理解Python中函数的参数
2015/04/27 Python
Python遍历pandas数据方法总结
2018/02/09 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
python读取Kafka实例
2019/12/23 Python
python3正则模块re的使用方法详解
2020/02/11 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
网上开商店的创业计划书
2014/01/19 职场文书
分公司经理任命书
2014/06/05 职场文书
超市客服工作职责
2014/06/11 职场文书
国际商务专业求职信
2014/07/15 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
黄河绝恋观后感
2015/06/08 职场文书
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis
如何自己动手写SQL执行引擎
2021/06/02 MySQL
MySQL创建管理KEY分区
2022/04/13 MySQL