tp框架之阿里大鱼实现网站注册短信验证码流程


手机验证码及注册流程的实现

前提: 1.注册阿里大鱼账号
      2.移入头像点击下方的accesskey, 开始使用子用户accesskey,
      填写用户名\选择权限(输入'短信'二字,选择)\创建用户.会获取到ID和Secret.
      3.点击上方的产品与服务,找到'云通讯'下的'短信服务'.认真填写
      签名管理 和 模板管理. 要用到签名名称和模板code.短信内容就是模板内容,请认真填写,
      必须审核通过才可以开始下一步.
      4.下载SDK,网址: https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55451.6.569.0uXt4J
      选择PHP,点击下载 用到的只有'api_sdk',改变文件名为 'dysms',放到网站的api目录里面.

功能描述:
输入手机号,点击{ajax}获取验证码,判断手机号是否已经注册.已注册给出提示,如果未注册的话发送手机验证码.如果验证码发送成功的话,把‘获取验证码’改为'倒计时',注意:发送成功 后台数据库要新建一个表(smsverif)用来存储 手机
号,验证码,发送时间. 因为点击'注册'的时候要与发送时间去进行判断 ‘验证码是否相等,时间是否在有效时间内’. 最后
点击注册post提交 注意:不管是 ajax还是submit 提交方式都要改成 post,可以自行去测试,我并不知道对不对. 提交过去之后去跟smsverif表
查询手机号和验证码是否存在,存在的话在进行判断是否在有效时间内,如果都成功的话,格式化想要存储的数据放到session里面跳转至
相应的页面.

实现思路:(只贴一些重要的代码)
/*倒计时
手机登录注册时使用
*/
function countdown(){
  var mydate= new Date();//获取当前时间
  mydate.setMinutes(mydate.getMinutes()+1); //当前时间加1分钟
  var end_time = new Date(mydate).getTime();//月份是实际月份-1
  var sys_second = (end_time-new Date().getTime())/1000;
  var timer = setInterval(function(){
    if (sys_second > 1) {
      sys_second -= 1;
      var second = Math.floor(sys_second % 60);
      $("#btn_code").attr("disabled","true");//添加disabled属性
      $("#btn_code").css("color","red");
      $("#btn_code").html(second+"s(已发送)");
    } else { 
      $("#btn_code").removeAttr("disabled");//移除disabled属性
      $("#btn_code").css("color","#999");
      $("#btn_code").html("获取验证码");
      clearInterval(timer);//清除定时器
    }
  },1000);
}

/**
* 发送验证码
* @param[integer] $mobile [手机号]
*/
public function send_mobile($mobile){
    $code=$this->createSMSCode($length = 4); //用于生成验证码
    require_once './application/Api/dysms/vendor/autoload.php';//路径一定要检测是否正确
    Config::load();//加载区域结点配置
    $accessKeyId = '';//阿里大鱼id
    $accessKeySecret = '';//阿里大鱼Secret
    $templateCode = ''; //短信模板ID,我就是随便写的
    //短信API产品名(短信产品名固定,无需修改)
    $product = "Dysmsapi";
    //短信API产品域名(接口地址固定,无需修改)
    $domain = "dysmsapi.aliyuncs.com";
    //暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)
    $region = "cn-hangzhou";
    // 初始化用户Profile实例
    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
    // 增加服务结点
    DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
    // 初始化AcsClient用于发起请求
    $acsClient = new DefaultAcsClient($profile);
    // 初始化SendSmsRequest实例用于设置发送短信的参数
    $request = new SendSmsRequest();//注意打印$request,确定里面是否有下面的参数,我的是phoneNumbers(),有的是mobileNumbers();
    // 必填,设置短信接收号码
    $request->setphoneNumbers($mobile);
    // 必填,设置阿里大鱼签名名称
    $request->setSignName('');
    // 必填,设置大鱼模板CODE
    $request->setTemplateCode('');
    $smsData = array('code'=>$code);//所使用的模板若有变量 在这里填入变量的值我的变量名为username此处也为username
    //选填-假如模板中存在变量需要替换则为必填(JSON格式),友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含/r/n的情况在JSON中需要表示成//r//n,否则会导致JSON在服务端解析失败
    $request->setTemplateParam(json_encode($smsData));
    //发起访问请求
    $acsResponse = $acsClient -> getAcsResponse($request);
    //返回请求结果
    $result = json_decode(json_encode($acsResponse), true);
    $resp = $result['Code'];//resp等于OK,则表示是发送成功,除此之外都是错误信息,文档里面有专门的参数详解,可以据此找出错误原因.
    文档:https://help.aliyun.com/document_detail/55284.html?spm=a2c4g.11186623.2.3.erDhsw.
    $this->sendMsgResult($resp,$mobile,$code);//如果$resp == OK,数据库添加必要数据,ajax返回.
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值