這篇文件教大家怎么處理后端的業(yè)務(wù)邏輯。后端的業(yè)務(wù)我把它分成2塊來處理:1. 獲取短信驗(yàn)證碼的業(yè)務(wù)處理。 2. 提交表單完成模擬注冊。
一. 獲取短信驗(yàn)證碼 :打開sms/register.php這個(gè)文件,在表單中找到“獲取驗(yàn)證碼”的button標(biāo)簽。獲取驗(yàn)證碼是通過這個(gè)按鈕觸發(fā)js事件,ajax調(diào)用后臺接口來完成發(fā)送的。
我們在sms/tool目錄中,創(chuàng)建一個(gè)sendCode.php文件,這個(gè)php文件主要用于處理后端的發(fā)送短信驗(yàn)證碼業(yè)務(wù)。我先來闡述一下開發(fā)的思路:
1. 引入數(shù)據(jù)驗(yàn)證類,sms/tool/CheckTool.php 2. 接收前端ajax發(fā)送過來的表單數(shù)據(jù):用戶的手機(jī)號碼和圖形驗(yàn)證碼。 3. 驗(yàn)證表單提交的數(shù)據(jù)合法性。 4. 如果數(shù)據(jù)全部合法,就調(diào)用短信寶的短信接口,發(fā)送短信驗(yàn)證碼。 5. 最后記錄發(fā)送時(shí)間和發(fā)送的手機(jī)號碼。這一點(diǎn)很重要,可以用來限制一個(gè)手機(jī)號碼,在一段時(shí)間里面只能對短信寶的短信接口請求一次,從而限制了重復(fù)提交。我這里為了演示方便,把時(shí)間記錄在session里面,小伙伴們也可以記錄在數(shù)據(jù)庫里面。 代碼如下:
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 // 引入驗(yàn)證類 require 'CheckTool.php' ; // 短息請求錯(cuò)誤碼 $statusStr = array ( "0" => "短信發(fā)送成功" , "-1" => "參數(shù)不全" , "-2" => "服務(wù)器空間不支持,請確認(rèn)支持curl或者fsocket,聯(lián)系您的空間商解決或者更換空間!" , "30" => "密碼錯(cuò)誤" , "40" => "賬號不存在" , "41" => "余額不足" , "42" => "帳戶已過期" , "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ī)號碼的合法性 $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ī)號碼 $_SESSION [ 'send_phone' ] = $postPhone ; echo json_encode( $res ); /** * 調(diào)用短信寶的短信接口,發(fā)送短信請求。 * @param $phoneNum * @return string */ function sendSms( $phoneNum ) { $data = include ( '../config/config.php' ); if ( empty ( $data )) { return "40" ; } $userName = $data [ 'smsbao_name' ]; //數(shù)據(jù)庫獲取用戶名 $password = md5( $data [ 'smsbao_password' ]); //數(shù)據(jù)庫獲取密碼 $phone = $phoneNum ; $code = rand(100000, 999999); $content = '【短信寶】你的短信驗(yàn)證碼為' . $code . ',請及時(shí)查收,如非本人操作,請忽略。' ; $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 ); } |
二. 提交表單完成模擬注冊: 當(dāng)收到短信寶接口發(fā)出的短信驗(yàn)證碼時(shí),把驗(yàn)證碼填入到表單中,點(diǎn)擊提交按鈕就完成了整個(gè)模擬驗(yàn)證過程。 表單提交到當(dāng)前頁面上,也就是sms/register.php中。我們先分析一下,具體需要做哪些事情: (1). 當(dāng)頁面加載時(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)。 代碼如下:
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 = '' ; // 得到上次短信請求時(shí)間,和當(dāng)前時(shí)間做對比。 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)到登入頁面。 if (! empty ( $_POST [ 'is_send' ])) { // 去除提交數(shù)據(jù)的兩端空格。 $data = Helpers::removeSpaces( $_POST ); $res = CheckTool:: exec ( $data ); if (! is_array ( $res ) && true === $res ) { // 清除記錄的驗(yàn)證碼和手機(jī)號碼 $_SESSION [ 'sms_code' ] = null; $_SESSION [ 'send_phone' ] = null; unset( $_SESSION [ 'sms_code' ]); unset( $_SESSION [ 'send_phone' ]); header( "Location:login.php" ); exit (); } } ?> |
提交完成后,跳轉(zhuǎn)到成功提示頁面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 > |
好了,后端的業(yè)務(wù)邏輯都在這里了。關(guān)于前端的接口調(diào)用,短信發(fā)送后的倒計(jì)時(shí)等功能,我們留到這個(gè)系列的最后一篇,“前端篇”來介紹。
最新更新
電商類
CMS類
微信類