发大大V.2工具类

第一步:

   maven 打包:fadada_api_sdk.jar 打成maven包

   win 环境下,检查自己java环境和maven环境

具体配置maven环境见:https://jingyan.baidu.com/article/acf728fd68b4bef8e510a31c.html

准备就需后,在控制台输入命令mvn install:install-file -Dfile=C:\Users\Administrator\Desktop\fadada_api_sdk.jar -DgroupId=QRCode -DartifactId=fadada-api-sdk -Dversion=4.0 -Dpackaging=jar -DgeneratePom=true。

控制台执行成功后:pmo.xml 引入

<dependency>
            <groupId>com.fadada</groupId>
            <artifactId>fadada-api-sdk</artifactId>
            <version>4.0.0</version>
        </dependency>

注意jar网络请求会用到jar包:pmo.xml 引入

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.9</version>
        </dependency>

2.开始编写util类:

package com.xuejifen.common.utils.fadada;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fadada.sdk.client.FddClientBase;
import com.fadada.sdk.client.FddClientExtra;
import com.fadada.sdk.client.authForfadada.ApplyCert;
import com.fadada.sdk.client.authForfadada.FindCertInfo;
import com.fadada.sdk.client.authForfadada.GetCompanyVerifyUrl;
import com.fadada.sdk.client.authForfadada.GetPersonVerifyUrl;
import com.fadada.sdk.client.authForfadada.model.AgentInfoINO;
import com.fadada.sdk.client.authForfadada.model.BankInfoINO;
import com.fadada.sdk.client.authForfadada.model.CompanyInfoINO;
import com.fadada.sdk.client.authForfadada.model.LegalInfoINO;
import com.fadada.sdk.client.request.ExtsignReq;
import com.google.common.collect.Maps;
import com.xuejifen.common.config.Global;
import com.xuejifen.common.utils.GsonUtil;
import com.xuejifen.common.utils.StringUtils;
import com.xuejifen.modules.dict.fadada.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Map;

/**
 * @author: raoBo
 * @date: 2020/8/17 10:53
 * @desc: 法大大工具类
 * @version: 1.0
 */
@Slf4j
public class FadadaUtil {

    private  String APP_ID ;
    private  String APP_SECRET;
    private  String V;
    private  String HOST;
    private String COMPANY_CODE;


    /***
     * 获取配置信息
     */
    public FadadaUtil(){
        this.APP_ID = Global.getConfig("fadada.app.id");
        this.APP_SECRET = Global.getConfig("fadada.app.secret");
        this.V = Global.getConfig("fadada.app.edition");
        this.HOST = Global.getConfig("fadada.app.baseUrl");

        this.COMPANY_CODE = Global.getConfig("adada.company.code");
    }

    /**
     * 法大大注册用户
     * @return 有值成功,null 失败
     */
    public String regAccount(String open_id, AccountType accountType){
        log.info("----法大大注册用户(regAccount)----{},{}",open_id,accountType.getMsg());
        try {
            FddClientBase base = new FddClientBase(APP_ID,APP_SECRET,V,HOST);
            String result = base.invokeregisterAccount(open_id,accountType.getValue());
            log.info("----法大大注册用户(regAccount)----返回数据:{}",result);
            JSONObject jsonObject = JSON.parseObject(result);
            String data = jsonObject.getString("data");
            if (StringUtils.isBlank(data)){
                log.info("----法大大注册用户(regAccount)----注册法大大失败:{}",jsonObject.getString("msg"));
                return null;
            }
            log.info("----法大大注册用户(regAccount)----注册法大大成功:{}",data);
            return data;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---regAccount---注册法大大用户报错:{}",e.getMessage());
        }
        return null;
    }

    /**
     * url内容处理
     * @return
     */
    private String decode(String bizContent) {
        try {
            bizContent = URLDecoder.decode(bizContent, "utf-8");
            bizContent = new String(Base64.decodeBase64(bizContent.getBytes()));
        } catch (UnsupportedEncodingException e) {
            return "";
        }
        return bizContent;
    }

    /**
     * 获取个人实名认证地址 TODO 返回数据处理
     * @param customer_id 用户主id
     * @param verifiedWay 实名认证套餐类型
     * @param pageModify 是否允许用户页面修改
     * @param notify_url 回调地址 TODO 接口未做
     * @param return_url 同步通知url
     * @param customer_name 姓名
     * @param customerIdentType 证件类型
     * @param customer_ident_no 证件号码
     * @param mobile 手机号码
     * @return
     */
    public Map<String,Object> getAuthPersonUrl(String customer_id, VerifiedWay verifiedWay, PageModify pageModify,String notify_url,
                                 String return_url,String customer_name,CustomerIdentType customerIdentType,String customer_ident_no,String mobile,OptionDict optionDict){
        log.info("---getAuthPersonUrl---开始获取个人实名认证地址");
        Map<String,Object> map = Maps.newHashMap();
        try {
            GetPersonVerifyUrl personverify = new GetPersonVerifyUrl(APP_ID,APP_SECRET,V,HOST);
            String verifyed_way = verifiedWay.getValue();
            String page_modify = pageModify.getValue();
            String customer_ident_type = customerIdentType.getValue();
            String result = personverify.invokePersonVerifyUrl(customer_id,verifyed_way,
                    page_modify,notify_url,return_url,customer_name,customer_ident_type,
                    customer_ident_no,mobile,null,"2","1",
                    "0",null,optionDict.getValue(),"0");
            System.out.println(result);
            log.info("---个人实名认证信息传递getAuthPersonUrl---返回数据:{}",result);
            JSONObject jsonObject = JSON.parseObject(result);
            String data = jsonObject.getString("data");
            if (StringUtils.isBlank(data)){
                map.put("success",false);
                log.error("---getAuthPersonUrl---个人实名认证信息传递失败:{}",result);
                return map;
            }

            String url = JSON.parseObject(data).getString("url");
            url = decode(url);
            map.put("success",true);
            map.put("transactionNo",JSON.parseObject(data).getString("transactionNo"));
            map.put("url",url);
            log.info("---getAuthPersonUrl---个人实名认证信息传递成功:{}",map);
            return map;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---getAuthPersonUrl---获取个人实名认证地址报错:{}",e.getMessage());
        }
        map.put("success",false);
        return map;
    }

    /**
     * 新增平台配置控制是否允许颁发实名证书 申请个人实名证书
     * @param customer_id 客户编号
     * @param verified_serialno 实名认证序列号
     */
    public Boolean applyCert(String customer_id,String verified_serialno){
        log.info("---applyCert---申请个人实名证书:{}",customer_id);
        try {
            ApplyCert applyCert = new ApplyCert(APP_ID,APP_SECRET,V,HOST);
            String result = applyCert.invokeApplyCert(customer_id,verified_serialno);
            log.info("---applyCert---申请个人实名证书返回数据:{}",result);
            JSONObject jsonObject = JSON.parseObject(result);
            if (jsonObject.getIntValue("code") != 1){
                log.error("--applyCert---申请个人实名证书失败code:{},msg:{}",jsonObject.getIntValue("code"),jsonObject.getString("msg"));
                return false;
            }
            log.info("--applyCert---申请个人实名证书成功");
            return true;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---getAuthPersonUrl---申请个人实名证书报错:{}",e.getMessage());
        }
        return false;
    }
    /**
     * 查询个人实名认证结果
     * @param transactionNo 法大大订单编号
     * @param accountType 账号类型
     * @return
     */
    public Map<String,Object> findPersonCertInfo(String transactionNo,AccountType accountType){
        log.info("---findPersonCertInfo--开始查询实名认证结果");
        Map<String,Object> map = Maps.newHashMap();
        try {
            FindCertInfo personCertInfo = new FindCertInfo(APP_ID,APP_SECRET,V,HOST);
            String result = personCertInfo.invokeFindPersonCert(transactionNo,
                    accountType.getValue());
            log.info("----findPersonCertInfo----查询实名认证结果返回数据:{}",result);
            JSONObject jsonObject = JSON.parseObject(result);
            String data = jsonObject.getString("data");
            if (StringUtils.isBlank(data)){
                log.error("----findPersonCertInfo----查询实名认证结果失败");
                map.put("success",false);
                return map;
            }
            //用户信息
            String person = JSON.parseObject(data).getString("person");
            log.info("----findPersonCertInfo----查询实名认证结果返回数据:{}",person);
            map = GsonUtil.fronJson2Map(person);
            map.put("success",true);
            return map;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---findPersonCertInfo---查询实名认证结果报错:{}",e.getMessage());
        }
        map.put("success",false);
        return map;
    }


