thinkphp6.0 接入阿里云云盾人机验证

在这里插入图片描述
下载阿里云的官方sdk
解压之后,把aliyun-php-sdk-afs这个文件夹放到extend里面
在这里插入图片描述
再把aliyun-php-sdk-core这个文件夹放进,自己验证逻辑的控制器目录中!
完整的引入代码

<?php
declare (strict_types=1);

namespace app\api\controller;

use app\Request;
use think\annotation\Route;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
include(app()->getRootPath() . '/app/api/aliyun-php-sdk-core/Config.php'); // 修改成你自己的路径
use DefaultProfile;
use DefaultAcsClient;

use afs\Request\V20180112 as Afs;


如果有报错提示 类名重复或者常量名重复,可以在重名的位置加上AS,如下,再将所有引用函数/常量的位置修改成你重命名的名字。
或者在config.php的第一行加上error_reporting(0);
例如:

<?php
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
error_reporting(0);
include_once 'Autoloader/Autoloader.php';
include_once 'Regions/EndpointConfig.php';
include_once 'Regions/LocationService.php';

//config sdk auto load path.
Autoloader::addAutoloadPath("aliyun-php-sdk-ecs");
Autoloader::addAutoloadPath("aliyun-php-sdk-batchcompute");
Autoloader::addAutoloadPath("aliyun-php-sdk-sts");
Autoloader::addAutoloadPath("aliyun-php-sdk-push");
Autoloader::addAutoloadPath("aliyun-php-sdk-ram");
Autoloader::addAutoloadPath("aliyun-php-sdk-ubsms");
Autoloader::addAutoloadPath("aliyun-php-sdk-ubsms-inner");
Autoloader::addAutoloadPath("aliyun-php-sdk-green");
Autoloader::addAutoloadPath("aliyun-php-sdk-dm");
Autoloader::addAutoloadPath("aliyun-php-sdk-iot");
Autoloader::addAutoloadPath("aliyun-php-sdk-jaq");
Autoloader::addAutoloadPath("aliyun-php-sdk-cs");
Autoloader::addAutoloadPath("aliyun-php-sdk-live");
Autoloader::addAutoloadPath("aliyun-php-sdk-vpc");
Autoloader::addAutoloadPath("aliyun-php-sdk-kms");
Autoloader::addAutoloadPath("aliyun-php-sdk-rds");
Autoloader::addAutoloadPath("aliyun-php-sdk-slb");
Autoloader::addAutoloadPath("aliyun-php-sdk-cms");
Autoloader::addAutoloadPath("aliyun-php-sdk-idst");
Autoloader::addAutoloadPath("aliyun-php-sdk-afs");

//config http proxy
define('ENABLE_HTTP_PROXY', false);
define('HTTP_PROXY_IP', '127.0.0.1');
define('HTTP_PROXY_PORT', '8888');

在这里插入图片描述

控制器验证逻辑(这里以滑动验证为例子)

$data = $request->post();

接收前端POST传送的数据,有四个参数是必须的

$requests->setSessionId($data["sessionId"]);// 必填参数,从前端获取,不可更改,android和ios只传这个参数即可
$requests->setToken($data["token"]);// 必填参数,从前端获取,不可更改
$requests->setSig($data["sig"]);// 必填参数,从前端获取,不可更改
$requests->setScene($data["scene"]);// 必填参数,从前端获取,不可更改

接口:

/**
     * @param Request $request
     * @Route("user/smsForRegister")
     */
    public function registerSms(Request $request)
    {
        $data = $request->post();
        return json($this->signCheck($data));
  	}     

验证逻辑,返回100为成功!
在这里插入图片描述
在这里插入图片描述

/**
     * @param $data
     * @return \think\response\Json
     */
    private function signCheck($data)
    {

        $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", $this->ACCESSKEY, $this->SECRET);
        $client = new DefaultAcsClient($iClientProfile);
        DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", "afs", "afs.aliyuncs.com");
        $requests = new Afs\AuthenticateSigRequest();
        $requests->setSessionId($data["sessionId"]);// 必填参数,从前端获取,不可更改,android和ios只传这个参数即可
        $requests->setToken($data["token"]);// 必填参数,从前端获取,不可更改
        $requests->setSig($data["sig"]);// 必填参数,从前端获取,不可更改
        $requests->setScene($data["scene"]);// 必填参数,从前端获取,不可更改
        $requests->setAppKey("FFFF0N000000000073D0");//必填参数,后端填写
        $requests->setRemoteIp("49.233.200.55");//必填参数,后端填写

        $response = $client->getAcsResponse($requests);//返回code 100表示验签通过,900表示验签失败
        print_r($response);
        $result = [
            'code' => 401,
            'msg' => '密匙错误!'
        ];
        return json($result);
    }

这里可以自己做判断,我就不演示了。

关于前端接入:

header头部引入

<script type="text/javascript" charset="utf-8" src="//g.alicdn.com/sd/ncpc/nc.js?t=2015052012"></script>

容器:

<div class="el-input item-input" id="check">

                </div>

JS

window.nc_token = ["FFFF0N000000000073D0", (new Date()).getTime(), Math.random()].join(':');
window.NC_Opt =
    {
        renderTo: "#check",
        appkey: "FFFF0N000000000073D0",
        scene: "nc_register",
        token: nc_token,
        customWidth: 300,
        trans: {"key1": "code0"},
        elementID: ["usernameID"],
        is_Opt: 0,
        language: "cn",
        isEnabled: true,
        timeout: 3000,
        times: 5,
        apimap: {
            // 'analyze': '//a.com/nocaptcha/analyze.jsonp',
            // 'get_captcha': '//b.com/get_captcha/ver3',
            // 'get_captcha': '//pin3.aliyun.com/get_captcha/ver3'
            // 'get_img': '//c.com/get_img',
            // 'checkcode': '//d.com/captcha/checkcode.jsonp',
            // 'umid_Url': '//e.com/security/umscript/3.2.1/um.js',
            // 'uab_Url': '//aeu.alicdn.com/js/uac/909.js',
            // 'umid_serUrl': 'https://g.com/service/um.json'
        },
        callback: function (data) {
            window.console && console.log(nc_token)
            window.console && console.log(data.csessionid)
            window.console && console.log(data.sig)
            that.regForm = {
                sessionId: data.csessionid,
                token: nc_token,
                sig: data.sig,
                scene: "nc_register",
                phone: that.regForm.phone,
                code: that.regForm.code
            }
            console.log(that.regForm)
        }
    }
window.nc = new noCaptcha(NC_Opt)
window.nc.upLang('cn', {
    _startTEXT: "请按住滑块,拖动到最右边",
    _yesTEXT: "验证通过",
    _error300: "哎呀,出错了,点击<a href=\"javascript:__nc.reset()\">刷新</a>再来一次",
    _errorNetwork: "网络不给力,请<a href=\"javascript:__nc.reset()\">点击刷新</a>",
})

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章