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:要生成的长度,如果大于左侧的数,会自动补全。