    /**
     * 获取企业实名认证地址
     * @param customer_id  客户编号
     * @param companyInfo 企业信息 (agent_name 代理人姓名 agent_id 代理人证件号 agent_mobile 代理人手机号 agent_id_front_path 代理人证件正面照下载地址 bank_card_no 代理人银行卡号)
     * @param bankInfo 对公账号信息 (bank_name 银行名称 bank_id 银行帐号 subbranch_name 开户支行名称)
     * @param legalInfo 法人信息 companyPrincipalType 1 时 必选 (company_name 企业名称 credit_no 统一社会信用代码 credit_image_path 统一社会信用代码证件照路径)
     * @param agentInfo 代理人信息 companyPrincipalType 2 时 必选 (legal_name 法人姓名 legal_id 法人证件号 legal_mobile 法人手机号(仅支持国内运营商) legal_id_front_path 法人证件正面照下载地址 bank_card_no 法人银行卡号)
     * @param companyVerifiedWay 实名认证套餐类型: 0:标准方案(对公打款+纸 质审核+法人身份+法人授 权); 1:对公打款; 2:纸质审核; 3:法人身份(授权)认证
     * @param verifiedWay 管理员认证套餐类型: 0:三要素标准方案; 1:三要素补充方案; 2:四要素标准方案; 3:四要素补充方案; 4:纯三要素方案; 5:纯四要素方案
     * @param pageModify 是否允许用户页面修改 1允许 2不允许
     * @param notify_url 回调地址
     * @param return_url 同步通知url TODO 接口未做
     * @param companyPrincipalType 企业负责人身份: 1. 法人 2. 代理人
     * @param optionDict add(新增) modify(修改)
     * @param certFlag 是否认证成功后自动申请实 名证书 参数值为“0”:不申请 参数值为“1”:自动申请
     * @return
     */
    public Map<String,Object> getAuthCompanyUrl(String customer_id, CompanyInfoINO companyInfo, BankInfoINO bankInfo, LegalInfoINO legalInfo,
                                  AgentInfoINO agentInfo,CompanyVerifiedWay companyVerifiedWay, VerifiedWay verifiedWay,
                                  PageModify pageModify, String notify_url, String return_url, CompanyPrincipalType companyPrincipalType,
                                  OptionDict optionDict,CertFlag certFlag){
        log.info("----getAuthCompanyUrl---开始获取企业实名认证地址:{}",legalInfo);
        Map<String,Object> map = Maps.newHashMap();
        try {
            GetCompanyVerifyUrl comverify = new GetCompanyVerifyUrl(APP_ID,APP_SECRET,V,HOST);
            String result_type = "2";//刷脸是否显示结果页面 参数值为“1”:直接跳转到 return_url或法大大指定页 面,参数值为“2”:需要用户点击 确认后跳转到return_url或 法大大指定页面
            String result = comverify.invokeCompanyVerifyUrl(companyInfo,bankInfo,legalInfo
                    ,agentInfo, customer_id,companyVerifiedWay.getValue(),verifiedWay.getValue(),pageModify.getValue(),
                    companyPrincipalType.getValue(),return_url,notify_url,result_type,certFlag.getValue(),
                    optionDict.getValue(),null,null);

            log.info("----getAuthCompanyUrl---获取企业实名认证地址返回数据:{}",result);
            System.out.println(result);
            JSONObject jsonObject = JSON.parseObject(result);
            String data = jsonObject.getString("data");
            if (StringUtils.isBlank(data)){
                log.error("---getAuthCompanyUrl---获取企业实名认证地址失败:{}",jsonObject.getString("msg"));
                map.put("success",false);
                return map;
            }
            String url = JSON.parseObject(data).getString("url");
            url = decode(url);
            map.put("success",true);
            map.put("url",url);
            map.put("transactionNo",JSON.parseObject(data).getString("transactionNo"));
            log.error("---getAuthCompanyUrl---获取企业实名认证地址成功:{}",map);
            return map;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---getAuthCompanyUrl---获取企业实名认证地址报错:{}",e.getMessage());
        }
        map.put("success",false);
        return map;
    }

