91成人在线播放_欧美一区二区视频在线观看_91精品国产高清久久久久久_国产精品久久亚洲不卡4k岛国


待發(fā)短信

在線客服
產(chǎn)品支持 短信寶客服
合作渠道 渠道合作
服務(wù)咨詢

4001-021-502

工作時(shí)間

9:00-21:00

短信寶短信驗(yàn)證碼開(kāi)發(fā)教程 – 4.后端篇


這篇文件教大家怎么處理后端的業(yè)務(wù)邏輯。后端的業(yè)務(wù)我把它分成2塊來(lái)處理:1. 獲取短信驗(yàn)證碼的業(yè)務(wù)處理。 2. 提交表單完成模擬注冊(cè)。

一. 獲取短信驗(yàn)證碼 :打開(kāi)sms/register.php這個(gè)文件,在表單中找到“獲取驗(yàn)證碼”的button標(biāo)簽。獲取驗(yàn)證碼是通過(guò)這個(gè)按鈕觸發(fā)js事件,ajax調(diào)用后臺(tái)接口來(lái)完成發(fā)送的。

我們?cè)趕ms/tool目錄中,創(chuàng)建一個(gè)sendCode.php文件,這個(gè)php文件主要用于處理后端的發(fā)送短信驗(yàn)證碼業(yè)務(wù)。我先來(lái)闡述一下開(kāi)發(fā)的思路: 

1. 引入數(shù)據(jù)驗(yàn)證類,sms/tool/CheckTool.php 

2. 接收前端ajax發(fā)送過(guò)來(lái)的表單數(shù)據(jù):用戶的手機(jī)號(hào)碼和圖形驗(yàn)證碼。 

3. 驗(yàn)證表單提交的數(shù)據(jù)合法性。 

4. 如果數(shù)據(jù)全部合法,就調(diào)用短信寶的短信接口,發(fā)送短信驗(yàn)證碼。 

5. 最后記錄發(fā)送時(shí)間和發(fā)送的手機(jī)號(hào)碼。這一點(diǎn)很重要,可以用來(lái)限制一個(gè)手機(jī)號(hào)碼,在一段時(shí)間里面只能對(duì)短信寶的短信接口請(qǐng)求一次,從而限制了重復(fù)提交。我這里為了演示方便,把時(shí)間記錄在session里面,小伙伴們也可以記錄在數(shù)據(jù)庫(kù)里面。 

代碼如下:

<?php
// 引入驗(yàn)證類
require 'CheckTool.php';
// 短息請(qǐng)求錯(cuò)誤碼
$statusStr = array(
    "0" => "短信發(fā)送成功",
    "-1" => "參數(shù)不全",
    "-2" => "服務(wù)器空間不支持,請(qǐng)確認(rèn)支持curl或者fsocket,聯(lián)系您的空間商解決或者更換空間!",
    "30" => "密碼錯(cuò)誤",
    "40" => "賬號(hào)不存在",
    "41" => "余額不足",
    "42" => "帳戶已過(guò)期",
    "43" => "IP地址限制",
    "50" => "內(nèi)容含有敏感詞"
);

$res = array();
$postCode = trim($_POST['code']);
$postPhone = trim($_POST['phone']);
// 驗(yàn)證圖形驗(yàn)證碼的合法性
$isOk = CheckTool::checkCode($postCode);

if (true !== $isOk) {
    echo responseErr($isOk, 'code');
    exit();
}
// 驗(yàn)證手機(jī)號(hào)碼的合法性
$isOk = CheckTool::checkPhone($postPhone);

if (true !== $isOk) {
    echo responseErr($isOk, 'phone');
    exit();
}
// 調(diào)用短信發(fā)送接口
$isOk = sendSms($postPhone);

// 短信發(fā)送失敗
if (0 != $isOk) {
    echo responseErr($statusStr[$isOk], 'send');
    exit();
}

// 短信發(fā)送成功
$res['flg'] = 1;
// 記錄發(fā)送時(shí)間
$_SESSION['send_time'] = time();
// 記錄用戶的手機(jī)號(hào)碼
$_SESSION['send_phone'] = $postPhone;
echo json_encode($res);

