uniapp+php使用阿里云进行人脸实名认证采坑笔记

uniapp+php使用阿里云进行人脸实名认证采坑笔记

uniapp+php使用阿里云进行人脸实名认证采坑笔记

一、开通阿里云实人认证

地址:https://www.aliyun.com/product/cloudauth

然后在控制台接入场景设置中添加一个场景,注意,这个场景id后面编程要用到。

uniapp+php使用阿里云进行人脸实名认证采坑笔记

二、下载uniapp的阿里云实人认证的原生插件,导入到uniapp项目中。

具体教程:https://help.aliyun.com/zh/id-verification/financial-grade-id-verification/uniapp-integration

注意原生插件打包的时候不能同时选择uniapp内置的实人认证模块,否则打包会报错:

uniapp+php使用阿里云进行人脸实名认证采坑笔记

三、编写服务端阿里云实人认证php代码

composer 安装cloudauth库

composer require alibabacloud/cloudauth-20200618 1.0.5

<?php
require("vendor/autoload.php");

use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\SDK\Cloudauth\V20200618\Cloudauth;
use AlibabaCloud\Tea\Utils\Utils;
use AlibabaCloud\Tea\Exception\TeaError;

use AlibabaCloud\Tea\Rpc\Rpc\Config;
use AlibabaCloud\SDK\Cloudauth\V20200618\Models\InitSmartVerifyRequest;
use AlibabaCloud\SDK\Cloudauth\V20200618\Models\InitSmartVerifyResponse;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;

$request = new InitSmartVerifyRequest([
    // 请输入场景ID。
    "sceneId" => 第一步添加获得的场景值,
    "outerOrderNo" => time(),
    // 证件类型,固定值。
    "mode" => "MARKET_SAFE",
    "ocr" => "F",
    "certType" => "IDENTITY_CARD",
    "certName" => "姓名",
    "certNo" => "身份证号码",
    // MetaInfo环境参数,需要通过客户端SDK获取。
"metaInfo" => '{"zimVer":"3.0.0","appVersion": "1","bioMetaInfo": "4.1.0:11501568,0",
        "appName": "com.aliyun.cloudauth","deviceType": "ios","osVersion": "iOS 10.3.2","apdidToken": "","deviceModel": "iPhone9,1"}',
            "mobile" => "<130xxxxxxxx>",
    // "ip" => "<114.xxx.xxx.xxx>",
    // "userId" => "<12345xxxx>",
    // "callbackUrl" => "<https://www.aliyundoc.com>",
    // "callbackToken" => "<xxxxxxx>"
]);
// 推荐,支持服务自动路由。


$response = initSmartVerifyAutoRoute($request);


// 不支持服务自动路由。
//$response = initSmartVerify("cloudauth.cn-shanghai.aliyuncs.com", $request);
var_dump($response->requestId);
var_dump($response->code);
var_dump($response->message);
var_dump($response->resultObject->certifyId);

function initSmartVerifyAutoRoute(InitSmartVerifyRequest $request) {
    $endpoints = [
        "cloudauth.cn-shanghai.aliyuncs.com",
        "cloudauth.cn-beijing.aliyuncs.com"
    ];

    foreach ($endpoints as $endpoint) {
        try {
            $response = initSmartVerify($endpoint, $request);

            if (Utils::equalString("500", $response->code)) {
                continue;
            }

            return $response;
        }
        catch (Exception $err) {

            var_dump($err);
            if (!($err instanceof TeaError)) {
                $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
            }
            // 网络异常,切换到下个区域调用。
            if (Utils::equalString("ServiceUnavailable", $err->code)) {
                continue;
            }
        }
    }
    return null;
}

function createClient($endpoint) {
    // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    // 本示例通过阿里云Credentials工具从环境变量中读取AccessKey,来实现API访问的身份验证。如何配置环境变量,请参见 https://help.aliyun.com/document_detail/311677.html。
    $credential = new Credential(["type"=>"access_key",
        "access_key_id"=> "accesskey",
          "access_key_secret"=> "secret",
        ]);
    $config = new Config([

        // 使用credential配置凭证
        "credential" => $credential,
        // 设置HTTP代理。
        // "httpProxy" => "<http://xx.xx.xx.xx:xxxx>",
        // 设置HTTPS代理
        // "httpsProxy" => "<https://xx.xx.xx.xx:xxxx>",
        "endpoint" => $endpoint

    ]);


    return new Cloudauth($config);
}
function initSmartVerify($endpoint, $request) {
    $client = createClient($endpoint);
    // 创建RuntimeObject实例并设置运行参数。
    $runtime = new RuntimeOptions([]);
    $runtime->readTimeout = 10000;
    $runtime->connectTimeout = 10000;
    return $client->initSmartVerify($request, $runtime);
}

1、遇到的坑

accesskeyid与AccessKey Secret必须放到环境变量中,导致官方代码运行中直接报错:

Credential 'default' not found

如何直接写到代码中怎么弄,官方没说,我就直接折腾

将官方文档给的代码改了下

function createClient($endpoint) {
    // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
    // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
    // 本示例通过阿里云Credentials工具从环境变量中读取AccessKey,来实现API访问的身份验证。如何配置环境变量,请参见 https://help.aliyun.com/document_detail/311677.html。
    $credential = new Credential(["type"=>"access_key",
        "access_key_id"=> " ",
          "access_key_secret"=> " ",
        ]);
    $config = new Config([

        // 使用credential配置凭证
        "credential" => $credential,
        // 设置HTTP代理。
        // "httpProxy" => "<http://xx.xx.xx.xx:xxxx>",
        // 设置HTTPS代理
        // "httpsProxy" => "<https://xx.xx.xx.xx:xxxx>",
        "endpoint" => $endpoint

    ]);

就好了。此外,阿里云真人实人认证还支持h5网页接入,跟uniapp这个插件,只不过前端sdk是个js库。

uniapp+php使用阿里云进行人脸实名认证采坑笔记

{{collectdata}}

网友评论0