    /**
     *查询企业实名认证结果
     * @param transactionNo 编号
     * @param accountType 账号类型
     * @return 有值成功,null 失败
     */
    public String findCompanyCertInfo(String transactionNo,AccountType accountType){
        log.info("---findCompanyCertInfo--开始查询企业实名认证结果");
        try {
            FindCertInfo personCertInfo = new FindCertInfo(APP_ID,APP_SECRET,V,HOST);
            String result = personCertInfo.invokeFindPersonCert(transactionNo,
                    accountType.getValue());
            log.info("---findCompanyCertInfo--查询企业实名认证结果返回数据:{}",result);
            String data = JSON.parseObject(result).getString("data");
            if (StringUtils.isBlank(data)){
                log.error("---getAuthCompanyUrl---获取企业实名认证地址失败:{}",JSON.parseObject(result).getString("msg"));
                return null;
            }
            log.info("---findCompanyCertInfo--查询企业实名认证结果返回成功:{}",data);
            return data;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---findCompanyCertInfo---查询企业实名认证结果报错:{}",e.getMessage());
        }
        return null;
    }

    /**
     * 印章上传
     * @param customer_id 用户编号
     * @param imgUrl 公网地址
     * @return 有值成功,null 失败
     */
    public String addSignature(String customer_id,String imgUrl){
        log.info("--addSignature--开始印章上传:用户:{},印章地址:{}",customer_id,imgUrl);
        try {
            FddClientBase base = new FddClientBase(APP_ID,APP_SECRET,V,HOST);
            String result = base.invokeaddSignature(customer_id,null,imgUrl);
            log.info("--addSignature--印章上传返回结果:{}",result);
            String data = JSON.parseObject(result).getString("data");
            if (StringUtils.isBlank(data)){
                log.error("---addSignature---印章上传失败:{}",JSON.parseObject(result).getString("msg"));
                return null;
            }
            log.error("---addSignature---印章上传成功");
            return JSON.parseObject(data).getString("signature_id");
        }catch (Exception e){
            e.printStackTrace();
            log.error("---addSignature---印章上传报错:{}",e.getMessage());
        }
        return null;
    }

    /**
     * 新增用户签章图片 V2
     * @param customer_id 用户编号id
     * @param content 签章内容
     * @return 有值成功,null 失败
     */
    public String customSignature(String customer_id,String content){
        log.info("--customSignature--开始生成用户印章:用户:{},印章内容:{}",customer_id,content);
        try {
            FddClientBase base = new FddClientBase(APP_ID,APP_SECRET,V,HOST);
            String result = base.invokecustomSignature(customer_id,content);
            log.info("--customSignature--生成用户印章返回结果:{}",result);
            //  TODO 要使用时返回结果处理
            String data = JSON.parseObject(result).getString("data");
            if (StringUtils.isBlank(data)){
                log.error("---customSignature---生成用户印章失败:{}",JSON.parseObject(result).getString("msg"));
                return null;
            }
            return JSON.parseObject(data).getString("signature_img_base64");
        }catch (Exception e){
            e.printStackTrace();
            log.error("---customSignature---生成用户印章报错:{}",e.getMessage());
        }
        return null;
    }

    /**
     * 印章上传 v2
     * @param customer_id 用户编号id
     * @param signature_img_base64 图片base64
     * @return 有值成功,null 失败
     */
    public String addSignature2(String customer_id,String signature_img_base64){
        log.info("--addSignature2--上传用户印章:用户:{}",customer_id);
        try {
            FddClientBase base = new FddClientBase(APP_ID,APP_SECRET,V,HOST);
            String result = base.invokeaddSignature(customer_id,signature_img_base64);
            String data = JSON.parseObject(result).getString("data");
            if (StringUtils.isBlank(data)){
                log.error("---addSignature2---上传用户印章失败:{}",JSON.parseObject(result).getString("msg"));
                return null;
            }
            log.info("---addSignature2---上传用户印章成功");
            return JSON.parseObject(data).getString("signature_id");
        }catch (Exception e){
            e.printStackTrace();
            log.error("---addSignature2---上传用户印章报错:{}",e.getMessage());
        }
        return null;
    }

