ThinkPHP3.2.3框架下接入阿里云短信服务接口实现:注册登录
首先介绍下短信注册登录流程:
- 注册页面点击获取手机号验证码按钮,用jquery的click事件POST或GET方法把手机号发送到后台控制器;
- 后台控制器创建函数,收到手机号后生成随机码,例如:6位的随机数$code = rand(100000,999999);,生成之后用SESSION助手函数保存,例如:session('name',$手机号.$验证码);
- 利用阿里云短信服务接口将生成的随机码,以短信形式发送给注册用户;
- 用户在注册页面输入接收到的验证码,点击提交登录,后台处理用户提交的手机号+验证码,与自己后台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框架下接入阿里云短信服务接口实现:注册登录的更多相关文章
- 阿里云短信服务bug
接入阿里云短信服务,在springboot中写测试方法,执行到 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou ...
- Springboot下实现阿里云短信验证功能(含代码)
Springboot下实现阿里云短信验证功能 一 开通阿里云短信服务 阿里云官网注册登录 找到短信服务并开通 打开短信服务的管理台 在国内消息那栏中添加签名管理和模板管理(按照格式要求去写) 在右上角 ...
- 阿里云短信服务验证码封装类 - PHP
本文记录在ThinkPHP6.0中使用阿里云短信验证码,该封装类不仅仅局限于TP,拿来即用 使用该类之前必须引入 flc/dysms 扩展,该封装类就是基于这个扩展写的 composer requir ...
- php 阿里云短信服务及阿里大鱼实现短信验证码的发送
一:使用阿里云的短信服务 ① 申请短信签名 ②申请短信模板 ③创建Access Key,获取AccessKeyId 与 AccessKeySecret.(为了安全起见,这里建议使用子用户的Access ...
- 移动端获取短信验证码java实现——阿里云短信服务
需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...
- 浏览器端获取短信验证码java实现——阿里云短信服务
需求:浏览器端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短 ...
- Zabbix 3.4.3 使用阿里云短信服务进行报警
目录 一.阿里云短信服务 1.1.首先开通阿里云短信服务 1.2 创建签名 1.3 创建短信模板 1.4 创建发送脚本 二.Zabbix Web 配置 2.1 增加 Media types 2.2 给 ...
- 阿里云短信服务调用例子-Python
阿里云短信服务调用例子 阿里云官方文档https://helpcdn.aliyun.com/document_detail/101893.html 首先需要安装阿里云PythonSDK(下面是pyth ...
- flask+阿里云短信服务实现注册发送手机验证码
效果图: 该效果主要讲解实现通过调用阿里云的SDK实现发送注册验证码短信(阿里云短信付费使用) 购买阿里云短信服务 购买链接:https://www.aliyun.com/product/sms 1. ...
随机推荐
- JAVA自学笔记10
JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...
- ngClass指令3种使用
CSS代码:1 .strike { text-decoration: line-through; } .bold { font-weight: bold; } .red { color: red; } ...
- jQuery中动画常用的样式获取并改变方法-
(1)Top 和 left 经常要用到jquery获取对象的位置,jquery top left,jquery css left是相对于父级元素中第一个position为relative或absolu ...
- Python - 列联表的独立性检验(卡方检验)
Python - 列联表的独立性检验(卡方检验) 想对两个或两个以上因子彼此之间是否相互独立做检验时,就要用到卡方检验,原以为在Python中实现会像R的chisq.test一样简便,但scipy的s ...
- 同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别
POSIX 同步IO.异步IO.阻塞IO.非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下. ...
- 基于weixin-java-mp 做微信JS签名 invalid signature签名错误 官方说明
微信JS签名详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang= ...
- 【云计算】IaaS、PaaS和SaaS
1. SaaS:Software-as-a-Service(软件即服务) 提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如浏览器.消费者不需要管理或 ...
- tun/tap设备_虚拟网卡
tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装.利用tun/tap 驱动,可以将tcp/ip协议栈处理好的 ...
- 梯度下降(gradient descent)算法简介
梯度下降法是一个最优化算法,通常也称为最速下降法.最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的.最速下降法是用 ...
- 使用 Postman 取得 Token 打另一隻 API
使用 Postman 取得 Token 打另一隻 API Spring MVC token 统一校验和user 信息自动获取 使用token和SpringMVC来实现安全的RESTFul接口 spri ...