银行卡数据展示、提现、短信、图片验证、Ajax分页

后台设置

 /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index(Request $request)
    {
        $str=\app\day64\model\Bank::find(1);
        return view('index',compact('str'));
    }
    //获取手机验证码
    public function getCode(Request $request)
    {
        //当用户点击手机号时先去缓存中查询,当前时间-缓存时间如果大于60s,允许用户继续获取验证码,否则给出提示
        //获取手机号
        $phone=$request->param('phone');
        //设置当前时间戳
        $time=time();
        if (Session::has($phone)){
            if ($time - Session::get($phone) > 60){
                $content="【创信】你的验证码是:5873,3分钟有效!";
                $res=$this->sendmsg($phone,$content);
                if ($res){
                    //每次发送验证码成功之后都将当前时间存入缓存,方便下次发送验证码时的时间间隔的判断
                    Session::set($phone,time());
                    //将发送成功的手机验证码存入session,当用户进行提交信息入库的时候进最终的验证码验证
                    Session::set('code',5873);
                    return json(['code'=>200,'msg'=>'发送成功']);
                }else{
                    return json(['code'=>201,'msg'=>'发送失败']);
                }
            }else{
                return json(['code'=>500,'msg'=>'一分钟后点击发送']);
            }
        }else{
            $content="【创信】你的验证码是:5873,3分钟有效!";
            $res=$this->sendmsg($phone,$content);
            if ($res){
                //发送验证码成功后将当前时间存入缓存,以便下次再次点击的时候进行时间的判断
                Session::set($phone,time());
                return json(['code'=>200,'msg'=>'发送成功']);
            }else{
                return json(['code'=>201,'msg'=>'发送失败']);
            }
        }
    }

    //使用curl函数库发送请求
    public function curl_request($url, $post = true, $params = [], $https = true)
    {
        //初始化请求
        $ch = curl_init($url);
        //默认是get请求。如果是post请求 设置请求方式和请求参数
        if ($post) {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        }
        //如果是https协议,禁止从服务器验证本地证书
        if ($https) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        }
        //发送请求,获取返回结果
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $res = curl_exec($ch);
        //关闭请求
        curl_close($ch);
        return $res;
    }
    //使用curl_request函数调用短信接口发送短信
    public function sendmsg($phone, $content)
    {
        // 请求地址、appkey
        $gateway = 'https://way.jd.com/chuangxin/dxjk';
        $appkey = '56094ca4632daa86455f007d61e3b113';
        // https://way.jd.com/chuangxin/dxjk?mobile=*********&content=【创信】你的验证码是:5873,3分钟内有效!&appkey=您申请的APPKEY
        $url = $gateway . '?appkey=' . $appkey . "&content=" . $content . "&mobile=" . $phone ;

        $res = $this->curl_request($url, false, [], true);
        //处理结果
        if (!$res) {
            return '请求发送失败';
        }
        //解析结果
        $arr = json_decode($res, true);
        if (isset($arr['code']) && $arr['code'] == 10000) {
            //短信接口调用成功
            return true;
        } else {
            /*if(isset($arr['msg'])){
                return $arr['msg'];
            }*/
            return '短信发送失败';
        }
    }

    //提现之前判断可用余额的方法
    public function getmoney(Request $request)
    {
        //获取要提现的金额
        $param = $request->param();
        //查询数据表中当前银行卡中的可用余额,然后进行对比
        $money=\app\day64\model\Bank::where('bank',$param['bank'])->find();
        if ($money['money'] < $param['money']){
            return json(['code'=>501,'data'=>'','msg'=>'可用金额不足']);
        }
    }
    //设置当用户输入提现金额的时候查询数据表可用余额,显示提现金额不能大于可用金额
    public function tian(Request $request)
    {
        //获取要提现的信息
        $param = $request->param();
        //后台验证表提现单数据不能为空
        $validate=$this->validate($param,[
           'bank'=>'require',
           'money'=>'require',
           'content'=>'require'
        ]);
        if ($validate !== true){
            $this->error($validate);
        }
        $time=date('Y-m-d h:i:s',time());
        //将入库数据进行拼接【组装提现成功数据】
        $data=[
            'bank'=>$param['bank'],
            'money'=>$param['money'],
            'content'=>$param['content'],
            'time'=>$time,
            'status'=>'提现成功'
        ];
        //拼接财务表数据
        $data2=[
            'bank'=>$param['bank'],
            'count'=>$param['money'],
            'tuikuan'=>'100',
            'wxiaofei'=>'100',
            'wtixian'=>'100',
            'ytixian'=>'100',
            'time'=>$time,
        ];
        //将入库数据进行拼接【组装提现失败数据】
        $data3=[
            'bank'=>$param['bank'],
            'money'=>0,
            'content'=>$param['content'],
            'time'=>$time,
            'status'=>'提现失败'
        ];
        //查询当前提现银行卡是否存在
        $res=\app\day64\model\Bank::where('bank',$param['bank'])->find();
        if ($res){
            //然后进行银行卡记录添加
            $obj=new \app\day64\model\Cash();
            $obj->allowField(true)->save($data);
        }else{
            //然后进行银行卡记录添加
            $obj=new \app\day64\model\Cash();
            $obj->allowField(true)->save($data3);
        }
        try {
            //进行当前银行卡可用余额的修改
            $bank=\app\day64\model\Bank::where('bank',$param['bank'])->find();
            \app\day64\model\Bank::where('bank',$param['bank'])->update(['money'=>$bank['money']+$param['money']]);
            //往用户财务报表添加一条数据
            $obj1=new \app\day64\model\Money();
            $obj1->allowField(true)->save($data2);
            //$this->success('操作成功','index');
            return redirect('index');
        }catch (Exception $e){
            echo $e->getMessage();
        }
    }
    //提现记录表
    public function liebiao(Request $request)
    {
        //获取每页显示条数和偏移量
        $page=$request->param('page');
        $limit=$request->param('limit');
        if ($request->isAjax()){
            $data=\app\day64\model\Cash::page($page,$limit)->select();
//            print_r($data);die();
            //获取总条数
            $count=\app\day64\model\Cash::count();
            return json(['code'=>0,'data'=>$data,'count'=>$count,'msg'=>'查询成功']);
        }
        return view('index');
    }

