PHP之短信驗(yàn)證碼功能
現(xiàn)在網(wǎng)站在建設(shè)網(wǎng)站時(shí)為了保證用戶信息的真實(shí)性,往往會(huì)選擇發(fā)短信給用戶手機(jī)發(fā)驗(yàn)證碼信息,只有通過(guò)驗(yàn)證的用戶才可以注冊(cè),這樣既保證了用戶的聯(lián)系信息資料的100%的準(zhǔn)確性,也為用戶提供了一種最方便快捷的注冊(cè)方式 。
那么我們今天就來(lái)說(shuō)一下 短信發(fā)送原理, 如下圖
PHP之短信驗(yàn)證碼功能
工作開(kāi)發(fā)流程:
第一、實(shí)現(xiàn)php手機(jī)短信驗(yàn)證功能的基本思路
1谆棺、要找到短信服務(wù)提供商,接入短信服務(wù)
2罕袋、在網(wǎng)站信息提交頁(yè)面請(qǐng)求發(fā)送信息
3改淑、服務(wù)器向短信服務(wù)提供商通信,提交發(fā)送請(qǐng)求
4浴讯、短信服務(wù)提供商通過(guò)運(yùn)營(yíng)商將信息發(fā)送到用戶的手機(jī)中
第二 :手機(jī)號(hào)碼短信驗(yàn)證前臺(tái)頁(yè)面效果實(shí)現(xiàn)
<!DOCTYPE html>
<html lang="en">
<head>
? ? <title>鄭州傳智播客</title>
? ? <meta charset="UTF-8">
? ? <meta name="Author" content="PHP就業(yè)老師"/>
<style type="text/css">
? ? *{margin:0;padding:0;}
</style>
? ? <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
? ? <script type="text/javascript">
? ? ? ? var InterValObj; //timer變量朵夏,控制時(shí)間
? ? ? ? var count = 60; //間隔函數(shù),1秒執(zhí)行
? ? ? ? var curCount;//當(dāng)前剩余秒數(shù)
? ? ? ? function codeRandom(chars) {
? ? ? ? ? ? var res="";
? ? ? ? ? ? for(var i=0;i<chars;i++){
? ? ? ? ? ? ? ? res += Math.floor(Math.random()*10);
? ? ? ? ? ? }
? ? ? ? ? return res;
? ? ? ? }
? ? ? ? //timer處理函數(shù)
? ? ? ? function SetRemainTime() {
? ? ? ? ? ? if (curCount == 0) {
? ? ? ? ? ? ? ? window.clearInterval(InterValObj);//停止計(jì)時(shí)器
? ? ? ? ? ? ? ? $("#sub").removeAttr("disabled");//啟用按鈕
? ? ? ? ? ? ? ? $("#sub").val("重新發(fā)送驗(yàn)證碼");
? ? ? ? ? ? ? ? code = ""; //清除驗(yàn)證碼榆纽。如果不清除仰猖,過(guò)時(shí)間后,輸入收到的驗(yàn)證碼依然有效
? ? ? ? ? ? }
? ? ? ? ? ? else {
? ? ? ? ? ? ? ? curCount--;
? ? ? ? ? ? ? ? $("#sub").val("請(qǐng)?jiān)? + curCount + "秒內(nèi)輸入驗(yàn)證碼");
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //獲取手機(jī)號(hào)碼
? $(function () {
? ? $("#sub").click(function () {
? ? ? ? var phone=$("#phone").val(); //獲取手機(jī)號(hào)碼
? ? ? ? curCount = count;
? ? ? ? if(phone!=''){
? ? ? ? ? ? //驗(yàn)證手機(jī)有效性
? ? ? ? ? ? var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
? ? ? ? ? ? if(!myreg.test($('#phone').val()))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? alert('請(qǐng)輸入有效的手機(jī)號(hào)碼奈籽!');
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? phone = $('#phone').val();
? ? ? ? //驗(yàn)證碼(隨機(jī)生成)
? ? ? ? var code= codeRandom(4);
? ? ? ? ? ? //設(shè)置button效果饥侵,開(kāi)始計(jì)時(shí)
? ? ? ? ? ? $("#sub").attr("disabled", "true");
? ? ? ? ? ? $("#sub").val("請(qǐng)?jiān)? + curCount + "秒內(nèi)輸入驗(yàn)證碼");
? ? ? ? ? ? InterValObj = window.setInterval(SetRemainTime, 1000); //啟動(dòng)計(jì)時(shí)器,1秒執(zhí)行一次
? ? ? //發(fā)送數(shù)據(jù)到后臺(tái) 通過(guò)Ajax
? ? ? ? $.ajax({
? ? ? ? ? ? //設(shè)置的參數(shù)
? ? ? ? ? ? type: "post",
? ? ? ? ? ? url: "data.php",
? ? ? ? ? ? data:{"code":code,"phone":phone},
? ? ? ? ? ? success:function (msg) {
? ? ? ? ? ? ? ? alert(msg);
? ? ? ? ? ? }
? ? ? ? });}else{
? ? ? ? ? ? alert('請(qǐng)?zhí)顚?xiě)手機(jī)號(hào)碼');
? ? ? ? }
? ? });
? });
? ? </script>
</head>
<body>
<h1>PHP-短信驗(yàn)證碼</h1>
手機(jī)驗(yàn)證碼:<input type="text" name="phone" id="phone">
<input id="sub" type="button" value="發(fā)送驗(yàn)證碼" />
</body>
</html>
第三衣屏、調(diào)用短信服務(wù)器短信接口
?php
/**
* Created by PhpStorm.
* User: Leo
* Date: 2017/8/30
* Time: 14:59
*/
//$_post
$phone= isset($_POST['phone'])?$_POST['phone']:'';
$code = isset($_POST['code'])?$_POST['code']:'';
require (dirname(__FILE__).'/config.php');
require (dirname(__FILE__).'/SendSMS.php');
//實(shí)例化短信發(fā)送類
$sms= new? SendSMS($options['account'],$options['password']);
$context='驗(yàn)證碼'.$code;
$res=$sms->send($phone,$context);
if ($res){
? echo "成功";
}else{
? ? echo "失敗";
因?yàn)槲覀優(yōu)榱舜a的優(yōu)雅,把代碼分開(kāi)來(lái)寫(xiě). 方便以后重復(fù)使用.所以把發(fā)送短息具體封裝了一個(gè)類.具體看代碼:
<?php
/**
* Created by PhpStorm.
* User: Leo
* Date: 2017/8/30
* Time: 15:26
*/
/**
* 設(shè)置用戶信息
*/
class SendSMS{
const SENDURL='http://gd.ums86.com:8899/sms/Api/Send.do';
? ? private $_un;
? ? private $_pw;
? ? function __construct($user,$pwd){
? ? ? ? $this->_un=$user;
? ? ? ? $this->_pw=$pwd;
? ? }
? ? function send($phone,$content,$isreport=0){
? ? ? ? //發(fā)送數(shù)據(jù)
? ? ? ? $data=array(
? ? ? ? ? ? 'un'=>$this->_un,
? ? ? ? ? ? 'pw'=>$this->_pw,
? ? ? ? ? ? 'sm'=>$content,
? ? ? ? ? ? 'da'=>$phone,
? ? ? ? ? ? 'rd'=>$isreport,
? ? ? ? ? ? 'rf'=>2,
? ? ? ? ? ? 'tf'=>3,
? ? ? ? ? ? 'dc'=>15,
? ? ? ? );
? ? ? ? $url=SendSMS::SENDURL.'?'.http_build_query($data);
? ? ? ? $this->curlGet($url);
? ? }
? public function curlGet($url){
? ? $ch= curl_init();
? ? curl_setopt($ch,CURLOPT_HEADER,0);
? ? curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
? ? curl_setopt($ch,CURLOPT_URL,$url);
? ? $res=curl_exec($ch);
? ? curl_close($ch);
? ? return $res;
? ? }
}
在SendSMS里面的一些方法,你在第三方的短信驗(yàn)證碼服務(wù)商提供的實(shí)例代碼里面都可以看到,功能基本都是大同小異的,所以我們就實(shí)現(xiàn)一個(gè)屬于自己的發(fā)送消息類,比較簡(jiǎn)單.
深圳網(wǎng)站建設(shè)www.sz886.com