【云顶娱乐平台】php利用云片网实现短信验证码功能的示例代码_php实例_脚本之家

isMobile { $this->error = array('code' => -1, 'msg' => '这个手机号很奇葩哦,请正确输入后重试'); return false; } $redis = Api_Common::redis(); $vcKey = 'VC_'.$mobile; $limitKey = 'VC_LIMIT_'.$mobile; // 验证码重发限制 $data = json_decode, true); if < $data['resend_expire']) { $this->error = array('code' => -1, 'msg' => '短信已在1分钟内发出,请耐心等待'); return false; } // 手机号及IMEI限制 $sendCnt = $redis->zScore; if($sendCnt && $sendCnt >= self::ONE_DAY_FREQ) { $this->error = array('code' => -1, 'msg' => '没收到短信?请稍等或检查短信是否被屏蔽'); return false; } $imeiCnt = $redis->zCard; if($imeiCnt >= self::ONE_DAY_IMEI_COUNT && !$sendCnt) { $this->error = array('code' => -1, 'msg' => '已超过验证码发送设备限制'); return false; } // 获取验证码 if { $vc = strval; $data = array('vc' => $vc, 'resend_expire' => 0); $redis->set($vcKey, json_encode; $redis->expire($vcKey, self::EXPIRE_SEC); // 设置验证码过期时间 } $vc = $data['vc']; $content = '安全验证码:'.$vc; $result = $this->send; if { // 重设重发时限 $data['resend_expire'] = time() + self::RESEND_SEC; $ttl = $redis->ttl; $redis->set($vcKey, json_encode; $redis->expire; // 设置手机号与IMEI限制 $redis->zIncrBy; $redis->expireAt($limitKey, strtotime(date('Y-m-d',strtotime; } return $result; } /** * 向指定手机号发送短信 * @param $mobile * @param $content * @return bool */ public function send{ // TODO 调用具体服务商API return true; } /** * 判断是否为合法手机号 * @param $mobile * @return bool */ private function isMobile { if(preg_match('/^1d{10}$/', $mobile)) return true; return false; } /** * 验证短信验证码 * @param $mobile * @param $vc * @return bool */ public function checkVerifyCode { $vcKey = 'VC_'.$mobile; $vcData = json_decode->get; if($vcData && $vcData['vc'] === $vc) { return true; } return false; } /** * 清除验证码 * @param $mobile */ public function cleanVerifyCode { $redis = Api_Common::redis(); $vcKey = 'VC_'.$mobile; $limitKey = 'VC_LIMIT_'.$mobile; $redis->del; $redis->del; }}

4、用户输入短信验证码。

';print_r;// 发送短信$data=array('text'=>$text,'apikey'=>$apikey,'mobile'=>$mobile);$json_data = send;$array = json_decode;// echo '';print_r;// 发送模板短信// 需要对value进行编码$data = array('tpl_id' => '1', 'tpl_value' => .'='.urlencode.'&'.urlencode.'='.urlencode, 'apikey' => $apikey, 'mobile' => $mobile);// print_r ;$json_data = tpl_send;$array = json_decode;echo $num;// 发送语音验证码// $data=array('code'=>$num,'apikey'=>$apikey,'mobile'=>$mobile);// $json_data =voice_send;// $array = json_decode;// echo $num;// 发送语音通知,务必要报备好模板/* 模板: 课程#name#在#time#开始。 最终发送结果: 课程深度学习在14:00开始 */$tpl_id = 'xxxxxxx'; //修改为你自己后台报备的模板id$tpl_value = urlencode.'='.urlencode.'&'.urlencode.'='.urlencode;$data=array('tpl_id'=>$tpl_id,'tpl_value'=>$tpl_value,'apikey'=>$apikey,'mobile'=>$mobile);$json_data = notify_send;$array = json_decode;// echo $num;curl_close;/************************************************************************************///获得账户function get_user{curl_setopt ($ch, CURLOPT_URL, 'https://sms.yunpian.com/v2/user/get.json');curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array);$result = curl_exec;$error = curl_error;checkErr;return $result;}function send{curl_setopt ($ch, CURLOPT_URL, 'https://sms.yunpian.com/v2/sms/single_send.json');curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query;$result = curl_exec;$error = curl_error;checkErr;return $result;}function tpl_send{curl_setopt ($ch, CURLOPT_URL, 'https://sms.yunpian.com/v2/sms/tpl_single_send.json');curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query;$result = curl_exec;$error = curl_error;checkErr;return $result;}function voice_send{curl_setopt ($ch, CURLOPT_URL, 'http://voice.yunpian.com/v2/voice/send.json');curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query;$result = curl_exec;$error = curl_error;checkErr;return $result;}function notify_send{curl_setopt ($ch, CURLOPT_URL, 'https://voice.yunpian.com/v2/voice/tpl_notify.json');curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query;$result = curl_exec;$error = curl_error;checkErr;return $result;}function checkErr {if{echo 'Curl error: ' . $error;}else{//echo '操作完成没有任何错误';}}?> 

