simengphp

小伙伴是否做PC网站的时候,是否遇到过注册用户需要使用短信验证的功能呢?或者找回密码,以及验证用户的信息等等功能!今天思梦PHP就为大家带来ThinkPHP整合阿里大鱼短信验证的功能!

思梦PHP-阿里大鱼手机验证码

首先,我们要明白短信发送是什么原理,其实我们使用的第三方是一个通讯的短信协议,然后把我们随机生成的一个验证码发送到用户的手机上,之后我们发送的同时在数据库里面要保存相应的信息用来验证,原理就是这样的了,下来我们就开始一步一步的教大家去玩这个功能!

(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条使用的条数的,供我们测试使用!

分类:

技术点:

相关文章:

  • 2021-12-11
  • 2021-06-14
  • 2021-05-10
  • 2021-05-03
  • 2022-12-23
  • 2021-12-18
  • 2021-05-17
  • 2022-12-23
猜你喜欢
  • 2021-12-15
  • 2021-12-18
  • 2021-05-01
  • 2021-12-12
  • 2022-12-23
  • 2022-12-23
  • 2021-12-28
相关资源
相似解决方案