thinkphp3.2写APP接口之图片验证码实现思路

本文介绍了在ThinkPHP3.2框架下为APP接口开发图片验证码的两种思路,包括验证码的生成和校验过程,适用于注册等场景的安全验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、在写给APP图片验证码时有两种思路

1、用php原生代码写一个,这个有很多现成的代码,不再赘述;
2、使用thinkphp3.2的图片验证码,这里主要讲的就是这种;

二、生成验证码

    public function verifyImg() {
        //让APP端传递一串字符串用于校验使用
        $sendVerifyName= I('get.verifyName');
        //根据你定义的规则对str校验,这里忽略
        //...
        //生成缓存名,用于保存验证码
        //根据你的规则生成,比如md5加盐处理
        $sendVerifyName = md5($sendVerifyName . '12345');
        //实例化验证码对象
        $Verify = new \Think\Verify();
        //================你的验证码参数start==================
        $Verify->fontSize = 20;
        $Verify->length   = 4;
        $Verify->codeSet = '0123456789';
        $Verify->imageW = 150;
        $Verify->imageH = 50;
        $Verify->expire = 600;
        $Verify->fontttf = '5.ttf';
        //================你的验证码参数end==================
        //生成验证码
        $Verify->entry();
        //后续处理,用于验证,这里可以封装成函数操作
        //最好不要改下面的第二个和第三个参数,不然就需要修改\Think\Verify()原文件
        $key = substr(md5($Verify->seKey), 5, 8);
        $str = substr(md5($Verify->seKey), 8, 10);
        $key = md5($key . $str);
        S($sendVerifyName, session($key), 180);
    }

三、校验验证码

比如说在注册时验证

public function register(){
        //一些参数和逻辑处理主要使用verifyName、validity这两个参数,其他参数及校验不需要
        $requestData = array();
        $requestData['tel'] = I('post.tel');
        $requestData['password'] = I('post.password');
        $requestData['confirmPassword'] = I('post.confirmPassword');
        $requestData['verifyName'] = I('post.verifyName');
        $requestData['validity'] = I('post.validity');
        $requestData['sign'] = I('post.sign');
        foreach($requestData as $k => $v){
            if(mb_strlen($v, 'utf-8') == 0){
                my_json_encode(10002, '参数不能为空');
            }
        }
        if(!check_sign($requestData)){
            my_json_encode(10003, '验签失败');
        }
        //根据规则得到验证码的缓存名
        $sendVerifyName = md5($requestData['verifyName'] . '12345');
        //=============生成加密后的验证码start==============
        $Verify = new \Think\Verify();
        $key = substr(md5($Verify->seKey), 5, 8);
        $str = substr(md5($requestData['validity']), 8, 10);
        //这个就是加密后的验证码,用它与S($sendVerifyName)比较即可
        $key = md5($key . $str);
        //=============生成加密后的验证码end==============
        //后续处理,判断缓存是否存在,不存在即验证码过期,存在则比较
        //...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值