php实现的IMEI限制的短信验证码发送类

验证图片验证码

官方原demo连接如下···链接

以上所述就是本文的全部内容了,希望大家能够喜欢。

短信验证平台使用云片,短信验证码的生成使用thinkphp。

在众多的第三方短信服务商中我选择了云片网这个短信服务商,本文也将尽可能利用最简单的方式去帮助广大开发者解决短信验证码功能模块的实现。

$uid, //用户账号 'pwd'=>strtolower, //MD5位32密码 'mobile'=>$mobile, //号码 'content'=>$content, //内容 'time'=>$time, //定时发送 'mid'=>$mid //子扩展号 ); $re= postSMS; //POST方式提交 if { return "发送成功!"; } else { return "发送失败! 状态:".$re; }} function postSMS{ $row = parse_url; $host = $row['host']; $port = $row['port'] ? $row['port']:80; $file = $row['path']; while  = each { $post .= rawurlencode."=".rawurlencode."&"; //转URL标准码 } $post = substr; $len = strlen; $fp = @fsockopen( $host ,$port, $errno, $errstr, 10); if  { return "$errstr n"; } else { $receive = ''; $out = "POST $file HTTP/1.1rn"; $out .= "Host: $hostrn"; $out .= "Content-type: application/x-www-form-urlencodedrn"; $out .= "Connection: Closern"; $out .= "Content-Length: $lenrnrn"; $out .= $post; fwrite; while  { $receive .= fgets; } fclose; $receive = explode; unset; return implode; }}?>

以上所述是小编给大家介绍的Thinkphp实现短信验证注册,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

再次之前我也参考了大部分网上的博客等,大多数都是把云片网的demo原封不动搬上去,对于我这个前端人员来说,根本毫无头绪,故此我将细致的讲解如何操作,以及献上我的源码。

另付其他网友实现的短信验证码代码

DROP TABLE IF EXISTS `sun_smscode`;CREATE TABLE `sun_smscode`  NOT NULL AUTO_INCREMENT,`mobile` varchar NOT NULL,`code` int NOT NULL,`create_at` datetime NOT NULL,`update_at` datetime NOT NULL,PRIMARY KEY  ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;thinkphp代码:// 获取短信验证码public function getSMSCode(){// create curl resource $ch = curl_init(); // set url$url = 'https://sms.yunpian.com/v1/sms/send.json'; curl_setopt($ch, CURLOPT_URL, $url); // set param$mobile = $_POST['mobile'];$code = $this->createSMSCode();$paramArr = array('apikey' => '******','mobile' => $mobile,'text' => ';$param = '';foreach ($paramArr as $key => $value) {$param .= urlencode.'='.urlencode.'&';}$param = substr($param, 0, strlen;curl_setopt($ch, CURLOPT_POSTFIELDS, $param);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt;curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不验证证书下同curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // $output contains the output string $output = curl_exec; // close curl resource to free up system resources curl_close; //$outputJson = json_decode;$outputArr = json_decode;//echo $outputJson->code;//echo $outputArr['code'];if($outputArr['code'] == '0'){$data['mobile'] = $mobile;$data['code'] = $code;$smscode = D;$smscodeObj = $smscode->where->find{$data['update_at'] = date;$success = $smscode->where->save;if{$result = array('code' => '0','ext' => '修改成功','obj' => $smscodeObj);}echo json_encode($result,JSON_UNESCAPED_UNICODE);}else{$data['create_at'] = date;$data['update_at'] = $data['create_at'];if($smscode->create{$id = $smscode->add{$smscode_temp = $smscode->where;$result = array('code'=> '0','ext'=> '创建成功','obj'=>$smscode_temp);echo json_encode($result,JSON_UNESCAPED_UNICODE);}}}}}

