这篇文件教大家怎么处理后端的业务逻辑。后端的业务我把它分成2块来处理:1. 获取短信验证码的业务处理。 2. 提交表单完成模拟注册。
一. 获取短信验证码 :打开sms/register.php这个文件,在表单中找到“获取验证码”的button标签。获取验证码是通过这个按钮触发js事件,ajax调用后台接口来完成发送的。
我们在sms/tool目录中,创建一个sendCode.php文件,这个php文件主要用于处理后端的发送短信验证码业务。我先来阐述一下开发的思路:
1. 引入数据验证类,sms/tool/CheckTool.php 2. 接收前端ajax发送过来的表单数据:用户的手机号码和图形验证码。 3. 验证表单提交的数据合法性。 4. 如果数据全部合法,就调用短信宝的短信接口,发送短信验证码。 5. 最后记录发送时间和发送的手机号码。这一点很重要,可以用来限制一个手机号码,在一段时间里面只能对短信宝的短信接口请求一次,从而限制了重复提交。我这里为了演示方便,把时间记录在session里面,小伙伴们也可以记录在数据库里面。 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
<?php // 引入验证类 require 'CheckTool.php' ; // 短息请求错误码 $statusStr = array ( "0" => "短信发送成功" , "-1" => "参数不全" , "-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!" , "30" => "密码错误" , "40" => "账号不存在" , "41" => "余额不足" , "42" => "帐户已过期" , "43" => "IP地址限制" , "50" => "内容含有敏感词" ); $res = array (); $postCode = trim( $_POST [ 'code' ]); $postPhone = trim( $_POST [ 'phone' ]); // 验证图形验证码的合法性 $isOk = CheckTool::checkCode( $postCode ); if (true !== $isOk ) { echo responseErr( $isOk , 'code' ); exit (); } // 验证手机号码的合法性 $isOk = CheckTool::checkPhone( $postPhone ); if (true !== $isOk ) { echo responseErr( $isOk , 'phone' ); exit (); } // 调用短信发送接口 $isOk = sendSms( $postPhone ); // 短信发送失败 if (0 != $isOk ) { echo responseErr( $statusStr [ $isOk ], 'send' ); exit (); } // 短信发送成功 $res [ 'flg' ] = 1; // 记录发送时间 $_SESSION [ 'send_time' ] = time(); // 记录用户的手机号码 $_SESSION [ 'send_phone' ] = $postPhone ; echo json_encode( $res ); /** * 调用短信宝的短信接口,发送短信请求。 * @param $phoneNum * @return string */ function sendSms( $phoneNum ) { $data = include ( '../config/config.php' ); if ( empty ( $data )) { return "40" ; } $userName = $data [ 'smsbao_name' ]; //数据库获取用户名 $password = md5( $data [ 'smsbao_password' ]); //数据库获取密码 $phone = $phoneNum ; $code = rand(100000, 999999); $content = '【短信宝】你的短信验证码为' . $code . ',请及时查收,如非本人操作,请忽略。' ; $url .= 'u=' . $userName . '&p=' . $password . '&m=' . $phone . '&c=' . urlencode( $content ); $_SESSION [ 'sms_code' ] = $code ; return file_get_contents ( $url ); } /** * 向前端发送错误信息 * @param $msg * @param $type * @return string */ function responseErr( $msg , $type ) { $res = array (); $res [ 'flg' ] = -1; $res [ 'err' ] = $msg ; $res [ 'type' ] = $type ; return json_encode( $res ); } |
二. 提交表单完成模拟注册: 当收到短信宝接口发出的短信验证码时,把验证码填入到表单中,点击提交按钮就完成了整个模拟验证过程。 表单提交到当前页面上,也就是sms/register.php中。我们先分析一下,具体需要做哪些事情: (1). 当页面加载时,获取用户上次发送短信验证码的时间,以及当前时间。如果:当前时间 – 上次发送时间 < 间隔时间,那么前端的发送按钮进入倒计时状态。 (2). 验证表单提交的数据。成功后跳转。 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?php // 开启session session_start(); // 引入工具类 require ( 'tool/CheckTool.php' ); require ( 'tool/Helpers.php' ); $diff = '' ; // 得到上次短信请求时间,和当前时间做对比。 if (isset( $_SESSION [ 'send_time' ]) && is_int ( $_SESSION [ 'send_time' ])) { $currentTime = time(); $diff = $currentTime - $_SESSION [ 'send_time' ]; $diff = $diff < 60 ? 60 - $diff : '' ; } // 获取表单数据,进行验证,成功后跳转到登入页面。 if (! empty ( $_POST [ 'is_send' ])) { // 去除提交数据的两端空格。 $data = Helpers::removeSpaces( $_POST ); $res = CheckTool:: exec ( $data ); if (! is_array ( $res ) && true === $res ) { // 清除记录的验证码和手机号码 $_SESSION [ 'sms_code' ] = null; $_SESSION [ 'send_phone' ] = null; unset( $_SESSION [ 'sms_code' ]); unset( $_SESSION [ 'send_phone' ]); header( "Location:login.php" ); exit (); } } ?> |
提交完成后,跳转到成功提示页面sms/login.php中。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
<!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < title >登入页面</ title > </ head > < body > < p style = "text-align: center; margin-top:30px; font-size:25px;" >恭喜你!登入成功! < a style = "color:blue;" href = "register.php" >返回</ a >注册界面。 </ p > </ body > </ html > |
好了,后端的业务逻辑都在这里了。关于前端的接口调用,短信发送后的倒计时等功能,我们留到这个系列的最后一篇,“前端篇”来介绍。
最新更新
电商类
CMS类
微信类