ThinkPHP3.2.3框架下接入阿里雲短信服務接口實現:註冊登陸

首先介紹下短信註冊登陸流程:

  1. 註冊頁面點擊獲取手機號驗證碼按鈕,用jquery的click事件POST或GET方法把手機號發送到後臺控制器;
  2. 後臺控制器建立函數,收到手機號後生成隨機碼,例如:6位的隨機數$code = rand(100000,999999);,生成以後用SESSION助手函數保存,例如:session('name',$手機號.$驗證碼);
  3. 利用阿里雲短信服務接口將生成的隨機碼,以短信形式發送給註冊用戶;
  4. 用戶在註冊頁面輸入接收到的驗證碼,點擊提交登陸,後臺處理用戶提交的手機號+驗證碼,與本身後臺session存儲的手機號+驗證碼是否匹配,匹配則判斷登陸成功,不然提示用戶登陸失敗;

 

  • 一句話:點擊獲取手機驗證碼--->提交手機號到後臺--->後臺生成手機驗證碼--->用session保存手機驗證碼及手機號--->用阿里雲短信服務平臺的接口發送給用戶--->用戶輸入手機號驗證碼並提交----->後臺比較提交的驗證碼是否與session保存的一致--->返回判斷狀態;

 

阿里雲短信服務(文檔):短信發送API(SendSms)---PHPjavascript

阿里雲短信服務(SDK及DEMO下載):SDK及DEMO下載php

阿里雲短信服務(接口調試常見錯誤碼):短信接口調用錯誤碼html

 

具體實現代碼(使用阿里雲短息服務[SDK輕量版])以下:

第一步:下載PHP版本的[SDK輕量版]代碼,解壓,重命名爲api文件夾名稱,並將該文件夾存放在Thinkphp根目錄位置(存放位置能夠本身選擇);
java

第二步,在根目錄/Application/Common/Controller/建立控制層AlismsController.class.phpjquery

<?php namespace Common\Controller; use Think\Controller; use Aliyun\DySDKLite\SignatureHelper; 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.phpajax

<?php namespace Admin\Controller; use Think\Controller; use Common\Controller\AlismsController; class LoginController extends Controller{ public function sendCode(){ $code = new AlismsController(); //此類存放在Common\Controller\
        $code->code($_POST['iphone'],$msg); $this -> ajaxReturn($msg); } } ?>

 

另外:短信驗證碼60S倒計時及AJAX POST提交手機號JS以下:json

<!--短信驗證碼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代碼展現在這裏就不在展現了;api