前台数据

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Layui</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="/layui/layui/css/layui.css"  media="all">
    <!-- 注意:如果你直接复制所有代码到本地,上述css路径需要改成你本地的 -->
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>

<div>姓名:{$str.name}</div>
<div>手机号:{$str.phone}</div>
<div>当前用户可用余额:{$str.money}</div>
<div>可提现余额: {$str.money}</div>
<div>银行卡类型: {$str.type}</div>
<div>提现银行账号: {$str.bank}</div>

<form class="layui-form" action="{:url('day64/cash/tian')}" lay-filter="example">

    <div class="layui-form-item">
        <label class="layui-form-labsaveel">银行卡</label>
        <div class="layui-input-block">
            <input type="text" name="bank" placeholder="请输入银行卡" autocomplete="off" class="layui-input" id="bank">
        </div>
    </div>

    <div class="layui-form-item">
        <label class="layui-form-label">提现金额</label>
        <div class="layui-input-block">
            <input type="text" name="money" placeholder="请输入提现金额" autocomplete="off" class="layui-input" id="money">
        </div>
    </div>

    <div class="layui-form-item layui-form-text">
        <label class="layui-form-label">描述</label>
        <div class="layui-input-block">
            <textarea placeholder="请输入内容" class="layui-textarea" name="content" id="content"></textarea>
        </div>
    </div>

    <div>
        <label>验证码:</label> <input type="text" class="textBox" placeholder="看不清 请点击图片更换"
                                   name="code" id="yzm" placeholder="验证码" />
        <img src="{:captcha_src()}" alt=""  class="passcode" style="height:43px;cursor:pointer;width: 130px;height: 40px;margin-left: 75px;" onclick="this.src=this.src+'?'">
    </div>

    电话号码
    <div>
        <input type="text" name="phone" id="phone" placeholder="请输入电话号码"/>
    </div>
    <div>
        <input type="text" name="getcode" placeholder="请输入验证码">
        <input type="button" id="getcode" value="免费获取验证码" onclick="settime(this)" />
    </div>

    <div class="layui-form-item">
        <div class="layui-input-block">
            <button type="submit" class="layui-btn" lay-filter="demo1">立即提交</button>
        </div>
    </div>

