h5接口

路由

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});
#登录
Route::group(['namespace'=>'H5'],function(){
    #登录
    Route::any('/login','UserController@login');
    #注册的页面
    Route::any('/register','UserController@register');
    #发送短信验证码
    Route::any('/sendSmsCode','UserController@sendSmsCode');

});

APICOFIG.PHP

<?php
namespace App\Http\Controllers;
class APICOFIG
{
    //接口的地址
    const HPST ='http://Api.ldyphp.top';
    //登录接口
    const LOGIN =APICOFIG::HPST .'/user/login';
    //获取图片验证码的URL
    const GET_IMAGE_CODE_URL =APICOFIG::HPST .'/getImageCodeUrl';
    //发送短信验证码的接口
    const SENDSMS =APICOFIG::HPST .'/sendSms';
    //注册接口
    const REGISTER=APICOFIG::HPST.'/register';
}

公共的Common控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class CommonController extends Controller
{
    /*把数据变成接口需要的数据格式*/
    protected function builApiParam( array $data )
    {
        $api_request_arr = [];
        #使用对称加密调用接口
//        $api_request_arr['data'] = $this->AesEncrpt($data);
        #使用非对称加密调用接口
        $api_request_arr['data'] = $this->RsaEncrpt($data);
        return  $api_request_arr;
    }

    /**
     * 使用RSA对调用的数据进行非对称加密
     */
    public function RsaEncrpt( array $data)
    {
        #非对称加密
        $data_str=json_encode($data);
        $i=1;
        $all='';
        #分段加密【密钥长度为1024 最多只能加密117字符,所有分段加密】
        while($sub_str = substr($data_str,($i - 1)*117,117)) {
            openssl_public_encrypt(
                $sub_str,
                $encrypt,
                file_get_contents(public_path() . '/public.key'),
                OPENSSL_PKCS1_PADDING
            );
            $all .=$encrypt;
            $i++;
        }
        return base64_encode($all);
    }

    /**
     * 使用AES的算法对请求接口数据 进行加密
     */
    private function AesEncrpt( array $data)
    {
        #加密
        $key=env('AES_KEY');
        $iv=env('AES_IV');
        #把数据转换成JSON格式,加密只能加密字符串
        #不对中文进行转义JSON_UNESCAPED_UNICODE
        $json_str=json_encode($data,JSON_UNESCAPED_UNICODE);
        $decrypt = openssl_encrypt(
            $json_str,
            'AES-256-CBC',
            $key,
            OPENSSL_RAW_DATA,
            $iv
        );
        #反编码
       return base64_encode($decrypt);
    }

    /*通过post方式调用接口*/
    public function CurlPost($url,$data,$header=[],$show_error=0){
//        var_dump($data);exit;
        #初始化curl
        $ch=curl_init();
        #设置curl参数
        curl_setopt($ch,CURLOPT_URL,$url);#请求路径
        curl_setopt($ch,CURLOPT_POST,true);#设置post提交
        curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($data));#设置curl请求参数

        #设置返回结果 不直接输出
        curl_setopt($ch,CURLOPT_TIMEOUT,5);
        #设置curl只返回不输出
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

        #设置不验证https证书
        curl_setopt($ch,CURLOPT_SSLCERT,false);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

        #发送curl
        $api_return= curl_exec($ch);

        if($show_error==1){
            echo $api_return;exit;
        }
        #将返回额数据转化为数组
        $api_reslut=json_decode($api_return,true);

        #获取错误编号并判断
        if(curl_errno($ch)!==0){
            $api_reslut=[
                'status'=>'10000',
                'msg'=>'cuel_error:'.curl_error($ch),
                'data'=>[]
            ];
        }
        #关闭curl请求
        curl_close($ch);
        #返回最终数据
        return $api_reslut;
    }

    /*检查接口参数是否正常*/
    public function checkApiParam(Request $request,$keys)
    {
        $value=$request->post($keys);
        if(empty($value)){
            $this->jsonOutPut(1,'缺少参数'.$keys);
        }else{
            return $value;
        }
    }

    /*返回json格式数据*/
    public function jsonOutPut($status,$msg='success',$data=[])
    {
        echo json_encode([
            'status'=>$status,
            'msg'=>$msg,
            'data'=>[]
        ]);
        exit;
    }
}

User控制器

<?php

namespace App\Http\Controllers\H5;

