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();
|
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",ts);
|
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 {
|
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 ;
|
}
|
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 {
|
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){
|
try {
|
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",1); //指定通过表单域方式设置签字位置
|
params.put("fileType",1);
|
params.put("needQifengSign",1);
|
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(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 {
|
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 linkFile(String applyNo) {
|
|
try {
|
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 {
|
File signImgFile = new File(new URI(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 {
|
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;
|
}
|
|
}
|