请求的php后端代码如下

生成随机短信验证码

 $.ajax({ type: "post", url: "post.php", //后台代码文件名 data: { mobile:$//获取输入的手机号 }, // dataType: "json", success:function{ console.log; layer.msg; localStorage.setItem('code', JSON.stringify }, error:function{ console.log; 

var code = JSON.parse(localStorage.getItem.val{ layer.msg; return false; }

以上代码,安全性不是很好,我们可以利用工具绕过前端验证。为了避免这个问题,可以在checkPicCode和checkSMSCode函数中添加session值来标记。

这个php后台是我在官方提供的demo上进行修改的,删除了语音验证这个功能,只保留了短信验证,并将返回给前端的数据只保留了四位数字的验证码,方便前端进行验证码的验证。

在最后一步,向数据库中添加用户时,先验证一下两个session值是否都为true,都为true时再添加。

我的业务流程就是通过点击发送验证码这个按钮,触发一个ajax请求事件,将手机号发送到后台,后台生成验证码发送到手机端,并返回这个验证码给前台进行验证码的验证。

跑通前后端

如下代码是进行点击并发送ajax请求,将请求的验证码并保存到localStorage中

注册时经常需要用到短信验证码,本文记录一下思路和具体实现。

以上验证码功能讲解完毕,如需源码请点击
自行下载,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

// 验证验证码是否正确public function checkPicCode{$verify = new ThinkVerify();if($verify->check{$result = array('code' => '0','ext' => '验证通过');echo json_encode($result,JSON_UNESCAPED_UNICODE);}else{$result = array('code' => '1','ext' => '验证码错误,请重新输入');echo json_encode($result,JSON_UNESCAPED_UNICODE);};}

本文将以php举例,介绍网页短信验证码功能的实现。

在数据库新建表sun_smscode:

// 获取短信验证码public function getSMSCode(){// create curl resource $ch = curl_init(); // set url$url = 'https://sms.yunpian.com/v1/sms/send.json'; curl_setopt($ch, CURLOPT_URL, $url); // set param$paramArr = array('apikey' => '******','mobile' => '******','text' => ';$param = '';foreach ($paramArr as $key => $value) {$param .= urlencode.'='.urlencode.'&';}$param = substr($param, 0, strlen;curl_setopt($ch, CURLOPT_POSTFIELDS, $param);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt;//curl默认不支持https协议,设置不验证协议curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // $output contains the output string $output = curl_exec; // close curl resource to free up system resources curl_close; echo $output;}

3、云片发送短信验证码到指定手机号。

思路

假设,该函数的对应url为

验证短信验证码时间是否过期,验证短信验证码是否正确。

在获取短信验证码函数的最顶部,添加调用图片验证码函数,只有通过验证,才发送请求给云片。

5、thinkphp根据验证码是否正确、验证码是否过期两个条件判断是否验证通过。

验证短信验证码

验证图片验证码函数,改为被调用函数:

$_SESSION['checkPicCode'] = true;$_SESSION['checkSMSCode'] = true;

2、thinkphp生成短信验证码,存储,同时和其他参数一起发送请求给云片。

echo json_encode;// 打印出session中的数据echo session_id();// 打印当前session的id

代码实现

public function checkPicCode{$verify = new ThinkVerify();if($verify->check{return true;}else{return false;};}

1、用户输入手机号,请求获取短信验证码。

// 验证短信验证码是否有效public function checkSMSCode(){$mobile = $_POST['mobile'];$code = $_POST['code'];$nowTimeStr = date;$smscode = D;$smscodeObj = $smscode->where->find{$smsCodeTimeStr = $smscodeObj['update_at'];$recordCode = $smscodeObj['code'];$flag = $this->checkTime($nowTimeStr, $smsCodeTimeStr);if{$result = array('code' => '1','ext' => '验证码过期,请刷新后重新获取');echo json_encode($result,JSON_UNESCAPED_UNICODE);return;}if{$result = array('code' => '2','ext' => '验证码错误,请重新输入');echo json_encode($result,JSON_UNESCAPED_UNICODE);return;}$result = array('code' => '0','ext' => '验证通过');echo json_encode($result,JSON_UNESCAPED_UNICODE);}}// 验证验证码时间是否过期public function checkTime($nowTimeStr,$smsCodeTimeStr){//$nowTimeStr = '2016-10-15 14:39:59';//$smsCodeTimeStr = '2016-10-15 14:30:00';$nowTime = strtotime;$smsCodeTime = strtotime;$period = floor(($nowTime-$smsCodeTime)/60); //60sif($period>=0 && $period<=20){return true;}else{return false;}}

thinkphp提供了生成图片验证码的函数,下面我们来实现验证码的生成、刷新和验证。

生成和刷新图片验证码

使用php的curl函数发起https请求,带入参数apikey、mobile和text。

接口地址:

使用postman,输入三个必须的参数apikey、mobile和text。

优化

以上方法,我们利用了thinkphp提供的check方法,实现起来很简单。但是,如果想要得到验证细节,就没有办法了。比如,验证码错误,可能验证码超时,可能因为输入验证码错误,可能因为验证码已经使用过等等。必要的时候,可以重写thinkphp的验证码类,或者重写thinkphp的check方法。

// 获取图片验证码,刷新图片验证码public function getPicCode(){$config = array('fontSize'=>30, // 验证码字体大小'length'=>4, // 验证码位数'useNoise'=>false, // 关闭验证码杂点'expire'=>600);$Verify = new ThinkVerify;$Verify->entry;//2333是验证码标志}

为了防止短信轰炸,在请求获取短信验证码时,需要加入图片验证码。

php发起http/https请求

// 生成短信验证码public function createSMSCode{$min = pow;$max = pow - 1;return rand;}

前言

// 获取短信验证码public function getSMSCode(){$picCode = $_POST['picCode'];if(!$this->checkPicCode{$result = array('code' => '1','ext' => '验证码错误,请重新输入');echo json_encode($result,JSON_UNESCAPED_UNICODE);return;}/*省略*/}

注册// register.jsangular.module.controller('registerController', function ($scope,$http,$httpParamSerializer,$state,$interval) { $scope.picCodeUrl = '/owner-bd/index.php/Home/CheckCode/getPicCode';$scope.isShow1 = true;$scope.isShow2 = false;$scope.btnSMSText = '获取验证码';$scope.btnSMSDisabled = false;$scope.checkOver = false;// 获取短信验证码$scope.getSMSCode = function(){var param = {mobile: $scope.mobile,picCode: $scope.picCode};$http({method:'POST',url:'/owner-bd/index.php/Home/SMS/getSMSCode',//url: '/owner-fd/mock/common.json',headers:{'Content-Type':'application/x-www-form-urlencoded'},dataType: 'json',data: $httpParamSerializer.then(function successCallback {console.log;if(response.data.code == '0'){$scope.checkOver = true;$scope.btnSMSDisabled = true;var time = 60;var timer = null;timer = $interval{time = time - 1;$scope.btnSMSText = time+'秒';if {$interval.cancel;$scope.btnSMSDisabled = false;$scope.btnSMSText = '重新获取';}}, 1000);}}, function errorCallback {console.log;}// 验证短信验证码$scope.next = function(){if{console.log;return;}var param = {mobile: $scope.mobile,code: $scope.SMSCode};$http({method:'POST',url:'/owner-bd/index.php/Home/SMS/checkSMSCode',//url: '/owner-fd/mock/common.json',headers:{'Content-Type':'application/x-www-form-urlencoded'},dataType: 'json',data: $httpParamSerializer.then(function successCallback {console.log;if(response.data.code == '0'){$scope.isShow1 = false;$scope.isShow2 = true;}}, function errorCallback {console.log;}// 刷新图片验证码$scope.refresh = function(){$scope.picCodeUrl = '/owner-bd/index.php/Home/CheckCode/getPicCode?'+Math.random;

默认生成四位的随机短信验证码。