use App\Http\Controllers\APICOFIG as API;
use App\Http\Controllers\APICOFIG;
use App\Http\Controllers\CommonController;
use Illuminate\Http\Request;

class UserController extends CommonController
{
//    //登录页面
//    public function login(Request $request)
//    {
//        return view('user.login');
//    }

    /**
     * 登录功能
     * @param Request $request
     * @return array|\Illuminate\Contracts\View\Factory|\Illuminate\View\View|mixed
     */
    public function login(Request $request)
    {
        //判断是否是post请求,如果是,处理登录的逻辑
        if($request->method()=='POST' && $request->ajax()){
//            dd($request->post());
            #判断是否传递参数
            $user_name=$this->checkApiParam($request,'user_name');
            $psd =$this->checkApiParam($request,'psd');
//            #调用API
//            $url=API::LOGIN;
//            var_dump($url);exit;
            #拼接接口的参数
            $arr=[
                'user_name'=>$user_name,
                'password'=>$psd,
                'tt'=>4
            ];
            //调用接口
            return $this->curlPost(API::LOGIN , $this->builApiParam($arr));
        }else{
            return view('user.login');
        }

        #模拟破解用户的密码
        /*
        for($i=0;$i<=1000000;$i ++){
            $psd=$str_repeat('0',6-strlen($i)).$i;
            $arr=[
                'user_name'=>'小小',
                'password'=>$psd
            ];
            $api_arr=$this->curlPost(API::LOGIN,$arr);
//            var_dump($api_arr);exit;
            if(!empty($api_arr['data'])){
                dd($arr);exit;
            }
        }exit;*/
    }

    /**
     * 注册功能
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function register(Request $request)
    {
        if($request->method()=='POST'&& $request->ajax()){
            $api_data=[];
            #调用注册接口
            $api_data['phone']=$this->checkApiParam($request,'phone');
            $api_data['mcode']=$this->checkApiParam($request,'mcode');
            $api_data['password']=$this->checkApiParam($request,'password');

            return $this->curlPost(
                API::REGISTER,
                $this->builApiParam($api_data)
            );
        }else{
            #注册页面调用获取图片验证码的接口
            $api_arr=$this->curlPost(API::GET_IMAGE_CODE_URL ,[]);
//            var_dump($api_arr);
            return view('user.register',[
                'image_code'=>$api_arr['data']
            ]);
        }
    }

    /**
     * 发送短信验证码
     */
    public function sendSmsCode(Request $request)
    {
        #接受下参数
        $phone=$this->checkApiParam($request,'phone');
        $sid=$this->checkApiParam($request,'sid');
        $image_code=$this->checkApiParam($request,'image_code');

        #拼接接口的参数
        $arr=[
            'phone'=>$phone,
            'sid'=>$sid,
            'image_code'=>$image_code
        ];
        #调用接口
        return $this->curlPost(
            API::SENDSMS,
            $this->builApiParam($arr)
        );
    }
}

注册register.blade.php

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="csrf-token" content="{{ csrf_token() }}">
        <meta name="viewport" content="width=device-width, initial-scale=1">
      </head>
    <body>
    <center>
        <div><h3>h5-注册页</h3></div>
            <div>
                <table>
                    <tr>
                        <td>手机号</td>
                        <td>
                            <input type="text" id="phone" value="12345678912">
                            <button onclick="sendSms()">获取验证码</button>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            图片验证码
                            <input type="hidden" id="sid" value="{{$image_code['sid']}}">
                        </td>
                        <td>
                            <img id="imgCode" src="{{$image_code['image_url']}}" style="width: 100px" >
                            <input type="text" size="10" id="imageCode" value="8888">
                        </td>
                    </tr>
                    <tr>
                        <td>短信验证码</td>
                        <td><input type="text" id="mcode" value=""></td>
                    </tr>
                    <tr>
                        <td>密码</td>
                        <td><input type="password" id="password" value="1"></td>
                    </tr>
                    <tr>
                        <td>确认密码</td>
                        <td><input type="password" id="repassword" value="1"></td>
                    </tr>
                    <tr>
                        <td colspan="2" style="text-align: center"><button onclick="register()">注册</button></td>
                        <td></td>
                    </tr>
                </table>
            </div>
    </center>
    </body>
