ThinkPHP3.2.3框架下接入阿里云短信服务接口实现:注册登录

摘要:
Isphone){$msg=“手机号码不正确”;returnfalse;}$params[“电话号码”]=$phone;$params[“TemplateCode”]=$this-˃CodeId;//模板//记录存储验证码$code=rand;会话;//Session Store手机号码+验证码$params['TemplateParam']=[“code”=˃$code]//验证码返回$this-˃send;}//验证电话号码是否正确privatefunctionisphone{if(!Empty&&is_array){$params[“TemplateParam”]=json_encode;}$helper=newSignatureHelper();$content=$helper-˃request;如果{$msg=“发送异常”;returnfalse;}否则{$data=$content;如果{$msg=“发送成功”;returntrue;}Else{$msg=“发送失败”。$data〔'消息'〕;returnfalse;}}步骤3:创建控制层LoginController。班php<?>在根目录/Application/Admin/Controller/此外,SMS验证码60S倒计时和AJAXPOST提交手机号码JS如下:<!

首先介绍下短信注册登录流程:

  1. 注册页面点击获取手机号验证码按钮,用jquery的click事件POST或GET方法把手机号发送到后台控制器;
  2. 后台控制器创建函数,收到手机号后生成随机码,例如:6位的随机数$code = rand(100000,999999);,生成之后用SESSION助手函数保存,例如:session('name',$手机号.$验证码);
  3. 利用阿里云短信服务接口将生成的随机码,以短信形式发送给注册用户;
  4. 用户在注册页面输入接收到的验证码,点击提交登录,后台处理用户提交的手机号+验证码,与自己后台session存储的手机号+验证码是否匹配,匹配则判断登录成功,否则提示用户登录失败;

  • 一句话:点击获取手机验证码--->提交手机号到后台--->后台生成手机验证码--->用session保存手机验证码及手机号--->用阿里云短信服务平台的接口发送给用户--->用户输入手机号验证码并提交----->后台比较提交的验证码是否与session保存的一致--->返回判断状态;

阿里云短信服务(文档):短信发送API(SendSms)---PHP

阿里云短信服务(SDK及DEMO下载):SDK及DEMO下载

阿里云短信服务(接口调试常见错误码):短信接口调用错误码

具体实现代码(使用阿里云短息服务[SDK轻量版])如下:

第一步:下载PHP版本的[SDK轻量版]代码,解压,重命名为api文件夹名称,并将该文件夹存放在Thinkphp根目录位置(存放位置可以自己选择);

第二步,在根目录/Application/Common/Controller/创建控制层AlismsController.class.php

<?php
namespace CommonController;
useThinkController;
useAliyunDySDKLiteSignatureHelper;
require_once "./Api/SignatureHelper.php"; //第一步中阿里云接口存放SignatureHelper.php的路径
class AlismsController extendsController {
    public function_initialize(){
        $this->accessKeyId = "AccessKeyId"; //AccessKeyId
        $this->accessKeySecret = "AccessKeySecret"; //AccessKeySecret
        $this->SignName = "短信签名"; //签名
        $this->CodeId = "短信验证码模板ID"; //验证码模板ID
}
    //发送验证码
    public function code($phone,&$msg){
        if(!isphone($phone)){
            $msg = "手机号不正确";
            return false;
        }
        $params["PhoneNumbers"] = $phone; 
        $params["TemplateCode"] = $this->CodeId; //模板
        //记录存储验证码
        $code = rand(100000,999999);
        session("iphonecode",$phone.$code);//session存储手机号+验证码
        $params['TemplateParam'] = ["code" => $code]; //验证码
        return $this->send($params,$msg);        
    }
    //验证手机号是否正确
  private function isphone($phone){
       if (!is_numeric($phone)) {
            return false;
        }
        return preg_match("/^1[34578]{1}d{9}$/", $phone) ? true : false;
    }
    //发送短信消息
    private function send($params=[],&$msg){
        $params["SignName"] = $this->SignName;
        if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
            $params["TemplateParam"] = json_encode($params["TemplateParam"],JSON_UNESCAPED_UNICODE);
        }
         $helper = newSignatureHelper();
        $content = $helper->request(
            $this->accessKeyId,
            $this->accessKeySecret,
            "dysmsapi.aliyuncs.com",
            array_merge($params, array(
                "RegionId" => "cn-hangzhou",
                "Action" => "SendSms",
                "Version" => "2017-05-25",
            ))
        );
        if($content===false){
            $msg = "发送异常";
            return false;
        }else{
            $data = (array)$content;
            if($data['Code']=="OK"){
                $msg = "发送成功";
                return true;
            }else{
                $msg = "发送失败 ".$data['Message'];
                return false;
            }
        }        
    }
}

