EsignHttpUtil.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package com.kingdee.eas.custom.esign.util;
  2. import com.kingdee.eas.custom.esign.tsign.hz.comm.EsignHttpHelper;
  3. import com.kingdee.eas.custom.esign.tsign.hz.comm.EsignHttpResponse;
  4. import com.kingdee.eas.custom.esign.tsign.hz.enums.EsignRequestType;
  5. import com.kingdee.eas.custom.esign.tsign.hz.exception.EsignException;
  6. import org.apache.commons.lang3.StringUtils;
  7. import org.apache.http.client.utils.URIBuilder;
  8. import java.net.MalformedURLException;
  9. import java.net.URI;
  10. import java.net.URISyntaxException;
  11. import java.net.URL;
  12. import java.util.Map;
  13. /**
  14. * description: EsignHttpUtil <br>
  15. * date: 17/11/2025 下午 4:26 <br>
  16. * author: lhbj <br>
  17. * version: 1.0 <br>
  18. */
  19. public class EsignHttpUtil {
  20. /**
  21. * 基础请求接口
  22. *
  23. * @param url 请求地址
  24. * @param jsonParm JSON字符串参数
  25. * @param requestType 请求类型 POST/GET
  26. * @param debug 输出日志
  27. * @return
  28. * @throws EsignException
  29. */
  30. public static EsignHttpResponse doCommHttp(String url, String jsonParm, EsignRequestType requestType, Boolean debug) throws EsignException {
  31. //
  32. //生成签名鉴权方式的的header
  33. Map<String, String> header = EsignHttpHelper.signAndBuildSignAndJsonHeader(EsignConfig.getInstance().getEsignAppId(),
  34. EsignConfig.getInstance().getEsignAppSecret(), jsonParm, requestType.name(), url, debug);
  35. //发起接口请求
  36. return EsignHttpHelper.doCommHttp(EsignConfig.getInstance().getEsignHost(), url, requestType, jsonParm, header, debug);
  37. }
  38. /**
  39. * POST请求接口
  40. *
  41. * @param url 请求地址
  42. * @param jsonParm JSON字符串参数
  43. * @param debug 输出日志
  44. * @return
  45. * @throws EsignException
  46. */
  47. public static EsignHttpResponse POST(String url, String jsonParm, Boolean debug) throws EsignException {
  48. //请求方法
  49. EsignRequestType requestType = EsignRequestType.POST;
  50. return doCommHttp(url, jsonParm, requestType, debug);
  51. }
  52. public static EsignHttpResponse POST(String url, String jsonParm) throws EsignException {
  53. return POST(url, jsonParm, false);
  54. }
  55. /**
  56. * GET请求接口
  57. *
  58. * @param url 请求地址
  59. * @param jsonParm JSON字符串参数
  60. * @param debug 输出日志
  61. * @return
  62. * @throws EsignException
  63. */
  64. public static EsignHttpResponse GET(String url, String jsonParm, Boolean debug) throws EsignException {
  65. //请求方法
  66. EsignRequestType requestType = EsignRequestType.GET;
  67. return doCommHttp(url, jsonParm, requestType, debug);
  68. }
  69. public static EsignHttpResponse GET(String url, String jsonParm) throws EsignException {
  70. return GET(url, jsonParm, false);
  71. }
  72. /**
  73. * 查询合同模板中控件详情
  74. * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/aoq509
  75. * 接口地址:https://{host}/v3/doc-templates/{docTemplateId}
  76. * 请求方法:GET
  77. *
  78. * @return
  79. * @throws EsignException
  80. */
  81. public static EsignHttpResponse getDocTemplatesDetailById(String id) throws EsignException {
  82. String apiaddr = EsignConfig.getInstance().get("docTemplatesDetailById") + id;
  83. String jsonParm = null;
  84. return GET(apiaddr, jsonParm);
  85. }
  86. /**
  87. * 填写模板生成文件
  88. * 参考文档:https://open.esign.cn/doc/opendoc/pdf-sign3/mv8a3i
  89. * 接口地址:https://{host}/v3/files/create-by-doc-template
  90. * 请求方法:POST
  91. *
  92. * @param json 注意事项:componentId与componentKey两个字段不能同时传值,只能一个有值
  93. * @return
  94. * @throws EsignException
  95. */
  96. public static EsignHttpResponse createByDocTemplate(String json) throws EsignException {
  97. String apiaddr = EsignConfig.getInstance().get("createByDocTemplate");
  98. return POST(apiaddr, json);
  99. }
  100. /**
  101. * 查询机构认证信息
  102. * 参考文档:https://open.esign.cn/doc/opendoc/auth3/xxz4tc
  103. * 接口地址:https://{host}/v3/organizations/identity-info
  104. * 请求方法:GET
  105. * 注意事项:
  106. * 入参中orgId、orgName和orgIDCardNum三个参数只选择一个传入即可查询机构认证信息。
  107. * 查询优先级为 orgId > orgName > orgIDCardNum。
  108. *
  109. * @param orgId
  110. * @param orgName
  111. * @param orgIDCardNum
  112. * @param psnIDCardType 组织机构证件类型(传orgIDCardNum时,该参数为必传)
  113. * CRED_ORG_USCC - 统一社会信用代码
  114. * CRED_ORG_REGCODE - 工商注册号
  115. * @return
  116. * @throws EsignException
  117. */
  118. public static EsignHttpResponse getOrgIdentity_info(String orgId, String orgName,String orgIDCardNum,String psnIDCardType) throws EsignException, URISyntaxException {
  119. String apiaddr = EsignConfig.getInstance().get("organizations.identity-info");
  120. if (StringUtils.isBlank(orgId)&&StringUtils.isBlank(orgName)) {
  121. if (StringUtils.isNotBlank(orgIDCardNum)&&StringUtils.isBlank(psnIDCardType)) {
  122. throw new EsignException("传orgIDCardNum时,psnIDCardType参数为必传");
  123. }else {
  124. throw new EsignException("orgId与orgName与orgIDCardNum不能都为空");
  125. }
  126. }
  127. URIBuilder uriBuilder = new URIBuilder(apiaddr);
  128. if (StringUtils.isNotBlank(orgId)) {
  129. uriBuilder.addParameter("orgId", orgId);
  130. }
  131. if (StringUtils.isNotBlank(orgName)) {
  132. uriBuilder.addParameter("orgName", orgName);
  133. }
  134. if (StringUtils.isNotBlank(orgIDCardNum)&&StringUtils.isNotBlank(psnIDCardType)) {
  135. uriBuilder.addParameter("orgIDCardNum", orgIDCardNum);
  136. uriBuilder.addParameter("psnIDCardType", psnIDCardType);
  137. }
  138. URI uri = uriBuilder.build(); // 自动编码
  139. apiaddr = uri.toString();
  140. return GET(apiaddr, null);
  141. }
  142. /**
  143. * 查询个人认证信息
  144. * 参考文档:https://open.esign.cn/doc/opendoc/auth3/xxz4tc
  145. * 接口地址:https://{host}/v3/persons/identity-info
  146. * 请求方法:GET
  147. * 注意事项:
  148. * 入参中psnId、psnAccount和psnIDCardNum三个参数只选择一个传入即可查询个人的认证信息。
  149. * 查询优先级为 psnId > psnAccount > psnIDCardNum
  150. * @param psnId
  151. * @param psnAccount
  152. * @param psnIDCardNum
  153. * @param psnIDCardType 个人证件号类型 (传psnIDCardNum时,证件类型为必传项)
  154. * CRED_PSN_CH_IDCARD - 中国大陆居民身份证
  155. * CRED_PSN_CH_HONGKONG - 香港来往大陆通行证
  156. * CRED_PSN_CH_MACAO - 澳门来往大陆通行证
  157. * CRED_PSN_CH_TWCARD - 台湾来往大陆通行证
  158. * CRED_PSN_PASSPORT - 护照
  159. * @return
  160. * @throws EsignException
  161. */
  162. public static EsignHttpResponse getPersonIdentity_info(String psnId, String psnAccount,String psnIDCardNum,String psnIDCardType) throws EsignException, URISyntaxException {
  163. String apiaddr = EsignConfig.getInstance().get("persons.identity-info");
  164. if (StringUtils.isBlank(psnId)&&StringUtils.isBlank(psnAccount)) {
  165. if (StringUtils.isNotBlank(psnIDCardNum)&&StringUtils.isBlank(psnIDCardType)) {
  166. throw new EsignException("传orgIDCardNum时,psnIDCardType参数为必传");
  167. }else {
  168. throw new EsignException("orgId与orgName与orgIDCardNum不能都为空");
  169. }
  170. }
  171. URIBuilder uriBuilder = new URIBuilder(apiaddr);
  172. if (StringUtils.isNotBlank(psnId)) {
  173. uriBuilder.addParameter("psnId", psnId);
  174. }
  175. if (StringUtils.isNotBlank(psnAccount)) {
  176. uriBuilder.addParameter("psnAccount", psnAccount);
  177. }
  178. if (StringUtils.isNotBlank(psnIDCardNum)&&StringUtils.isNotBlank(psnIDCardType)) {
  179. uriBuilder.addParameter("orgIDCardNum", psnIDCardNum);
  180. uriBuilder.addParameter("psnIDCardType", psnIDCardType);
  181. }
  182. URI uri = uriBuilder.build(); // 自动编码
  183. apiaddr = uri.toString();
  184. return GET(apiaddr, null);
  185. }
  186. }