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


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

    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;
    use ThinkController;
    use AliyunDySDKLiteSignatureHelper;
    require_once "./Api/SignatureHelper.php"; //第一步中阿里云接口存放SignatureHelper.php的路径
    class AlismsController extends Controller {
        
        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 = new SignatureHelper();
            $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;
    use ThinkController;
    use CommonControllerAlismsController;
    class LoginController extends Controller{
        
         public function sendCode(){
            $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; 
    function sendcode(){
        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代码展示在这里就不在展示了;

  • 相关阅读:
    11.组件-组件中的data和methods
    09.组件-创建组件的方式2
    10.组件-创建组件的方式3
    07.动画-列表动画
    08.组件-创建组件的方式1
    关于苹果iBeacon官方文档解析
    IOS-代码书写规范
    IOS- 1970ms时间计算
    关于tableview顶部留白问题
    IOS-网络请求数据解析道数组程序崩溃问题
  • 原文地址:https://www.cnblogs.com/wenzheshen/p/9111801.html
Copyright © 2020-2023  润新知