阿里短信手机短信验证码功能
使用阿里短信服务管理
注册 登录阿里云 进入控制台 选择短信服务
开通短信服务价格大概0.04元一条 貌似有100条免费试用。
点击新手指导可查看文档
1 按照顺序进行注册登录实名认证
2 创建AccessKey
3 进入短信服务控制台 创建签名管理 签名模板
这里 只有签名管理的工单号 和 模板管理的模版CODE 后面代码中会用到
其中模板内容 例子:您的校验码:${code},您正在注册成为会员,感谢您的支持!code是后面代码里的验证码
下面是代码处理:下载SDK及DEMO
选择php
接着是更改api_demo/SmsDemo.php里的配置信息
SmsDemo.php最后调用了3个方法可注释掉sendBatchSms()和querySendDetails()只测试sendSms();
$accessKeyId $accessKeySecret 的值改成自己的AccessKey ID和AccessKey Secret
$request->setPhoneNumbers()方法填写号码,这里做测试填一下自己的手机号;
$request->setSignName();这里填自己的签名名称
$request->setTemplateCode(0这里填自己的模板CODE
$request->setTemplateParam()里的code值填写要发送的验证码
其它都是可选的可不做处理
此时便可放在本地服务器127.0.0.1/api_demo/SmsDemo.php便可看到页面信息,收到手机验证码后表示成功
[message]=OK 表示成功
问题:如何实现给任何手机号注册并实现随机6位验证码并验证输入的验证码是否正确
html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="index.js"></script>
</head>
<body>
手机号:<input type="text" name="number" id="number">
<button>点击获取验证码</button>
输入验证码:<input type="text" name="code" id="code">
<input type="button" name="" value="提交" id="submit">
</body>
</html>
更改api_demo/SmsDemo.php内容
sendSms()方法:
无需return $acsResponse
直接替换成一下代码
if($acsResponse->Code=='OK'){
echo $request->getTemplateParam(); //json字符串 包含验证码
}elseif($acsResponse->Code=='isv.MOBILE_NUMBER_ILLEGAL'){
echo "-1"; //用于ajax回调 手机号格式出错
}elseif($acsResponse->Code=='isv.BUSINESS_LIMIT_CONTROL'){
echo "-2"; //用于ajax回调 超过限制 一个手机号一天条数
}else{
echo "-3"; //用于ajax回调 其它错误
};
后面直接调用sendSms()方法就行了
// 调用示例:
set_time_limit(0);
header('Content-Type: text/plain; charset=utf-8');
SmsDemo::sendSms();
再创建一个6位随机数的方法:
// 六位随机数
public static function sexNum() {
$_num = '';
for($i=0;$i<6;$i++){
$_num .= mt_rand(0,9);
}
return $_num;
}
在 $request->setTemplateParam更改code的值: "code"=>SmsDemo::sexNum(),
使用ajax获取验证码
步骤:url设置在api_demo/SmsDemo.php;data数据把number也就是填写的手机号传入,并更改api_demo/SmsDemo.php
里 $request->setPhoneNumbers("{$_POST['number']}");
提交成功后会返回对应信息 如果返回1(可以在SmsDemo.php设置的)表示json字符串,转化为数组提取出code验证码
接着就是js设置的一些效果过60秒之后才能再次点击
最后再验证验证码是否正确
index.js:
$(function(){
var code = ''; //用于存放发出的验证码
// var a = {"code":"595266","product":"dsd"};
var timer = 0; //定时器
$('button').click(function(){
var t = 60; //点击的时候重新赋值为60
$.ajax({
type:'POST',
url:'api_demo/SmsDemo.php',
data:{
number:$('#number').val(), //手机号
},
success:function(text){
switch(text){
case '-1':
alert('手机号格式出错');
break;
case '-2':
alert('超过限制');
break;
case '-3':
alert('其他错误');
break;
default:
// {"code":"595266","product":"dsd"}
// 成功返回验证码
message = JSON.parse(text); //把json字符串转化为数组
// alert(typeof message)
// alert(message.code);
code = message.code; //得到验证码
// alert(code);
// 定时器
timer = setInterval(function(){
$('button').attr('disabled',true); //点击发送验证码功能暂时失效
$('button').html(t+'s后重新发送');
t--;
if(t==0){
$('button').attr('disabled',false);
$('button').html('点击获取验证码');
clearInterval(timer); //清除定时器
}
},1000);
}
},
})
})
// 验证验证码
$('#submit').click(function(){
if($('#code').val()==code){
alert('注册成功');
}else{
alert('注册失败');
alert(code);
alert($('#code').val());
}
})
})