Commit 2517cf22 by 王昆

gsb

parent d7af117a
...@@ -872,6 +872,95 @@ class EcontractApi { ...@@ -872,6 +872,95 @@ class EcontractApi {
} }
} }
async autoSignPersonalTwo(pobj) {
// 处理参数
var param = {
ecid: this.trim(pobj.ecid),
appId: this.trim(pobj.appId),
userId: this.trim(pobj.userId),
idName: this.trim(pobj.idName),
idNo: this.trim(pobj.idNo),
nonceStr: this.trim(pobj.nonceStr),
sign: this.trim(pobj.sign)
};
if (!param.ecid) {
return this.returnjson(-1, "请传入薪必果提供的ecid")
}
if (!param.appId) {
return this.returnjson(-1, "请传入薪必果提供的appId")
}
if (!param.userId) {
return this.returnjson(-1, "请提供该用户的userId")
}
if (!param.idName) {
return this.returnjson(-1, "请提供该用户姓名")
}
if (!param.idNo) {
return this.returnjson(-1, "请提供该用户身份证号")
}
if (!await this.idcardClient.checkIDCard(param.idNo)) {
return this.returnjson(-1, "身份证格式不正确");
}
let busiIds = await this.etemplatebusiSve.busiIdsByTemplateId(param.ecid);
let num = await this.esettleSve.isValidAge(busiIds);
if(num) {
let card = await this.idcardClient.cardInfo(param.idNo);
let age = card.age || 0;
if(!age) {
return this.returnjson(-1, "身份证号格式错误, 只支持18位身份证号码");
}
if(card.sex == 'male') {
if (age < 18 || age > 60) {
return this.returnjson(-1, "签约失败,男限制18-60岁之间")
}
} else {
if (age < 18 || age > 55) {
return this.returnjson(-1, "签约失败,女限制18-55岁之间")
}
}
}
if (!param.nonceStr) {
return this.returnjson(-1, "请提供随机码")
}
// 查appId关联key
var busi = await this.ecompanybusiSve.findOne({
appId: param.appId
});
if (!busi || !busi.key) {
return this.returnjson(1001003, "配置信息错误,请联系薪必果人员进行配置");
}
// 签名
var signArr = [];
var keys = Object.keys(param).sort();
for (var i = 0; i < keys.length; i++) {
var k = keys[i];
var v = param[k];
if (!k || !v || k == 'sign') {
continue;
}
signArr.push(k + "=" + v);
}
var signStr = signArr.join("&") + "&key=" + busi.key;
var sign = md5(signStr).toUpperCase();
console.log(signStr, sign);
if (param.sign != sign) {
return this.returnjson(1001001, "签名错误");
}
try {
var result = await this.econtractSve.autoSignPersonalTwo(param);
return result;
} catch (error) {
console.log(error);
}
}
async formateTime(inputTime) { async formateTime(inputTime) {
if (!inputTime) { if (!inputTime) {
return ''; return '';
......
...@@ -4,7 +4,7 @@ const crypto = require('crypto'); ...@@ -4,7 +4,7 @@ const crypto = require('crypto');
const cryptoJS = require("crypto-js"); const cryptoJS = require("crypto-js");
const querystring = require('querystring'); const querystring = require('querystring');
const logCtl = System.getObject("web.oplogCtl"); const logCtl = System.getObject("web.oplogCtl");
const fs=require("fs"); const fs = require("fs");
const xlsx = require('node-xlsx') const xlsx = require('node-xlsx')
var moment = require('moment') var moment = require('moment')
class TestApi { class TestApi {
...@@ -12,6 +12,11 @@ class TestApi { ...@@ -12,6 +12,11 @@ class TestApi {
this.utilesignbaoSve = System.getObject("service.utilesignbaoSve"); this.utilesignbaoSve = System.getObject("service.utilesignbaoSve");
} }
async personTwo() {
let rs = await this.utilesignbaoSve.personTwo({name: "王昆", "idno": "222403198301071778"}, "test");
return rs;
}
async genPosterQrcodeImg(obj) { async genPosterQrcodeImg(obj) {
return await this.imghandleApi.genPosterQrcodeImg(obj.qrcode, obj.bakImg); return await this.imghandleApi.genPosterQrcodeImg(obj.qrcode, obj.bakImg);
} }
...@@ -36,22 +41,22 @@ class TestApi { ...@@ -36,22 +41,22 @@ class TestApi {
async importexcel() { async importexcel() {
var names = []; var names = [];
for(var i = 1; i <= 6; i++) { for (var i = 1; i <= 6; i++) {
try { try {
var filePath = "/tmp/banks"+ i +".xlsx"; var filePath = "/tmp/banks" + i + ".xlsx";
console.log("----------------------------- begin "+ i +" -----------------------------"); console.log("----------------------------- begin " + i + " -----------------------------");
var sheets = xlsx.parse(filePath); var sheets = xlsx.parse(filePath);
if (!sheets || sheets.length == 0) { if (!sheets || sheets.length == 0) {
return result; return result;
} }
var sheet = sheets[0]; var sheet = sheets[0];
if (!sheet || !sheet.data || sheet.data.length == 0) { if (!sheet || !sheet.data || sheet.data.length == 0) {
return result; return result;
} }
var rows = sheet.data; var rows = sheet.data;
for (var idx in rows) { for (var idx in rows) {
var cells = rows[idx]; var cells = rows[idx];
if (!cells || cells.length < 3) { if (!cells || cells.length < 3) {
...@@ -64,7 +69,7 @@ class TestApi { ...@@ -64,7 +69,7 @@ class TestApi {
} }
await this.ebankSve.create(obj); await this.ebankSve.create(obj);
} }
console.log("----------------------------- end "+ i +"-----------------------------"); console.log("----------------------------- end " + i + "-----------------------------");
} catch (error) { } catch (error) {
console.log(error.stack); console.log(error.stack);
} }
......
...@@ -1817,6 +1817,211 @@ class EcontractService extends ServiceBase { ...@@ -1817,6 +1817,211 @@ class EcontractService extends ServiceBase {
return this.returnjson(-1, tt.message || "签约失败", tt.code); return this.returnjson(-1, tt.message || "签约失败", tt.code);
} }
/**
* 静默签
* @param {ecid, appId, userId, idName, idNo, nonceStr, sign} params
*/
async autoSignPersonalTwo(params) {
var ecid = params.ecid;
var unionId = params.appId + "_" + params.userId;
// ecid etemplate
var etemplate = await this.etemplateSve.findById(ecid);
// ecompany
var ecompany = await this.ecompanyDao.findById(etemplate.ecompany_id);
// p_user
var user = await this.userDao.findOne({
unionId: unionId,
});
if (!user) {
user = await this.userDao.create({
appkey: params.appId,
unionId: unionId,
userName: params.idName,
userId3rd: params.userId,
userCode3rd: "",
branchCode3rd: "",
mobile: "",
utype: 0,
});
}
// p_user_eaccount
var eaccount = await this.usereaccountDao.findOne({
user_id: user.id,
personsSign: params.idNo,
}) || {};
var isNeedCreate = !eaccount.eaccountid || eaccount.userName != params.idName;
eaccount.user_id = user.id;
eaccount.userName = params.idName;
eaccount.personsSign = params.idNo;
if (eaccount.id) {
await eaccount.save();
} else {
eaccount = await this.usereaccountDao.create(eaccount);
}
// c_econtract
var econtract = await this.dao.findOne({
eflowstatus: '2',
usereaccount_id: eaccount.id,
etemplate_id: ecid,
});
if (econtract) {
return this.returnjson(0, "用户已经签约", {
contractId: econtract.id
});
}
// e签宝流程
if (isNeedCreate) {
let log = await this.bankthreelogDao.findOne({
userName: eaccount.userName,
userIdNo: eaccount.personsSign,
use_esign: 1,
});
if (!log) {
log = await this.bankthreelogDao.create({
appId: params.appId,
userName: eaccount.userName,
userIdNo: eaccount.personsSign,
use_esign: 1,
});
var vparam = {
name: eaccount.userName,
idno: eaccount.personsSign,
};
var threeResult = await this.utilesignbaoSve.personTwo(vparam, "autoSignPT");
console.log("threeResult-----------------------------", threeResult);
if (!threeResult || threeResult.code == -120) {
return this.returnjson(-1, "银行三要素(姓名、身份证、银行卡号)验证失败");
}
if (threeResult.code == -110) {
return this.returnjson(-1, "银行三要素验证失败");
}
log.result = 1;
log.save();
}
var uidStr = await this.getUidStr(8, 36);
var thirdId = etemplate.id + "_" + eaccount.id + uidStr;
//2.创建e签宝account 5.2.1 , 创建后save()
var params = {
thirdId: thirdId,
name: eaccount.userName,
idNo: eaccount.personsSign,
idType: 19,
};
var getAccount = await this.utilesignbaoSve.createAccountId(params, "econtractSve");
if (getAccount && getAccount.code == 1 && getAccount.data) {
eaccount.eaccountid = getAccount.data.accountId;
await eaccount.save();
} else {
return this.returnjson(-1, "账户创建失败");
}
}
// 3.设置静默签署授权 5.2.5
if (!eaccount.isGrantAuto) {
var paramsGrant = {
grantAccountId: eaccount.eaccountid
};
var grantAuto = await this.utilesignbaoSve.grantAuthorization(paramsGrant, "econtractSve");
if (grantAuto.code != 1) {
return this.returnjson(-1, "静默签署设置失败");
}
eaccount.isGrantAuto = true;
await eaccount.save();
}
// 创建合同 fileurl、esignUrl 怎么赋值????????????
econtract = {
name: ecompany.name,
eflowstatusname: "签约中",
eflowstatus: "1",
// begin_at: now,
// completed_at: now,
user_id: eaccount.user_id,
usereaccount_id: eaccount.id,
etemplate_id: etemplate.id,
ecompany_id: ecompany.id,
// end_at: end,
};
econtract = await this.create(econtract);
// 创建印章id
var sealId = "";
var eseal = await this.esealSve.findOne({
nameA: etemplate.nameA
});
// 生产环境需要打开
if (!eseal) {
// var accountId = ""; // 测试
var rs = await this.utilesignbaoSve.creatEntSignet(settings.apiconfig.companyAccountId(), etemplate.nameA + "alias", etemplate.nameA, "", "", "econtractSve");
// var rs = await this.utilesignbaoSve.creatEntSignet("740b19e0799a4d7abacfa1a31fb72b1e", etemplate.nameA + "alias", etemplate.nameA, "", "", "econtractSve");
if (rs && rs.code == 1) {
sealId = rs.data.sealId;
await this.esealSve.create({
nameA: etemplate.nameA,
sealId: sealId,
});
} else {
return this.returnjson(-1, "生成印章错误");
}
} else {
sealId = eseal.sealId;
}
let today = new Date().Format("yyyy-MM-dd");
var signParams = {
templateId: etemplate.templateid, //模板id,由创建模板接口调用返回的templateId 必填
name: ecompany.name, //合同模板名称 必填
simpleFormFields: {
nameA: etemplate.nameA, //甲方 必填
nameB: eaccount.userName, //乙方 必填
unit: ecompany.name, //合作单位(国美) 必填---------------------------超出长度风险---目前不知多少长度
signDateA: today, //甲方签约日期 必填
signDateB: today //乙方签约日期 必填
}
};
var ebaoAccountId = eaccount.eaccountid; //签署人账户id-- 必填
var thirdOrderNo = econtract.id; //第三方流水号,通知回调使用---选填
var eBaoRedirectBossUrl = "";
var tt = await this.utilesignbaoSve.userAutoSignContractNoTemplate(signParams, ebaoAccountId, thirdOrderNo, eBaoRedirectBossUrl, "econtractSve", sealId);
if (tt && tt.data && tt.code == 1) {
econtract.eflowid = tt.data.flowId;
econtract.edocid = tt.data.docId;
econtract.eflowstatus = '2';
econtract.eflowstatusname = "已完成";
var signTime = new Date();
econtract.completed_at = signTime;
econtract.begin_at = signTime;
var end_at = new Date();
end_at.setFullYear(end_at.getFullYear() + 1);
econtract.end_at = end_at;
await econtract.save();
this.syncSign(econtract.id);
return this.returnjson(0, "success", {
contractId: econtract.id
});
}
return this.returnjson(-1, tt.message || "签约失败", tt.code);
}
returnjson(code, msg, data) { returnjson(code, msg, data) {
return { return {
code: code, code: code,
......
...@@ -11,1044 +11,1090 @@ const axios = require('axios'); ...@@ -11,1044 +11,1090 @@ const axios = require('axios');
//工商查询操作 //工商查询操作
class UtilESignBaoService { class UtilESignBaoService {
constructor() { constructor() {
this.eSignBaoUrl = settings.apiconfig.eSignBaoUrl(); this.eSignBaoUrl = settings.apiconfig.eSignBaoUrl();
this.eSignBaoBankVerifyUrl = settings.apiconfig.eSignBaoBankVerifyUrl(); this.eSignBaoBankVerifyUrl = settings.apiconfig.eSignBaoBankVerifyUrl();
this.restClient = System.getObject("util.restClient"); this.restClient = System.getObject("util.restClient");
this.ossClient = System.getObject("util.ossClient"); this.ossClient = System.getObject("util.ossClient");
}
//-------------------------------------------------------------------------e签宝银行四要素、三要素验证---开始----------------
async bankthree(params, opName) { //三要素验证
var result = {
code: 1,
message: "success",
data: {}
};
var reqUrl = this.eSignBaoBankVerifyUrl + "/infoauth/psn/bankthree";
var tResult = await this.returnResult(params, reqUrl, opName, "createAccountId", result);
if (tResult.errCode != 0) {
result.code = -110;
if (tResult.message && tResult.message.indexOf(":") > 0) {
var tmpListStr = tResult.message.split(':');
result.message = tmpListStr[1] ? tmpListStr[1] : tmpListStr[0];
} else {
result.message = "三要素验证失败,错误信息[" + tResult.message + "]";
}
return result;
} }
if (tResult.errCode == 0 && tResult.data && !tResult.data.pass) {
result.code = -120; //-------------------------------------------------------------------------e签宝银行四要素、三要素验证---开始----------------
result.message = "亲,提供的信息不正确,请验证后再试!";
return result; async personTwo(params, opName) { // 个人二要素验证
var result = {
code: 1,
message: "success",
data: {}
};
var reqUrl = this.eSignBaoBankVerifyUrl + "/infoauth/psn/identity";
var tResult = await this.returnResult(params, reqUrl, opName, "personTwo", result);
if (tResult.errCode != 0) {
result.code = -110;
if (tResult.message && tResult.message.indexOf(":") > 0) {
var tmpListStr = tResult.message.split(':');
result.message = tmpListStr[1] ? tmpListStr[1] : tmpListStr[0];
} else {
result.message = "个人二要素验证失败";
}
return result;
}
if (tResult.errCode == 0 && tResult.data && !tResult.data.pass) {
result.code = -120;
result.message = "姓名或身份证错误";
return result;
}
result.data = tResult.data;
return result;
} }
result.data = tResult.data;
return result; async bankthree(params, opName) { //三要素验证
} var result = {
code: 1,
async bankfour(params, opName) { //四要素验证 message: "success",
var result = { data: {}
code: 1, };
message: "success", var reqUrl = this.eSignBaoBankVerifyUrl + "/infoauth/psn/bankthree";
data: {} var tResult = await this.returnResult(params, reqUrl, opName, "createAccountId", result);
}; if (tResult.errCode != 0) {
var reqUrl = this.eSignBaoBankVerifyUrl + "/infoauth/psn/bankfour"; result.code = -110;
var tResult = await this.returnResult(params, reqUrl, opName, "createAccountId", result); if (tResult.message && tResult.message.indexOf(":") > 0) {
if (tResult.errCode != 0) { var tmpListStr = tResult.message.split(':');
result.code = -110; result.message = tmpListStr[1] ? tmpListStr[1] : tmpListStr[0];
if (tResult.message && tResult.message.indexOf(":") > 0) { } else {
var tmpListStr = tResult.message.split(':'); result.message = "三要素验证失败,错误信息[" + tResult.message + "]";
result.message = tmpListStr[1] ? tmpListStr[1] : tmpListStr[0]; }
} else { return result;
result.message = "接口请求错误"; }
} if (tResult.errCode == 0 && tResult.data && !tResult.data.pass) {
return result; result.code = -120;
result.message = "亲,提供的信息不正确,请验证后再试!";
return result;
}
result.data = tResult.data;
return result;
} }
if (tResult.errCode == 0 && tResult.data && !tResult.data.pass) {
result.code = -120; async bankfour(params, opName) { //四要素验证
result.message = "亲,提供的信息不正确,请验证后再试!"; var result = {
return result; code: 1,
message: "success",
data: {}
};
var reqUrl = this.eSignBaoBankVerifyUrl + "/infoauth/psn/bankfour";
var tResult = await this.returnResult(params, reqUrl, opName, "createAccountId", result);
if (tResult.errCode != 0) {
result.code = -110;
if (tResult.message && tResult.message.indexOf(":") > 0) {
var tmpListStr = tResult.message.split(':');
result.message = tmpListStr[1] ? tmpListStr[1] : tmpListStr[0];
} else {
result.message = "接口请求错误";
}
return result;
}
if (tResult.errCode == 0 && tResult.data && !tResult.data.pass) {
result.code = -120;
result.message = "亲,提供的信息不正确,请验证后再试!";
return result;
}
result.data = tResult.data;
return result;
} }
result.data = tResult.data;
return result;
}
//-------------------------------------------------------------------------e签宝银行四要素、三要素验证---结束---------------- //-------------------------------------------------------------------------e签宝银行四要素、三要素验证---结束----------------
//-------------------------------------------------------------------------下载e签宝合同文件---开始---------------- //-------------------------------------------------------------------------下载e签宝合同文件---开始----------------
async downloadUserContractFile(flowId, opName) { //下载e签宝合同文件,并包含已经上传自己oss服务器的文件地址 async downloadUserContractFile(flowId, opName) { //下载e签宝合同文件,并包含已经上传自己oss服务器的文件地址
var result = { var result = {
code: 1, code: 1,
message: "success", message: "success",
data: {} data: {}
}; };
var downFileInfo = await this.getUserContractFile(flowId, opName, result); var downFileInfo = await this.getUserContractFile(flowId, opName, result);
if (downFileInfo.code != 1) { if (downFileInfo.code != 1) {
return downFileInfo; return downFileInfo;
} }
if (downFileInfo.data.lenght == 0) { if (downFileInfo.data.lenght == 0) {
result.code = -111; result.code = -111;
result.message = "没有合同数据"; result.message = "没有合同数据";
return result; return result;
} }
//e签宝返回的操作属性 //e签宝返回的操作属性
var tData = downFileInfo.data[0]; var tData = downFileInfo.data[0];
var docId = tData.docId; var docId = tData.docId;
var thirdDocId = tData.thirdDocId; var thirdDocId = tData.thirdDocId;
var docUrl = tData.docUrl; var docUrl = tData.docUrl;
if (docUrl == null || docUrl == "" || docUrl == "undefined") { if (docUrl == null || docUrl == "" || docUrl == "undefined") {
result.code = -112; result.code = -112;
result.message = "文档链接为空"; result.message = "文档链接为空";
return result; return result;
} }
var opDownFileResult = await this.opDownFileInfo(docUrl, flowId, result); var opDownFileResult = await this.opDownFileInfo(docUrl, flowId, result);
// console.log(opDownFileResult,"==========opDownFile????===================================="); // console.log(opDownFileResult,"==========opDownFile????====================================");
if (opDownFileResult.code != 1) { if (opDownFileResult.code != 1) {
return opDownFileResult; return opDownFileResult;
} }
result.data = { result.data = {
docId: docId, docId: docId,
thirdDocId: thirdDocId, thirdDocId: thirdDocId,
docUrl: docUrl, docUrl: docUrl,
selfossUrl: opDownFileResult.data.url selfossUrl: opDownFileResult.data.url
}; };
return result; return result;
}
async getUserContractFile(flowId, opName, result) { //获取用户的签署合同文件
var param = {
flowId: flowId
} }
var reqUrl = this.eSignBaoUrl + "/sign/download";
var tResult = await this.returnResult(param, reqUrl, opName, "getUserContractFile", result); async getUserContractFile(flowId, opName, result) { //获取用户的签署合同文件
if (tResult.errCode != 0) { var param = {
//日志记录 flowId: flowId
logCtl.info({ }
optitle: "e签宝===>获取用户合同信息info", var reqUrl = this.eSignBaoUrl + "/sign/download";
op: "app/base/service/impl/utilesignbaoSve/getUserContractFile", var tResult = await this.returnResult(param, reqUrl, opName, "getUserContractFile", result);
content: "参数:flowId=" + flowId + ",请求返回的参数:" + JSON.stringify(tResult), if (tResult.errCode != 0) {
clientIp: "" //日志记录
}); logCtl.info({
result.code = -110; optitle: "e签宝===>获取用户合同信息info",
result.message = "获取文件接口请求错误"; op: "app/base/service/impl/utilesignbaoSve/getUserContractFile",
return result; content: "参数:flowId=" + flowId + ",请求返回的参数:" + JSON.stringify(tResult),
clientIp: ""
});
result.code = -110;
result.message = "获取文件接口请求错误";
return result;
}
result.data = tResult.data;
return result;
} }
result.data = tResult.data;
return result;
}
async opDownFileInfo(docUrl, flowId, result) { //从oss下载到本地并上传到自己oss,之后删除本地文件
/*docUrl下载链接,全路径,如:https://XXXXXX.pdf?XXXXX */
try {
var tmpFileName = docUrl.substring(0, docUrl.lastIndexOf("?"));
var fileName = tmpFileName.substr(tmpFileName.lastIndexOf("/") + 1, tmpFileName.lenght);
//解码后的文件全名:xxx.pdf
var fileAllName = decodeURIComponent(fileName); //为xxx.pdf
var saveFilePath = '/tmp/' + flowId + ".pdf";
// 下载文件到指定的路径
var tmpp = await this.restClient.execDownload("'" + docUrl + "'", saveFilePath);
//上传 saveFilePath的文件 到ossClient
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
var upFileName = "zc_zxy_" + u + ".pdf";
var rtn = await this.ossClient.upfile(upFileName, saveFilePath);
result.data = rtn;
//删除本地文件
// fs.unlink(saveFilePath, function (err) {});
fs.unlinkSync(saveFilePath);
} catch (e) { async opDownFileInfo(docUrl, flowId, result) { //从oss下载到本地并上传到自己oss,之后删除本地文件
result.code = -200; /*docUrl下载链接,全路径,如:https://XXXXXX.pdf?XXXXX */
result.message = "通过flowId获取到的文件url下载操作异常异常error"; try {
console.log(e.stack); var tmpFileName = docUrl.substring(0, docUrl.lastIndexOf("?"));
//日志记录 var fileName = tmpFileName.substr(tmpFileName.lastIndexOf("/") + 1, tmpFileName.lenght);
logCtl.error({ //解码后的文件全名:xxx.pdf
optitle: "e签宝通过flowId获取到的文件url下载操作异常异常error", var fileAllName = decodeURIComponent(fileName); //为xxx.pdf
op: "base/service/impl/utilesignbaoSve/opDownFileInfo", var saveFilePath = '/tmp/' + flowId + ".pdf";
content: "请求参数:docUrl=" + docUrl + ",异常信息error:" + e.stack, // 下载文件到指定的路径
clientIp: "" var tmpp = await this.restClient.execDownload("'" + docUrl + "'", saveFilePath);
}); //上传 saveFilePath的文件 到ossClient
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
var upFileName = "zc_zxy_" + u + ".pdf";
var rtn = await this.ossClient.upfile(upFileName, saveFilePath);
result.data = rtn;
//删除本地文件
// fs.unlink(saveFilePath, function (err) {});
fs.unlinkSync(saveFilePath);
} catch (e) {
result.code = -200;
result.message = "通过flowId获取到的文件url下载操作异常异常error";
console.log(e.stack);
//日志记录
logCtl.error({
optitle: "e签宝通过flowId获取到的文件url下载操作异常异常error",
op: "base/service/impl/utilesignbaoSve/opDownFileInfo",
content: "请求参数:docUrl=" + docUrl + ",异常信息error:" + e.stack,
clientIp: ""
});
}
return result;
} }
return result;
}
//-------------------------------------------------------------------------下载e签宝合同文件---结束---------------- //-------------------------------------------------------------------------下载e签宝合同文件---结束----------------
//-------------------------------------------------------------------------创建账号---开始---------------- //-------------------------------------------------------------------------创建账号---开始----------------
async creatCompanyAccountId(params, opName) { //创建企业账号 async creatCompanyAccountId(params, opName) { //创建企业账号
var result = { var result = {
code: 1, code: 1,
message: "success", message: "success",
data: {} data: {}
}; };
var reqUrl = this.eSignBaoUrl + "/account/create/organize/common"; var reqUrl = this.eSignBaoUrl + "/account/create/organize/common";
var tResult = await this.returnResult(params, reqUrl, opName, "creatCompanyAccountId", result); var tResult = await this.returnResult(params, reqUrl, opName, "creatCompanyAccountId", result);
if (tResult.errCode != 0) { if (tResult.errCode != 0) {
result.code = -110; result.code = -110;
result.message = "接口请求错误"; result.message = "接口请求错误";
}
result.data = tResult.data;
return result;
} }
result.data = tResult.data;
return result; async grantAuthorization(params, opName) { //设置企业静默签署授权
} var result = {
async grantAuthorization(params, opName) { //设置企业静默签署授权 code: 1,
var result = { message: "success"
code: 1, };
message: "success" var reqUrl = this.eSignBaoUrl + "/account/platform/silentsign";
}; var tResult = await this.returnResult(params, reqUrl, opName, "grantAuthorization", result);
var reqUrl = this.eSignBaoUrl + "/account/platform/silentsign"; console.log("--------------tResult--------------------");
var tResult = await this.returnResult(params, reqUrl, opName, "grantAuthorization", result); console.log(tResult);
console.log("--------------tResult--------------------"); if (tResult.errCode != 0) {
console.log(tResult); result.code = -110;
if (tResult.errCode != 0) { result.message = "接口请求错误";
result.code = -110; }
result.message = "接口请求错误"; console.log("-------------result----------------------");
console.log(result);
return result;
} }
console.log("-------------result----------------------");
console.log(result);
return result;
}
async createAccountId(params, opName) { //创建个人账号 async createAccountId(params, opName) { //创建个人账号
var result = { var result = {
code: 1, code: 1,
message: "success", message: "success",
data: {} data: {}
}; };
var reqUrl = this.eSignBaoUrl + "/account/create/person"; var reqUrl = this.eSignBaoUrl + "/account/create/person";
var tResult = await this.returnResult(params, reqUrl, opName, "createAccountId", result); var tResult = await this.returnResult(params, reqUrl, opName, "createAccountId", result);
if (tResult.errCode != 0) { if (tResult.errCode != 0) {
result.code = -110; result.code = -110;
result.message = "接口请求错误"; result.message = "接口请求错误";
return result; return result;
}
result.data = tResult.data;
return result;
} }
result.data = tResult.data;
return result;
}
async updateAccountId(params, opName) { //创建个人账号 async updateAccountId(params, opName) { //创建个人账号
var result = { var result = {
code: 1, code: 1,
message: "success", message: "success",
data: {} data: {}
}; };
var reqUrl = this.eSignBaoUrl + "/account/person/update"; var reqUrl = this.eSignBaoUrl + "/account/person/update";
var tResult = await this.returnResult(params, reqUrl, opName, "updateAccountId", result); var tResult = await this.returnResult(params, reqUrl, opName, "updateAccountId", result);
if (tResult.errCode != 0) { if (tResult.errCode != 0) {
result.code = -110; result.code = -110;
result.message = "接口请求错误"; result.message = "接口请求错误";
return result; return result;
}
result.data = {
accountId: params.accountId
};
return result;
} }
result.data = {
accountId: params.accountId
};
return result;
}
//-------------------------------------------------------------------------创建账号---结束---------------- //-------------------------------------------------------------------------创建账号---结束----------------
//-------------------------------------------------------------------------创建企业印章---开始---------------- //-------------------------------------------------------------------------创建企业印章---开始----------------
async createEntSeal(sealUrl, accountId, aliasName, opName) { async createEntSeal(sealUrl, accountId, aliasName, opName) {
//日志记录 //日志记录
logCtl.info({ logCtl.info({
optitle: "e签宝===>创建模板文件信息info", optitle: "e签宝===>创建模板文件信息info",
op: "app/base/service/impl/utilesignbaoSve/createEntSeal", op: "app/base/service/impl/utilesignbaoSve/createEntSeal",
content: "参数:sealUrl=" + sealUrl, content: "参数:sealUrl=" + sealUrl,
clientIp: "" clientIp: ""
}); });
var result = { var result = {
code: 1, code: 1,
message: "success", message: "success",
data: {} data: {}
} }
var templateFileResult = await this.downloadEntTemplateFile(sealUrl, result); var templateFileResult = await this.downloadEntTemplateFile(sealUrl, result);
if (templateFileResult.code != 1) { if (templateFileResult.code != 1) {
return result; return result;
} }
//操作的本地文件 //操作的本地文件
const opFileAllName = templateFileResult.data.file_all_name; const opFileAllName = templateFileResult.data.file_all_name;
//获取文件属性 //获取文件属性
var stats = await this.statpromise(opFileAllName); var stats = await this.statpromise(opFileAllName);
var uploadFileResult = await this.uploadfileToeBao(opFileAllName, stats.size, result, opName); var uploadFileResult = await this.uploadfileToeBao(opFileAllName, stats.size, result, opName);
if (uploadFileResult.code != 1) { if (uploadFileResult.code != 1) {
return result; return result;
} }
//e签宝返回的操作属性 //e签宝返回的操作属性
const opFileKey = uploadFileResult.data.fileKey; const opFileKey = uploadFileResult.data.fileKey;
const opUploadFileUrl = uploadFileResult.data.uploadUrl; const opUploadFileUrl = uploadFileResult.data.uploadUrl;
const opContentMd5 = uploadFileResult.data.content_md5; const opContentMd5 = uploadFileResult.data.content_md5;
//日志记录 //日志记录
logCtl.info({ logCtl.info({
optitle: "e签宝===>curlUpResult模板到e签宝服务器请求参数信息info", optitle: "e签宝===>curlUpResult模板到e签宝服务器请求参数信息info",
op: "app/base/service/impl/utilesignbaoSve/curlPutFileToeBao", op: "app/base/service/impl/utilesignbaoSve/curlPutFileToeBao",
content: "请求参数:opFileKey=" + opFileKey + ",opUploadFileUrl=" + opUploadFileUrl + ",opFileAllName=" + opFileAllName + ",opContentMd5=" + opContentMd5, content: "请求参数:opFileKey=" + opFileKey + ",opUploadFileUrl=" + opUploadFileUrl + ",opFileAllName=" + opFileAllName + ",opContentMd5=" + opContentMd5,
clientIp: "" clientIp: ""
}); });
//curl文件到e签宝 //curl文件到e签宝
var curlUpResult = await this.curlPutFileToeBao(opFileAllName, opUploadFileUrl, opFileKey, opContentMd5, opName, result); var curlUpResult = await this.curlPutFileToeBao(opFileAllName, opUploadFileUrl, opFileKey, opContentMd5, opName, result);
if (uploadFileResult.code != 1) { if (uploadFileResult.code != 1) {
return result; return result;
} }
var sealParams = { var sealParams = {
accountId: accountId, accountId: accountId,
alias: aliasName, alias: aliasName,
color: "RED", color: "RED",
fileKey: opFileKey fileKey: opFileKey
} }
var reqUrl = this.eSignBaoUrl + "/seal/create/image/organize"; var reqUrl = this.eSignBaoUrl + "/seal/create/image/organize";
var tResult = await this.returnResult(sealParams, reqUrl, opName, "create organize", result); var tResult = await this.returnResult(sealParams, reqUrl, opName, "create organize", result);
if (tResult.errCode != 0) { if (tResult.errCode != 0) {
result.code = -110; result.code = -110;
result.message = "接口请求错误"; result.message = "接口请求错误";
return result; return result;
}
// 创建印章id
result.data = {
fileKey: opFileKey,
sealId: tResult.data.sealId,
};
return result
} }
// 创建印章id //-------------------------------------------------------------------------创建企业印章---结束----------------
result.data = {
fileKey: opFileKey,
sealId: tResult.data.sealId,
};
return result
}
//-------------------------------------------------------------------------创建企业印章---结束----------------
//-------------------------------------------------------------------------创建模板---开始---------------- //-------------------------------------------------------------------------创建模板---开始----------------
//创建模板文件 //创建模板文件
async createEntTemplate(selfTemplateUrl, templateName, opName) { async createEntTemplate(selfTemplateUrl, templateName, opName) {
//日志记录 //日志记录
logCtl.info({ logCtl.info({
optitle: "e签宝===>创建模板文件信息info", optitle: "e签宝===>创建模板文件信息info",
op: "app/base/service/impl/utilesignbaoSve/createEntTemplate", op: "app/base/service/impl/utilesignbaoSve/createEntTemplate",
content: "参数:selfTemplateUrl=" + selfTemplateUrl + ",templateName=" + templateName, content: "参数:selfTemplateUrl=" + selfTemplateUrl + ",templateName=" + templateName,
clientIp: "" clientIp: ""
}); });
var result = { var result = {
code: 1, code: 1,
message: "success", message: "success",
data: {} data: {}
} }
var templateFileResult = await this.downloadEntTemplateFile(selfTemplateUrl, result); var templateFileResult = await this.downloadEntTemplateFile(selfTemplateUrl, result);
if (templateFileResult.code != 1) { if (templateFileResult.code != 1) {
return result; return result;
} }
//操作的本地文件 //操作的本地文件
const opFileAllName = templateFileResult.data.file_all_name; const opFileAllName = templateFileResult.data.file_all_name;
//获取文件属性 //获取文件属性
var stats = await this.statpromise(opFileAllName); var stats = await this.statpromise(opFileAllName);
var uploadFileResult = await this.uploadfileToeBao(opFileAllName, stats.size, result, opName); var uploadFileResult = await this.uploadfileToeBao(opFileAllName, stats.size, result, opName);
if (uploadFileResult.code != 1) { if (uploadFileResult.code != 1) {
return result; return result;
} }
//e签宝返回的操作属性 //e签宝返回的操作属性
const opFileKey = uploadFileResult.data.fileKey; const opFileKey = uploadFileResult.data.fileKey;
const opUploadFileUrl = uploadFileResult.data.uploadUrl; const opUploadFileUrl = uploadFileResult.data.uploadUrl;
const opContentMd5 = uploadFileResult.data.content_md5; const opContentMd5 = uploadFileResult.data.content_md5;
//日志记录 //日志记录
logCtl.info({ logCtl.info({
optitle: "e签宝===>curlUpResult模板到e签宝服务器请求参数信息info", optitle: "e签宝===>curlUpResult模板到e签宝服务器请求参数信息info",
op: "app/base/service/impl/utilesignbaoSve/curlPutFileToeBao", op: "app/base/service/impl/utilesignbaoSve/curlPutFileToeBao",
content: "请求参数:opFileKey=" + opFileKey + ",opUploadFileUrl=" + opUploadFileUrl + ",opFileAllName=" + opFileAllName + ",opContentMd5=" + opContentMd5, content: "请求参数:opFileKey=" + opFileKey + ",opUploadFileUrl=" + opUploadFileUrl + ",opFileAllName=" + opFileAllName + ",opContentMd5=" + opContentMd5,
clientIp: "" clientIp: ""
}); });
//curl文件到e签宝 //curl文件到e签宝
var curlUpResult = await this.curlPutFileToeBao(opFileAllName, opUploadFileUrl, opFileKey, opContentMd5, opName, result); var curlUpResult = await this.curlPutFileToeBao(opFileAllName, opUploadFileUrl, opFileKey, opContentMd5, opName, result);
if (uploadFileResult.code != 1) { if (uploadFileResult.code != 1) {
return result; return result;
} }
//创建合同模板 //创建合同模板
var upParams = { var upParams = {
fileKey: opFileKey, fileKey: opFileKey,
templateName: templateName templateName: templateName
}; };
var reqTemplateUrl = this.eSignBaoUrl + "/template/createbyfilekey"; var reqTemplateUrl = this.eSignBaoUrl + "/template/createbyfilekey";
var templateResult = await this.returnResult(upParams, reqTemplateUrl, opName, "createEntTemplate", result); var templateResult = await this.returnResult(upParams, reqTemplateUrl, opName, "createEntTemplate", result);
//日志记录 //日志记录
logCtl.info({ logCtl.info({
optitle: "e签宝===>template/createbyfilekey返回结果信息info", optitle: "e签宝===>template/createbyfilekey返回结果信息info",
op: "app/base/service/impl/utilesignbaoSve/templateResult", op: "app/base/service/impl/utilesignbaoSve/templateResult",
content: "返回参数:" + JSON.stringify(templateResult), content: "返回参数:" + JSON.stringify(templateResult),
clientIp: "" clientIp: ""
}); });
if (templateResult.errCode != 0 || templateResult.data == null) { if (templateResult.errCode != 0 || templateResult.data == null) {
result.code = -116; result.code = -116;
result.message = "文件上传接口请求错误"; result.message = "文件上传接口请求错误";
}
uploadFileResult.data = {
fileKey: opFileKey,
templateId: templateResult.data.templateId
};
return uploadFileResult
} }
uploadFileResult.data = {
fileKey: opFileKey,
templateId: templateResult.data.templateId
};
return uploadFileResult
}
//curl文件到e签宝(参数:opFileAllName本地文件xxx.pdf、opUploadFileUrl运程上传文件、opFileKey上传文件的filekey、opContentMd5上传文件的md5、opName)
async curlPutFileToeBao(opFileAllName, opUploadFileUrl, opFileKey, opContentMd5, opName, result) {
var cmd = "curl -X PUT '" + opUploadFileUrl + "' -T " + opFileAllName + " -H 'Charset: utf-8' -H 'cache-control: no-cache' -H 'Content-Type: application/pdf'" +
" -H 'Content-MD5:" + opContentMd5 + "'";
//日志记录
logCtl.info({
optitle: "e签宝===>curlUpResult模板到e签宝服务器请求参数==cmd==信息info",
op: "app/base/service/impl/utilesignbaoSve/curlPutFileToeBao",
content: "请求参数:cmd=" + cmd,
clientIp: ""
});
var rtn = null;
try {
rtn = await this.restClient.execCustomPostESignBao(cmd);
//日志记录
logCtl.info({
optitle: "e签宝===>curl文件到e签宝服务器信息info",
op: "app/base/service/impl/utilesignbaoSve/curlPutFileToeBao",
content: "cmd=" + cmd + ",返回信息=" + JSON.stringify(rtn),
clientIp: ""
});
if (rtn.stdout == null || rtn.stdout == "" || rtn.stdout == "undefined") {
result.code = -113;
result.message = "请求结果返回为空";
return result;
}
var upResult = JSON.parse(rtn.stdout);
if (upResult.errCode == 0) {
// console.log("del................................................");
//删除本地文件
// fs.unlink(opFileAllName, function (err) {});
fs.unlinkSync(opFileAllName);
} //curl文件到e签宝(参数:opFileAllName本地文件xxx.pdf、opUploadFileUrl运程上传文件、opFileKey上传文件的filekey、opContentMd5上传文件的md5、opName)
return result; async curlPutFileToeBao(opFileAllName, opUploadFileUrl, opFileKey, opContentMd5, opName, result) {
} catch (e) { var cmd = "curl -X PUT '" + opUploadFileUrl + "' -T " + opFileAllName + " -H 'Charset: utf-8' -H 'cache-control: no-cache' -H 'Content-Type: application/pdf'" +
console.log("curl put e签宝对url文件上传操作异常error"); " -H 'Content-MD5:" + opContentMd5 + "'";
console.log(e.stack); //日志记录
//日志记录 logCtl.info({
logCtl.error({ optitle: "e签宝===>curlUpResult模板到e签宝服务器请求参数==cmd==信息info",
optitle: "curl put 上传e签宝远程文件操作opClassName=" + opName + ",opMethod=curlPutFileToeBao操作异常异常error", op: "app/base/service/impl/utilesignbaoSve/curlPutFileToeBao",
op: "base/service/impl/utilesignbaoSve/createEntTemplate", content: "请求参数:cmd=" + cmd,
content: e.stack, clientIp: ""
clientIp: "" });
}); var rtn = null;
result.code = -200; try {
result.message = "操作异常" rtn = await this.restClient.execCustomPostESignBao(cmd);
return result; //日志记录
logCtl.info({
optitle: "e签宝===>curl文件到e签宝服务器信息info",
op: "app/base/service/impl/utilesignbaoSve/curlPutFileToeBao",
content: "cmd=" + cmd + ",返回信息=" + JSON.stringify(rtn),
clientIp: ""
});
if (rtn.stdout == null || rtn.stdout == "" || rtn.stdout == "undefined") {
result.code = -113;
result.message = "请求结果返回为空";
return result;
}
var upResult = JSON.parse(rtn.stdout);
if (upResult.errCode == 0) {
// console.log("del................................................");
//删除本地文件
// fs.unlink(opFileAllName, function (err) {});
fs.unlinkSync(opFileAllName);
}
return result;
} catch (e) {
console.log("curl put e签宝对url文件上传操作异常error");
console.log(e.stack);
//日志记录
logCtl.error({
optitle: "curl put 上传e签宝远程文件操作opClassName=" + opName + ",opMethod=curlPutFileToeBao操作异常异常error",
op: "base/service/impl/utilesignbaoSve/createEntTemplate",
content: e.stack,
clientIp: ""
});
result.code = -200;
result.message = "操作异常"
return result;
}
} }
}
//上传模板到e签宝 //上传模板到e签宝
async uploadfileToeBao(fileAllName, filesize, result, opName) { async uploadfileToeBao(fileAllName, filesize, result, opName) {
try { try {
//读取一个Buffer //读取一个Buffer
var buffer = fs.readFileSync(fileAllName); var buffer = fs.readFileSync(fileAllName);
var fsHash = crypto.createHash('md5'); var fsHash = crypto.createHash('md5');
fsHash.update(buffer); fsHash.update(buffer);
var md5 = fsHash.digest(); var md5 = fsHash.digest();
// console.log("文件的MD5是:%s", md5); // console.log("文件的MD5是:%s", md5);
var b = new Buffer(md5); var b = new Buffer(md5);
var s = b.toString('base64'); var s = b.toString('base64');
var uploadParams = { var uploadParams = {
contentMd5: s, contentMd5: s,
fileName: fileAllName, fileName: fileAllName,
fileSize: filesize, fileSize: filesize,
contentType: "application/pdf" contentType: "application/pdf"
}; };
//上传模板到e签宝 //上传模板到e签宝
var reqUrl = this.eSignBaoUrl + "/file/uploadurl"; var reqUrl = this.eSignBaoUrl + "/file/uploadurl";
var tResult = await this.returnResult(uploadParams, reqUrl, opName, "uploadfileToeBao", result); var tResult = await this.returnResult(uploadParams, reqUrl, opName, "uploadfileToeBao", result);
// console.log(tResult,"上传模板到e签宝.....................tResult"); // console.log(tResult,"上传模板到e签宝.....................tResult");
//日志记录 //日志记录
logCtl.info({ logCtl.info({
optitle: "e签宝===>创建模板文件上传到e签宝服务器信息info", optitle: "e签宝===>创建模板文件上传到e签宝服务器信息info",
op: "app/base/service/impl/utilesignbaoSve/uploadfileToeBao", op: "app/base/service/impl/utilesignbaoSve/uploadfileToeBao",
content: "参数:uploadParams=" + JSON.stringify(uploadParams) + ",返回信息=" + JSON.stringify(tResult), content: "参数:uploadParams=" + JSON.stringify(uploadParams) + ",返回信息=" + JSON.stringify(tResult),
clientIp: "" clientIp: ""
}); });
if (tResult.errCode != 0 || tResult.data == null) { if (tResult.errCode != 0 || tResult.data == null) {
result.code = -112; result.code = -112;
result.message = "文件上传接口请求错误"; result.message = "文件上传接口请求错误";
} }
result.data = { result.data = {
fileKey: tResult.data.fileKey, fileKey: tResult.data.fileKey,
uploadUrl: tResult.data.uploadUrl, uploadUrl: tResult.data.uploadUrl,
content_md5: s content_md5: s
}; };
return result; return result;
} catch (e) { } catch (e) {
console.log(e.stack); console.log(e.stack);
//日志记录 //日志记录
logCtl.error({ logCtl.error({
optitle: "e签宝文件上传opClassName=" + opName + ",opMethod=uploadfileToeBao操作异常异常error", optitle: "e签宝文件上传opClassName=" + opName + ",opMethod=uploadfileToeBao操作异常异常error",
op: "base/service/impl/utilesignbaoSve/uploadfileToeBao", op: "base/service/impl/utilesignbaoSve/uploadfileToeBao",
content: e.stack, content: e.stack,
clientIp: "" clientIp: ""
}); });
result.code = -200; result.code = -200;
result.message = "文件上传操作异常" result.message = "文件上传操作异常"
return result; return result;
}
return result;
} }
return result;
} //从自己阿里云下载公司模板文件(selfTemplateUrl:公司合同模板链接文件)
//从自己阿里云下载公司模板文件(selfTemplateUrl:公司合同模板链接文件) async downloadEntTemplateFile(selfTemplateUrl, result) {
async downloadEntTemplateFile(selfTemplateUrl, result) { var fileName = selfTemplateUrl.substr(selfTemplateUrl.lastIndexOf("/") + 1, selfTemplateUrl.lenght);
var fileName = selfTemplateUrl.substr(selfTemplateUrl.lastIndexOf("/") + 1, selfTemplateUrl.lenght); var fileExpanded = selfTemplateUrl.substr(selfTemplateUrl.lastIndexOf(".") + 1, selfTemplateUrl.lenght); //pdf
var fileExpanded = selfTemplateUrl.substr(selfTemplateUrl.lastIndexOf(".") + 1, selfTemplateUrl.lenght); //pdf if (fileExpanded == null || fileExpanded == "") {
if (fileExpanded == null || fileExpanded == "") { result.code = -110;
result.code = -110; result.message = "文件格式不正确";
result.message = "文件格式不正确"; return result;
return result; }
//解码后的文件全名:xxx.pdf
var fileAllName = decodeURIComponent(fileName); //为xxx.pdf
var downfileInfo = await this.ossClient.downfile(fileAllName);
if (downfileInfo == null || downfileInfo.res == null || downfileInfo.res.status != 200) {
result.code = -111;
result.message = "下载失败";
return result;
}
result.data = {
file_all_name: "/tmp/" + fileAllName
};
return result;
} }
//解码后的文件全名:xxx.pdf
var fileAllName = decodeURIComponent(fileName); //为xxx.pdf //获取文件信息
var downfileInfo = await this.ossClient.downfile(fileAllName); async statpromise(filePath) {
if (downfileInfo == null || downfileInfo.res == null || downfileInfo.res.status != 200) { var promise = new Promise((resv, rej) => {
result.code = -111; fs.stat(filePath, function (err, stats) {
result.message = "下载失败"; if (err) {
return result; rej(err);
} else {
resv(stats);
}
});
});
return promise;
} }
result.data = {
file_all_name: "/tmp/" + fileAllName //-------------------------------------------------------------------------创建模板-----结束--------------
};
return result; //-------------------------------------------------------------------------根据模板创建用户签署合同及签署过程-----开始--------------
} /*参数说明:
//获取文件信息 var params = {
async statpromise(filePath) { templateId: "2c98d5446734acf5016827d168a6013b", //模板id,由创建模板接口调用返回的templateId 必填
var promise = new Promise((resv, rej) => { name: "汉唐信通(北京)咨询股份有限公司", //合同模板名称 必填
fs.stat(filePath, function (err, stats) { simpleFormFields: {
if (err) { nameA: "汉唐信通(北京)咨询股份有限公司", //甲方 必填
rej(err); nameB: "高宇强", //乙方 必填
} else { unit: "吉林省华生商贸有限公司公主岭华生百货商场-公主岭百货", //合作单位(国美) 必填---------------------------超出长度风险---目前不知多少长度
resv(stats); signDateA: "2018-12-09", //甲方签约日期 必填
signDateB: "2018-12-09" //乙方签约日期 必填
}
};
var ebaoAccountId = "9238f57f559b411eb9b4685bc1b903f7";//签署人账户id-- 必填
var thirdOrderNo = "";//第三方流水号,通知回调使用---选填
var eSignBaoRedirectBossUrl = "https://boss.gongsibao.com/";// //页面签署完成后跳转地址
opName:操作类名
sealId:印章id,不传时使用账户默认印章
*/
async userSignContractNoTemplate(params, ebaoAccountId, thirdOrderNo, eSignBaoRedirectBossUrl, opName, sealId) { //用户签署合同-------调用此方法
//日志记录
logCtl.info({
optitle: "e签宝===>创建用户签署合同信息info",
op: "app/base/service/impl/utilesignbaoSve/userSignContractNoTemplate",
content: "参数:ebaoAccountId=" + ebaoAccountId + ",thirdOrderNo=" + thirdOrderNo + ",eSignBaoRedirectBossUrl=" + eSignBaoRedirectBossUrl + ",请求params参数:" + JSON.stringify(params),
clientIp: ""
});
/*
1.合同模板创建合同 5.4.2
2.创建合同签署流程 5.5.1
3.发起对接平台自动签署 5.5.2
4.发起个人手动签署 5.5.4
*/
var result = {
code: 1,
message: "success",
data: {}
};
if (ebaoAccountId == null || ebaoAccountId == "" || ebaoAccountId == "undefined") {
result.code = -100;
result.message = "ebaoAccountId参数有误";
return result;
} }
}); var tThirdOrderNo = thirdOrderNo == null || thirdOrderNo == "" || thirdOrderNo == "undefined" ? "" : thirdOrderNo
}); var self = this;
return promise; //1.合同模板创建合同 5.4.2
} var createTemplate = await self.createByTemplate(params, opName, result);
//-------------------------------------------------------------------------创建模板-----结束-------------- if (createTemplate.code != 1) {
return result;
}
var tDocId = createTemplate.data.docId;
var addProcessParams = {
businessScene: params.name, //业务场景名称-- 必填
initiatorAccountId: "", //发起方账户id,默认对接平台,--使用默认的,不用填写
signValidity: "", //签署截止时间戳毫秒值-- 选填
payer: "", //签署付费方,默认对接平台-- 选填
signPlatform: "1", //指定用户签署的平台,空值表示不限平台(1:H5签2:支付宝生活号签3:微信小程序签(后续版本支持))-- 选填
noticeType: "", //用户接收签署任务通知的方式,空值不通知,1短信,2邮箱,格式"1,2"
redirectUrl: eSignBaoRedirectBossUrl, //页面签署完成后跳转地址
docId: tDocId, //合同id
docName: "" //合同名称,默认使用创建合同时的名称-- 选填
};
//2.创建合同签署流程 5.5.1
var createAddProcess = await self.addProcess(addProcessParams, opName, result);
if (createAddProcess.code != 1) {
return result;
}
var tFlowId = createAddProcess.data.flowId;
var platformSignTaskParams = {
flowId: tFlowId, //流程id-- 必填
thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用
posList: [{
signType: 1, //盖章位置定位方式,1关键字定位-- 必填
key: "sealA" //-- 必填
}]
};
//-------------------------------------------------------------------------根据模板创建用户签署合同及签署过程-----开始-------------- if (sealId) {//印章id,不传时使用账户默认印章
/*参数说明: platformSignTaskParams.sealId = sealId;
var params = { }
templateId: "2c98d5446734acf5016827d168a6013b", //模板id,由创建模板接口调用返回的templateId 必填 //3.发起对接平台自动签署 5.5.2
name: "汉唐信通(北京)咨询股份有限公司", //合同模板名称 必填 var platformSignTaskResult = await self.platformSignTask(platformSignTaskParams, opName, result);
simpleFormFields: { if (platformSignTaskResult.code != 1) {
nameA: "汉唐信通(北京)咨询股份有限公司", //甲方 必填 return result;
nameB: "高宇强", //乙方 必填 }
unit: "吉林省华生商贸有限公司公主岭华生百货商场-公主岭百货", //合作单位(国美) 必填---------------------------超出长度风险---目前不知多少长度 var handPersonSignTaskParams = {
signDateA: "2018-12-09", //甲方签约日期 必填 flowId: tFlowId, //流程id-- 必填
signDateB: "2018-12-09" //乙方签约日期 必填 accountId: ebaoAccountId, //签署人账户id-- 必填
} thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用
}; sealType: "0", //印章类型, 指定签署印章类型,0:手绘印章;1:模板印章-- 必填
var ebaoAccountId = "9238f57f559b411eb9b4685bc1b903f7";//签署人账户id-- 必填 posList: [{
var thirdOrderNo = "";//第三方流水号,通知回调使用---选填 signType: 1, //盖章位置定位方式,1关键字定位-- 必填
var eSignBaoRedirectBossUrl = "https://boss.gongsibao.com/";// //页面签署完成后跳转地址 key: "sealB" //-- 必填
opName:操作类名 }]
sealId:印章id,不传时使用账户默认印章 };
*/ //4.发起个人手动签署 5.5.4
async userSignContractNoTemplate(params, ebaoAccountId, thirdOrderNo, eSignBaoRedirectBossUrl, opName, sealId) { //用户签署合同-------调用此方法 var handPersonSignTaskResult = await self.handPersonSignTask(handPersonSignTaskParams, opName, result);
//日志记录 if (handPersonSignTaskResult.code != 1) {
logCtl.info({ return result;
optitle: "e签宝===>创建用户签署合同信息info", }
op: "app/base/service/impl/utilesignbaoSve/userSignContractNoTemplate", result.data = {
content: "参数:ebaoAccountId=" + ebaoAccountId + ",thirdOrderNo=" + thirdOrderNo + ",eSignBaoRedirectBossUrl=" + eSignBaoRedirectBossUrl + ",请求params参数:" + JSON.stringify(params), flowId: tFlowId, //流程id
clientIp: "" docId: tDocId, //合同id
}); signUrl: handPersonSignTaskResult.data.signUrl, //签署地址,用户可通过本地址跳转至 e 签宝签署页面进行签署,链接永久有效
/* signShortUrl: handPersonSignTaskResult.data.signShortUrl, //接口调用时传入的对接方业务流水号,用于支持对接方进行上下文关联
1.合同模板创建合同 5.4.2 templateId: params.templateId //模板id,由创建模板接口调用返回的templateId
2.创建合同签署流程 5.5.1 };
3.发起对接平台自动签署 5.5.2 return result;
4.发起个人手动签署 5.5.4
*/
var result = {
code: 1,
message: "success",
data: {}
};
if (ebaoAccountId == null || ebaoAccountId == "" || ebaoAccountId == "undefined") {
result.code = -100;
result.message = "ebaoAccountId参数有误";
return result;
}
var tThirdOrderNo = thirdOrderNo == null || thirdOrderNo == "" || thirdOrderNo == "undefined" ? "" : thirdOrderNo
var self = this;
//1.合同模板创建合同 5.4.2
var createTemplate = await self.createByTemplate(params, opName, result);
if (createTemplate.code != 1) {
return result;
}
var tDocId = createTemplate.data.docId;
var addProcessParams = {
businessScene: params.name, //业务场景名称-- 必填
initiatorAccountId: "", //发起方账户id,默认对接平台,--使用默认的,不用填写
signValidity: "", //签署截止时间戳毫秒值-- 选填
payer: "", //签署付费方,默认对接平台-- 选填
signPlatform: "1", //指定用户签署的平台,空值表示不限平台(1:H5签2:支付宝生活号签3:微信小程序签(后续版本支持))-- 选填
noticeType: "", //用户接收签署任务通知的方式,空值不通知,1短信,2邮箱,格式"1,2"
redirectUrl: eSignBaoRedirectBossUrl, //页面签署完成后跳转地址
docId: tDocId, //合同id
docName: "" //合同名称,默认使用创建合同时的名称-- 选填
};
//2.创建合同签署流程 5.5.1
var createAddProcess = await self.addProcess(addProcessParams, opName, result);
if (createAddProcess.code != 1) {
return result;
} }
var tFlowId = createAddProcess.data.flowId;
var platformSignTaskParams = {
flowId: tFlowId, //流程id-- 必填
thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用
posList: [{
signType: 1, //盖章位置定位方式,1关键字定位-- 必填
key: "sealA" //-- 必填
}]
};
if (sealId) {//印章id,不传时使用账户默认印章 /*参数说明:
platformSignTaskParams.sealId = sealId; var params = {
} templateId: "2c98d5446734acf5016827d168a6013b", //模板id,由创建模板接口调用返回的templateId 必填
//3.发起对接平台自动签署 5.5.2 name: "汉唐信通(北京)咨询股份有限公司", //合同模板名称 必填
var platformSignTaskResult = await self.platformSignTask(platformSignTaskParams, opName, result); simpleFormFields: {
if (platformSignTaskResult.code != 1) { nameA: "汉唐信通(北京)咨询股份有限公司", //甲方 必填
return result; nameB: "高宇强", //乙方 必填
} unit: "吉林省华生商贸有限公司公主岭华生百货商场-公主岭百货", //合作单位(国美) 必填---------------------------超出长度风险---目前不知多少长度
var handPersonSignTaskParams = { signDateA: "2018-12-09", //甲方签约日期 必填
flowId: tFlowId, //流程id-- 必填 signDateB: "2018-12-09" //乙方签约日期 必填
accountId: ebaoAccountId, //签署人账户id-- 必填 }
thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用 };
sealType: "0", //印章类型, 指定签署印章类型,0:手绘印章;1:模板印章-- 必填 var ebaoAccountId = "9238f57f559b411eb9b4685bc1b903f7";//签署人账户id-- 必填
posList: [{ var thirdOrderNo = "";//第三方流水号,通知回调使用---选填
signType: 1, //盖章位置定位方式,1关键字定位-- 必填 var eSignBaoRedirectBossUrl = "https://boss.gongsibao.com/";// //页面签署完成后跳转地址
key: "sealB" //-- 必填 opName:操作类名
}] sealId:印章id,不传时使用账户默认印章
}; */
//4.发起个人手动签署 5.5.4 async userAutoSignContractNoTemplate(params, ebaoAccountId, thirdOrderNo, eSignBaoRedirectBossUrl, opName, sealId) { //用户签署合同-------调用此方法
var handPersonSignTaskResult = await self.handPersonSignTask(handPersonSignTaskParams, opName, result); //日志记录
if (handPersonSignTaskResult.code != 1) { logCtl.info({
return result; optitle: "e签宝===>创建用户签署合同信息info",
} op: "app/base/service/impl/utilesignbaoSve/userSignContractNoTemplate",
result.data = { content: "参数:ebaoAccountId=" + ebaoAccountId + ",thirdOrderNo=" + thirdOrderNo + ",eSignBaoRedirectBossUrl=" + eSignBaoRedirectBossUrl + ",请求params参数:" + JSON.stringify(params),
flowId: tFlowId, //流程id clientIp: ""
docId: tDocId, //合同id });
signUrl: handPersonSignTaskResult.data.signUrl, //签署地址,用户可通过本地址跳转至 e 签宝签署页面进行签署,链接永久有效 /*
signShortUrl: handPersonSignTaskResult.data.signShortUrl, //接口调用时传入的对接方业务流水号,用于支持对接方进行上下文关联 1.合同模板创建合同 5.4.2
templateId: params.templateId //模板id,由创建模板接口调用返回的templateId 2.创建合同签署流程 5.5.1
}; 3.发起对接平台自动签署 5.5.2
return result; 4.发起用户自动签署 5.5.3
} */
/*参数说明: var result = {
var params = { code: 1,
templateId: "2c98d5446734acf5016827d168a6013b", //模板id,由创建模板接口调用返回的templateId 必填 message: "success",
name: "汉唐信通(北京)咨询股份有限公司", //合同模板名称 必填 data: {}
simpleFormFields: { };
nameA: "汉唐信通(北京)咨询股份有限公司", //甲方 必填 if (ebaoAccountId == null || ebaoAccountId == "" || ebaoAccountId == "undefined") {
nameB: "高宇强", //乙方 必填 result.code = -100;
unit: "吉林省华生商贸有限公司公主岭华生百货商场-公主岭百货", //合作单位(国美) 必填---------------------------超出长度风险---目前不知多少长度 result.message = "ebaoAccountId参数有误";
signDateA: "2018-12-09", //甲方签约日期 必填 return result;
signDateB: "2018-12-09" //乙方签约日期 必填
} }
}; var tThirdOrderNo = thirdOrderNo == null || thirdOrderNo == "" || thirdOrderNo == "undefined" ? "" : thirdOrderNo
var ebaoAccountId = "9238f57f559b411eb9b4685bc1b903f7";//签署人账户id-- 必填 var self = this;
var thirdOrderNo = "";//第三方流水号,通知回调使用---选填 //1.合同模板创建合同 5.4.2
var eSignBaoRedirectBossUrl = "https://boss.gongsibao.com/";// //页面签署完成后跳转地址 var createTemplate = await self.createByTemplate(params, opName, result);
opName:操作类名 if (createTemplate.code != 1) {
sealId:印章id,不传时使用账户默认印章 return result;
*/ }
async userAutoSignContractNoTemplate(params, ebaoAccountId, thirdOrderNo, eSignBaoRedirectBossUrl, opName, sealId) { //用户签署合同-------调用此方法 var tDocId = createTemplate.data.docId;
//日志记录 var addProcessParams = {
logCtl.info({ businessScene: params.name, //业务场景名称-- 必填
optitle: "e签宝===>创建用户签署合同信息info", initiatorAccountId: "", //发起方账户id,默认对接平台,--使用默认的,不用填写
op: "app/base/service/impl/utilesignbaoSve/userSignContractNoTemplate", signValidity: "", //签署截止时间戳毫秒值-- 选填
content: "参数:ebaoAccountId=" + ebaoAccountId + ",thirdOrderNo=" + thirdOrderNo + ",eSignBaoRedirectBossUrl=" + eSignBaoRedirectBossUrl + ",请求params参数:" + JSON.stringify(params), payer: "", //签署付费方,默认对接平台-- 选填
clientIp: "" signPlatform: "1", //指定用户签署的平台,空值表示不限平台(1:H5签2:支付宝生活号签3:微信小程序签(后续版本支持))-- 选填
}); noticeType: "", //用户接收签署任务通知的方式,空值不通知,1短信,2邮箱,格式"1,2"
/* redirectUrl: eSignBaoRedirectBossUrl, //页面签署完成后跳转地址
1.合同模板创建合同 5.4.2 docId: tDocId, //合同id
2.创建合同签署流程 5.5.1 docName: "" //合同名称,默认使用创建合同时的名称-- 选填
3.发起对接平台自动签署 5.5.2 };
4.发起用户自动签署 5.5.3 //2.创建合同签署流程 5.5.1
*/ var createAddProcess = await self.addProcess(addProcessParams, opName, result);
var result = { if (createAddProcess.code != 1) {
code: 1, return result;
message: "success", }
data: {} var tFlowId = createAddProcess.data.flowId;
}; var platformSignTaskParams = {
if (ebaoAccountId == null || ebaoAccountId == "" || ebaoAccountId == "undefined") { flowId: tFlowId, //流程id-- 必填
result.code = -100; thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用
result.message = "ebaoAccountId参数有误"; posList: [{
return result; signType: 1, //盖章位置定位方式,1关键字定位-- 必填
} key: "sealA" //-- 必填
var tThirdOrderNo = thirdOrderNo == null || thirdOrderNo == "" || thirdOrderNo == "undefined" ? "" : thirdOrderNo }]
var self = this; };
//1.合同模板创建合同 5.4.2
var createTemplate = await self.createByTemplate(params, opName, result);
if (createTemplate.code != 1) {
return result;
}
var tDocId = createTemplate.data.docId;
var addProcessParams = {
businessScene: params.name, //业务场景名称-- 必填
initiatorAccountId: "", //发起方账户id,默认对接平台,--使用默认的,不用填写
signValidity: "", //签署截止时间戳毫秒值-- 选填
payer: "", //签署付费方,默认对接平台-- 选填
signPlatform: "1", //指定用户签署的平台,空值表示不限平台(1:H5签2:支付宝生活号签3:微信小程序签(后续版本支持))-- 选填
noticeType: "", //用户接收签署任务通知的方式,空值不通知,1短信,2邮箱,格式"1,2"
redirectUrl: eSignBaoRedirectBossUrl, //页面签署完成后跳转地址
docId: tDocId, //合同id
docName: "" //合同名称,默认使用创建合同时的名称-- 选填
};
//2.创建合同签署流程 5.5.1
var createAddProcess = await self.addProcess(addProcessParams, opName, result);
if (createAddProcess.code != 1) {
return result;
}
var tFlowId = createAddProcess.data.flowId;
var platformSignTaskParams = {
flowId: tFlowId, //流程id-- 必填
thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用
posList: [{
signType: 1, //盖章位置定位方式,1关键字定位-- 必填
key: "sealA" //-- 必填
}]
};
if (sealId) {//印章id,不传时使用账户默认印章 if (sealId) {//印章id,不传时使用账户默认印章
platformSignTaskParams.sealId = sealId; platformSignTaskParams.sealId = sealId;
} }
//3.发起对接平台自动签署 5.5.2 //3.发起对接平台自动签署 5.5.2
var platformSignTaskResult = await self.platformSignTask(platformSignTaskParams, opName, result); var platformSignTaskResult = await self.platformSignTask(platformSignTaskParams, opName, result);
if (platformSignTaskResult.code != 1) { if (platformSignTaskResult.code != 1) {
return result; return result;
} }
var autoUserSignTaskParams = { var autoUserSignTaskParams = {
flowId: tFlowId, //流程id-- 必填 flowId: tFlowId, //流程id-- 必填
accountId: ebaoAccountId, //签署人账户id-- 必填 accountId: ebaoAccountId, //签署人账户id-- 必填
thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用 thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用
sealType: "0", //印章类型, 指定签署印章类型,0:手绘印章;1:模板印章-- 必填 ????????????????????????????? sealType: "0", //印章类型, 指定签署印章类型,0:手绘印章;1:模板印章-- 必填 ?????????????????????????????
posList: [{ posList: [{
signType: 1, //盖章位置定位方式,1关键字定位-- 必填 signType: 1, //盖章位置定位方式,1关键字定位-- 必填
key: "sealB" //-- 必填 key: "sealB" //-- 必填
}] }]
}; };
//4.发起用户自动签署 5.5.3 //4.发起用户自动签署 5.5.3
var autoUserSignTaskResult = await self.autoUserSignTask(autoUserSignTaskParams, opName, result); var autoUserSignTaskResult = await self.autoUserSignTask(autoUserSignTaskParams, opName, result);
if (autoUserSignTaskResult.code != 1) { if (autoUserSignTaskResult.code != 1) {
return result; return result;
}
// 打开这行注释
await this.archiveProcess({flowId: tFlowId}, opName);
result.data = {
flowId: tFlowId, //流程id
docId: tDocId, //合同id
templateId: params.templateId //模板id,由创建模板接口调用返回的templateId
};
return result;
} }
// 打开这行注释
await this.archiveProcess({flowId: tFlowId}, opName);
result.data = {
flowId: tFlowId, //流程id
docId: tDocId, //合同id
templateId: params.templateId //模板id,由创建模板接口调用返回的templateId
};
return result;
}
/*参数说明: /*参数说明:
var params = { var params = {
templateId: "2c98d5446734acf5016827d168a6013b", //模板id,由创建模板接口调用返回的templateId 必填 templateId: "2c98d5446734acf5016827d168a6013b", //模板id,由创建模板接口调用返回的templateId 必填
name: "汉唐信通(北京)咨询股份有限公司", //合同模板名称 必填 name: "汉唐信通(北京)咨询股份有限公司", //合同模板名称 必填
simpleFormFields: { simpleFormFields: {
nameA: "汉唐信通(北京)咨询股份有限公司", //甲方 必填 nameA: "汉唐信通(北京)咨询股份有限公司", //甲方 必填
nameB: "高宇强", //乙方 必填 nameB: "高宇强", //乙方 必填
unit: "吉林省华生商贸有限公司公主岭华生百货商场-公主岭百货", //合作单位(国美) 必填---------------------------超出长度风险---目前不知多少长度 unit: "吉林省华生商贸有限公司公主岭华生百货商场-公主岭百货", //合作单位(国美) 必填---------------------------超出长度风险---目前不知多少长度
signDateA: "2018-12-09", //甲方签约日期 必填 signDateA: "2018-12-09", //甲方签约日期 必填
signDateB: "2018-12-09" //乙方签约日期 必填 signDateB: "2018-12-09" //乙方签约日期 必填
} }
}; };
var ebaoAccountId = "9238f57f559b411eb9b4685bc1b903f7";//签署人账户id-- 必填 var ebaoAccountId = "9238f57f559b411eb9b4685bc1b903f7";//签署人账户id-- 必填
var thirdOrderNo = "";//第三方流水号,通知回调使用---选填 var thirdOrderNo = "";//第三方流水号,通知回调使用---选填
var eSignBaoRedirectBossUrl = "https://boss.gongsibao.com/";// //页面签署完成后跳转地址 var eSignBaoRedirectBossUrl = "https://boss.gongsibao.com/";// //页面签署完成后跳转地址
opName:操作类名 opName:操作类名
sealId:印章id,不传时使用账户默认印章 sealId:印章id,不传时使用账户默认印章
*/ */
async userSignContractNoTemplate2(params, ebaoAccountId, thirdOrderNo, eSignBaoRedirectBossUrl, opName, sealId) { //用户签署合同-------调用此方法 async userSignContractNoTemplate2(params, ebaoAccountId, thirdOrderNo, eSignBaoRedirectBossUrl, opName, sealId) { //用户签署合同-------调用此方法
//日志记录k //日志记录k
logCtl.info({ logCtl.info({
optitle: "e签宝===>创建用户签署合同信息info", optitle: "e签宝===>创建用户签署合同信息info",
op: "app/base/service/impl/utilesignbaoSve/userSignContractNoTemplate2", op: "app/base/service/impl/utilesignbaoSve/userSignContractNoTemplate2",
content: "参数:ebaoAccountId=" + ebaoAccountId + ",thirdOrderNo=" + thirdOrderNo + ",eSignBaoRedirectBossUrl=" + eSignBaoRedirectBossUrl + ",请求params参数:" + JSON.stringify(params), content: "参数:ebaoAccountId=" + ebaoAccountId + ",thirdOrderNo=" + thirdOrderNo + ",eSignBaoRedirectBossUrl=" + eSignBaoRedirectBossUrl + ",请求params参数:" + JSON.stringify(params),
clientIp: "" clientIp: ""
}); });
/* /*
1.合同模板创建合同 5.4.2 1.合同模板创建合同 5.4.2
2.创建合同签署流程 5.5.1 2.创建合同签署流程 5.5.1
3.发起对接平台自动签署 5.5.2 3.发起对接平台自动签署 5.5.2
4.发起个人手动签署 5.5.4 4.发起个人手动签署 5.5.4
*/ */
var result = { var result = {
code: 1, code: 1,
message: "success", message: "success",
data: {} data: {}
}; };
if (ebaoAccountId == null || ebaoAccountId == "" || ebaoAccountId == "undefined") { if (ebaoAccountId == null || ebaoAccountId == "" || ebaoAccountId == "undefined") {
result.code = -100; result.code = -100;
result.message = "ebaoAccountId参数有误"; result.message = "ebaoAccountId参数有误";
return result; return result;
} }
var tThirdOrderNo = thirdOrderNo == null || thirdOrderNo == "" || thirdOrderNo == "undefined" ? "" : thirdOrderNo var tThirdOrderNo = thirdOrderNo == null || thirdOrderNo == "" || thirdOrderNo == "undefined" ? "" : thirdOrderNo
var self = this; var self = this;
//1.合同模板创建合同 5.4.2 //1.合同模板创建合同 5.4.2
var createTemplate = await self.createByTemplate(params, opName, result); var createTemplate = await self.createByTemplate(params, opName, result);
if (createTemplate.code != 1) { if (createTemplate.code != 1) {
return result; return result;
} }
var tDocId = createTemplate.data.docId; var tDocId = createTemplate.data.docId;
var addProcessParams = { var addProcessParams = {
businessScene: params.name, //业务场景名称-- 必填 businessScene: params.name, //业务场景名称-- 必填
initiatorAccountId: "", //发起方账户id,默认对接平台,--使用默认的,不用填写 initiatorAccountId: "", //发起方账户id,默认对接平台,--使用默认的,不用填写
signValidity: "", //签署截止时间戳毫秒值-- 选填 signValidity: "", //签署截止时间戳毫秒值-- 选填
payer: "", //签署付费方,默认对接平台-- 选填 payer: "", //签署付费方,默认对接平台-- 选填
signPlatform: "1", //指定用户签署的平台,空值表示不限平台(1:H5签2:支付宝生活号签3:微信小程序签(后续版本支持))-- 选填 signPlatform: "1", //指定用户签署的平台,空值表示不限平台(1:H5签2:支付宝生活号签3:微信小程序签(后续版本支持))-- 选填
noticeType: "", //用户接收签署任务通知的方式,空值不通知,1短信,2邮箱,格式"1,2" noticeType: "", //用户接收签署任务通知的方式,空值不通知,1短信,2邮箱,格式"1,2"
redirectUrl: eSignBaoRedirectBossUrl, //页面签署完成后跳转地址 redirectUrl: eSignBaoRedirectBossUrl, //页面签署完成后跳转地址
docId: tDocId, //合同id docId: tDocId, //合同id
docName: "" //合同名称,默认使用创建合同时的名称-- 选填 docName: "" //合同名称,默认使用创建合同时的名称-- 选填
}; };
//2.创建合同签署流程 5.5.1 //2.创建合同签署流程 5.5.1
var createAddProcess = await self.addProcess(addProcessParams, opName, result); var createAddProcess = await self.addProcess(addProcessParams, opName, result);
if (createAddProcess.code != 1) { if (createAddProcess.code != 1) {
return result; return result;
} }
var tFlowId = createAddProcess.data.flowId; var tFlowId = createAddProcess.data.flowId;
var platformSignTaskParams = { var platformSignTaskParams = {
flowId: tFlowId, //流程id-- 必填 flowId: tFlowId, //流程id-- 必填
thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用 thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用
posList: [{ posList: [{
signType: 1, // 盖章位置定位方式,1关键字定位-- 必填 signType: 1, // 盖章位置定位方式,1关键字定位-- 必填
key: "sealA" // -- 必填 key: "sealA" // -- 必填
}] }]
}; };
if (sealId) {//印章id,不传时使用账户默认印章 if (sealId) {//印章id,不传时使用账户默认印章
platformSignTaskParams.sealId = sealId; platformSignTaskParams.sealId = sealId;
} }
//3.发起对接平台自动签署 5.5.2 //3.发起对接平台自动签署 5.5.2
var platformSignTaskResult = await self.platformSignTask(platformSignTaskParams, opName, result); var platformSignTaskResult = await self.platformSignTask(platformSignTaskParams, opName, result);
if (platformSignTaskResult.code != 1) { if (platformSignTaskResult.code != 1) {
return result; return result;
} }
var handPersonSignTaskParams = { var handPersonSignTaskParams = {
flowId: tFlowId, //流程id-- 必填 flowId: tFlowId, //流程id-- 必填
accountId: ebaoAccountId, //签署人账户id-- 必填 accountId: ebaoAccountId, //签署人账户id-- 必填
thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用 thirdOrderNo: tThirdOrderNo, //第三方流水号,通知回调使用
sealType: "0", //印章类型, 指定签署印章类型,0:手绘印章;1:模板印章-- 必填 sealType: "0", //印章类型, 指定签署印章类型,0:手绘印章;1:模板印章-- 必填
posList: [{ posList: [{
signType: 1, //盖章位置定位方式,1关键字定位-- 必填 signType: 1, //盖章位置定位方式,1关键字定位-- 必填
key: "sealB" //-- 必填 key: "sealB" //-- 必填
}] }]
}; };
//4.发起个人手动签署 5.5.4 //4.发起个人手动签署 5.5.4
var handPersonSignTaskResult = await self.handPersonSignTask(handPersonSignTaskParams, opName, result); var handPersonSignTaskResult = await self.handPersonSignTask(handPersonSignTaskParams, opName, result);
if (handPersonSignTaskResult.code != 1) { if (handPersonSignTaskResult.code != 1) {
return result; return result;
}
result.data = {
flowId: tFlowId, //流程id
docId: tDocId, //合同id
signUrl: handPersonSignTaskResult.data.signUrl, //签署地址,用户可通过本地址跳转至 e 签宝签署页面进行签署,链接永久有效
signShortUrl: handPersonSignTaskResult.data.signShortUrl, //接口调用时传入的对接方业务流水号,用于支持对接方进行上下文关联
templateId: params.templateId //模板id,由创建模板接口调用返回的templateId
};
return result;
} }
result.data = {
flowId: tFlowId, //流程id
docId: tDocId, //合同id
signUrl: handPersonSignTaskResult.data.signUrl, //签署地址,用户可通过本地址跳转至 e 签宝签署页面进行签署,链接永久有效
signShortUrl: handPersonSignTaskResult.data.signShortUrl, //接口调用时传入的对接方业务流水号,用于支持对接方进行上下文关联
templateId: params.templateId //模板id,由创建模板接口调用返回的templateId
};
return result;
}
/*创建企业印章: /*创建企业印章:
accountId:企业账号id, accountId:企业账号id,
aliasName:印章别名, aliasName:印章别名,
templateType: templateType:
模板类型: 模板类型:
1.ROUND_STAR 圆形有五角星章 1.ROUND_STAR 圆形有五角星章
2.ROUND_NONE 圆形无五角星章 2.ROUND_NONE 圆形无五角星章
3.OVAL_STAR 椭圆有五角星印章 3.OVAL_STAR 椭圆有五角星印章
4.OVAL_NONE 椭圆无五角星印章, 4.OVAL_NONE 椭圆无五角星印章,
color color
印章颜色: 印章颜色:
1.RED 红色 1.RED 红色
2.BLUE 蓝色 2.BLUE 蓝色
3.BLACK 黑色 3.BLACK 黑色
opName:操作类名 opName:操作类名
*/ */
async creatEntSignet(accountId, aliasName, text, templateType, color, opName) { async creatEntSignet(accountId, aliasName, text, templateType, color, opName) {
var tmpTemplateType = templateType || "ROUND_STAR"; var tmpTemplateType = templateType || "ROUND_STAR";
var tmpColor = templateType || "RED"; var tmpColor = templateType || "RED";
var result = { var result = {
code: 1, code: 1,
message: "success", message: "success",
data: {} data: {}
}; };
var params = { var params = {
accountId: accountId, accountId: accountId,
alias: aliasName, alias: aliasName,
templateType: tmpTemplateType, templateType: tmpTemplateType,
text: text, text: text,
color: tmpColor color: tmpColor
} }
var reqUrl = this.eSignBaoUrl + "/seal/create/organize"; var reqUrl = this.eSignBaoUrl + "/seal/create/organize";
var tResult = await this.returnResult(params, reqUrl, opName, "creatEntSignet", result); var tResult = await this.returnResult(params, reqUrl, opName, "creatEntSignet", result);
if (tResult.errCode != 0) { if (tResult.errCode != 0) {
result.code = -110; result.code = -110;
result.message = "接口请求错误"; result.message = "接口请求错误";
return result; return result;
}
result.data = tResult.data;
return result;
} }
result.data = tResult.data;
return result;
}
async createByTemplate(params, opName, result) { //合同模板创建合同 async createByTemplate(params, opName, result) { //合同模板创建合同
var reqUrl = this.eSignBaoUrl + "/doc/createbytemplate"; var reqUrl = this.eSignBaoUrl + "/doc/createbytemplate";
var tResult = await this.returnResult(params, reqUrl, opName, "createByTemplate", result); var tResult = await this.returnResult(params, reqUrl, opName, "createByTemplate", result);
if (tResult.errCode != 0) { if (tResult.errCode != 0) {
result.code = -110; result.code = -110;
result.message = "接口请求错误"; result.message = "接口请求错误";
return result; return result;
}
result.data = tResult.data;
return result; //获取用户合同id(docId)和合同e签宝url(docUrl)
} }
result.data = tResult.data;
return result; //获取用户合同id(docId)和合同e签宝url(docUrl) async addProcess(params, opName, result) { //创建合同签署流程
} var reqUrl = this.eSignBaoUrl + "/sign/contract/addProcess";
async addProcess(params, opName, result) { //创建合同签署流程 var tResult = await this.returnResult(params, reqUrl, opName, "addProcess", result);
var reqUrl = this.eSignBaoUrl + "/sign/contract/addProcess"; if (tResult.errCode != 0) {
var tResult = await this.returnResult(params, reqUrl, opName, "addProcess", result); result.code = -210;
if (tResult.errCode != 0) { result.message = "接口请求错误";
result.code = -210; return result;
result.message = "接口请求错误"; }
return result; result.data = tResult.data;
return result;
} }
result.data = tResult.data;
return result; async platformSignTask(params, opName, result) { //发起对接平台自动签署
} var result = {
async platformSignTask(params, opName, result) { //发起对接平台自动签署 code: 1,
var result = { message: "success",
code: 1, data: {}
message: "success", };
data: {} var reqUrl = this.eSignBaoUrl + "/sign/contract/platformSignTask";
}; var tResult = await this.returnResult(params, reqUrl, opName, "platformSignTask", result);
var reqUrl = this.eSignBaoUrl + "/sign/contract/platformSignTask"; if (tResult.errCode != 0) {
var tResult = await this.returnResult(params, reqUrl, opName, "platformSignTask", result); result.code = -310;
if (tResult.errCode != 0) { result.message = "接口请求错误";
result.code = -310; return result;
result.message = "接口请求错误"; }
return result; result.data = tResult.data;
return result;
} }
result.data = tResult.data;
return result; async handPersonSignTask(params, opName, result) { //发起个人手动签署
} var result = {
async handPersonSignTask(params, opName, result) { //发起个人手动签署 code: 1,
var result = { message: "success",
code: 1, data: {}
message: "success", };
data: {} var reqUrl = this.eSignBaoUrl + "/sign/contract/handPersonSignTask";
}; var tResult = await this.returnResult(params, reqUrl, opName, "handPersonSignTask", result);
var reqUrl = this.eSignBaoUrl + "/sign/contract/handPersonSignTask"; if (tResult.errCode != 0) {
var tResult = await this.returnResult(params, reqUrl, opName, "handPersonSignTask", result); result.code = -410;
if (tResult.errCode != 0) { result.message = "接口请求错误";
result.code = -410; return result;
result.message = "接口请求错误"; }
return result; result.data = tResult.data;
return result;
} }
result.data = tResult.data;
return result;
}
async autoUserSignTask(params, opName, result) { //发起用户自动签署 async autoUserSignTask(params, opName, result) { //发起用户自动签署
var result = { var result = {
code: 1, code: 1,
message: "success", message: "success",
data: {} data: {}
}; };
var reqUrl = this.eSignBaoUrl + "/sign/contract/userSignTask"; var reqUrl = this.eSignBaoUrl + "/sign/contract/userSignTask";
var tResult = await this.returnResult(params, reqUrl, opName, "autoUserSignTask", result); var tResult = await this.returnResult(params, reqUrl, opName, "autoUserSignTask", result);
if (tResult.errCode != 0) { if (tResult.errCode != 0) {
result.code = -410; result.code = -410;
result.message = "接口请求错误"; result.message = "接口请求错误";
return result; return result;
}
result.data = tResult.data;
return result;
} }
result.data = tResult.data;
return result;
}
//-------------------------------------------------------------------------根据模板创建用户签署合同及签署过程-----结束-------------- //-------------------------------------------------------------------------根据模板创建用户签署合同及签署过程-----结束--------------
//-------------------------------------------------------------------------签署成功后归档-----开始--------------- //-------------------------------------------------------------------------签署成功后归档-----开始---------------
async getContractDetails(params, opName) { //查询合同签署详情 async getContractDetails(params, opName) { //查询合同签署详情
var result = { var result = {
code: 1, code: 1,
message: "success", message: "success",
data: {} data: {}
}; };
var reqUrl = this.eSignBaoUrl + "/sign/contract/detail"; var reqUrl = this.eSignBaoUrl + "/sign/contract/detail";
var tResult = await this.returnResult(params, reqUrl, opName, "getContractDetails", result); var tResult = await this.returnResult(params, reqUrl, opName, "getContractDetails", result);
if (tResult.errCode != 0) { if (tResult.errCode != 0) {
result.code = -110; result.code = -110;
result.message = "接口请求错误"; result.message = "接口请求错误";
} }
result.data = tResult.data; result.data = tResult.data;
console.log("-------------result----------------------"); console.log("-------------result----------------------");
console.log(result); console.log(result);
return result; return result;
}
async archiveProcess(params, opName) { //归档流程
var result = {
code: 1,
message: "success"
};
var reqUrl = this.eSignBaoUrl + "/sign/contract/archiveProcess";
var tResult = await this.returnResult(params, reqUrl, opName, "archiveProcess", result);
//日志记录
logCtl.info({
optitle: "e签宝签署回调归档流程返回的信息info",
op: "base/service/impl/utilesignbaoSve/archiveProcess",
content: "请求参数:" + JSON.stringify(tResult) + ",返回参数:" + JSON.stringify(tResult),
clientIp: ""
});
if (tResult.errCode != 0) {
result.code = -110;
result.message = "接口请求错误";
} }
return result;
} async archiveProcess(params, opName) { //归档流程
//-------------------------------------------------------------------------签署成功后归档-----结束-------------- var result = {
async returnResult(params, reqUrl, opClassName, opMethod, result) { code: 1,
var data = JSON.stringify(params); message: "success"
var rtn = null; };
try { var reqUrl = this.eSignBaoUrl + "/sign/contract/archiveProcess";
if(settings.env == 'dev') { var tResult = await this.returnResult(params, reqUrl, opName, "archiveProcess", result);
let rs = await axios({ //日志记录
method: 'post', logCtl.info({
url: reqUrl, optitle: "e签宝签署回调归档流程返回的信息info",
data: params, op: "base/service/impl/utilesignbaoSve/archiveProcess",
headers: {'X-Tsign-Open-App-Id': '5111588557', 'X-Tsign-Open-App-Secret': '1595787e8d5b7d19f7b6798f16f41fc2'}, content: "请求参数:" + JSON.stringify(tResult) + ",返回参数:" + JSON.stringify(tResult),
clientIp: ""
}); });
console.log(rs); if (tResult.errCode != 0) {
if (rs.data.errCode != 0) { result.code = -110;
result.code = -110; result.message = "接口请求错误";
result.message = "接口请求错误";
return result;
} }
result.errCode = 0;
result.data = rs.data.data;
return result; return result;
}
rtn = await this.restClient.execPostESignBao(data, reqUrl);
console.log(rtn, "rtn---------------------------------e签宝--------execPostESignBao---------------->>>>>>>>>>>>>>>>");
if (rtn.stdout == null || rtn.stdout == "" || rtn.stdout == "undefined") {
result.errCode = -100;
result.code = -100;
result.message = "请求结果返回为空";
return result;
}
return JSON.parse(rtn.stdout);
} catch (e) {
console.log(e.stack);
//日志记录
logCtl.error({
optitle: "e签宝opClassName=" + opClassName + ",opMethod=" + opMethod + "操作异常异常error",
op: "base/service/impl/utilesignbaoSve/returnResult,请求url:" + reqUrl,
content: "请求参数:" + data + ",返回结果参数rtn.stdout:" + rtn.stdout + ",异常信息error:" + e.stack,
clientIp: ""
});
result.errCode = -200;
result.code = -200;
result.message = "操作异常"
return result;
} }
}
//-------------------------------------------------------------------------签署成功后归档-----结束--------------
async returnResult(params, reqUrl, opClassName, opMethod, result) {
var data = JSON.stringify(params);
var rtn = null;
try {
if (settings.env == 'dev') {
let rs = await axios({
method: 'post',
url: reqUrl,
data: params,
headers: {
'X-Tsign-Open-App-Id': '5111588557',
'X-Tsign-Open-App-Secret': '1595787e8d5b7d19f7b6798f16f41fc2'
},
});
console.log(rs);
if (rs.data.errCode != 0) {
result.code = -110;
result.message = "接口请求错误";
return result;
}
result.errCode = 0;
result.data = rs.data.data;
return result;
}
rtn = await this.restClient.execPostESignBao(data, reqUrl);
console.log(rtn, "rtn---------------------------------e签宝--------execPostESignBao---------------->>>>>>>>>>>>>>>>");
if (rtn.stdout == null || rtn.stdout == "" || rtn.stdout == "undefined") {
result.errCode = -100;
result.code = -100;
result.message = "请求结果返回为空";
return result;
}
return JSON.parse(rtn.stdout);
} catch (e) {
console.log(e.stack);
//日志记录
logCtl.error({
optitle: "e签宝opClassName=" + opClassName + ",opMethod=" + opMethod + "操作异常异常error",
op: "base/service/impl/utilesignbaoSve/returnResult,请求url:" + reqUrl,
content: "请求参数:" + data + ",返回结果参数rtn.stdout:" + rtn.stdout + ",异常信息error:" + e.stack,
clientIp: ""
});
result.errCode = -200;
result.code = -200;
result.message = "操作异常"
return result;
}
}
} }
module.exports = UtilESignBaoService; module.exports = UtilESignBaoService;
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment