集成介绍

当合作方通过智能合约查询到某用户的 KYC 状态为“待验证”时,提示用户点击合作方 APP 中的 KYC 按钮,并通过手机浏览器跳转至 CuteID KYC H5 页面完成 KYC 认证。

CuteID KYC 页面是私有的,访问该页面需要认证。请按照我们预先定义的规则,提供所有参数,并生成base64编码的RSA签名,随后将其作为查询字符串拼接到前端的 base URL 中。

示例:https://sandbox-web.cuteid.ai?app_uuid={app_uuid}&external_id={external_id}&rand={rand}%timestamp={timestamp}&sign={sign}

  1. CuteID为合作平台生成了一对唯一的公私钥,该密钥对具有合作平台唯一性,并由双方共享。为了安全起见,请在收到公私钥后妥善保存。
  2. 请根据以下详细说明生成上述 URL 查询参数,以便合法调用页面。
  3. app_uuid是分配给合作平台的唯一标志id
  4. sign 是合作平台使用私钥对所有参数(数组)生成的签名,CuteID 平台将使用对应的公钥进行验签。

📘

公私钥相关:

  1. 秘钥类型:RSA,秘钥长度:2048,命令参考如下:
> openssl genrsa -out private_key.pem 2048
> openssl rsa -in private_key.pem -pubout -out public_key.pem
  1. CuteID 将为合作平台生成唯一的公私钥。请将公私钥妥善存储在您的系统中,确保安全保管,避免泄露。

📘

参数和签名生成规则:

  1. 必须参数:

  • app_uuid,平台的唯一标识id,由CuteID分配给合作平台

  • external_id,用户的唯一标志id,由合作平台提供

  • rand,6位随机整数,由合作平台生成

  • timestamp,当前时间戳

  1. 可选参数

  • callback_url,用户认证完成后,跳转到合作平台的url,包括web,ios或android

  • verified_email,合作平台传此参数,则自动注册或登录,省去手动输入email和code的流程

  1. 将参数以数组的形式,按ASCII升序排列,样例:
原始数据:
[
    'app_uuid' => '9a0dc56a-abb8-47ca-9cf6-bb483e1b164e',
    'external_id' => 'a1104ca8-96b4-49a6-8d75-432374ea34a5',
    'timestamp' => 1725444342,
    'rand' => 728930,
    'callback_url' => 'https://web.example.com',
    'verified_email' => '[email protected]'
];

排序后的数据:
[
    'app_uuid' => '9a0dc56a-abb8-47ca-9cf6-bb483e1b164e',
    'callback_url' => 'https://web.example.com',
    'verified_email' => '[email protected]',
    'external_id' => 'a1104ca8-96b4-49a6-8d75-432374ea34a5',
    'rand' => 728930,
    'timestamp' => 1725444342,
    'verified_email' => '[email protected]'
];
  1. 将排序后的数组数据进行拼接,并使用 urlencode 编码为 URL 查询字符串,例如:
app_uuid=`{app_uuid}`&external_id=`{external_id}`&rand=`{rand}`&timestamp=`{timestamp}`&callback_url=`{callback_url}`&verified_email=`{verified_email}`
  1. 使用私钥对上述字符串进行签名,并将签名结果进行 base64 编码,最终生成的签名结果为:{sign}。
  2. 将各参数和 base64 编码的签名作为 URL 查询字符串,拼接到 base URL 中,例如:
https://sandbox-web.cuteid.ai?app_uuid=`{app_uuid}`&external_id=`{external_id}`&rand=`{rand}`&callback_url=`{callback_url}`&timestamp=`{timestamp}`&verified_email=`{verified_email}`&sign=`{sign}`