package com.kingdee.eas.custom.esign.util; import com.kingdee.eas.custom.esign.tsign.hz.comm.EsignHttpHelper; import com.kingdee.eas.custom.esign.tsign.hz.comm.EsignHttpResponse; import com.kingdee.eas.custom.esign.tsign.hz.enums.EsignRequestType; import com.kingdee.eas.custom.esign.tsign.hz.exception.EsignException; import org.apache.commons.lang3.StringUtils; import org.apache.http.client.utils.URIBuilder; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.Map; /** * description: EsignHttpUtil
* date: 17/11/2025 下午 4:26
* author: lhbj
* version: 1.0
*/ public class EsignHttpUtil { /** * 基础请求接口 * * @param url 请求地址 * @param jsonParm JSON字符串参数 * @param requestType 请求类型 POST/GET * @param debug 输出日志 * @return * @throws EsignException */ public static EsignHttpResponse doCommHttp(String url, String jsonParm, EsignRequestType requestType, Boolean debug) throws EsignException { // //生成签名鉴权方式的的header Map header = EsignHttpHelper.signAndBuildSignAndJsonHeader(EsignConfig.getInstance().getEsignAppId(), EsignConfig.getInstance().getEsignAppSecret(), jsonParm, requestType.name(), url, debug); //发起接口请求 return EsignHttpHelper.doCommHttp(EsignConfig.getInstance().getEsignHost(), url, requestType, jsonParm, header, debug); } /** * POST请求接口 * * @param url 请求地址 * @param jsonParm JSON字符串参数 * @param debug 输出日志 * @return * @throws EsignException */ public static EsignHttpResponse POST(String url, String jsonParm, Boolean debug) throws EsignException { //请求方法 EsignRequestType requestType = EsignRequestType.POST; return doCommHttp(url, jsonParm, requestType, debug); } public static EsignHttpResponse POST(String url, String jsonParm) throws EsignException { return POST(url, jsonParm, false); } /** * GET请求接口 * * @param url 请求地址 * @param jsonParm JSON字符串参数 * @param debug 输出日志 * @return * @throws EsignException */ public static EsignHttpResponse GET(String url, String jsonParm, Boolean debug) throws EsignException { //请求方法 EsignRequestType requestType = EsignRequestType.GET; return doCommHttp(url, jsonParm, requestType, debug); } public static EsignHttpResponse GET(String url, String jsonParm) throws EsignException { return GET(url, jsonParm, false); } /** * 查询合同模板中控件详情 * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/aoq509 * 接口地址:https://{host}/v3/doc-templates/{docTemplateId} * 请求方法:GET * * @return * @throws EsignException */ public static EsignHttpResponse getDocTemplatesDetailById(String id) throws EsignException { String apiaddr = EsignConfig.getInstance().get("docTemplatesDetailById") + id; String jsonParm = null; return GET(apiaddr, jsonParm); } /** * 填写模板生成文件 * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/mv8a3i * 接口地址:https://{host}/v3/files/create-by-doc-template * 请求方法:POST * * @param json 注意事项:componentId与componentKey两个字段不能同时传值,只能一个有值 * @return * @throws EsignException */ public static EsignHttpResponse createByDocTemplate(String json) throws EsignException { String apiaddr = EsignConfig.getInstance().get("createByDocTemplate"); return POST(apiaddr, json); } /** * 查询机构认证信息 * 参考文档:https://open.esign.cn/doc/opendoc/auth3/xxz4tc * 接口地址:https://{host}/v3/organizations/identity-info * 请求方法:GET * 注意事项: * 入参中orgId、orgName和orgIDCardNum三个参数只选择一个传入即可查询机构认证信息。 * 查询优先级为 orgId > orgName > orgIDCardNum。 * * @param orgId * @param orgName * @param orgIDCardNum * @param psnIDCardType 组织机构证件类型(传orgIDCardNum时,该参数为必传) * CRED_ORG_USCC - 统一社会信用代码 * CRED_ORG_REGCODE - 工商注册号 * @return * @throws EsignException */ public static EsignHttpResponse getOrgIdentity_info(String orgId, String orgName,String orgIDCardNum,String psnIDCardType) throws EsignException, URISyntaxException { String apiaddr = EsignConfig.getInstance().get("organizations.identity-info"); if (StringUtils.isBlank(orgId)&&StringUtils.isBlank(orgName)) { if (StringUtils.isNotBlank(orgIDCardNum)&&StringUtils.isBlank(psnIDCardType)) { throw new EsignException("传orgIDCardNum时,psnIDCardType参数为必传"); }else { throw new EsignException("orgId与orgName与orgIDCardNum不能都为空"); } } URIBuilder uriBuilder = new URIBuilder(apiaddr); if (StringUtils.isNotBlank(orgId)) { uriBuilder.addParameter("orgId", orgId); } if (StringUtils.isNotBlank(orgName)) { uriBuilder.addParameter("orgName", orgName); } if (StringUtils.isNotBlank(orgIDCardNum)&&StringUtils.isNotBlank(psnIDCardType)) { uriBuilder.addParameter("orgIDCardNum", orgIDCardNum); uriBuilder.addParameter("psnIDCardType", psnIDCardType); } URI uri = uriBuilder.build(); // 自动编码 apiaddr = uri.toString(); return GET(apiaddr, null); } /** * 查询个人认证信息 * 参考文档:https://open.esign.cn/doc/opendoc/auth3/xxz4tc * 接口地址:https://{host}/v3/persons/identity-info * 请求方法:GET * 注意事项: * 入参中psnId、psnAccount和psnIDCardNum三个参数只选择一个传入即可查询个人的认证信息。 * 查询优先级为 psnId > psnAccount > psnIDCardNum * @param psnId * @param psnAccount * @param psnIDCardNum * @param psnIDCardType 个人证件号类型 (传psnIDCardNum时,证件类型为必传项) * CRED_PSN_CH_IDCARD - 中国大陆居民身份证 * CRED_PSN_CH_HONGKONG - 香港来往大陆通行证 * CRED_PSN_CH_MACAO - 澳门来往大陆通行证 * CRED_PSN_CH_TWCARD - 台湾来往大陆通行证 * CRED_PSN_PASSPORT - 护照 * @return * @throws EsignException */ public static EsignHttpResponse getPersonIdentity_info(String psnId, String psnAccount,String psnIDCardNum,String psnIDCardType) throws EsignException, URISyntaxException { String apiaddr = EsignConfig.getInstance().get("persons.identity-info"); if (StringUtils.isBlank(psnId)&&StringUtils.isBlank(psnAccount)) { if (StringUtils.isNotBlank(psnIDCardNum)&&StringUtils.isBlank(psnIDCardType)) { throw new EsignException("传orgIDCardNum时,psnIDCardType参数为必传"); }else { throw new EsignException("orgId与orgName与orgIDCardNum不能都为空"); } } URIBuilder uriBuilder = new URIBuilder(apiaddr); if (StringUtils.isNotBlank(psnId)) { uriBuilder.addParameter("psnId", psnId); } if (StringUtils.isNotBlank(psnAccount)) { uriBuilder.addParameter("psnAccount", psnAccount); } if (StringUtils.isNotBlank(psnIDCardNum)&&StringUtils.isNotBlank(psnIDCardType)) { uriBuilder.addParameter("orgIDCardNum", psnIDCardNum); uriBuilder.addParameter("psnIDCardType", psnIDCardType); } URI uri = uriBuilder.build(); // 自动编码 apiaddr = uri.toString(); return GET(apiaddr, null); } }