thinkPHP 3.2 阿里大鱼短信发送

发布时间:2017年12月15日 17:27:19编辑:admin阅读(2994)评论(0)

    手机短信验证码  额 其实也就那样,没什么好多说的,不懂就直接扣代码,我就是这么任性(帅),代码完整贴出来。

    使用过好多的发送短信验证码的,就不一一去贴了,这里我只贴下阿里大鱼的(防刷一定要做,一定要做,个人接触了四五个发手机短信验证码的,就阿里大于遇到刷短信最多)

    不断自己的摸索,不断填坑,终会有结果的,程序的bug不断磨砺。血的教训,安全性是程序员对程序的考验

    <?php
        namespace Home\Controller;
            use Think\Controller;
            class LoginController extends Controller {
            /*当输入完手机号之后失去焦点触发这个接口,
             接受传输过来的手机号,判断手机号记入表tel_code
             只有监听手机是输入手机号并失去焦点的时候才执行这个接口记录手机号
             防止模拟curl,软件狂刷等非人为手动输入触发 发短信接口
            */
            public function add_tel_code(){
                if($_SERVER['REQUEST_METHOD']=='POST'){
                        $da = $_POST;
                    }else{
                        $data['stuts'] = '200';
                $data['msg'] = '请求错误';
                echo json_encode($data);
                return;
                        }
                if($da['appid']==$da['appid']){
                if(!IS_AJAX){
                $isok = M('tel_code')->where('tel_num='.$da['tel_num'])->find();
                if($isok){
                $data['stuts'] = '200';
                $data['msg'] = '已存在';
                }else{
                M('tel_code')->add(array('tel_num'=>$da['tel_num'],'tel_time'=>time()));
                $data['stuts'] = '100';
                $data['msg'] = '操作成功';
                }
                }else{
                $data['stuts'] = '200';
                $data['msg'] = '非法操作';
                }
                }else{
                $data['stuts'] = '200';
                $data['msg'] = '请用app请求';
                }
                echo json_encode($data);
                }
                /* 短信接口,这里使用的是阿里大鱼的
                  C('appid')  配置在config.php 文件的一个参数,通过app请求传过来的APPID
                  简单的判断是不是这个app请求,不是则拒绝请求,(非常鸡肋,假装有点软用)
                  $dayu = find_model('alidayu','id=1');
                  find_model 个人封装的一个方法,
                    find_model('数据库名称',参数)  
                return M('alidayu')->where('id=1')->find();
                 
                短信的一些配置,直接存数据库,方便后台管理维护
                */
                Public function checklogind(){
                if($_SERVER['REQUEST_METHOD']=='POST'){
                     $da = $_POST;
                 }else{
                    $data['stuts'] = '200';
                    $data['msg'] = '请求错误';
                    echo json_encode($data);
                        return;
                  }
                    $tel_code = M('tel_code')->where(array('tel_num'=>$da['tel']))->find();
                    if(!$tel_code){
                        $data['msg']='操作非法';
                        $data['stuts']='200';
                        echo json_encode($data);
                        return;
                    }
                    $appid = C('appid');
                    if($appid==$da['appid']){
                        $arr = M('users')->where(array('tel'=>$da['tel']))->find();
                        if($arr){
                            $data['msg']='该手机号已经被注册了';
                            $data['stuts']='300';
                        }else{
                            $dayu = find_model('alidayu','id=1');
                            /*  appkey 阿里大鱼获取 appkey
                            secret 阿里大鱼获取 secret
                            SignName  短信模板配置的短信标识, 比如[腾讯][网易]
                            plateCode  短信模板id
                            */
                            import('Vendor.alidayu.TopSdk');
                            $appkey=$dayu['appkey'];
                            $secret=$dayu['secret'];
                            $code = rand(100000,1000000);
                            $c = new \TopClient;
                            $c ->appkey = $appkey ;
                            $c ->secretKey = $secret ;
                            $req = new \AlibabaAliqinFcSmsNumSendRequest;
                            $req ->setExtend( "" );
                            $req ->setSmsType( "normal" );
                            $req ->setSmsFreeSignName( $dayu['SignName'] );
                            $req ->setSmsParam( "{name:'".$code."'}" );
                            $req ->setRecNum( $da['tel'] );
                            $req ->setSmsTemplateCode( $dayu['plateCode'] );
                            $resp = $c ->execute( $req );
                            $arr = objectArray($resp);
                        //dump($arr);die;
                    if($arr['result']['success']){
                        $data['stuts'] = '100';
                        $data['msg'] = '短信已发送至您的手机';
                        $_SESSION['code'] = $code;
                    }else{
                        $data['msg']='网络繁忙';
                        $data['stuts']='200';
                    }
                }
            }else{
                $data['msg']='请用app发送请求';
                $data['stuts']='300';
            }
            echo json_encode($data);
        }
    }


    比较啰嗦,且看我再次啰嗦解释一下

    这是我app请求的接口,就懒得找其他的,自己看着改吧,

    add_tel_code 计入手动输入手机号失去焦点时触发 ,计入手机号

    checklogind 发送短信 先查询手机号在不在add_tel_code记录表内,不在拒绝

    好吧,其实也挺鸡肋的,但这不是重点,望有更好的点子的大牛,牛牛,留言你的谏言。

    我不是黑阿里大鱼。。。好吧我就是黑他了,(强行掩饰自己没考虑防刷的过失)

关键字短息