uniapp+php使用阿里云进行人脸实名认证采坑笔记
一、开通阿里云实人认证
地址:https://www.aliyun.com/product/cloudauth
然后在控制台接入场景设置中添加一个场景,注意,这个场景id后面编程要用到。
二、下载uniapp的阿里云实人认证的原生插件,导入到uniapp项目中。
具体教程:https://help.aliyun.com/zh/id-verification/financial-grade-id-verification/uniapp-integration
注意原生插件打包的时候不能同时选择uniapp内置的实人认证模块,否则打包会报错:
三、编写服务端阿里云实人认证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库。
网友评论0