    /**
     * 合同上传
     * @param contract_id 自定义合同id
     * @param doc_title 合同标题
     * @param doc_url 文件网络地址
     * @param doc_type 文件类型 .pdf 可为空
     */
    public Boolean uploadContract(String contract_id,String doc_title,String doc_url,String doc_type) {
        log.info("--uploadContract---开始上传合同");
        try {
            FddClientBase base = new FddClientBase(APP_ID,APP_SECRET,V,HOST);
            if (StringUtils.isBlank(doc_type)){
                doc_type = ".pdf";
            }
            String result = base.invokeUploadDocs(contract_id, doc_title, null, doc_url, doc_type);
            log.info("--uploadContract---上传合同返回数据:{}",result);
            // code 状态码 1000:操作成功
            //2001:参数缺失或者不合法
            //2002:业务异常,失败原因见msg
            //2003:其他错误,请联系法大大
            String code = JSON.parseObject(result).getString("code");
            if (StringUtils.equals(code,"1000")){
                log.info("--uploadContract---上传合同成功");
                return true;
            }
            log.error("--uploadContract---上传合同失败:{}",JSON.parseObject(result).getString("msg"));
            return false;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---uploadContract---上传合同报错:{}",e.getMessage());
        }
        return false;
    }

    /**
     * 模版上传
     * @param template_id 自定义模板id
     * @param doc_url 文件网络地址 .pdf 后缀
     * @return
     */
    public Boolean uploadTemplate(String template_id,String doc_url) {
        log.info("---uploadTemplate--开始模版上传");
        try {
            FddClientBase base = new FddClientBase(APP_ID,APP_SECRET,V,HOST);
            String result = base.invokeUploadTemplate(template_id, null, doc_url);
            log.info("---uploadTemplate--模版上传返回结果:{}",result);
            String code = JSON.parseObject(result).getString("code");
            if (StringUtils.equals(code,"1")){
                log.info("---uploadTemplate--模版上传成功");
                return true;
            }
            log.error("---uploadTemplate--模版上传失败:{}",JSON.parseObject(result).getString("msg"));
            return false;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---uploadTemplate---模版上传报错:{}",e.getMessage());
        }
        return false;
    }

    /**
     * 模版填充
     * @param doc_title  文档标题
     * @param template_id 模板编号
     * @param contract_id 合同编号
     * @param parameter 填充内容
     * @param dynamic 动态表格
     * @param font_size 字体大小 10,12,12.5,14
     * @param fontType 默认0-宋体;0-宋体;1-仿宋;2-黑体;3-楷体;4-微软雅黑
     */
    public Map<String,Object> generateContract(String doc_title,String template_id,String contract_id,JSONObject parameter,JSONObject dynamic,
                                 String font_size,FontType fontType) {
        log.info("--generateContract---开始填充模版数据");
        Map<String,Object> map = Maps.newHashMap();
        try {
            FddClientBase base = new FddClientBase(APP_ID,APP_SECRET,V,HOST);
            String parameter_map = "";
            if (parameter != null){
                parameter_map = parameter.toString();
            }
            String dynamic_tables = "";
            if (dynamic != null){
                dynamic_tables = dynamic.toString();
                log.info("---generateContract---附件数据:{}",dynamic_tables);
            }
            String result = base.invokeGenerateContract(template_id, contract_id, doc_title, font_size, fontType.getValue(), parameter_map, dynamic_tables);
            log.info("---generateContract---填充模版返回结果:{}",result);
            //正例: {"code":"1000","download_url":"http:\/\/testapi.fadada.com............BQg==","ms g":"操作成功","result":"success","viewpdf_url":"http:\/\/testapi.fadada.com........BQg=="} 
            // 反例:{"code":"2002","download_url":null,"msg":"对不起,没有检索到模板文件!","result":"error","viewpdf_url":null} 
            JSONObject jsonObject = JSON.parseObject(result);
            map = GsonUtil.fronJson2Map(result);
            if (StringUtils.equals(jsonObject.getString("code"),"1000")){
                map.put("success",true);
                log.info("---generateContract---填充模版成功:{}",map);
                return map;
            }
            map.put("success",false);
            log.error("---generateContract---填充模版失败:{}",jsonObject.getString("msg"));
            return map;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---generateContract---填充模版数据报错:{}",e.getMessage());
        }
        map.put("success",false);
        return map;
    }
    /* 模版填充实例参数
    private String getparamter() {
        JSONObject paramter = new JSONObject();
		 paramter.put("platformName","√"); 平台
        paramter.put("borrower","深圳法大大"); //作者
        return paramter.toString();
    }
    //自动签署实例,附件
    private String getdynamic_tables() {
        JSONArray dynamic_tables = new JSONArray();
        JSONObject dynamic2 = new JSONObject();
        dynamic2.put("insertWay", 1);//动态表格插入方式 0:新建页面添加table(默认)1:在某个关键字后添加table
        dynamic2.put("keyword", ""); //关键字方式插入动态表格 #1. 当insertWay为1时,必填#2. 要求该关键字后(当前页)必须不包含内容,否则会被覆盖#3. 若关键字为多个,则取第一个关键字,在此关键字后插入table
        dynamic2.put("pageBegin", "1"); //表格需要插入的页数 1. 当insertWay为0时,必填#2. 表示从第几页开始插入表格,如要从末尾插入table,则pageBegin为pdf总页数加1#3. 多个表格指定相同pageBegin,则多个表格按顺序插入,一个表格新起一页#4. pageBegin为-1时,则从pdf 末尾插入table
        dynamic2.put("borderFlag", true);//table是否有边框 true:有(默认)false:无边框
        dynamic2.put("cellHeight", "16.0");// 正文行高(表头不受影响) 单位:pt,即point,等于1/72英寸

        dynamic2.put("colWidthPercent", new int[] { 3, 4, 4, 4});//Table中每个单元的水平对齐方式 (0:居左;1:居中;2:居右)默认为0
        dynamic2.put("theFirstHeader", "附二"); //表头上方的一级标题
        dynamic2.put("cellHorizontalAlignment", "1"); //Table中每个单元的水平对齐方式 (0:居左;1:居中;2:居右)默认为0
        dynamic2.put("cellVerticalAlignment", "5"); // Table中每个单元的垂直对齐方式 (4:居上;5:居中;6:居下)默认为4
        dynamic2.put("headers", new String[] { "序号", "借款人", "贷款人", "金额" }); //表头信息
        String row1[] = new String[] { "1", "小网", "小易", "1000" };
        String row2[] = new String[] { "2", "小云", "小音", "2000" };
        String row3[] = new String[] { "3", "小乐", "天马", "3000" };
        dynamic2.put("datas", new String[][] { row1, row2, row3 }); // 正文 (外层表示行,内层表示列)
        dynamic2.put("headersAlignment", "1"); // 表头对齐方式 (0居左;1居中;2居右) 默认0
        dynamic2.put("tableWidthPercentage", 80);//table宽度的百分比
        dynamic_tables.add(dynamic2);
        System.out.println(dynamic_tables.toString());
        return dynamic_tables.toString();
    }*/

