接口描述
当平台的企业用户需要落章时,可以直接通过该接口加盖企业印章(需要提前做静默授权书签署)。
注:
- 文件一旦签名盖章就不可以再进行任何填写或修改原文的操作,否则在验证签署文件有效性时会显示文件被篡改,请在签章前完成所有内容填充。
- 请妥善保管签署前后的文件原文,当涉及2个及以上签署方签署时,中间过程产生的文件要用于下次签署的待签署文件传入继续盖章/签字。
接口
UserSignService.orgSign(OrgSignParam orgSignParam)
请求参数
展开全部参数参数名称 | 类型 | 必选 | 参数说明 | |||
orgSignParam(点击“+”展开详情) | OrgSignParam | 是 | 企业用户签署传入参数信息类 | |||
accountId | String | 是 | 企业账号ID(创建企业签署账号接口返回) 【补充说明】:
| |||
signBizType | int | 否 | 签署业务类型,默认:1 1 - 企业证书签署(盖企业章传1) 2 - 法定代表人证书签署(盖法定代表人章传2,需要提前通过【发起企业法定代表人授权书签署任务】接口签署法人授权书后才可以使用) | |||
willingnessAccountId | String | 否 | 经办人个人账号ID(创建个人签署账号接口返回) 【补充说明】:
| |||
willingnessId | String | 否 | 经办人个人认证流程ID(通过 【个人核身认证服务】 任意一种方式完成认证) 【补充说明】:
| |||
sealData | String | 是 | 印章Base64数据 | |||
signType | SignType | 是 | 签章类型,枚举:
【补充说明】:
| |||
file | SignFilePdfParam | 是 | 签署PDF文件信息 | |||
fileName | String | 是 | 文件名称 【补充说明】:
| |||
srcPdfFile | String | 否 | 待签署PDF文件本地路径,含文件名(与streamFile至少有一个不为空) | |||
streamFile | byte[] | 否 | 待签署PDF文件本地二进制数据(与srcPdfFile至少有一个不为空,两者都传优先取streamFile) | |||
dstPdfFile | String | 否 | 签署后PDF文件本地路径,含文件名(为空时返回签署后的文件流) | |||
password | String | 否 | 文件编辑密码,当目标PDF设置权限保护时必填 | |||
posBeans | List<PosBean> | 是 | 签章位置信息 | |||
posPage | String | 否 | 签署页码(除关键字签章外,页码均不可为空) 若为多页签章,支持指定多个页码,例如格式:“1-3,5,8“ | |||
posX | float | 否 | 签署位置X坐标,默认0 【补充说明】:
| |||
posY | float | 否 | 签署位置Y坐标,默认0 【补充说明】:
| |||
keyWord | String | 否 | 关键字 【补充说明】:
| |||
width | float | 否 | 印章展现宽度,将以此宽度对印章图片做同比缩放。 【补充说明】:
| |||
addSignTime | boolean | 否 | 是否显示本地签署时间,需要width设置92以上才可以看到时间,时间格式:yyyy-MM-dd HH:mm:ss
| |||
sealSpec | SealSpecEnum | 是 | 印章规格,默认:IMAGE
| |||
legalRepSign | boolean | 否 | 企业签署经办人是否为法定代表人本人(默认:false)
【补充说明】:
|
响应参数
展开全部参数参数名称 | 类型 | 必选 | 参数说明 | ||
fileDigestSignResult(点击“+”展开详情) | FileDigestSignResult | 是 | 响应结果类 | ||
errCode | int | 是 | 错误码,0标识成功,其他均标识失败 | ||
msg | String | 否 | 错误信息,错误码对应的说明信息 | ||
errorShow | boolean | 否 | 错误信息是否建议显示 | ||
signServiceId | String | 是 | 签章记录ID | ||
filePath | String | 否 | 签署文件源路径 | ||
dstFilePath | String | 否 | 签署后文件的目标路径 | ||
stream | byte[] | 否 | 签署后文件的二进制数据 | ||
authId | String | 否 | 本次签署使用的授权流程ID | ||
contrastLegalRepInfo | boolean | 否 | 本次签署是否进行企业四要素信息比对(用于开发者确认本次签署是否扣除基础认证服务(企业4)的费用)
【补充说明】:legalRepSign为true时,该字段才可能是true |
请求示例
//获取客户端的代码:
ServiceClient getKHD = ServiceClientManager.get("您的pojectId");
// 用户签署服务
UserSignService userSignService = getKHD.userSignService();
/**
* 企业用户PDF文件签署
*/
// 签署文件信息
SignFilePdfParam file = new SignFilePdfParam();
file.setFileName("XXX的企业签署文件.pdf");// 文件名称
file.setSrcPdfFile("D:/test-template.pdf");// 待签署PDF文件本地路径,含文件名(与bytes至少有一个不为空)
file.setDstPdfFile("D:/signed.pdf");// 签署后PDF文件本地路径,含文件名(为空时返回签署后的文件流)
// 签章位置信息
List<PosBean> posBeans = new ArrayList<>();
PosBean signPos = new PosBean();
signPos.setPosPage("1");// 签署页码,若为多页签章,支持页码格式“1-3,5,8“,若为坐标定位时,不可空
signPos.setPosX(150);// 签署位置X坐标,若为关键字定位,相对于关键字的X坐标偏移量,默认0
signPos.setPosY(0);// 签署位置Y坐标,若为关键字定位,相对于关键字的Y坐标偏移量,默认0
signPos.setKeyWord("甲方盖章");// 关键字,仅限关键字签章时有效,若为关键字定位时,不可空
signPos.setAddSignTime(true);// 是否显示本地签署时间,需要width设置92以上才可以看到时间
posBeans.add(signPos);
//印章Base64数据
String sealData = "AF+CAMAAACyBIHOAAADAFBMVEX/////AAAAAP8AAAAYGYhgg/SSvEfW6pFB2CR6pGFGlNnkUelnz86/ijP4b2Ypur760s1LkPzvw0pL9PEH91Fk8PTnyf+pkYbl3H53ydUuMJl7JZPdXrJZ+nXDf9jyrqJS3f5x+8FP9iHyp5vUfovNj7W9it25n8dmX5ZmY4ebratbxlY+jlrW8iYK/5oDj/Okv4Z+/7BpZ9358uu5dfv0TJd5a+fLnOePYr+9LO3fWXLTCzGnPmXCcMfUUaN/X3fZseg8G8vufWsd8A5rPWiw6iRZgxbcfWCl8nDz7Zh6JB+9Gu6ieJdMj13Ace0qGXGkl9LP8+3yFPMH8dsdNYv/NcJPmeKv+92eNegPF4ss6dXXf5fxZ/964ycqvrrI4m28GPTHCx/dvX3lf7juW5GW9c6YfVHb78Tv5cWm6caqfqH3kmL2z/zx8Qfx083/txWiL2n46vSf3cVf93U2b3eyeKPh7c+hqaff/+Z548/ondJOaR5RcsIZkjfHyUZNY94Xg03c3vjOEv1F1+WjMHpP9ubLN2tYc/57JirH3GRYVuyu4vqetimT51+1ZPbHfE/7ifmurS9qevcv0vLsLJpqNQcVvvxxvng0OofWOTj0v+2zn/nuxV3AK7nT/8U9y9bar/xMauM9hDjmINTmH7buD9HLStiQPHn87/27eh1UEnUP3ecXQcgBpbZtav2oyXqx3vePs1ou7056Ipn7j4AmXdtvin/+22++Vfh2q4dhdPf9fQNuGJ1mZWv1E96u+Xubkc0HsdsOtLV8Xe+hrNWddFygO9WFrXfM7gO6A1GvNZVlH+sDOJidUBwZPw55tJD9uW/vUWXFNW1Y2NbHgpb/4ZPlLbZJyeZ2p3qv97f+w5gXtrrv630G+If+tBB+/n38RMNhU9WfHUWfn/x3/5PNG171+ezui9Y1X9CJvtWGGvpl7ftSR4yfFUlWfqJl+fDuI5+dZmi+N9po0X5jwi/+6MCDV+vyr7zzaPxWlu30xP/s/R37cbqOLYm//uDHFsvcuQ54o/VgcMHm7o+iyh6CTcezx5zS2h5gvgfxbz/7fANo76a/L/l/fTOXeXTjo03irKoUDZNoWs+AfDfzfvn49x4und5qvizqE42XsDYtiNrq4583driUed0kvjj+Wi8Jv7cuSe5c31xeZH+R/kvXV1Pw+2n0V/LzrfC/2jzzj7r3X4UK772eHOsI1dHRacZ929dUhYV4wdbkB8tIO8PS9nIZxma/p7uo+Cd9c/24LYEKl8w+xqWfu7vDFqbcmw8gKVfuVpGpF8wJS847ebuOcuj9DOyu8/Yt5iKl7qyezO2XS0pv5fUPvIp+brR2Kfk8tFp924WmRVXtr8aqz8vRQ0zuxvzposHHY8uLa1lPzr9DxvhhvTjz8yisikujeHXtKe3lpSfjApj09ZkVYfTf+ot/IRA7t6h3L/p0XXy6XgyOC/Hpf9uJfT9ItpRnc+x6X8bHuYR235E9Zc+ERDD0ohj0z/lq/7j0h/wA2DzxX+JYWHEoeH7teo4NH2/Vn1k+Kp/YEeHCgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACY3z+dHFbPWssjxQAAAABJRU5ErkJggg==";
//传入企业用户签署参数内
OrgSignParam orgSignParam = new OrgSignParam();
/**注意!!!这里企业如果是授权给平台的,只需要传企业账号:accountId即可签署*/
/**注意!!!这里企业如果是授权给经办人的,那么既需要传企业账号:accountId,还需要传经办人账号:willingnessAccountId和经办人个人认证流程:willingnessId*/
orgSignParam.setAccountId("C9F10A9611115468CB02149CF83E2A795");//企业账号ID(创建企业签署账号接口返回),需要提前授权给平台
orgSignParam.setWillingnessAccountId("");//经办人个人账号ID(创建个人签署账号接口返回)
orgSignParam.setWillingnessId("");//经办人个人认证流程ID(通过身份核验认证服务-个人认证模块选择任意一种方式认证完成)
orgSignParam.setSealData(sealData);//印章Base64
orgSignParam.setPosBeans(posBeans);//签章位置信息
orgSignParam.setSignType(SignType.Key);//签章类型:Single,单页签章; Multi,多页签章; Edges,签骑缝章; Key,关键字签章
orgSignParam.setFileBean(file);//签署文件信息
//开始企业签署
FileDigestSignResult fileDigestSignResult = userSignService.orgSign(orgSignParam);
if (fileDigestSignResult.getErrCode() != 0)
System.out.println("签署失败:" + JSONObject.fromObject(fileDigestSignResult));
else
System.out.println("签署成功" + JSONObject.fromObject(fileDigestSignResult));
响应示例
{
"msg": "成功",
"dstFilePath": "D:\\signed.pdf",
"stream": [],
"errCode": 0,
"filePath": "",
"contrastLegalRepInfo": false,
"errShow": false,
"signServiceId": "3590192690962633477",
"authId": ""
}
企业账号未授权报错示例:
{
"msg": "创建签署记录失败:签署失败: 账号授权记录不存在,accountId: C9F10A969235468CB02149CF83E2A795",
"errCode": 801010,
"errShow": false
}