</form>
<table class="layui-hide" id="test" lay-filter="test"></table>
<script>

    //倒计时
    var countdown=60;
    function settime(val) {
        if (countdown == 0) {
            val.removeAttribute("disabled");
            val.value="免费获取验证码";
            countdown = 60;
        } else {
            val.setAttribute("disabled", true);
            val.value="重新发送(" + countdown + ")";
            countdown--;
        }
        setTimeout(function() {
            settime(val)
        },1000)
    }

    //验证银行卡
    $("#bank").blur(function () {
        var bank=$("#bank").val();
        if (bank == ''){
            layer.msg('银行卡不能为空')
            return false;
        }
        if (bank.length>19 || bank.length<16){
            layer.msg('银行卡不符')
            return false;
        }
    });

    //验证可用余额
    $("#money").blur(function(res){
        var money=$("#money").val();
        var bank=$("#bank").val();
        if (money == ''){
            layer.msg('提现金额不能为空')
            return false;
        }
        //调用接口判断提现可用余额
        $.get('getmoney',{money:money,bank:bank},function (res) {
            //console.log(res)
            if (res.code==501){
                layer.msg(res.msg)
                return false;
            }
            if (res.code==200){
                layer.msg(res.msg)
            }
        })
    });

    //点击调用接口获取手机验证码
    $('#getcode').click(function () {
        //手机号格式
        var pattern = /^1[34578]\d{9}$/;
        //获取当前手机号
        var phone=$("#phone").val();
        if (phone == ''){
            layer.msg('手机号不能为空')
            return false;
        }
        if (!pattern.test(phone)){
            layer.msg('手机号格式不正确')
            return false;
        }
        $.get('getCode',{phone:phone},function (res) {
            if (res.code==200){
                layer.msg('短信发送成功');
            }
            if (res.code==500){
                layer.msg(res.msg);
                return false;
            }

        })
    })


</script>

<script src="/layui/layui/layui.js" charset="utf-8"></script>
<!-- 注意:如果你直接复制所有代码到本地,上述 JS 路径需要改成你本地的 -->

<script>
    layui.use('table', function(){
        var table = layui.table;

        table.render({
            elem: '#test'
            ,url:'liebiao'
            ,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板
            ,defaultToolbar: ['filter', 'exports', 'print', { //自定义头部工具栏右侧图标。如无需自定义,去除该参数即可
                title: '提示'
                ,layEvent: 'LAYTABLE_TIPS'
                ,icon: 'layui-icon-tips'
            }]
            ,title: '用户数据表'
            ,cols: [[
                {type: 'checkbox', fixed: 'left'}
                ,{field:'id', title:'ID', minwidth:80, fixed: 'left', unresize: true, sort: true}
                ,{field:'bank', title:'银行卡号', minwidth:80, edit: 'text', sort: true}
                ,{field:'money', title:'提现金额', minwidth:100, sort: true}
                ,{field:'time', title:'提现时间', minwidth:120}
                ,{field:'status', title:'提现状态', minwidth:120}
                ,{field:'content', title:'描述', minwidth:80, sort: true}
            ]]
            ,id: 'testReload'
            ,page: true
        });


        //头工具栏事件
        table.on('toolbar(test)', function(obj){
            var checkStatus = table.checkStatus(obj.config.id);
            switch(obj.event){
                case 'getCheckData':
                    var data = checkStatus.data;
                    layer.alert(JSON.stringify(data));
                    break;
                case 'getCheckLength':
                    var data = checkStatus.data;
                    layer.msg('选中了:'+ data.length + ' 个');
                    break;
                case 'isAll':
                    layer.msg(checkStatus.isAll ? '全选': '未全选');
                    break;

                //自定义头工具栏右侧图标 - 提示
                case 'LAYTABLE_TIPS':
                    layer.alert('这是工具栏右侧自定义的一个图标按钮');
                    break;
            };
        });

        //监听行工具事件
        table.on('tool(test)', function(obj){
            var data = obj.data;
            //console.log(obj)
            if(obj.event === 'del'){
                layer.confirm('真的删除行么', function(index){
                    obj.del();
                    layer.close(index);
                });
            } else if(obj.event === 'edit'){
                layer.prompt({
                    formType: 2
                    ,value: data.email
                }, function(value, index){
                    obj.update({
                        email: value
                    });
                    layer.close(index);
                });
            }
        });
    });
</script>

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实,而无需花费太多时间在底层功能的实上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值