    /**
     * 自动签署 需先签署授权协议
     * @param customer_id 客户编号
     * @param transaction_id 交易号
     * @param contract_id 合同编号
     * @param doc_title 合同标题
     * @param sign_keyword 关键字
     * @param notify_url 如果指定,当签章完成后,法大大将向此URL发送签署结果 TODO 接口未写
     * @return
     */
    public Map<String,Object> autoSign(String customer_id,String transaction_id,String contract_id,
                                              String doc_title,String sign_keyword,String notify_url){
        log.info("---autoSign---开始获取自动签署数据");
        Map<String,Object> map = Maps.newHashMap();
        try {
            FddClientBase base = new FddClientBase(APP_ID,APP_SECRET,V,HOST);
            ExtsignReq req = getExtsignReq(customer_id,transaction_id,contract_id,doc_title,null,sign_keyword,notify_url);
            String result = base.invokeExtSignAuto(req);
            //code 返回 1000:操作成功2001:参数缺失或者不合法2002:业务异常,失败原因见msg 2003:其他错误,请联系法大大
            //实例 正例: {"code":"1000","download_url":"http:\/\/testapi.fadada.com.....","msg":"文档签署成功","result":"success","viewpdf_url":"http:\/\/testapi.fadada.com....."} 
            // 反例: {"code":"2002","download_url":null,"msg":"对不起,签约关键字不能为空!","result":"error","viewpdf_url":null}
            String code = JSON.parseObject(result).getString("code");
            if (StringUtils.equals(code,"1000")){
                log.info("---autoSign---自动签署");
                map = GsonUtil.fronJson2Map(result);
                map.put("success",true);
                return map;
            }
            map.put("success",false);
            log.error("---autoSign---自动签署失败:{}",JSON.parseObject(result).getString("msg"));
            return map;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---autoSign---自动签署合同报错:{}",e.getMessage());
        }
        map.put("success",false);
        return map;
    }

