php手機註冊發送短信,我們用的是阿里的短信服務,首先你要有阿里的賬號,並開通了短信服務。可以單條計費也可以買套餐。
首先html部分我用的是bootstrap布的頁面:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- Latest compiled and minified CSS & JS -->
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" media="screen" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<br>
<br>
<br>
<br>
<form class="form-horizontal" role="form" >
<div class="form-group" style="text-align: center">
<label for="inputEmail3" class="col-sm-4 control-label">手機號</label>
<div class="col-sm-8">
<div style="float: left;">
<input id="phonum" name="phonum" type="text" class="form-control phonum" style="width: 300px;">
</div>
<div style="float: left;">
<!--<input class="btn btn-info" type="button" id="getcode" onclick="send(this)" value="點擊獲取手機驗證碼" />-->
<button class="btn btn-info" type="button" id="getcode" onclick="send(this)"> 獲取驗證碼</button>
<span id="telephonenameTip"></span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">驗證碼</label>
<div class="col-sm-8">
<input style="width: 300px;" class="form-control" id="codename">
<span id="codenameTip"></span>
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-4 control-label">密碼</label>
<div class="col-sm-8">
<input type="password" style="width: 300px;" class="form-control" id="" placeholder="Password">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-5 col-sm-6">
<button type="button" id="submit" class="btn btn-primary">立即註冊</button>
</div>
</div>
</form>
</div>
</body>
</html>
然後是js部分:放到<body>下面,主要是點擊發送短信按鈕的異步方法以及短信倒計時效果:
<script>
time =3; //短信倒計時時間
function send(obj) {
var timer = setInterval(function () {
time--;
$(obj).text(time+'之後重發');
$(obj).removeClass('btn-info');
$(obj).addClass('btn-success')
$(obj).prop('disabled', true);
if(time==0){
//清除定時器
clearInterval(timer)
$(obj).removeClass('btn-success');
$(obj).addClass('btn-info');
$(obj).prop('disabled', false);
$(obj).text('獲取驗證碼');
time=3;
}
},1000);
//獲取手機號
var phonum = $('#phonum').val();
$.post('?a=sendSms',{phonum:phonum},function () {
},'json')
}
</script>
然後就是處理短信發送的api接口php代碼,看清,要填的只有一部分,下面的幾乎不用填寫:
public function sendSms(){
$phone = $_POST['phonum'];
$params = array ();
// *** 需用戶填寫部分 ***
// fixme 必填: 請參閱 https://ak-console.aliyun.com/ 取得您的AK信息
$accessKeyId = "";
$accessKeySecret = "";
// fixme 必填: 短信接收號碼
$params["PhoneNumbers"] = $phone;
// fixme 必填: 短信簽名,應嚴格按"簽名名稱"填寫,請參考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
$params["SignName"] = "琥珀";
// fixme 必填: 短信模板Code,應嚴格按"模板CODE"填寫, 請參考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
$params["TemplateCode"] = "SMS_137135108";
// fixme 可選: 設置模板參數, 假如模板中存在變量需要替換則爲必填項
$code = $this->Getcode();
// echo $code;die(); //測試輸出隨機驗證碼。
$params['TemplateParam'] = Array (
"code" => $code,
);
// fixme 可選: 設置發送短信流水號
// $params['OutId'] = "12345"; //這裏我沒用就把它註釋掉了
// fixme 可選: 上行短信擴展碼, 擴展碼字段控制在7位或以下,無特殊需求用戶請忽略此字段
// $params['SmsUpExtendCode'] = "1234567"; //這裏我沒用就把它註釋掉了
// *** 需用戶填寫部分結束, 以下代碼若無必要無需更改 ***
if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
$params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
}
// 初始化SignatureHelper實例用於設置參數,簽名以及發送請求
$helper = new SignatureHelper();
// 此處可能會拋出異常,注意catch
$content = $helper->request(
$accessKeyId,
$accessKeySecret,
"dysmsapi.aliyuncs.com",
array_merge($params, array(
"RegionId" => "cn-hangzhou",
"Action" => "SendSms",
"Version" => "2017-05-25",
))
// fixme 選填: 啓用https
// ,true
);
//echo '<pre>'; //測試
//print_r($content);
return $content;
}
/**
* @param int $len
* @return string
* 隨機生成驗證碼
*/
private function Getcode($len=6){
return str_pad(mt_rand(1,pow(10,$len)-1),$len,STR_PAD_LEFT);
}
然後咱們再瞭解一下生成隨機碼的函數
str_pad(mt_rand(1,pow(10,$len)-1),$len,STR_PAD_LEFT)
這個函數用法:
把字符串填充爲新的長度:mt_rand(1,pow(10,$len)-1): 如果隨機到1000000會多出一位,我們-1讓它變成999999
$len:要生成的長度,如果大於左側的數,會自動補全。