RealDoc集成指南

本文为客户集成RealDoc的异步和同步文档处理能力提供指导。通过接入RealDoc API,可实现文档防伪检测和文档信息提取功能。

集成概述

准备工作

在开始集成前,请参考快速入门完成准备工作。

集成模式

RealDoc目前支持纯API模式集成,具体操作详见使用API模式接入

集成架构

RealDoc提供简单易用的异步处理流程,主要包含以下三个步骤:

  1. 上传文档:上传待处理文档
  2. 查询状态:监控处理进度
  3. 获取结果:获取处理结果

RealDoc异步处理流程对应的时序图如下:

RealDoc集成指南

快速开始

前提条件

  • 已拥有有效的RealDoc商户账号。
  • 已获取API凭证(Access Key和Secret Key),详见AK/SK接入所需的API凭证
  • 已准备好待处理的文档文件(支持格式:pdf、jpg、jpeg、png、webp、bmp、tiff,文件大小最大为10MB)。

基础配置

  1. 单击此处下载最新版SDK。
  2. 使用AK/SK初始化OpenAPIClient。测试所需AK和SK可联系ZOLOZ技术支持获取。
copy
public static OpenApiClient realdoc_test = new OpenApiClient(){{
        setClientId("xxx");
        setAccessKey("ak");
        setSecretKey("sk");
        setProtoName("aksk");
        setHostUrl("xxx");
    }};

集成步骤

基础API

copy
private static RealDocAPI getRealDocAPI(String env) {
        // 使用配置的OpenApiClient初始化RealDocAPI
    }
    // 异步上传文档
    @RequestMapping(value = {"/upload"}, method = RequestMethod.POST)
    public RealDocAsyncUploadResponse realDocUpload(@RequestBody RealDocAsyncUploadRequest request, @RequestParam String env) {
        return getRealDocAPI(env).asyncUpload(request);
    }
    // 异步查询任务状态
    @RequestMapping(value = {"/status"}, method = RequestMethod.POST)
    public RealDocAsyncStatusResponse realDocStatus(@RequestBody RealDocAsyncStatusRequest request, @RequestParam String env) {
        return getRealDocAPI(env).asyncStatus(request);
    }
    // 异步获取防伪检测结果
    @RequestMapping(value = {"/fraudCheckResult"}, method = RequestMethod.POST)
    public RealDocAsyncFraudCheckResultResponse realDocFraudCheckResult(@RequestBody RealDocAsyncFraudCheckResultRequest request, @RequestParam String env) {
        return getRealDocAPI(env).asyncFraudCheckResult(request);
    }
    // 异步解析
    @RequestMapping(value = {"/parseresult"}, method = RequestMethod.POST)
    public RealDocAsyncParseResultResponse realDocParse(@RequestBody RealDocAsyncParseResultRequest request, @RequestParam String env) {
        return getRealDocAPI(env).asyncParseResult(request);
    }
    // 同步解析
    @RequestMapping(value = {"/parse"}, method = RequestMethod.POST)
    public RealDocParseResponse realDoc(@RequestBody RealDocParseRequest request, @RequestParam String env) {
        return getRealDocAPI(env).parse(request);
    }

异步文档信息提取示例

处理流程包含以下三个步骤:

  1. 上传待处理文档
  2. 查询文档处理状态
  3. 获取解析结果

示例代码如下:

copy
private static RealDocAPI getRealDocAPI(String env) {
        // 使用配置的OpenApiClient初始化RealDocAPI
    }
/**
     * 完整的异步文档解析工作流示例
     * 1. 上传文档
     * 2. 查询处理状态
     * 3. 获取解析结果
     */
@RequestMapping(value = {"/asyncParseCase"}, method = RequestMethod.POST)
public RealDocAsyncParseResultResponse asyncParseCase(@RequestBody RealDocAsyncUploadRequest uploadRequest, @RequestParam String env) {
    // 步骤1:上传文档
    uploadRequest.setBizId("realdoc_parse_" + System.currentTimeMillis());
    RealDocAsyncUploadResponse uploadResponse = getRealDocAPI(env).asyncUpload(uploadRequest);
    if (uploadResponse == null || uploadResponse.getTransactionId() == null) {
        throw new RuntimeException("Document upload failed");
    }
    // 验证上传结果
    if (!"S".equals(uploadResponse.getResult().getResultStatus())) {
        throw new RuntimeException("Document upload failed, resultStatus: " + uploadResponse.getResult().getResultStatus());
    }
    String transactionId = uploadResponse.getTransactionId();
    // 步骤2:轮询处理状态直至完成
    RealDocAsyncStatusRequest statusRequest = new RealDocAsyncStatusRequest();
    statusRequest.setTransactionId(transactionId);
    int maxRetries = 5;
    int retryCount = 0;
    while (retryCount < maxRetries) {
        // bizId用于唯一标识一个请求,且支持自定义
        statusRequest.setBizId("realdoc_status_" + System.currentTimeMillis());
        RealDocAsyncStatusResponse statusResponse = getRealDocAPI(env).asyncStatus(statusRequest);
        if (statusResponse == null) {
            throw new RuntimeException("Failed to get status");
        }
        // 状态码说明:Processing表示正在处理中,Success表示成功,Failure表示失败
        String status = statusResponse.getStatus();
        if ("Success".equals(status)) {
            break; // 处理成功,退出循环
        } else if ("Failure".equals(status)) {
            throw new RuntimeException("Document processing failed, status: " + status);
        } else if (!"Processing".equals(status)) {
            throw new RuntimeException("Unknown status: " + status);
        }
        // 正在处理中,请继续等待
        retryCount++;
        try {
            Thread.sleep(20000); // 等待20秒
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            throw new RuntimeException("Waiting interrupted", e);
        }
    }
    if (retryCount >= maxRetries) {
        throw new RuntimeException("Document processing timeout, exceeded maximum wait time");
    }
    // 步骤3:获取解析结果
    RealDocAsyncParseResultRequest parseResultRequest = new RealDocAsyncParseResultRequest();
        parseResultRequest.setTransactionId(transactionId);
        parseResultRequest.setBizId("realdoc_parse_" + System.currentTimeMillis());
        return getRealDocAPI(env).asyncParseResult(parseResultRequest);
    }

异步文档防伪检测示例

处理流程包含以下三个步骤:

  1. 上传待处理文档
  2. 查询文档处理状态
  3. 获取防伪检测结果

示例代码如下:

copy
private static RealDocAPI getRealDocAPI(String env) {
        // 使用配置的OpenApiClient初始化RealDocAPI
    }
    /**
     * 完整的异步文档防伪检测工作流示例
     * 1. 上传文档
     * 2. 查询处理状态
     * 3. 获取防伪检测结果
     */
    @RequestMapping(value = {"/asyncFraudCheckCase"}, method = RequestMethod.POST)
    public RealDocAsyncFraudCheckResultResponse asyncFraudCheckCase(@RequestBody RealDocAsyncUploadRequest uploadRequest, @RequestParam String env) {
        // 步骤1:上传文档
        uploadRequest.setBizId("realdoc_fraudCheck_" + System.currentTimeMillis());
        RealDocAsyncUploadResponse uploadResponse = getRealDocAPI(env).asyncUpload(uploadRequest);
        if (uploadResponse == null || uploadResponse.getTransactionId() == null) {
            throw new RuntimeException("Document upload failed");
        }
        
        // 验证上传结果
        if (!"S".equals(uploadResponse.getResult().getResultStatus())) {
            throw new RuntimeException("Document upload failed, resultStatus: " + uploadResponse.getResult().getResultStatus());
        }
        
        String transactionId = uploadResponse.getTransactionId();
        
        // 步骤2:轮询处理状态直至完成
        RealDocAsyncStatusRequest statusRequest = new RealDocAsyncStatusRequest();
        statusRequest.setTransactionId(transactionId);
        
        int maxRetries = 5;
        int retryCount = 0;
        
        while (retryCount < maxRetries) {
            statusRequest.setBizId("realdoc_status_" + System.currentTimeMillis());
            RealDocAsyncStatusResponse statusResponse = getRealDocAPI(env).asyncStatus(statusRequest);
            
            if (statusResponse == null) {
                throw new RuntimeException("Failed to get status");
            }
            
            // 状态码说明:Processing表示正在处理中,Success表示成功,Failure表示失败
            String status = statusResponse.getStatus();
            if ("Success".equals(status)) {
                break; // 处理成功,退出循环
            } else if ("Failure".equals(status)) {
                throw new RuntimeException("Document processing failed, status: " + status);
            } else if (!"Processing".equals(status)) {
                throw new RuntimeException("Unknown status: " + status);
            }
            
            // 正在处理中,请继续等待
            retryCount++;
            try {
                Thread.sleep(20000); // 等待20秒
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                throw new RuntimeException("Waiting interrupted", e);
            }
        }
        
        if (retryCount >= maxRetries) {
            throw new RuntimeException("Document processing timeout, exceeded maximum wait time");
        }
        
        // 步骤3:获取防伪检测结果
        RealDocAsyncFraudCheckResultRequest fraudCheckResultRequest = new RealDocAsyncFraudCheckResultRequest();
        fraudCheckResultRequest.setTransactionId(transactionId);
        fraudCheckResultRequest.setBizId("realdoc_fraud_" + System.currentTimeMillis());
        return getRealDocAPI(env).asyncFraudCheckResult(fraudCheckResultRequest);
    }

同步文档信息提取示例

调用实时同步文档解析API,上传文档后将直接返回提取结果。

copy
private static RealDocAPI getRealDocAPI(String env) {
        // 使用配置的OpenApiClient初始化RealDocAPI
    }
    
    // 同步解析
    @RequestMapping(value = {"/parse"}, method = RequestMethod.POST)
    public RealDocParseResponse realDoc(@RequestBody RealDocParseRequest request, @RequestParam String env) {
        return getRealDocAPI(env).parse(request);
    }

技术支持

如果有任何集成方面的问题,可通过以下方式获取帮助: