思夢PHP-阿里大魚手機驗證碼

來源:互聯網
上載者:User

標籤:圖片   技術分享   img   原理   stat   發送   url   認證   XML   

小夥伴是否做PC網站的時候,是否遇到過註冊使用者需要使用簡訊驗證的功能呢?或者找回密碼,以及驗證使用者的資訊等等功能!今天思夢PHP就為大家帶來ThinkPHP整合阿里大魚簡訊驗證的功能!

首先,我們要明白簡訊發送是什麼原理,其實我們使用的第三方是一個通訊的簡訊協議,然後把我們隨機產生的一個驗證碼發送到使用者的手機上,之後我們發送的同時在資料庫裡面要儲存相應的資訊用來驗證,原理就是這樣的了,下來我們就開始一步一步的教大家去玩這個功能!

(1)我們要去建一個儲存簡訊訊息的資料表

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 '最後一次發送驗證碼的時間', PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='簡訊發送記錄表';

(2)我們要去使用第三方的類檔案,當然這個類檔案你可以去平台下載,上面有PHP的demo,然後我們整合到thinkphp裡面就行了,加入放在類庫裡面不要忘記聲明命名空間!

(3)我們在設定檔裡面配置一些輔助變數

'url'=>'http://www.etuocloud.com/gatetest.action', //這個是測試的調用地址,上限之後要更改'app_key'=>'XXXXXXXXXX', // key,你申請之後建立應用會得到'app_secret'=>'XXXXXXXXXXXX', // 密匙,你申請之後建立應用會得到'format'=>'json', // 傳回值的格式,分為XML和json

(4)這步就是我們開始寫邏輯操作了

$_POST['tel'] = "18522713XXX";$tel = $_POST['tel'];$w['tel'] = $tel;$res1 = D("Record")->where($w)->find();//一天之內只能有三次機會(驗證)$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 { //隨機發送的驗證碼的值 $num = rand(1000, 9999); //執行個體化一個對象 $ecd = new Ecd(C('url'), C('app_key'), C('app_secret'), C('format')); //發送驗證碼簡訊 //第一個參數是手機號,第二個是模板的id,在應用管理有 一個模板的管理,第三個就是我們發送的隨機的驗證碼,第 四個是訂單號,咟?不填 $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 "發送成功"; } else { echo "發送失敗"; } } else { $data['tel'] = $tel; $data['vc'] = $num; $data['time'] = 1; $data['ctime'] = time(); $res3 = D("Record")->add($data); if ($res3) { echo "發送成功"; } else { echo "發送失敗"; } } }}

(5)那就是收到簡訊,然後使用者提交的時候我們根據使用者的手機號去查相關的驗證碼好了!

$_POST['tel'] = "18522713XXX";

$tel = $_POST['tel'];$w['tel'] = $tel;

$res1 = D("Record")->where($w)->find();//一天之內只能有三次機會(驗證)

$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 {

//隨機發送的驗證碼的值 $num = rand(1000, 9999);

//執行個體化一個對象

$ecd = new Ecd(C('url'), C('app_key'), C('app_secret'), C('format'));

//發送驗證碼簡訊 //第一個參數是手機號,第二個是模板的id,在應用管理有 一個模板的管理,第三個就是我們發送的隨機的驗證碼,第 四個是訂單號,咟?不填

$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 "發送成功";

} else { echo "發送失敗";

}

} else { $data['tel'] = $tel;

$data['vc'] = $num;

$data['time'] = 1;

$data['ctime'] = time();

$res3 = D("Record")->add($data);

if ($res3) { echo "發送成功";

} else {

echo "發送失敗";

} } }}

還有就是小夥伴要注意的就是,阿里大魚未認證的使用者,只能給白名單的使用者傳送簡訊,所以你要去配置一下白名單,以保證我們發送的成功!還有就是剛申請的時候是有免費的100條使用的條數的,供我們測試使用!


思夢PHP-阿里大魚手機驗證碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.