/**
 * 調(diào)用短信寶的短信接口,發(fā)送短信請(qǐng)求。
 * @param $phoneNum
 * @return string
 */
function sendSms($phoneNum) {
    $data = include('../config/config.php');

    if (empty($data)) {
        return "40";
    }

    $url = 'http://www.gjrencai.com/sms?';
    $userName = $data['smsbao_name']; //數(shù)據(jù)庫(kù)獲取用戶名
    $password = md5($data['smsbao_password']); //數(shù)據(jù)庫(kù)獲取密碼
    $phone = $phoneNum;
    $code = rand(100000, 999999);
    $content = '【短信寶】你的短信驗(yàn)證碼為'.$code.',請(qǐng)及時(shí)查收,如非本人操作,請(qǐng)忽略。';
    $url .= 'u=' . $userName . '&p=' . $password . '&m=' . $phone . '&c=' . urlencode($content);
    $_SESSION['sms_code'] = $code;

    return file_get_contents($url);
}

/**
 * 向前端發(fā)送錯(cuò)誤信息
 * @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);
}

二. 提交表單完成模擬注冊(cè): 當(dāng)收到短信寶接口發(fā)出的短信驗(yàn)證碼時(shí),把驗(yàn)證碼填入到表單中,點(diǎn)擊提交按鈕就完成了整個(gè)模擬驗(yàn)證過(guò)程。 

表單提交到當(dāng)前頁(yè)面上,也就是sms/register.php中。我們先分析一下,具體需要做哪些事情: 

(1). 當(dāng)頁(yè)面加載時(shí),獲取用戶上次發(fā)送短信驗(yàn)證碼的時(shí)間,以及當(dāng)前時(shí)間。如果:當(dāng)前時(shí)間 – 上次發(fā)送時(shí)間 < 間隔時(shí)間,那么前端的發(fā)送按鈕進(jìn)入倒計(jì)時(shí)狀態(tài)。 

(2). 驗(yàn)證表單提交的數(shù)據(jù)。成功后跳轉(zhuǎn)。 

代碼如下:

<?php
// 開(kāi)啟session
session_start();
// 引入工具類
require('tool/CheckTool.php');
require('tool/Helpers.php');

$diff = '';

// 得到上次短信請(qǐng)求時(shí)間,和當(dāng)前時(shí)間做對(duì)比。
if (isset($_SESSION['send_time']) && is_int($_SESSION['send_time'])) {
    $currentTime = time();
    $diff = $currentTime - $_SESSION['send_time'];
    $diff = $diff < 60 ? 60 - $diff : '';
}

// 獲取表單數(shù)據(jù),進(jìn)行驗(yàn)證,成功后跳轉(zhuǎn)到登入頁(yè)面。
if (!empty($_POST['is_send'])) {
    // 去除提交數(shù)據(jù)的兩端空格。
    $data = Helpers::removeSpaces($_POST);
    $res = CheckTool::exec($data);

    if (!is_array($res) && true === $res) {
        // 清除記錄的驗(yàn)證碼和手機(jī)號(hào)碼
        $_SESSION['sms_code'] = null;
        $_SESSION['send_phone'] = null;
        unset($_SESSION['sms_code']);
        unset($_SESSION['send_phone']);
        header("Location:login.php");
        exit();
    }
}

?>

提交完成后,跳轉(zhuǎn)到成功提示頁(yè)面sms/login.php中。代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登入頁(yè)面</title>
</head>
<body>
    <p style="text-align: center; margin-top:30px; font-size:25px;">恭喜你!登入成功!
        <a style="color:blue;" href="register.php">返回</a>注冊(cè)界面。
    </p>
</body>
</html>

好了,后端的業(yè)務(wù)邏輯都在這里了。關(guān)于前端的接口調(diào)用,短信發(fā)送后的倒計(jì)時(shí)等功能,我們留到這個(gè)系列的最后一篇,“前端篇”來(lái)介紹。

開(kāi)源插件

最新更新

電商類

CMS類

微信類

文章標(biāo)簽