小伙伴是否做PC網(wǎng)站的時候,是否遇到過注冊用戶需要使用短信驗證的功能呢?或者找回密碼,以及驗證用戶的信息等等功能!今天思夢PHP就為大家?guī)鞹hinkPHP整合阿里大魚短信驗證的功能!
首先,我們要明白短信發(fā)送是什么原理,其實我們使用的第三方是一個通訊的短信協(xié)議,然后把我們隨機生成的一個驗證碼發(fā)送到用戶的手機上,之后我們發(fā)送的同時在數(shù)據(jù)庫里面要保存相應(yīng)的信息用來驗證,原理就是這樣的了,下來我們就開始一步一步的教大家去玩這個功能!
(1)我們要去建一個保存短信消息的數(shù)據(jù)表
DROP TABLE IF EXISTS `tb_record`;
CREATE TABLE `tb_record` ( `id` int(11) NOT NULL AUTO_INCREMENT, `tel` varchar(255) NOT NULL COMMENT 手機號, `vc` varchar(255) NOT NULL, `time` varchar(255) NOT NULL, `ctime` varchar(255) NOT NULL COMMENT 最后一次發(fā)送驗證碼的時間, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT=短信發(fā)送記錄表;
(2)我們要去使用第三方的類文件,當然這個類文件你可以去平臺下載,上面有PHP的demo,然后我們整合到thinkphp里面就行了,加入放在類庫里面不要忘記聲明命名空間!
(3)我們在配置文件里面配置一些輔助變量
url=>
http://www.etuocloud.com/gatetest.action, //這個是測試的調(diào)用地址,上限之后要更改app_key=>XXXXXXXXXX, // key,你申請之后創(chuàng)建應(yīng)用會得到app_secret=>XXXXXXXXXXXX, // 密匙,你申請之后創(chuàng)建應(yīng)用會得到format=>json, // 返回值的格式,分為XML和json(4)這步就是我們開始寫邏輯操作了
$_POST[tel] = "18522713XXX";$tel = $_POST[tel];$w[tel] = $tel;$res1 = D("Record")->where($w)->find();//一天之內(nèi)只能有三次機會(驗證)$gap = time()-$res1[ctime];if($gap>=86400){ $data[time] = 0; D("Record")->where($w)->save($data);}$res1 = D("Record")->where($w)->find();if($res1[time]>=3){ echo "短信上限!";}else { //隨機發(fā)送的驗證碼的值 $num = rand(1000, 9999); //實例化一個對象 $ecd = new Ecd(C(url), C(app_key), C(app_secret), C(format)); //發(fā)送驗證碼短信 //第一個參數(shù)是手機號,第二個是模板的id,在應(yīng)用管理有 一個模板的管理,第三個就是我們發(fā)送的隨機的驗證碼,第 四個是訂單號,咟?不填 $res = $ecd->send_sms_code("$tel", 1, "$num", ); $arr = json_decode($res, true); if ($arr[result] == 0 && $arr[msg] == "成功") { $w[tel] = $tel; $res1 = D("Record")->where($w)->find(); if ($res1) { $data[vc] = $num; $data[time] = $res1[time] + 1; $data[ctime] = time(); $res2 = D("Record")->where($w)->save($data); if ($res2) { echo "發(fā)送成功"; } else { echo "發(fā)送失敗"; } } else { $data[tel] = $tel; $data[vc] = $num; $data[time] = 1; $data[ctime] = time(); $res3 = D("Record")->add($data); if ($res3) { echo "發(fā)送成功"; } else { echo "發(fā)送失敗"; } } }}
(5)那就是收到短信,然后用戶提交的時候我們根據(jù)用戶的手機號去查相關(guān)的驗證碼好了!
$_POST[tel] = "18522713XXX";
$tel = $_POST[tel];$w[tel] = $tel;
$res1 = D("Record")->where($w)->find();//一天之內(nèi)只能有三次機會(驗證)
$gap = time()-$res1[ctime];
if($gap>=86400){
$data[time] = 0;
D("Record")->where($w)->save($data);
}
$res1 = D("Record")->where($w)->find();
if($res1[time]>=3){
echo "短信上限!";
}else {
//隨機發(fā)送的驗證碼的值 $num = rand(1000, 9999);
//實例化一個對象
$ecd = new Ecd(C(url), C(app_key), C(app_secret), C(format));
//發(fā)送驗證碼短信 //第一個參數(shù)是手機號,第二個是模板的id,在應(yīng)用管理有 一個模板的管理,第三個就是我們發(fā)送的隨機的驗證碼,第 四個是訂單號,咟?不填
$res = $ecd->send_sms_code("$tel", 1, "$num", );
$arr = json_decode($res, true);
if ($arr[result] == 0 && $arr[msg] == "成功") {
$w[tel] = $tel;
$res1 = D("Record")->where($w)->find();
if ($res1) { $data[vc] = $num;
$data[time] = $res1[time] + 1;
$data[ctime] = time();
$res2 = D("Record")->where($w)->save($data);
if ($res2) {
echo "發(fā)送成功";
} else { echo "發(fā)送失敗";
}
} else { $data[tel] = $tel;
$data[vc] = $num;
$data[time] = 1;
$data[ctime] = time();
$res3 = D("Record")->add($data);
if ($res3) { echo "發(fā)送成功";
} else {
echo "發(fā)送失敗";
} } }}
還有就是小伙伴要注意的就是,阿里大魚未認證的用戶,只能給白名單的用戶發(fā)送短信,所以你要去配置一下白名單,以保證我們發(fā)送的成功!還有就是剛申請的時候是有免費的100條使用的條數(shù)的,供我們測試使用!
以上就是【滿滿干貨!干貨分享(php織夢動態(tài)網(wǎng)站能承載多少)php織夢管理系統(tǒng)為啥沒有權(quán)限登錄-思夢PHP-阿里大魚手機驗證碼】的全部內(nèi)容。


評論