package com.doumee.service.business.third; 
 | 
  
 | 
import cn.emay.sdk.client.SmsSDKClient; 
 | 
import cn.emay.sdk.util.exception.SDKParamsException; 
 | 
import com.alibaba.fastjson.JSONArray; 
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.doumee.biz.system.SystemDictDataBiz; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.dao.business.model.InterfaceLog; 
 | 
import com.doumee.service.business.InterfaceLogService; 
 | 
import com.jzq.JzqHttpApiTool; 
 | 
import com.jzq.common.ResultInfo; 
 | 
import com.jzq.common.bean.sign.SignatoryReq; 
 | 
import com.jzq.common.http.HttpClientUtils; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.codec.digest.DigestUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import javax.annotation.PostConstruct; 
 | 
import java.io.File; 
 | 
import java.io.FileOutputStream; 
 | 
import java.io.InputStream; 
 | 
import java.io.OutputStream; 
 | 
import java.net.URI; 
 | 
import java.net.URL; 
 | 
import java.util.Date; 
 | 
import java.util.IdentityHashMap; 
 | 
import java.util.Map; 
 | 
import java.util.UUID; 
 | 
  
 | 
/** 
 | 
 * <ul> 
 | 
 * <li>项目名称 : 后台服务</li> 
 | 
 * <li>文件名称 : JzqHttpApiTest</li> 
 | 
 * <li>创建时间 : 2019/8/23 9:14</li> 
 | 
 * <li>描 述 :  用于jzq的api服请求 
 | 
 * </ul> 
 | 
 * 
 | 
 * @author yfx 
 | 
 * @title 用于jzq的api服请求 
 | 
 */ 
 | 
@Slf4j 
 | 
@Service 
 | 
public class SignService { 
 | 
    /** 
 | 
     * 君子签测试环境key和接口地址: 
 | 
     * appKey:dcb4bd535a09df3c 
 | 
     * appSecret:b87c346edcb4bd535a09df3ca8c45d9a 
 | 
     * services_url:https://api.sandbox.junziqian.com 
 | 
     * 开发文档: https://s.junziqian.com/api_doc/index.html 
 | 
     */ 
 | 
    private static String SERVICE_URL="https://api.sandbox.junziqian.com"; 
 | 
    private static  String APP_KEY="dcb4bd535a09df3c"; 
 | 
    private static  String APP_SECRET="b87c346edcb4bd535a09df3ca8c45d9a"; 
 | 
  
