
之前開(kāi)發(fā)一個(gè)小功能就是留言后發(fā)送短信到手機(jī)上。給朋友說(shuō)了一下,然后他說(shuō)他有一個(gè)客戶需求是留言的時(shí)候先手機(jī)驗(yàn)證一下,避免有人亂留言。這其實(shí)是一個(gè)好主意,可以過(guò)濾掉很多垃圾留言信息。
于是趁熱打鐵,前兩天剛開(kāi)發(fā)了留言發(fā)送到手機(jī)上以及注冊(cè)會(huì)員時(shí)手機(jī)驗(yàn)證,正好可以使用到之前用過(guò)的方法來(lái)實(shí)現(xiàn)這一功能。
下面開(kāi)始講如何實(shí)現(xiàn)。
歡迎隨便轉(zhuǎn)載,不需要注明來(lái)源和出處,我們的目的是讓知識(shí)和內(nèi)容得到分享和傳播。
這個(gè)小功能呢,我看了一下代碼,和上一次說(shuō)的會(huì)員注冊(cè)時(shí)需要一個(gè)短信驗(yàn)證差不多。代碼也極為相似。
安排:
此次需要修改的文件一共有三個(gè):
1:前端文件:templatedefaulthtmlmessage.html
2: 標(biāo)簽解析文件: appshomecontrollerParserController.php
3: 控制器文件: appshomecontrollerMessageController.php
弟一:修改前端文件
這個(gè)比較簡(jiǎn)單,就是驗(yàn)證碼的位置和上一篇文章提到的會(huì)員注冊(cè)是一樣的,添加一個(gè)發(fā)送短信的按鈕。我們用:sendBook,之前注冊(cè)會(huì)員短信驗(yàn)證我們用的是sendPhone,參考一下,其實(shí)都是一樣的方法。
<div class="form-group"> <label for="checkcode">手機(jī)驗(yàn)證碼</label> <div class="row"> <div class="col-6"> <input type="text" name="checkcode" required id="checkcode" class="form-control" placeholder="請(qǐng)輸入驗(yàn)證碼"> </div> <div class="col-6"> <span class="btn btn-info mb-2" onclick="sendBook();">發(fā)送短信</span> </div> </div> </div>

然后在下面的JS中添加
//發(fā)送短信驗(yàn)證碼
function sendBook(){
var url='{pboot:sendBook}';
var username=$("#username").val();
if(!username){
alert("請(qǐng)先輸入需要注冊(cè)的手機(jī)號(hào)!");
return false;
}
$.ajax({
type: 'POST',
url: url,
dataType: 'json',
data: {
to: username
},
success: function (response, status) {
if(response.code){
alert(response.data);
}else{
alert(response.data);
}
},
});
return false;
}第二:解析標(biāo)簽增加一個(gè):sendBook,這個(gè)簡(jiǎn)單,復(fù)制上面的改名即可。

第三:重點(diǎn)來(lái)了。控制器文件MessageController.php中我們添加一個(gè)發(fā)送短信的函數(shù)。代碼太多,我直接復(fù)制下來(lái)。
// 發(fā)送短信
public function sendBook()
{
if (time() - session('lastsend') < 10) {
json(0, '您提交太頻繁了,請(qǐng)稍后再試!');//間隔100秒才能再次提交。
}
// 發(fā)送手機(jī)驗(yàn)證
if (! ! $to = post('to')) {
if (! preg_match('/^1[0-9]{10}$/', $to)) {
json(0, '手機(jī)格式不正確,請(qǐng)輸入正確的手機(jī)號(hào)!');
}
}
$rs = false;
if ($to) {
session('lastsend', time()); // 記錄醉后提交時(shí)間
$code = create_code(4);// 驗(yàn)證碼長(zhǎng)度
session('checkcode', strtolower($code));
$phone_body = "你的注冊(cè)驗(yàn)證碼是{" . $code."}";
$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)容含有敏感詞"
);
$smsapi = "http://api.smsbao.com/";
$user = "15800110475"; //短信平臺(tái)帳號(hào)
$pass = md5("ySShb2FD842DF"); //短信平臺(tái)密碼
$phone = post('to'); //接收短信的手機(jī)號(hào)碼
$sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($phone_body);
$result =file_get_contents($sendurl) ;
echo $statusStr[$result];
}
if ($result === true) {
} else {
}
return $sendBook;
}然后在下面的留言新增的函數(shù)中修改如下驗(yàn)證碼處的位置
// 驗(yàn)證碼驗(yàn)證
$checkcode = strtolower(post('checkcode', 'var'));
if ($this->config('message_check_code') !== '0') {
if (! $checkcode) {
alert_back('驗(yàn)證碼不能為空!');
}else{
$sendBook = $this->sendBook();//發(fā)送驗(yàn)證碼
}
if ($checkcode != session('checkcode')) {
alert_back('驗(yàn)證碼錯(cuò)誤!');
}
}
有關(guān)我們服務(wù)的更多信息,請(qǐng)聯(lián)系項(xiàng)目經(jīng)理
15899750475 楊先生