lin07ux/net-court

NetCourt is a SDK for HangZhou NetCourt notary: original confirmation and obtain evidence.

v1.2.1 2020-02-07 07:57 UTC

This package is auto-updated.

Last update: 2024-09-21 20:46:22 UTC


README

Definitions

Transaction

存证事务,可理解为逻辑上相关的一组证据,每个事务由一个事务 ID 相关联。一次事务由一个或多个存证阶段(phase)组成,每个阶段即一次实际存证请求。存证阶段可自定义,含义为自己理解和使用。

存证事务由一个全局唯一的 Token 作为凭证,该凭证由存证初始化接口完成资格核验后返回,供固定的存证人/公司多次使用,暂不不考虑失效条件。

Entity

进行存证业务的实体。该平台作为存证行为的发起者,需要经过互联网法院的认证,并得到分配的accountId和签名私钥。在进行存证时,需要使用该accountId作为标识,并用私钥对数据进行签名,方能通过认证,完成存证行为。

在进行存证时,可以选择将Entity信息也提交,也可以不提交,并不会影响存证结果。Entity信息类型为Identity,具体可以参见Types - Identity中的介绍。

Customer

存证客户,也即是存证的所有者。每次存证都必定是一个实名个人或有工商登记的公司企业主体。进行存证时,需要提交存证客户的基本信息,信息类型为Identity,具体可以参见Types - Identity中的介绍。

Notary

目前存证服务器的域名为https://check.netcourt.gov.cn。API 接口有如下几个:

  • /api/blockChain/notaryToken 获取存证事务 ID
  • /api/blockChain/notaryCert 存证并获取证书

Sign

请求每个 API 的时候,都要对关键数据进行签名,以便存证服务器进行验证数据的可信性。

签名过程如下:将签名需要用到的数据拼接成一个字符串,然后使用密钥通过 Sha256WithRSA 算法进行加密,将得到的结果进行 Hex encode 成十六进制字符串后即为签名数据。计算签名的明文数据以 UTF-8 方式编码。

notaryToken

每次进行存证时,必须提供一个事务 ID,以便可以将不同步骤的存证数据串联起来。事务 ID 可以使用之前已经获取过的,也可以通过notaryToken接口进行获取。该接口的描述如下:

RestFul URL: /api/blockChain/notaryToken
HTTP Method: POST
Request Content Type: application/json
Response Content Type: application/json

可通过如下方式使用:

use NetCourt\Business;
use NetCourt\NotaryClient;
use NetCourt\Identity\Person;

try {
    $customer = new Person(['certName' => 'Lin07ux', 'certNo' => '123456789012345678']);
    $business = new Business(Business::COPYRIGHT, Business::COPYRIGHT_TEXT);
    $notaryClient = new NotaryClient('accountId', 'privateKeyValue');

    $response = $notaryClient->createNotaryToken($customer, $business);
    $token = $response->getResponseData();
} catch (\Exception $e) {
    echo $e->getMessage();
}

请求该接口时,需要提交如下的数据:

该接口的验签数据明文为accountIdbizIdtimestamp三个字段拼接后的字符串。

该接口的响应数据如下:

notaryCert

该接口用于存证,返回存证后的区块 hash 和存证证书。该接口的描述如下:

RestFul URL: /api/blockChain/notaryCert
HTTP Method: POST
Request Content Type: application/json
Response Content Type: application/multipart/form-data

可通过如下方式使用:

use NetCourt\Business;
use NetCourt\NotaryClient;
use NetCourt\Identity\Person;

try {
    $customer = new Person(['certName' => 'Lin07ux', 'certNo' => '123456789012345678']);
    $business = new Business(Business::COPYRIGHT, Business::COPYRIGHT_TEXT);
    $notaryClient = new NotaryClient('accountId', 'privateKeyValue');

    // Get the notary response
    $response = $notaryClient->createNotaryCert('token', 'right notary', 'something to notary');
    // Get notary hash
    $hash = $response->getResponseData();
    // Save the cert file
    $response->downloadCert('path/to/store/cert/file', $hash.'.pdf');
} catch (\Exception $e) {
    echo $e->getMessage();
}

请求该接口时,需要提交如下的数据:

该接口的验签数据明文为meta.accountIdmeta.phasetimestamp三个字段拼接后的字符串。

该接口的响应数据分为两部分:

  • 响应结果数据放在 Body 中,以 JSON 字符串的形式返回。
  • 请求响应成功时,会将存证证书的下载链接放在Certurl Header 中,使用这个 URL 就可以下载证书。证书是有有效期的,一般情况在半小时内下载最好。

解析 Body 可以得到如下的数据:

Types

Identity

Identity 数据应为个人的实名信息或企业工商登记信息,主要包含如下的内容:

NotaryMeta

NotaryMeta 表示存证元数据,是进行确权时必须提供的信息,包含token、存证人/商家、存证时间、地点、存证阶段等。

Location

Location 表示进行存证时,操作设备(用户端)的网络、设备信息。

Code

Code 表示 API 响应返回的状态码

bizId & subBizId

bizId 表示业务号,subBizId 表示子业务分类。

 -           |  -    | 音频      | AUDIO
 -           |  -    | 图像      | IMAGE
 -           |  -    | 文本      | TEXT

CONTRACT(合同) | 2 | HR 合同 | HR - | - | 租房合同 | HOUSERENTING - | - | 租赁合同 | LEASING - | - | 供应链合同 | SUPPLY_CHAIN - | - | 旅游合同 | TRAVEL - | - | 教育合同 | EDUCATION - | - | 保险合同 | INSURANCE