对接阿里云实人认证-身份二要素核验接口整理
目录
应用场景
接口文档
接口信息
请求参数
响应参数
调试
阿里云openApi平台调试
查看调用结果
查看SDK示例
下载SDK
遇到问题
本地调试
总结
应用场景
项目有一个提现的场景,需要用户真实的身份信息。
所以需要一个解决方案能验证真正的用户实名信息。
最后采用了阿里云的二要素身份认证。
接口文档
身份二要素核验API_实人认证(ID Verification)-阿里云帮助中心
接口文档如下:
接口信息
接口名:id2MetaVerify。
服务地址:cloudauth.aliyuncs.com(IPv4)或cloudauth-dualstack.aliyuncs.com(IPv6)。
请求方法:POST和GET。
传输协议:HTTPS。
接口说明:传入姓名和身份证号,返回权威数据源对二要素的校验结果。
请求参数
参数主要三个:加密不加密类型,身份证号和姓名。具体参数介绍如下:
ParamType | String | 是 | 加密方式: normal:明文不加密 md5:MD5加密 重要 所有参数的密文均取32位小写MD5字符串形式。 不同MD5工具得出的密文可能不同,如果加密前接口可以调通但加密后不行,请尝试更换MD5工具。 | normal |
IdentifyNum | String | 是 | 身份证号: paramType 传 normal 时:输入身份证号明文。 paramType 传 md5 时:身份证号前6位(明文)+出生年月日(密文)+身份证号后4位(明文)。 | 明文:429001********8211 密文:42900132fa7bcd874161bea8ec8fd98f390ec98211 |
UserName | String | 是 | 姓名: paramType 传 normal 时:输入姓名明文。 paramType 传 md5 时:姓名第一个字密文+ 姓名其他部分明文。 | 明文:张三 密文:6499fc7409049355527ef6a2ba5706b8三 |
注意:需要阿里云账号的AccessKey和Accesskey_secret.
响应参数
通过code判断接口请求是否成功,而验证是否通过要使用ResultObject中的BizCode字段。
响应参数具体如下:
名称 | 类型 | 描述 | 示例值 | |
RequestId | String | 请求ID。 | 130A2C10-B9EE-4D84-88E3-5384FF039795 | |
Message | String | 接口调用返回信息。 重要 此参数仅表示接口是否异常。 | success | |
Code | String | 返回码:200表示成功,其他均为失败。 重要 此参数代表是否正确调用了接口,详细的返回码说明请参见错误码。 业务核验结果请通过ResultObject中的字段查看。 | 200 | |
ResultObject | BizCode | String | 身份核验结果: 1:校验⼀致 2:校验不⼀致 3:查⽆记录 | 1 |
调试
在这部分浪费不少时间,这部分我重点介绍一下,方便需要的朋友能节省一些不必要的时间浪费。
阿里云openApi平台调试
首先登录阿里云账号
打开阿里云openApi平台直接进行调试。先用明文的方式,输入姓名和身份证号。
调用查看是否能够调通。如下:
查看调用结果
通过查看BizCode可以看到这个身份证号和姓名通过了验证。
查看SDK示例
这时候就可以查看相应语言下的SDK示例了,发现示例中的参数已经加上了。
示例如下:
SDK示例代码如下:
<?php
// This file is auto-generated, don't edit it. Thanks.
namespace AlibabaCloud\SDK\Sample;
use AlibabaCloud\SDK\Cloudauth\V20190307\Cloudauth;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Cloudauth\V20190307\Models\Id2MetaVerifyRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
class Sample {
/**
* 使用AK&SK初始化账号Client
* @return Cloudauth Client
*/
public static function createClient(){
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html。
$config = new Config([
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
"accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
]);
// Endpoint 请参考 https://api.aliyun.com/product/Cloudauth
$config->endpoint = "cloudauth.aliyuncs.com";
return new Cloudauth($config);
}
/**
* @param string[] $args
* @return void
*/
public static function main($args){
$client = self::createClient();
$id2MetaVerifyRequest = new Id2MetaVerifyRequest([
"paramType" => "normal",
"identifyNum" => "你的身份证号",
"userName" => "你的姓名"
]);
$runtime = new RuntimeOptions([]);
try {
// 复制代码运行请自行打印 API 的返回值
$client->id2MetaVerifyWithOptions($id2MetaVerifyRequest, $runtime);
}
catch (Exception $error) {
if (!($error instanceof TeaError)) {
$error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
}
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
var_dump($error->message);
// 诊断地址
var_dump($error->data["Recommend"]);
Utils::assertAsString($error->message);
}
}
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
Sample::main(array_slice($argv, 1));
之后可以下载完整的SDK,按照SDK示例方式进行调用。
下载SDK
通过查看SDK安装命令,如下:
在自己所在项目的命令行中,执行命令安装SDK:
composer require alibabacloud/cloudauth-20190307 3.1.0
注意:命令中的3.1.0为SDK的版本号,不要修改后面的版本号,如果修改了下载的可能与OpenAPI示例不同,则可能无法使用。
遇到问题
因为项目的composer.lock锁定了阿里云所需的一部分依赖的版本。
直接使用下载SDK中的带版本的命令无法使用。
如果你也遇到这个问题,可以这样解决:
在项目的composer.json中直接添加SDK版本包和版本号后,
执行composer update命令即可解决。
如下:
本地调试
下载完成后,在本地的项目中创建控制器或服务层后,仿照SDK示例代码进行修改调用,
在本地再次调通后,就可以加入到项目功能中进行调用了。
示例如下:
<?php
namespace AliCardAuth;
use AlibabaCloud\SDK\Cloudauth\V20190307\Cloudauth;
use \Exception;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Cloudauth\V20190307\Models\Id2MetaVerifyRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
class AliCardAuth
{
/**
* 使用AK&SK初始化账号Client
* @return Cloudauth Client
*/
protected static function createClient()
{
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html。
$config = new Config([
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
"accessKeyId" => env("ACCESSKEY.ACCESSKEY_ID"),
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
"accessKeySecret" => env("ACCESSKEY.ACCESSKEY_SECRET")
]);
// Endpoint 请参考 https://api.aliyun.com/product/Cloudauth
$config->endpoint = "cloudauth.aliyuncs.com";
return new Cloudauth($config);
}
/**
* 真实名称-身份证号验证
* @param $username
* @param $idCard
* @return array|mixed
*/
public static function main($username, $idCard)
{
$client = self::createClient();
$id2MetaVerifyRequest = new Id2MetaVerifyRequest([
"paramType" => "normal",
"identifyNum" => $idCard,
"userName" => $username
]);
$runtime = new RuntimeOptions([]);
try {
$response = $client->id2MetaVerifyWithOptions($id2MetaVerifyRequest, $runtime);
return $response->toMap()['body'];
} catch (Exception $error) {
return ['code' => 400, 'message' => $error->getMessage()];
// 诊断地址
// var_dump($error->data["Recommend"]);
// Utils::assertAsString($error->message);
}
}
}
总结
对接阿里云实人认证-身份二要素核验接口整理,中间遇到一些困扰的问题,不过解决了。