待发短信

在线客服
产品支持 短信宝客服
合作渠道 渠道合作
服务咨询

4001-021-502

工作时间

9:00-21:00

短信宝短信验证码开发教程 – 4.后端篇

这篇文件教大家怎么处理后端的业务逻辑。后端的业务我把它分成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";
    }
 
    $url 'https://www.smsbao.com/sms?';
    $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类

微信类

文章标签