接口¶
初始化请求参数¶
// 构建请求
HttpRequest httpRequest = HttpUtil.createPost(uri + apiName);
// 构建请求头
Map<String ,String> headers = new HashMap<>();
headers.put("request_id", requestId);
headers.put("access_key", accessKey);
headers.put("nonce",nonce);
headers.put("signature",signatureData);
httpRequest.addHeaders(headers);
文件存证(分两步):¶
上传文件 - /file/upload¶
客户可以通过该接口上传文件并获取文件id,文档类文件最大限制150M,图片类文件最大10M,音频和视频类文件最大550M,文件未存证时数据会在存储7天后删除。
form-data¶
参数名 |
描述 |
是否可选 |
---|---|---|
file |
文件 |
必选 |
type |
doc:文档pic:图片audio:音频video:视频 |
必选 |
返回的data¶
字段名 |
描述 |
---|---|
fileKey |
文件id |
以java为例:
// 构建请求参数
httpRequest.form("file",new File("/tmp/背景图.png"));
httpRequest.form("type","pic");
HttpResponse httpResponse = httpRequest.execute();
String result = httpResponse.body();
返回结果示例: a.接口调用成功,则返回JSON数据示例为::
{
"code": "200",
"data": {
"fileKey": "1544567382363930624"
},
"message": "操作成功"
}
b.接口调用失败,则返回JSON数据示例为::
{
"code": "1001",
"message": "fileLabel文件标签不能为空"
}
文件存证 - /evidence/file¶
用户进行文件存证
请求参数¶
参数名 |
描述 |
是否可选 |
---|---|---|
fileLabel |
文件标签 |
必选 |
files |
文件id列表 |
必选 |
files[0] |
文件id |
必选 |
返回的data¶
调用文件接口成功后会返回文件id对应的存证id
字段名 |
描述 |
---|---|
list |
bean对象列表 |
bean.id |
文件id |
bean.attestationId |
存证id |
以java为例:
// 构建请求参数
List<Long> list = new ArrayList<>();
list.add(1529663660129480704L);
EvidenceFileParam evidenceFileParam = new EvidenceFileParam();
evidenceFileParam.setFileLabel("标签");
evidenceFileParam.setFiles(list);
httpRequest.body(JSONUtil.toJsonStr(evidenceFileParam));
HttpResponse httpResponse = httpRequest.execute();
String result = httpResponse.body();
返回结果示例: a.接口调用成功,则返回JSON数据示例为::
{
"code":"200",
"data":[
{
"attestationId":"did:bid:ef23cydtVMQit888kfwqrZAJCccet2qQM",
"id":"1544567382363930624"
}
],
"message":"操作成功"
}
b.接口调用失败,则返回JSON数据示例为::
{
"code": "500",
"message": "文件类型不支持"
}
hash存证(sha256) - /evidence/hash¶
用户进行hash存证。
请求参数¶
参数名 |
描述 |
是否可选 |
---|---|---|
fileLabel |
文件标签 |
必选 |
list |
HashInfo对象列表 |
必选 |
HashInfo.filename |
文件名 |
必选 |
HashInfo.fileHash |
文件hash |
必选 |
返回的data¶
调用hash存证接口成功后会返回存证id列表
字段名 |
描述 |
---|---|
list |
bean对象列表 |
bean.hash |
文件hash |
bean.attestationId |
存证id |
以java为例:
// 构建请求参数
List<EvidenceHashParam.HashInfo> list = new ArrayList<>();
EvidenceHashParam.HashInfo hashInfo1 = new EvidenceHashParam.HashInfo();
hashInfo1.setFilename("test1");
hashInfo1.setFileHash("98df1f1dfb3b1a123c1517912dc70447aa61c6be532ac99de973abb6219e1653");
list.add(hashInfo1);
EvidenceHashParam evidenceHashParam = new EvidenceHashParam();
evidenceHashParam.setFileLabel("标签");
evidenceHashParam.setList(list);
httpRequest.body(JSONUtil.toJsonStr(evidenceHashParam));
HttpResponse httpResponse = httpRequest.execute();
String result = httpResponse.body();
返回结果示例: a.接口调用成功,则返回JSON数据示例为::
{
"code":"200",
"data":[
{
"attestationId":"did:bid:efaE9e45apUbuA87y7Y6zjMTaGfHt7WX",
"hash":"98df1f1dfb3b1a123c1517912dc70447aa61c6be532ac99de973abb6219e1653"
}
],
"message":"操作成功"
}
b.接口调用失败,则返回JSON数据示例为::
{
"code":"1010",
"message":"请输入正确格式的文件hash值"
}
存证列表 - /evidence/list¶
获取存证列表
请求参数¶
参数名 |
描述 |
是否可选 |
---|---|---|
evidenceType |
存证类型 1.文件存证 2.hash存证 |
非必选 |
evidenceChannel |
存证方式 1.自助 2.API |
非必选 |
state |
3.待支付4.上链中5.存证成功6.存证失败 |
非必选 |
startTime |
开始时间 |
非必选 |
endTime |
结束时间 |
非必选 |
pageNumber |
当前页码 |
非必选 |
pageSize |
每页显示数量 最大50 |
非必选 |
filename |
文件名称 |
非必选 |
返回的data¶
调用存证获取列表接口成功后会返回存证列表
字段名 |
描述 |
---|---|
totalPage |
当前页 |
pageSize |
每页显示数量 |
pageNum |
总页数 |
rows |
存证数据对象info |
info.evidenceChannel |
存证方式 1.自助 2.API |
info.attestationId |
存证id |
info.auditTime |
审核时间 |
info.auditResult |
审核结果 |
info.fileHash |
文件hash |
info.userId |
用户id |
info.fileLabel |
文件标签 |
info.filename |
文件名 |
info.fileSize |
文件大小 |
info.createTime |
创建时间 |
info.upChainTime |
上链时间 |
info.evidenceType |
存证类型 1:文件存证, 2:hash存证 |
info.state |
1.待审核 2.待复审 3.待支付 4.上链中 5.存证成功 6.存证失败 |
info.username |
用户名称 |
以java为例:
// 构建请求参数
Map<String ,Object> body = new HashMap<>();
body.put("evidenceType",1);
httpRequest.body(JSONUtil.toJsonStr(body));
HttpResponse httpResponse = httpRequest.execute();
String result = httpResponse.body();
返回结果示例: a.接口调用成功,则返回JSON数据示例为::
{
"code":"200",
"data":{
"totalPage":"1",
"pageSize":"10",
"rows":[
{
"evidenceChannel":2,
"attestationId":"did:bid:efaE9e45apUbuA87y7Y6zjMTaGfHt7WX",
"fileHash":"98df1f1dfb3b1a123c1517912dc70447aa61c6be532ac99de973abb6219e1653",
"userId":"did:bid:zfGUkdqhxEamsPvpqAH2iRHk1ifhcW61",
"fileLabel":"标签",
"filename":"test1",
"createTime":"2022-07-07 11:10:19",
"evidenceType":2,
"upChainTime":"2022-07-07 11:10:59",
"state":4,
"username":"陈诚"
},
{
"evidenceChannel":2,
"attestationId":"did:bid:ef23cydtVMQit888kfwqrZAJCccet2qQM",
"fileHash":"46d1f4f65279641891c13eb1cfba0f4a93cdd1c9e5d7cca31cd1860dbe7ca463",
"userId":"did:bid:zfGUkdqhxEamsPvpqAH2iRHk1ifhcW61",
"fileLabel":"标签",
"filename":"背景图.png",
"fileSize":"1306418",
"createTime":"2022-07-07 11:08:51",
"evidenceType":1,
"state":2,
"username":"陈诚"
}
],
"pageNum":"1",
"total":"2"
},
"message":"操作成功"
}
b.接口调用失败,则返回JSON数据示例为::
{
"code": "500",
"message": "系统错误"
}
存证详情 - /evidence/detail¶
查询存证详情。
请求参数¶
参数名 |
描述 |
是否可选 |
---|---|---|
attestationId |
存证id |
必选 |
返回的data¶
调用存证详情成功后会返回详情数据
字段名 |
描述 |
---|---|
attestationId |
存证id |
evidenceShareCode |
证据提取码 |
pdfFileKey |
pdf文件id |
fileHash |
存证文件hash |
dataExpireTime |
存证文件过期时间 |
attestationType |
存证类型 1.文件 2.hash |
dataExpireFlag |
存证文件是否已过期 |
userId |
用户id |
fileLabel |
文件标签 |
auditTime |
审核时间 |
auditResult |
审核结果 |
filename |
文件名 |
createTime |
创建时间 |
upChainTime |
上链时间 |
attestationChannel |
数据来源 1.自助 2.API |
dataFileKey |
存证文件的文件id |
username |
用户名称 |
checkBean |
链信息 |
checkBean.blockHash |
交易hash |
checkBean.fileName |
文件名称 |
checkBean.evidenceTime |
存证时间 |
checkBean.flag |
是否上链 |
checkBean.attestationId |
存证id |
checkBean.confirmTime |
出块时间 |
checkBean.confirmHash |
区块hash |
checkBean.ledgerSeq |
区块高度 |
checkBean.hash |
文件hash |
以java为例:
// 构建请求参数
Map<String ,Object> body = new HashMap<>();
body.put("attestationId","did:bid:efsRrRCTEmA7ZWodWFPkjMW2u5Y4hikv");
httpRequest.body(JSONUtil.toJsonStr(body));
HttpResponse httpResponse = httpRequest.execute();
String result = httpResponse.body();
返回结果示例: a.接口调用成功,则返回JSON数据示例为::
{
"code":"200",
"data":{
"checkBean":{
"blockHash":"ec879f484d5aed9d598c3d615ea70f8246272b3d4c5796dcedc3e67a402d0905",
"fileName":"test1",
"evidenceTime":"2022-07-07 11:10:59",
"flag":true,
"attestationId":"did:bid:efaE9e45apUbuA87y7Y6zjMTaGfHt7WX",
"confirmTime":"2022-07-07 11:11:01",
"confirmHash":"106f9a90a4ac78a45acdfe203a353562f3779ff1c6f3fc35d8914dd6a7ec06da",
"ledgerSeq":"1113290",
"hash":"98df1f1dfb3b1a123c1517912dc70447aa61c6be532ac99de973abb6219e1653"
},
"attestationId":"did:bid:efaE9e45apUbuA87y7Y6zjMTaGfHt7WX",
"evidenceShareCode":"KD8TCISG",
"pdfFileKey":"1544881909048279040",
"fileHash":"98df1f1dfb3b1a123c1517912dc70447aa61c6be532ac99de973abb6219e1653",
"attestationType":2,
"dataExpireFlag":false,
"userId":"did:bid:zfGUkdqhxEamsPvpqAH2iRHk1ifhcW61",
"fileLabel":"标签",
"filename":"test1",
"createTime":"2022-07-07 11:10:19",
"attestationChannel":2,
"upChainTime":"2022-07-07 11:10:59",
"id":"1544881469589377024",
"username":"陈诚"
},
"message":"操作成功"
}
b.接口调用失败,则返回JSON数据示例为::
{
"code": "500",
"message": "系统错误"
}
下载存证或pdf文件 - /file/download/{fileKey}¶
存证原文件或pdf下载
Path¶
参数名 |
描述 |
是否可选 |
---|---|---|
fileKey |
文件id |
必选 |
返回的文件¶
该接口会返回存证文件以及文件名,文件就是http返回结果的body,文件名存放在http的header中,header的名称是Content-Disposition,header值形如:
form-data; name=Content-Disposition; filename=5Yhus2mVSMnQRXobRJCYgt.zip
以java为例:
String apiName = "/file/download/1529707935276466176";
HttpRequest httpRequest = createRequestGet(apiName);
HttpResponse httpResponse = httpRequest.execute();
String header = httpResponse.header("Content-Disposition");
Pattern pattern = Pattern.compile(".*filename=\"(.*)\".*");
Matcher matcher = pattern.matcher(header);
String fileName = "";
if (matcher.matches()) {
fileName = matcher.group(1);
}
byte[] bytes = httpResponse.bodyBytes();
IoUtil.write(new FileOutputStream("/tmp/" + fileName),true,bytes);
返回结果示例: a.接口调用成功,则返回文件流::
byte[]
b.接口调用失败,则返回JSON数据示例为::
{
"code": "2001",
"message": "文件不存在"
}