第三步,在根目录/Application/Admin/Controller/创建控制层LoginController.class.php

<?php
namespace AdminController;
useThinkController;
useCommonControllerAlismsController;
class LoginController extendsController{
     public functionsendCode(){
        $code = new AlismsController(); //此类存放在CommonController
        $code->code($_POST['iphone'],$msg);
       $this -> ajaxReturn($msg);
    }
}
?>

另外:短信验证码60S倒计时及AJAX POST提交手机号JS如下:

<!--短信验证码60S倒计时及AJAX POST提交手机号-->
<script type="text/javascript"> 
var countdown=60; 
functionsendcode(){
    var obj = $("#smsbtn");
    settime(obj);
    $.ajax({
        type: 'POST',
        url: '__CONTROLLER__/sendCode.html',
        data: {"iphone":$("#name").val()},
        dataType:'json',
        success: function(data){
            alert('返回数据:'+data);
            console.log("提交成功");
        },
        error: function(data){
            console.log("提交失败");
        }
    });
}
function settime(obj) { //发送验证码倒计时
    if (countdown == 0) { 
        obj.attr('disabled',false);
        obj.val("发送验证码");
        countdown = 60; 
        return;
    } else{ 
        obj.attr('disabled',true);
        obj.val("重新发送(" + countdown + "s)");
        countdown--; 
    } 
setTimeout(function() { 
    settime(obj) }
    ,1000) 
}
</script>

其他HTML代码展示在这里就不在展示了;

免责声明:文章转载自《ThinkPHP3.2.3框架下接入阿里云短信服务接口实现:注册登录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇自监督学习(Self-Supervised Learning)多篇论文解读(上)php日期时间函数 整理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

几个绕过短信验证码限制的漏洞挖掘

本文仅为了学习交流,严禁非法使用!!! (随笔仅为平时的学习记录,若有错误请大佬指出) 一:更改Session来绕过短信验证码时间的限制 1.填写注册信息,开始抓取数据包 2.Unicode解码后,是验证码已经发送,忘记截图了 3.我们将数据包发送到Repeater,点击Go,看看可不可以造成短信轰炸 4.对返回包进行Unicode解码,看看是什么消息...

国内云存储对比: 阿里云、腾讯云、Ucloud、首都在线

阿里云的数据存储<http://www.aliyun.com/product/rds/> RDS — 关系型数据库服务(Relational Database Service,简称RDS)是一种即开即用、稳定可靠、可弹性伸缩的在线数据库服务。具有多重安全防护措施和完善的性能监控体系,并提供专业的数据库备份、恢复及优化方案,使您能专注于应用开发...

阿里云产品之数据中台架构

1. 场景描述 客户打包买了很多阿里云的产品,但是阿里云不负责实施,基于阿里云产品与客户需求,拟采用的数据中台架构,有类似需求的,可以参考下,拿走不谢! 2. 解决方案 阿里产品大数据架构图: 从下到上,简要介绍下各个阿里产品作用及承担的任务: 2.1 云数据库 RDS 阿里云关系型数据库RDS(Relational Database Service)是...

[原创]阿里云RocketMQ踩过的哪些坑

 由于公司的最近开始使用RocketMQ来做支付业务处理, 便开启了学习阿里云RocketMQ的学习与实践之路, 其中踩了不少的坑, 大部份是由于没有仔细查看阿里云的技术文档而踩的坑. 但是有一个非常大的坑, 确实是阿里云的技术文档里没有提及, 在文章的最后会给大家提及. 使用过程了封装的RocketMQ类库已开源在github: https://gith...

安信可ESP-12F连接阿里云教程

ESP-12F连接阿里云教程 我所使用的ESP-12F模块是安信可的ESP8266开发模块,这个模块集成了CH340(TTL转USB)。我们可以直接使用USB线将ESP-12F模块与电脑连接,这样我们可以通过USB线很方便的使用串口助手发送AT指令或者使用烧录固件软件进行烧录固件。 1、ESP-12F 烧录 MQTT 协议固件 打开烧录工具 双击打开后...

转:苹果手机同步阿里云邮箱日历

场景: 安装阿里云邮箱IOS客户端后,默认情况下通过苹果手机日历功能无法查看到阿里云邮箱日历 方法: 使用阿里云的CalDAV协议进行配置,即可拉取阿里云邮箱日历 步骤: 步骤一: 先进入手机端,设置邮件帐号的地方,直接添加以下协议, 以 苹果手机为例: 步骤二: 1:填写 服务器: caldav.mxhichina.com 2: 填邮箱账号 (带域名)...