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

  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 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.php

<?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如下:

<!--短信验证码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代码展示在这里就不在展示了;

ThinkPHP3.2.3框架下接入阿里云短信服务接口实现:注册登录的更多相关文章

  1. 阿里云短信服务bug

    接入阿里云短信服务,在springboot中写测试方法,执行到 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou ...

  2. Springboot下实现阿里云短信验证功能(含代码)

    Springboot下实现阿里云短信验证功能 一 开通阿里云短信服务 阿里云官网注册登录 找到短信服务并开通 打开短信服务的管理台 在国内消息那栏中添加签名管理和模板管理(按照格式要求去写) 在右上角 ...

  3. 阿里云短信服务验证码封装类 - PHP

    本文记录在ThinkPHP6.0中使用阿里云短信验证码,该封装类不仅仅局限于TP,拿来即用 使用该类之前必须引入 flc/dysms 扩展,该封装类就是基于这个扩展写的 composer requir ...

  4. php 阿里云短信服务及阿里大鱼实现短信验证码的发送

    一:使用阿里云的短信服务 ① 申请短信签名 ②申请短信模板 ③创建Access Key,获取AccessKeyId 与 AccessKeySecret.(为了安全起见,这里建议使用子用户的Access ...

  5. 移动端获取短信验证码java实现——阿里云短信服务

    需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...

  6. 浏览器端获取短信验证码java实现——阿里云短信服务

    需求:浏览器端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短 ...

  7. Zabbix 3.4.3 使用阿里云短信服务进行报警

    目录 一.阿里云短信服务 1.1.首先开通阿里云短信服务 1.2 创建签名 1.3 创建短信模板 1.4 创建发送脚本 二.Zabbix Web 配置 2.1 增加 Media types 2.2 给 ...

  8. 阿里云短信服务调用例子-Python

    阿里云短信服务调用例子 阿里云官方文档https://helpcdn.aliyun.com/document_detail/101893.html 首先需要安装阿里云PythonSDK(下面是pyth ...

  9. flask+阿里云短信服务实现注册发送手机验证码

    效果图: 该效果主要讲解实现通过调用阿里云的SDK实现发送注册验证码短信(阿里云短信付费使用) 购买阿里云短信服务 购买链接:https://www.aliyun.com/product/sms 1. ...

随机推荐

  1. PHP07

    PHP07 1.cookie 2.使用php操作cookie 设置响应头(header)中的Set-Cookie可以下发小票 检查-network-响应头处可查看所设置cookie 检查-applic ...

  2. pygame 笔记-10 摩擦力与屏幕环绕

    多年前写过一篇 Flash/Flex学习笔记(25):摩擦力与屏幕环绕,可惜的当时上传的flash,服务器后来无人维护,现在flash链接都失效了.本篇用pygame重新实现了一个: 原理是类似,但要 ...

  3. scipy.stats

    scipy.stats Scipy的stats模块包含了多种概率分布的随机变量,随机变量分为连续的和离散的两种.所有的连续随机变量都是rv_continuous的派生类的对象,而所有的离散随机变量都是 ...

  4. docker占满linux磁盘根目录的解决办法

    一.磁盘根目录被占满 [test@localhost docker]$ df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/ce ...

  5. 用分离、附加的方式实现sql server数据库的备份和还原

    一.数据库分离.附加的说明 SQL Server提供了"分离/附加"数据库."备份/还原"数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用 ...

  6. Gradle 打可执行jar包

    初次使用Gradle,想和maven一样,把gradle项目打成可执行jar包,具体步骤: 1.下载gradle 版本,并配置环境变量, 下载地址:https://gradle.org/release ...

  7. Future、FutureTask实现原理浅析(源码解读)

    前言 最近一直在看JUC下面的一些东西,发现很多东西都是以前用过,但是真是到原理层面自己还是很欠缺. 刚好趁这段时间不太忙,回来了便一点点学习总结. 前言 最近一直在看JUC下面的一些东西,发现很多东 ...

  8. Vue在线客服系统【开源项目】

    1. 项目介绍 一个基于Vue2.0的在线客服系统. 技术栈包含:Vue.VueX.Vue Router.Element UI. 2. 功能介绍 项目包含了2个模块:客服端和访客端. 2.1 客服端功 ...

  9. MySQL利用xtrabackup在线修复或新增从库

    如果数据库的数据量很大,表大小有几十个G,利用mysqldump导出备份会消耗非常长的时间,会对数据库产生不稳定风险,这时可以利用xtrabackup工具在线复制主库文件,利用复制出来的主库文件可以修 ...

  10. WebViewJavascriptBridge 进行js 与native通信。

    1,  iOS端加载web页面.开启日志并给webView建立JS与OC的桥梁 - (void)viewWillAppear:(BOOL)animated { if (_bridge) { retur ...