本方法基于Thinkphp,用到了jquery.validate,当然具体项目中也可以不用,下面我就按步骤来写下来。
1.准备
1.登陆
http://www.alidayu.com,进入网址
用淘宝号登陆即可
2.进入管理中心
3.配置
(1)配置短信签名
(2)配置短信模板
建好后,需要的东西就是APPkey APPsecret
还可以进行测试
2.数据库
3.后端
引入
下载阿里大于类文件,放在/Thinkphp/Library/org/Alidayu(文件夹要大写,坑过自己,部署到服务器后出问题)
通用类里
// 生成短信验证码
public function createSMSCode($length = 4){
$min = pow(10 , ($length - 1));
$max = pow(10, $length) - 1;
return rand($min, $max);
}
//发送验证码
public function send_phone($phone){
$code=$this->createSMSCode($length = 4);
import('Org.Alidayu.top.TopClient');
import('Org.Alidayu.top.ResultSet');
import('Org.Alidayu.top.RequestCheckUtil');
import('Org.Alidayu.top.TopLogger');
import('Org.Alidayu.top.request.AlibabaAliqinFcSmsNumSendRequest');
$c = new \TopClient;
$appkey="你的appkey";
$secret="你的secret;
$c ->appkey = $appkey ;
$c ->secretKey = $secret ;
$req = new \AlibabaAliqinFcSmsNumSendRequest;
$req ->setExtend( "" );
$req ->setSmsType( "normal" );
$req ->setSmsFreeSignName( "阿尚测试" );
$req ->setSmsParam( "{name:'客户',code:'".$code."',time:'5分钟'}" );
$req ->setRecNum( $phone);
$req ->setSmsTemplateCode( "SMS_71300157" );
$resp = $c ->execute( $req );
$this->sendMsgResult($resp,$phone,$code);
}
//验证手机号是否发送成功 前端用ajax,发送成功则提示倒计时,如50秒后可以重新发送
private function sendMsgResult($resp,$phone,$code){
if ($resp->result->success && !$resp->result->code) {
$data['phone']=$phone;
$data['code']=$code;
$data['send_time']=time();
$result=M("code")->add($data);
if($result){
$data="发送成功";
}else{
$data="发送失败";
}
} else if ($resp->code || $resp->msg == "Remote service error") {
$data="发送失败";
} else {
$data="发送失败";
}
return $data;
}
// 验证短信验证码是否有效,前端用jquery validate的remote
public function checkSMSCode(){
$mobile = $_POST['mobile'];
$code = $_POST['code'];
$nowTimeStr = date('Y-m-d H:i:s');
$smscodeObj = M("code")->where("mobile='$mobile'")->find();
if($smscodeObj){
$smsCodeTimeStr = $smscodeObj['send_time'];
$recordCode = $smscodeObj['code'];
$flag = $this->checkTime($nowTimeStr, $smsCodeTimeStr);
if($flag&&$code==$recordCode){
echo true;
}else{
echo false;
}
}
}
用的类里,我是放在注册类里调用
//发送短信,调用BaseController里的方法,因为其他模块也要用到这方法
public function send_message(){
$phone=I("post.phone");
//data返回失败 但不影响使用
$data=$this->send_phone($phone);
$this->ajaxReturn($data,"JSON");
}
4.前台 ajax部分功能已经具备,还待完善
//发送手机ajax
function send_message() {
if($("#phone input").valid()){
var phone=$("#phone input").val();
$.post("{:U('Register/send_message')}","phone="+phone,function(data){
});
$("#send_message").html("发送成功");
$("#send_message").css("background-color","#2f9cff");
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。