</html>
    <script src="https://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
    <script type="text/javascript">
        //点击切换图片验证码
       $('#imgCode').click(function(){
           $(this).prop('src',$(this).prop('src')+'&r'+Math.random());
       });

        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

        function sendSms()
        {
            let phone=$('#phone').val();
            let image_code=$('#imageCode').val();
            let sid=$('#sid').val();

            if(image_code==''){
                alert('请先输入图片验证码');
                return false;
            }
            if(phone==''){
                alert('手机号不能为空');
                return false;
            }
            $.ajax({
                url:"{{url('sendSmsCode')}}",
                data:{
                    phone:phone,
                    image_code:image_code,
                    sid:sid
                },
                dataType:'json',
                type:'post',
                success:function(json_info){
                    alert(json_info.msg);
                }
            })
        }
        /**
         * 注册
         * @returns {boolean}
         */
        function register(){
//            alert(1);
            let phone=$('#phone').val();
            let image_code=$('#imageCode').val();
            let sid=$('#sid').val();
            if(image_code==''){
                alert('请先输入图片验证码');
                return false;
            }
            let password=$('#password').val();
            let repassword=$('#repassword').val();
            if(password==''){
                alert('密码不能为空');
                return false;
            }
            if(password !== repassword){
                alert('两次密码不一致');
                return false;
            }
            if(phone==''){
                alert('手机号不能为空');
                return false;
            }
            let mcode=$('#mcode').val();
            $.ajax({
                url:"{{url('register')}}",
                data:{
                    phone:phone,
                    image_code:image_code,
                    sid:sid,
                    password:password,
                    mcode:mcode
                },
                dataType:'json',
                type:'post',
                success:function(json_info){
                    alert(json_info.msg);
                }
            });
        }

    </script>

登录login.blade.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title>H5 login</title>
    <style>

    </style>
</head>
<body>
    <div class="flex-center position-ref full-height">
        <div class="content">
            <div class="title">
                H5 Login
            </div>
            <table>
                <tr>
                    <td>用户名</td>
                    <td><input id="name" value="小小" type="text"></td>
                </tr>
                <tr>
                    <td>密码</td>
                    <td><input id="password" value="111" type="password"></td>
                </tr>
                <tr>
                    <td colspan="2"><button onclick="login()">登录</button></td>
                </tr>
            </table>
        </div>
    </div>
</body>
</html>
<script src="https://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>

<script>

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    var login=function(){
        var user_name=$('#name').val();
        var psd=$('#password').val();
        if(user_name==''|| password==''){
            alert('请填写你的用户名和密码');
            return false;
        }
    //ajax把数据提交到h5的控制器中,控制器去调用接口
        $.ajax({
            url:"{{ url('login') }}",
            type:'post',
            dataType:'json',
            data:{
              user_name:user_name,
                psd:psd
            },
            success:function( json_info ){
                if(json_info.status==200){
                    alert('login ok');
                }
            }
        })
    }

</script>

loginbake.blade.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>H5 login</title>
    <style>

    </style>
</head>
<body>
    <div class="flex-center position-ref full-height">
        <div class="content">
            <div class="title">
                H5 Login
            </div>
            <table>
                <tr>
                    <td>用户名</td>
                    <td><input type="text"></td>
                </tr>
                <tr>
                    <td>密码</td>
                    <td><input type="text"></td>
                </tr>
                <tr>
                    <td colspan="2"><button onclick="login()">jsonp登录</button></td>
                </tr>
                <tr>
                    <td colspan="2"><button onclick="login2()">登录</button></td>
                </tr>

            </table>
        </div>
    </div>
</body>
</html>
<script src="https://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>

<script>
    var url='http://api.ldyphp.top/login';
    function login()
    {
        $.ajax({
            url:url,
            data:{
                user_name:"zhangsan"
            },
            type:'post',
            dataType:'jsonp',
            jsonpCallback:'loginCallBack',
            success:function(json_info){
//                alert(json_info.msg);
                console.log(json_info.msg);
                alert(JSON.stringify(json));
            }
        })
    }

//loginCallBack({"status":200,"msg":"","data":[]})
//    function loginCallBack(json){
//        alert(JSON.stringify(json));
//    }


    function login2()
    {
        var url='http://api.ldyphp.top/login2';
        $.ajax({
            url:url,
            data:{
                user_name:"zhangsan"
            },
            type:'post',
            success:function(json_info){
                console.log(json_info.msg);
                alert(JSON.stringify(json));
            }
        })
    }

</script>
发布了3 篇原创文章 · 获赞 0 · 访问量 14

猜你喜欢

转载自blog.csdn.net/weixin_47124571/article/details/105631369
今日推荐