 | 
    @Autowired 
 | 
    private SystemDictDataBiz systemDictDataBiz; 
 | 
    @PostConstruct//启动初始化 
 | 
    public int initClient(){ 
 | 
        SERVICE_URL = systemDictDataBiz.queryByCode(Constants.SIGN,Constants.SIGN_URL).getCode(); 
 | 
        APP_KEY = systemDictDataBiz.queryByCode(Constants.SIGN,Constants.SIGN_APPKEY).getCode(); 
 | 
        APP_SECRET = systemDictDataBiz.queryByCode(Constants.SIGN,Constants.SIGN_APPSECRET).getCode(); 
 | 
        initParams(); 
 | 
        return 0; 
 | 
    } 
 | 
    //请求的body内参数 
 | 
    private static  Map<String, Object> bodyParams; 
 | 
    @Autowired 
 | 
    public InterfaceLogService interfaceLogService = null; 
 | 
    private   void saveInterfaceLog(String path,String name,String req ,String res) { 
 | 
        if(interfaceLogService !=null){ 
 | 
            InterfaceLog hkMonitoryLogDO=new InterfaceLog(); 
 | 
            hkMonitoryLogDO.setType(0); 
 | 
            hkMonitoryLogDO.setCreateDate(new Date()); 
 | 
            hkMonitoryLogDO.setIsdeleted(0); 
 | 
            hkMonitoryLogDO.setRequest(req); 
 | 
            hkMonitoryLogDO.setRepose(res); 
 | 
            hkMonitoryLogDO.setName(name); 
 | 
            hkMonitoryLogDO.setUrl(path); 
 | 
            interfaceLogService.create(hkMonitoryLogDO); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void initParams(){ 
 | 
        long ts=System.currentTimeMillis()/1000; 
 | 
        String nonce=DigestUtils.md5Hex(System.currentTimeMillis()+""); 
 | 
        String sign=DigestUtils.sha256Hex("nonce"+nonce+"ts"+ts+"app_key"+APP_KEY+"app_secret"+APP_SECRET); 
 | 
        bodyParams=new IdentityHashMap<>(); 
 | 
        bodyParams.put("ts",System.currentTimeMillis()/1000); 
 | 
        bodyParams.put("app_key",APP_KEY); 
 | 
        bodyParams.put("sign",sign); 
 | 
        bodyParams.put("nonce",nonce);//这只只是为了生成一个随机值 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 1.ping服务 
 | 
     */ 
 | 
    public boolean ping(){ 
 | 
        try { 
 | 
            Map<String, Object>  params=bodyParams; 
 | 
            String url=SERVICE_URL+"/v2/ping"; 
 | 
            //所有参数装入了body中 
 | 
            String str= HttpClientUtils.init().getPost(url,null,params,false); 
 | 
            log.info("返回结果为:"+str); 
 | 
            ResultInfo ri= JSONObject.parseObject(str,ResultInfo.class); 
 | 
            saveInterfaceLog(url,"【电子签】ping服务",JSONObject.toJSONString(params),str); 
 | 
            return ri.isSuccess(); 
 | 
        }catch (Exception e){ 
 | 
  
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 发起企业认证申请 
 | 
     * @param fullname 
 | 
     * @param creditCode 
 | 
     * @param legalName 
 | 
     * @param email 
 | 
     * @param businessimgPath 
 | 
     * @param notifyUrl 
 | 
     * @return 
 | 
     */ 
 | 
    public boolean organizationCreate (String fullname,String creditCode,String legalName,String email,String businessimgPath, String notifyUrl){ 
 | 
        try { 
 | 
            initParams(); 
 | 
            File  businessimg =netFileToLoclFile(businessimgPath); 
 | 
            if(businessimg == null || !businessimg.isFile() || !businessimg.exists()){ 
 | 
                return false; 
 | 
            } 
 | 
            Map<String, Object>  params=bodyParams; 
 | 
            String url=SERVICE_URL+"/v2/user/organizationCreate"; 
 | 
            params.put("name",fullname); 
 | 
            params.put("identificationType",1); 
 | 
            params.put("organizationRegNo",creditCode); 
 | 
            params.put("organizationType",0); 
 | 
            params.put("organizationCode",creditCode); 
 | 
            params.put("organizationRegImg",businessimg); 
 | 
            params.put("notifyUrl",notifyUrl); 
 | 
            params.put("legalName",legalName); 
 | 
            params.put("emailOrMobile",email); 
 | 
            String str= HttpClientUtils.init().getPost(url,null,params,true); 
 | 
            businessimg.delete(); 
 | 
            saveInterfaceLog(url,"【电子签】发起企业认证申请",JSONObject.toJSONString(params),str); 
 | 
            JSONObject json = JSONObject.parseObject(str); 
 | 
            if(json!=null && json.getBoolean("success")){ 
 | 
                return  true; 
 | 
            } 
 | 
            System.out.println(str); 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return false; 
 | 
  
 | 
    } 
 | 
    /** 
 | 
     *重新发起企业认证申请 
 | 
     * @param fullname 
 | 
     * @param creditCode 
 | 
     * @param legalName 
 | 
     * @param email 
 | 
     * @param businessimgPath 
 | 
     * @param notifyUrl 
 | 
     * @return 
 | 
     */ 
 | 
    public boolean organizationReApply(String fullname,String creditCode,String legalName,String email,String businessimgPath,String notifyUrl){ 
 | 
        try { 
 | 
  
 | 
            File  businessimg = new File(new URI(businessimgPath)); 
 | 
            if(businessimg == null|| !businessimg.isFile() || !businessimg.exists()){ 
 | 
                return false ; 
 | 
            } 
 | 
            initParams(); 
 | 
            Map<String, Object>  params=bodyParams; 
 | 
            String url=SERVICE_URL+"/v2/user/organizationReapply"; 
 | 
            params.put("name",fullname); 
 | 
            params.put("identificationType",1); 
 | 
            params.put("organizationRegNo",creditCode); 
 | 
            params.put("organizationType",0); 
 | 
            params.put("organizationCode",creditCode); 
 | 
            params.put("organizationRegImg",businessimg); 
 | 
            params.put("notifyUrl",notifyUrl); 
 | 
            params.put("legalName",legalName); 
 | 
            params.put("emailOrMobile",email); 
 | 
            String str= HttpClientUtils.init().getPost(url,null,params,true); 
 | 
            businessimg.delete(); 
 | 
            saveInterfaceLog(url,"【电子签】重新发起企业认证申请",JSONObject.toJSONString(params),str); 
 | 
            JSONObject json = JSONObject.parseObject(str); 
 | 
            if(json!=null && json.getBoolean("success")){ 
 | 
                return  true; 
 | 
            } 
 | 
            System.out.println(str); 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return false; 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 网络文件转本地临时文件 
 | 
     * @param fileUrl 
 | 
     * @return 
 | 
     */ 
 | 
    public static File netFileToLoclFile(String fileUrl)  { 
 | 
  
 | 
        try { 
 | 
            URL url = new URL(fileUrl); 
 | 
            InputStream inputStream = url.openConnection().getInputStream(); 
 | 
  
 | 
            File file = File.createTempFile( "temp",""+UUID.randomUUID().toString()+fileUrl.substring(fileUrl.lastIndexOf("."))); // 指定保存到本地的文件名及路径 
 | 
            OutputStream outputStream = new FileOutputStream(file); 
 | 
            byte[] buffer = new byte[1024]; 
 | 
            int bytesRead; 
 | 
            while ((bytesRead = inputStream.read(buffer)) != -1) { 
 | 
                outputStream.write(buffer, 0, bytesRead); 
 | 
            } 
 | 
  
 | 
            outputStream.close(); 
 | 
            inputStream.close(); 
 | 
            return file; 
 | 
        }catch (Exception e){ 
 | 
  
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
    /** 
 | 
     * 查询企业签约状态 审批状态,0正在申请1通过2驳回 
 | 
     * @param email 
 | 
     * @return 
 | 
     */ 
 | 
    public int  organizationAuditStatus (String email){ 
 | 
        try { 
 | 
            initParams(); 
 | 
            Map<String, Object>  params=bodyParams; 
 | 
            String url=SERVICE_URL+"/v2/user/organizationAuditStatus"; 
 | 
            params.put("emailOrMobile",email); 
 | 
            String str= HttpClientUtils.init().getPost(url,null,params,true); 
 | 
            System.out.println(str); 
 | 
            saveInterfaceLog(url,"【电子签】查询企业签约状态",JSONObject.toJSONString(params),str); 
 | 
            JSONObject json = JSONObject.parseObject(str); 
 | 
            if(json!=null && json.getBoolean("success")){ 
 | 
                return  json.getJSONObject("data").getIntValue("status"); 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return  -1;//查询失败 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 发起签约 
 | 
     * @param name 
 | 
     * @param fileUrl 
 | 
     * @param fullname 
 | 
     * @param creditCoe 
 | 
     * @param email 
 | 
     * @param postionJson 
 | 
     */ 
 | 
    public String applySign(String name,String fileUrl,String fullname,String creditCoe,String email,String postionJson,String singId,String notifyUrl){ 
 | 
      try { 
 | 
          initParams(); 
 | 
          String url=SERVICE_URL+"/v2/sign/applySign"; 
 | 
          Map<String, Object>  params=bodyParams; 
 | 
          params.put("contractName",name); //合同名称 
 | 
          params.put("serverCa",1); //使用云证书 
 | 
//          params.put("file",file); 
 | 
          params.put("url",fileUrl); 
 | 
          params.put("dealType",5); //指定合同文件签署方式 5 为部分自动签 
 | 
          params.put("positionType",2); //指定通过表单域方式设置签字位置 
 | 
          params.put("fileType",1); 
 | 
          params.put("needQifengSign",1); 
 | 
          params.put("notifyUrl",notifyUrl); 
 | 
          JSONArray signatories=new JSONArray(); 
 | 
          SignatoryReq sReq=new SignatoryReq(); 
 | 
          sReq.setFullName(fullname); //企业姓名 
 | 
          sReq.setIdentityType(11); //证件类型 
 | 
          sReq.setIdentityCard(creditCoe);//营业执照号 
 | 
          sReq.setEmail(email); //在君子签注册认证的邮箱 
 | 
//        sReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.12,\"offsetY\":0.23}]},{\"page\":1,\"chaptes\":[{\"offsetX\":0.45,\"offsetY\":0.67}]}]"); 
 | 
//          sReq.setChapteJson(postionJson); 
 | 
          sReq.setSearchKey(postionJson); 
 | 
          sReq.setSignId(singId); 
 | 
          sReq.setNoNeedVerify(1); 
 | 
          signatories.add(sReq); 
 | 
          params.put("signatories",signatories.toJSONString()); 
 | 
          System.out.println("================"+JSONObject.toJSONString(params)); 
 | 
          String str= HttpClientUtils.init().getPost(url,null,params,true); 
 | 
          System.out.println(str); 
 | 
          saveInterfaceLog(url,"【电子签】发起签约",JSONObject.toJSONString(params),str); 
 | 
          JSONObject json = JSONObject.parseObject(str); 
 | 
          if(json!=null && json.getBoolean("success")){ 
 | 
              return  json.getString("data"); 
 | 
          } 
 | 
      }catch (Exception e){ 
 | 
  
 | 
      } 
 | 
      return null; 
 | 
  
 | 
    } 
 | 
    /** 
 | 
     * 发起签约 
 | 
     * @param name 
 | 
     * @param fileUrl 
 | 
     * @param file 
 | 
     * @param creditCoe 
 | 
     * @param email 
 | 
     * @param postionJson 
 | 
     */ 
 | 
    public String applySignLocalFile(String name,String fullname,String file,String creditCoe,String email,String postionJson,String singId,String notifyUrl){ 
 | 
      try {    initParams(); 
 | 
          String url=SERVICE_URL+"/v2/sign/applySign"; 
 | 
          Map<String, Object>  params=bodyParams; 
 | 
          params.put("contractName",name); //合同名称 
 | 
          params.put("serverCa",1); //使用云证书 
 | 
          params.put("file",new File(file)); 
 | 
          params.put("dealType",5); //指定合同文件签署方式 5 为部分自动签 
 | 
          params.put("positionType",2); //指定通过表单域方式设置签字位置 
 | 
          params.put("fileType",0); 
 | 
          params.put("needQifengSign",1); 
 | 
          params.put("notifyUrl",notifyUrl); 
 | 
          JSONArray signatories=new JSONArray(); 
 | 
          SignatoryReq sReq=new SignatoryReq(); 
 | 
          sReq.setFullName(fullname); //企业姓名 
 | 
          sReq.setIdentityType(11); //证件类型 
 | 
          sReq.setIdentityCard(creditCoe);//营业执照号 
 | 
          sReq.setEmail(email); //在君子签注册认证的邮箱 
 | 
//        sReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.12,\"offsetY\":0.23}]},{\"page\":1,\"chaptes\":[{\"offsetX\":0.45,\"offsetY\":0.67}]}]"); 
 | 
//          sReq.setChapteJson(postionJson); 
 | 
          sReq.setSearchKey(postionJson); 
 | 
          sReq.setSignId(singId); 
 | 
          sReq.setSearchConvertExtend("{\"fixX\":-80,\"fixY\":-80}"); 
 | 
          sReq.setNoNeedVerify(1); 
 | 
          signatories.add(sReq); 
 | 
          params.put("signatories",signatories.toJSONString()); 
 | 
          System.out.println(signatories.toJSONString()); 
 | 
          String str= HttpClientUtils.init().getPost(url,null,params,true); 
 | 
          System.out.println(str); 
 | 
          saveInterfaceLog(url,"【电子签】发起签约",JSONObject.toJSONString(params),str); 
 | 
          JSONObject json = JSONObject.parseObject(str); 
 | 
          if(json!=null && json.getBoolean("success")){ 
 | 
              return  json.getString("data"); 
 | 
          } 
 | 
      }catch (Exception e){ 
 | 
  
 | 
      } 
 | 
      return null; 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 获取签署链接地址(签署页面地址) 
 | 
     * @param applyNo 
 | 
     * @param name 
 | 
     * @param creditCode 
 | 
     */ 
 | 
    public String signLink(String applyNo,String name,String creditCode) { 
 | 
        try {    initParams(); 
 | 
            Map<String, Object> params = bodyParams; 
 | 
            String url = SERVICE_URL + "/v2/sign/link"; 
 | 
            params.put("applyNo",applyNo); //发起合同签署接口返回的APL编号 
 | 
            params.put("fullName",name); //发起合同签署接口需要手动签署对象的姓名 
 | 
            params.put("identityCard",creditCode); //发起合同签署接口中需要手动签署对象的证件号 
 | 
            params.put("identityType",11); //证件类型,个人1 ,企业11 
 | 
            String str= HttpClientUtils.init().getPost(url,null,params,true); 
 | 
            System.out.println(str); 
 | 
            saveInterfaceLog(url,"【电子签】获取签署链接地址",JSONObject.toJSONString(params),str); 
 | 
            JSONObject json = JSONObject.parseObject(str); 
 | 
            if(json!=null && json.getBoolean("success")){ 
 | 
                return  json.getString("data"); 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    /** 
 | 
     * 获取签署链接地址(返回文件地址,签署后才是文件地址,否则跳转到签署页面) 
 | 
     * @param applyNo 
 | 
     */ 
 | 
    public String  linkFileStatus(String applyNo) { 
 | 
  
 | 
        try {    initParams(); 
 | 
            Map<String, Object> params = bodyParams; 
 | 
            String url = SERVICE_URL + "/v2/sign/status"; 
 | 
            //构建请求参数 
 | 
            params.put("applyNo",applyNo); //发起合同签署接口返回的APL编号 
 | 
//            params.put("fullName",fullName); //签约人名称 
 | 
//            params.put("identityCard",identityCard); //签约人证件号 
 | 
//            params.put("identityType",12); //证件类型 1身份证, 2护照, 3台胞证, 4港澳居民来往内地通行证, 11营业执照, 12统一社会信用代码, 20子账号, 99其他 
 | 
            String str= HttpClientUtils.init().getPost(url,null,params,true); 
 | 
            System.out.println(str); 
 | 
            saveInterfaceLog(url,"【电子签】签约状态查询",JSONObject.toJSONString(params),str); 
 | 
            JSONObject json = JSONObject.parseObject(str); 
 | 
            if(json!=null && json.getBoolean("success")){ 
 | 
                //0 :未签 1 :已签 2:拒签 3:已保全 
 | 
                return  json.getString("data"); 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    /** 
 | 
     * 获取签署链接地址(返回文件地址,签署后才是文件地址,否则跳转到签署页面) 
 | 
     * @param applyNo 
 | 
     */ 
 | 
    public String  linkFile(String applyNo) { 
 | 
  
 | 
        try {    initParams(); 
 | 
            Map<String, Object> params = bodyParams; 
 | 
            String url = SERVICE_URL + "/v2/sign/linkFile"; 
 | 
            //构建请求参数 
 | 
            params.put("applyNo",applyNo); //发起合同签署接口返回的APL编号 
 | 
            String str= HttpClientUtils.init().getPost(url,null,params,true); 
 | 
            System.out.println(str); 
 | 
            saveInterfaceLog(url,"【电子签】获取签署链接地址",JSONObject.toJSONString(params),str); 
 | 
            JSONObject json = JSONObject.parseObject(str); 
 | 
            if(json!=null && json.getBoolean("success")){ 
 | 
                return  json.getString("data"); 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    /** 
 | 
     * 上传企业自定义印章(返回印章ID) 
 | 
     * @param signName 
 | 
     * @param path 
 | 
     */ 
 | 
    public String  uploadEntSign(String signName,String path,String email ) { 
 | 
  
 | 
        try {    initParams(); 
 | 
            File signImgFile =netFileToLoclFile(path); 
 | 
            Map<String, Object> params = bodyParams; 
 | 
            String url = SERVICE_URL + "/v2/user/uploadEntSign"; 
 | 
            //构建请求参数 
 | 
            params.put("signName",signName); 
 | 
            params.put("signImgFile",signImgFile); 
 | 
            params.put("email",email); 
 | 
            String str= HttpClientUtils.init().getPost(url,null,params,true); 
 | 
            System.out.println(str); 
 | 
            saveInterfaceLog(url,"【电子签】上传企业自定义印章",JSONObject.toJSONString(params),str); 
 | 
            JSONObject json = JSONObject.parseObject(str); 
 | 
            if(json!=null && json.getBoolean("success")){ 
 | 
                return  json.getString("data"); 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    /** 
 | 
     * 删除企业自定义印章 
 | 
     * @param signId 
 | 
     */ 
 | 
    public boolean  deleteEntSign(String signId ) { 
 | 
  
 | 
        try {    initParams(); 
 | 
            Map<String, Object> params = bodyParams; 
 | 
            String url = SERVICE_URL + "/v2/user/deleteEntSign"; 
 | 
            //构建请求参数 
 | 
            params.put("signId",signId); 
 | 
            String str= HttpClientUtils.init().getPost(url,null,params,true); 
 | 
            System.out.println(str); 
 | 
            saveInterfaceLog(url,"【电子签】删除企业自定义印章",JSONObject.toJSONString(params),str); 
 | 
            JSONObject json = JSONObject.parseObject(str); 
 | 
            if(json!=null && json.getBoolean("success")){ 
 | 
                return  json.getBoolean("success"); 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return  false; 
 | 
    } 
 | 
  
 | 
} 
 |