    /**
     * 签署数据
     * @param customer_id 客户编号
     * @param transaction_id 交易号
     * @param contract_id 合同编号
     * @param doc_title 合同标题
     * @param return_url  同步返回地址
     * @param sign_keyword 关键字
     * @param notify_url 如果指定,当签章完成后,法大大将向此URL发送签署结果
     */
    private ExtsignReq getExtsignReq(String customer_id,String transaction_id,String contract_id,
                                     String doc_title,String return_url,String sign_keyword,String notify_url){
        ExtsignReq req = new ExtsignReq();
        req.setCustomer_id(customer_id); //客户编号
        req.setTransaction_id(transaction_id);//交易号
        req.setContract_id(contract_id); //合同编号
        req.setDoc_title(doc_title); // 合同标题
        if (StringUtils.isNotBlank(return_url)){
            req.setReturn_url(return_url);//同步返回地址
        }
        req.setNotify_url(notify_url); // 异步返回地址

        req.setPosition_type("0"); // 0 关键字 1 坐标
        req.setKeyword_strategy("2"); //关键字签章策略:0:所有关键字签章(默认);1:第一个关键字签章;2:最后一个关键字签章
        req.setSign_keyword(sign_keyword);// 关键字
        return req;
    }

    /**
     * 手动签署
     * @param customer_id 客户编号
     * @param transaction_id 交易号
     * @param contract_id 合同编号
     * @param doc_title 合同标题
     * @param return_url  同步返回地址
     * @param sign_keyword 关键字
     * @param notify_url 如果指定,当签章完成后,法大大将向此URL发送签署结果 TODO 接口未写
     * @return 有值成功,null 失败
     */
    public String manualSignature(String customer_id,String transaction_id,String contract_id,
                                  String doc_title,String return_url,String sign_keyword,String notify_url){
        log.info("--manualSignature---开始手动签署获取路径");
        try {
            FddClientBase base = new FddClientBase(APP_ID,APP_SECRET,V,HOST);
            ExtsignReq req = getExtsignReq(customer_id,transaction_id,contract_id,doc_title,return_url,sign_keyword,notify_url);
            // read_time 合同必读时间 0-60秒 mobile_sign_type 签章类型 0:全部;1:标准;2:手写 sign_verify_way 签署意愿方式 1:短信;3:人脸识别
            // verify_way_flag 签署意愿方式选择人脸识别时,人脸识别失败后自动调整为短信 默认为00:不切换;1:切换
            String sign_url = base.invokeExtSign(req);
            log.info("--manualSignature---手动签署获取路径:{}",sign_url);
            return sign_url;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---manualSignature---手动签署获取路径报错:{}",e.getMessage());
        }
        return null;
    }

    /**
     * 获取查看合同路径
     * @param contract_id 合同编号
     * @return 合同查看路径
     */
    public String viewContract(String contract_id) {
        FddClientExtra extra = new FddClientExtra(APP_ID,APP_SECRET,V,HOST);
        String view_url = extra.invokeViewPdfURL(contract_id);
        log.info("--viewContract---获取合同获取路径:{}",view_url);
        return view_url;
    }

    /**
     * 合同下载路径
     * @param contract_id 合同编号
     * @return 合同下载路径
     */
    public String downloadContract(String contract_id) {
        log.info("---downloadContract--合同下载:{}",contract_id);
        FddClientExtra extra = new FddClientExtra(APP_ID,APP_SECRET,V,HOST);
        String download_url = extra.invokeDownloadPdf(contract_id);
        log.info("--viewContract---合同下载路径:{}",download_url);
        return download_url;
    }

    /**
     * 合同归档
     * @param contract_id 合同编号
     * @return 归档是否成功
     */
    public Boolean contractFiling(String contract_id) {
        log.info("---contractFiling--开始合同归档:{}",contract_id);
        try {
            FddClientBase base = new FddClientBase(APP_ID,APP_SECRET,V,HOST);
            String result = base.invokeContractFilling(contract_id);
            //code 1000:操作成功2001:参数缺失或者不合法2002:业务异常,失败原因见msg 2003:其他错误,请联系法大大
            log.info("---contractFiling--合同归档返回结果:{}",result);
            String code = JSON.parseObject(result).getString("code");
            if (StringUtils.equals(code,"1000")){
                log.info("---contractFiling--合同归档成功");
                return true;
            }
            log.info("---contractFiling--合同归档失败:{}",JSON.parseObject(result).getString("msg"));
            return false;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---generateContract---合同归档报错:{}",e.getMessage());
        }
        return false;
    }

