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 相关文章推荐
php4的session功能评述(一)
Oct 09 PHP
劣质的PHP代码简化
Feb 08 PHP
PHP XML数据解析代码
May 26 PHP
PHP批量采集下载美女图片的实现代码
Jun 03 PHP
php获取汉字首字母的函数
Nov 07 PHP
CodeIgniter框架中_remap()使用方法2例
Mar 10 PHP
PHP队列用法实例
Nov 05 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
thinkphp 框架数据库切换实现方法分析
May 18 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
文件上传的实现
2006/10/09 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
php实用代码片段整理
2016/11/12 PHP
把textarea中字符串里含有的回车换行替换成<br>的javascript代码
2007/04/20 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
python基础教程之循环介绍
2014/08/29 Python
Python实现的检测网站挂马程序
2014/11/30 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
python实现将内容分行输出
2015/11/05 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
Python探索之URL Dispatcher实例详解
2017/10/28 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
python通过http下载文件的方法详解
2019/07/26 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
KEEN美国官网:美国人气户外休闲鞋品牌
2021/03/09 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
大学生评语大全
2014/04/18 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
英文辞职信范文
2015/05/13 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
奖学金发言稿(范文)
2019/08/21 职场文书
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python
Python中json.dumps()函数的使用解析
2021/05/17 Python