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.util.Date;
import java.util.IdentityHashMap;
import java.util.Map;
/**
*
* - 项目名称 : 后台服务
* - 文件名称 : JzqHttpApiTest
* - 创建时间 : 2019/8/23 9:14
* - 描 述 : 用于jzq的api服请求
*
*
* @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 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(){
initParams();
try {
Map 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 businessimg
* @param notifyUrl
* @return
*/
public boolean organizationCreate (String fullname,String creditCode,String legalName,String email,File businessimg,String notifyUrl){
try {
initParams();
Map 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);
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 businessimg
* @param notifyUrl
* @return
*/
public boolean organizationReApply(String fullname,String creditCode,String legalName,String email,File businessimg,String notifyUrl){
try {
initParams();
Map 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);
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;
}
/**
* 查询企业签约状态 审批状态,0正在申请1通过2驳回
* @param email
* @return
*/
public int organizationAuditStatus (String email){
try {
initParams();
Map 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 file
* @param fullname
* @param creditCoe
* @param email
* @param postionJson
*/
public String applySign(String name,File file,String fullname,String creditCoe,String email,String postionJson){
try {
String url=SERVICE_URL+"/v2/sign/applySign";
initParams();
Map params=bodyParams;
params.put("contractName",name); //合同名称
params.put("serverCa",1); //使用云证书
params.put("file",file);
params.put("dealType",5); //指定合同文件签署方式 5 为部分自动签
params.put("positionType",0); //指定通过表单域方式设置签字位置
params.put("fileType",0);
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.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 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 {
initParams();
Map 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;
}
}