    /**
     * 获取页面授权接口地址
     * @param transaction_id 授权流水号(同时也是合同签署交易号)
     * @param auth_type 授权类型 1:授权自动签(目前只能填1)
     * @param contract_id 合同编号
     * @param customer_id 客户编号
     * @param return_url 页面跳转URL(签署结果同步通知)
     * @param notify_url 签署结果异步通知URL
     */
    public String beforeAuthSign(String transaction_id,String auth_type,String contract_id,String customer_id,String return_url,String notify_url){
        log.info("---beforeAuthSign--开始获取页面授权接口地址");
        try {
            BeforeAuthSign sign = new BeforeAuthSign(APP_ID,APP_SECRET,V,HOST);
            String result = sign.invokeBeforeAuthSign(transaction_id,auth_type,contract_id,customer_id,return_url,notify_url);
            log.info("---beforeAuthSign--获取页面授权接口返回结果:{}",result);
            return result;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---generateContract---获取页面授权接口地址报错:{}",e.getMessage());
        }
        return null;
    }

    /**
     * 取消授权,获取访问地址
     * @param customer_id 客户编号
     * @param notify_url 异步通知地址 TODO 接口地址
     * @param return_url 同步跳转地址
     * @return 地址
     */
    public String cancelExtSignAutoPage(String customer_id,String notify_url,String return_url){
        log.info("---cancelExtSignAutoPage---开始获取取消授权地址");
        CancelExtSignAutoPage autoPage = new CancelExtSignAutoPage(APP_ID,APP_SECRET,V,HOST);
        String cancel_url = autoPage.cancelExtSignAutoPage(customer_id,notify_url,return_url);
        log.info("---cancelExtSignAutoPage---获取取消授权地址成功:{}",cancel_url);
        return cancel_url;
    }

    /**
     * 查询授权结果
     * @param customer_id
     */
    public String  getAuthStatus(String customer_id){
        log.info("---getAuthStatus---开始查询授权:{}",customer_id);
        try {
            GetAuthStatus authStatus = new GetAuthStatus(APP_ID,APP_SECRET,V,HOST);
            String result = authStatus.getAuthStatus(customer_id);
            log.info("---getAuthStatus---查询授权结果:{}",result);
            // {code:"",data:{
            // status:1, 1已授权0未授权
            // authType:1, 1-接口线上授权:调用授权自动签接口完成的授权2-线下管理员授权:线下提交材料人工审核授权
            // transactionNo:124, 接口线上授权时才返
            // contractId:"11" 授权合同编号
            // },msg:""}
            String data = JSON.parseObject(result).getString("data");
            if (StringUtils.isNotBlank(data)){
                String status = JSON.parseObject(data).getString("status");
                log.info("---getAuthStatus---查询授权成功:{}",status);
                return status;
            }
            log.info("---getAuthStatus--查询授权失败:{}",JSON.parseObject(result).getString("msg"));
            return null;
        }catch (Exception e){
            e.printStackTrace();
            log.error("---getAuthStatus---查询授权情况报错:{}",e.getMessage());
        }
        return null;
    }

}

3.注意点:

1.里面定义很多枚举内,需要开发者自主开发。

2.日志可以自行更换。

3.很多异步通知很异步通知需要开发者根据接口文档进行编写。

4.这里引入的配置,需开发者从配置文件中读取。我这里是自己读取一种方式,方法都可写成静态。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
5.1 注册账号 ......................................................................................................................... 7 SDK 使用说明 .................................................................................................................... 8 5.2 获取企业实名认证地址 ................................................................................................. 9 SDK 使用说明 .................................................................................................................. 12 5.3 获取个人实名认证地址 ............................................................................................... 13 SDK 使用说明 .................................................................................................................. 16 5.4 实名证书申请 ............................................................................................................... 16 SDK 使用说明 .................................................................................................................. 17 5.5 印章上传 ....................................................................................................................... 17 SDK 使用说明 .................................................................................................................. 18 5.6 自定义印章 ................................................................................................................... 19 SDK 使用说明 .................................................................................................................. 20 5.7 合同上传 ....................................................................................................................... 20 SDK 使用说明 .................................................................................................................. 21 5.8 模板上传 ....................................................................................................................... 22 SDK 使用说明 ..........................................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

痕0712

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值