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

  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. plsql 工具怎样导出 oracle 表结构

    一.双击 plsql 工具,输入登陆用户.登陆密码以及登陆数据库名称,如下图: 二.菜单 Tools --> Export User Objects...,如下图: 三.进入导出界面后,可以选择 ...

  2. macOS Sierra WiFi connecting problem

    吐槽一下,苹果的质量管控越来越差了. macOS Sierra有时突然或升级后会遇到wifi不停重连连不上问题,现象为不停地连接wifi. 网上有人说删除 /Library/Preferences/S ...

  3. PHP04

    PHP04 1.HTTP(hypertext transfer protocol) 1)HTTP是端与端之间的通讯协议 chrome://net-internals/ 可查看DNS缓存 浏览器-检查- ...

  4. #define LT(a,b) ((a)<(b))

    就是带参数的宏定义 LT是函数名 (a,b )是参数表((a)<(b))是表达式返回一个布尔类型的值

  5. Java知识回顾 (7) 继承、多态与接口、封装

    一.继承 1.1 继承的特性 子类拥有父类非 private 的属性.方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子类可以用自己的方式实现父类的方法. Java 的继承是单继承, ...

  6. wriesharek同时监听多个端口

    之前的文章<wireshark解析自定义的protobuf协议> ,当时只监听了一个端口,而如果游戏同时有二个 socket 连接,比如一个是网关另外一个是其它的,怎么办呢? for i, ...

  7. LVM原理与实现

    一.什么是LVM 不管是使用传统的MBR分区方式或者是GPT的分区方式,在最后数据量逐渐变大的过程中都会出现空间不足的情况,但是若是使用将此分区的数据全部迁移至一个更大空间的磁盘上的迁移时间也是不可想 ...

  8. 条件式变分自编码机(Conditional Variational Autoencoders)

    Conditional Variational Autoencoders 条件式变换自编码机 摘要: Conditional Variational Autoencoders --- 条件式变换自编码 ...

  9. iOS:Gif动画功能(显示gif动画、获取gif动画时长、获取gif动画执行次数)

    一.简单介绍 gif动画是iOS开发中很常用的一个功能,有的是为了显示加载视频的过程,更多的是为了显示一个结果状态(动画更直观). 那么如何执行gif动画,方法有很多.(这里只写一下方法三,前两种之前 ...

  10. maven scope 范围讲解

    解决办法: <dependency>     <groupId>javax.servlet</groupId>     <artifactId>java ...