当前位置: 首页 > news >正文

Thinkphp框架 -- 短信接口验证码

  我用的是一款名叫 短信宝 的应用,新注册的用户可以免费3条测试短信,发现一个BUG,同个手机可以无限注册,自己玩玩还是可以的。

  里面的短信接口代码什么信息都没有,感觉看得不是很明白,自己测试了一遍,可以用,直接调用就可以的,如果要用到项目中还有很多细节要处理,比如 设置一个验证码的存活时间,还有点击按钮每隔一分钟才能按一次,还有判断这个用户发的短信另一个用户能不能用,以后有时间再接下去做,现在先来个简易版的

 

  视图层View

 1 <!doctype html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Ajax无刷新上传</title>
 6 </head>
 7 <script type="text/javascript" src="__PUBLIC__/js/jquery-1.10.2.min.js"></script>
 8 
 9 <body>
10     <div>
11         请输入手机号码:<input type="text" name="phone" class="phone">
12     </div>
13     <div>
14         <a href="javascript:;" class="butphone">点击获取短信验证码</a>
15     </div>
16 </body>
17     <script type="text/javascript">
18 
19         $('.butphone').click(function(){
20 
21             var phone = $('.phone').val();//手机号码
22 
23             $.post(
24 
25                 "{:U('smsbao')}",//传递的方法
26 
27                 {phone1:phone},//参数
28 
29                 function (data){
30 
31                     if(data == '1'){
32                         alert('输入框不能为空');
33                     }else if(data == '2'){
34                         alert('输入的值为非数字');
35                     }else{
36                         alert(data);
37                     }
38                     
39                     },
40                     'json'
41                 )
42         })
43     </script>
44 
45 </html>

  

  控制器层Controller

 1 <?php
 2     namespace Home\Controller;
 3     use Think\Controller;
 4     class IndexController extends Controller 
 5     {
 6         //视图
 7         public function index()
 8         {
 9             $this->display();
10         }
11 
12       //短信接口 
13         public function smsbao()
14         {    
15             $phonenum = trim( I('post.phone1') );//接收到的参数
16 
17             //首先判断电话为不为空
18             if(empty($phonenum) ){
19 
20                 $this->ajaxReturn('1');
21             }
22 
23             //判断是否为数字
24             $boolphone = is_numeric($phonenum);
25 
26             if($boolphone){
27 
28                 $statusStr = array(
29                     "0"     => "短信发送成功",
30                     "-1" => "参数不全",
31                     "-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
32                     "30" => "密码错误",
33                     "40" => "账号不存在",
34                     "41" => "余额不足",
35                     "42" => "帐户已过期",
36                     "43" => "IP地址限制",
37                     "50" => "内容含有敏感词"
38                     );
39                     $num = rand(100000, 999999);//设置随机数
40 
41                     setcookie("numset", $num);//把值放入COOKIE中,关闭浏览器清除cookie;
42                     
43                     $smsapi = "http://api.smsbao.com/";
44                     
45                     $user = "asdf75054138"; //短信平台帐号
46                     
47                     $pass = md5("asdf75054138"); //短信平台密码
48                     
49                     $content="[Bug],来自四个火枪手的验证,验证码:".$num;//要发送的短信内容,随便设置
50                     
51                     $phone = $phonenum;//要发送短信的手机号码
52                     
53                     $sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($content);//固定格式
54                     
55                     $result =file_get_contents($sendurl);//固定格式
56                     
57                     $this->ajaxReturn( $statusStr[$result] );//短信是否发送成功
58                     
59                 }else{
60                         $this->ajaxReturn( '2' );
61                 }
62 
63             }
64     }

  

  各种效果图:

    

    

    

    

    

  附件

    短信宝url:http://www.cocsms.com/

      直接注册一个帐号,弹出让你用一条短信测试的不要测试,不然会损失一条。

 

  

转载于:https://www.cnblogs.com/chenrunxuan/p/6117141.html

相关文章:

  • pip 使用国内源安装第三方库
  • vue.js入门(3)——组件通信
  • Java线程专栏文章汇总(转)
  • 快速破解哈希密文findmyhash
  • JDBC与Hibernate中SQL语句参数设置的顺序问题
  • 数据库备份通用脚本
  • ehcache memcache redis 三大缓存
  • 二十六、Jcreator使用初步
  • 访问修饰符和构造函数
  • YUV Player
  • 盒子模型-怪异模式和标准模式
  • Android开发--Socket通信
  • P1382 光棍组织
  • 1.2 lambda 表达式的语法
  • Lint Code——最多共线的点的个数
  • co模块的前端实现
  • CSS相对定位
  • Hibernate【inverse和cascade属性】知识要点
  • Java到底能干嘛?
  • jdbc就是这么简单
  • python docx文档转html页面
  • React的组件模式
  • WebSocket使用
  • 编写符合Python风格的对象
  • 大数据与云计算学习:数据分析(二)
  • 翻译:Hystrix - How To Use
  • 构建二叉树进行数值数组的去重及优化
  • 聊一聊前端的监控
  • 悄悄地说一个bug
  • 实战|智能家居行业移动应用性能分析
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​一些不规范的GTID使用场景
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #《AI中文版》V3 第 1 章 概述
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (11)MSP430F5529 定时器B
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4)Elastix图像配准:3D图像
  • (二)fiber的基本认识
  • (剑指Offer)面试题34:丑数
  • (南京观海微电子)——COF介绍
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .Net Remoting常用部署结构
  • .net的socket示例
  • .NET企业级应用架构设计系列之应用服务器
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • @RequestBody的使用
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决