如何实现php手机短信验证功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现php手机短信验证功能相关的知识,希望对你有一定的参考价值。
http://www.qdexun.cn/jsp/news/shownews.do?method=GetqtnewsdetailAction&id=1677
现在网站在建设网站时为了保证用户信息的真实性,往往会选择发短信给用户手机发验证码信息,只有通过验证的用户才可以注册,这样保证了用户的联系信息资料的100%的准确性 。今天笔者就跟大家分享一下如何实现php手机短信验证功能,希望对大家有所帮助。
第一、实现php手机短信验证功能的基本思路
1、要找到短信服务提供商,接入短信服务
2、在网站信息提交页面请求发送信息
3、服务器向短信服务提供商通信,提交发送请求
4、短信服务提供商通过运营商将信息发送到用户的手机中
二、手机号码短信验证前台页面效果实现
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3 <html xmlns="http://www.w3.org/1999/xhtml"> 4 5 <head> 6 7 <title></title> 8 9 <script src="js/jquery-1.4a2.min.js" type="text/javascript"></script> 10 11 <script type="text/javascript"> 12 13 /*-------------------------------------------*/ 14 15 var InterValObj; //timer变量,控制时间 16 17 var count = 60; //间隔函数,1秒执行 18 19 var curCount;//当前剩余秒数 20 21 var code = ""; //验证码 22 23 var codeLength = 6;//验证码长度 24 25 function sendMessage() { 26 27 curCount = count; 28 29 var dealType; //验证方式 30 31 tel = $(’#tel’).val(); 32 33 if(tel!=’’){ 34 35 //验证手机有效性 36 37 var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/; 38 39 if(!myreg.test($(’#tel’).val())) 40 41 { 42 43 alert(’请输入有效的手机号码!’); 44 45 return false; 46 47 } 48 49 tel = $(’#tel’).val(); 50 51 //产生验证码 52 53 for (var i = 0; i < codeLength; i++) { 54 55 code += parseInt(Math.random() * 9).toString(); 56 57 } 58 59 //设置button效果,开始计时 60 61 $("#btnSendCode").attr("disabled", "true"); 62 63 $("#btnSendCode").val("请在" + curCount + "秒内输入验证码"); 64 65 InterValObj = window.setInterval(SetRemainTime, 1000); //启动计时器,1秒执行一次 66 67 //向后台发送处理数据 68 69 $.ajax({ 70 71 type: "POST", //用POST方式传输 72 73 dataType: "text", //数据格式:JSON 74 75 url: ’yanzhengma.php’, //目标地址(根据实际地址) 76 77 data: "&tel=" + tel + "&code=" + code, 78 79 error: function (XMLHttpRequest, textStatus, errorThrown) { }, 80 81 success: function (msg){ } 82 83 }); 84 85 }else{ 86 87 alert(’请填写手机号码’); 88 89 } 90 91 } 92 93 //timer处理函数 94 95 function SetRemainTime() { 96 97 if (curCount == 0) { 98 99 window.clearInterval(InterValObj);//停止计时器 100 101 $("#btnSendCode").removeAttr("disabled");//启用按钮 102 103 $("#btnSendCode").val("重新发送验证码"); 104 105 code = ""; //清除验证码。如果不清除,过时间后,输入收到的验证码依然有效 106 107 } 108 109 else { 110 111 curCount--; 112 113 $("#btnSendCode").val("请在" + curCount + "秒内输入验证码"); 114 115 } 116 117 } 118 119 </script> 120 121 </head> 122 123 <body> 124 125 <input name="tel" id=tel type="text" /> 126 127 <input id="btnSendCode" type="button" value="发送验证码" onclick="sendMessage()" /></p> 128 129 </body> 130 131 </html> 132 133 第三、调用短信服务器短信接口 134 135 笔者整理的页面是yanzhengma.php(具体根据服务商提供信息) 136 137 <?php //提交短信 138 139 $post_data = array(); 140 141 $post_data[’userid’] = 短信服务商提供ID; 142 143 $post_data[’account’] = ’短信服务商提供用户名’; 144 145 $post_data[’password’] = ’短信服务商提供密码’; 146 147 // Session保存路径 148 149 $sessSavePath = dirname(__FILE__)."/../data/sessions/"; 150 151 if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ 152 153 session_save_path($sessSavePath); 154 155 } 156 157 session_register(’mobliecode’); 158 159 $_SESSION[’mobilecode’] = $_POST["code"]; 160 161 $content=’短信验证码:’.$_POST["code"].’【短信验证】’; 162 163 $post_data[’content’] = mb_convert_encoding($content,’utf-8’, ’gb2312’); //短信内容需要用urlencode编码下 164 165 $post_data[’mobile’] = $_POST["tel"]; 166 167 $post_data[’sendtime’] = ’’; //不定时发送,值为0,定时发送,输入格式YYYYMMDDHHmmss的日期值 168 169 $url=’http://IP:8888/sms.aspx?action=send’; 170 171 $o=’’; 172 173 foreach ($post_data as $k=>$v) 174 175 { 176 177 $o.="$k=".$v.’&’; 178 179 } 180 181 $post_data=substr($o,0,-1); 182 183 $ch = curl_init(); 184 185 curl_setopt($ch, CURLOPT_POST, 1); 186 187 curl_setopt($ch, CURLOPT_HEADER, 0); 188 189 curl_setopt($ch, CURLOPT_URL,$url); 190 191 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 192 193 //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果需要将结果直接返回到变量里,那加上这句。 194 195 $result = curl_exec($ch); 196 197 ?> 198 199 第四:提交表单信息时对短信验证码验证 200 201 //手机验证码开始 202 203 session_start(); 204 205 $svalitel = $_SESSION[’mobilecode’]; 206 207 $vdcodetel = empty($vdcodetel) ? ’’ : strtolower(trim($vdcodetel)); 208 209 210 211 if(strtolower($vdcodetel)!=$svalitel || $svalitel==’’) 212 213 { 214 215 ResetVdValue(); 216 217 //echo "Pageviews=".$vdcodetel; 218 219 ShowMsg("手机验证码错误!", ’-1’); 220 221 exit(); 222 223 }
以上是关于如何实现php手机短信验证功能的主要内容,如果未能解决你的问题,请参考以下文章
php5.2版本如何成功调用腾讯云短信API,实现短信发送功能