html源码发起
[!NOTE]
通过html源码发起合同签署,可以发起: 半自动签署,手动签署(用户有感知),自动签署(用户无感知),保全存证,hash保全,批量签署合同等多种合同类型。1、html源码发起签署,需要utf-8编码。
2、接口对签署人为个人时,不会校验姓名+身份证号+手机号的真实性,需要开发者确保真实性;君子签可单独提供个人身份证二要素、运营商三要素等的校验接口,需要联系商务充值后才能使用。
3、接口中签署人信息(证件号)不能重复,同一个签署人可以设置多个签字位置,可以针对不同签署人分别设置验证方式(人脸,银行卡,短信验证码等)、签署方式(自动签、手动签)等。
4、该调用接口成功后返回APL开头的合同编号,开发者需要保存该合同编号,以便后续接口调用。
5、签字位置设置说明:接口支持关键字定位,坐标(X,Y)定位,表单域定位,详细说明可参考“签字位置指定”说明
http请求方式
[!NOTE]
POST multipart/form-data
http请求地址
[!NOTE]
$SERVICE_URL/v2/sign/applySign #其中$SERVICE_URL为生产或测试的地址
http请求参数
参数 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
contractName | string | * | 合同名称非空,最长100个字符 | |
signatories | JSONArray | * | 签约方,参考后面签约方说明 | |
serverCa | int | * | 0 | 是否需要服务端云证书:非1不需要(默认);1需要;建议需要,否则影响后续司法服务 |
dealType | int | * | 0 | 处理方式:为空或0时默认为手签合同(用户有感知);2只保全;5部份自动签;6HASH只保全;17收集信息批量签 |
htmlContent | string | * | 合同html源码,fileType=3,时必须传入,utf8编码 | |
fileType | int | * | 0 | 3 html源码上传 |
addPage | Integer | + | 0 | ofd文件追加内容(0不能追加内容,1允许追加内容),允许追加内容时noEbqSign需要设置为2 |
positionType | int | ? | 0 | 指定公章位置类型:0或null使用签字座标位置或不指定签字位置;1表单域定位(表单域如果上传为pdf时,需pdf自行定义好表单域);2关键字定义 |
faceThreshold | int | + | 验证方式为人脸时必传,人脸识别阀值:默认等级(1-100之间整数),建议大于72,验证方式在签约方中(signatories)设置 | |
complexity | string | ? | 2 | 人脸难易度,1简单模式(不推荐使用),2正常模式,3困难模式,默认不传,使用2正常模式 |
orderFlag | int | ? | 0 | 是否按顺序签字,非1为不按,1为按 |
sequenceInfo | object | ? | 多合同顺序签约或批量签合同关联信息,参考后面表格说明 | |
notifyUrl | string | ? | 合同签署完成后异步通知地址 | |
noEbqSign | int | ? | 0 | 不显示ebq的保全章:1不显示但会签名,2不显示也不签名;0或其它-显示 |
attachFiles | file[] | ? | 合同附件,虽不限个数,但包括合同原文件,不能超过30MB,*SDK引用中的多文件同名情况的上传说明 | |
needQifengSign | int | ? | 0 | 是否使用骑缝章:1使用;2个人不要企业要,3个人要企业不要 |
noBorderSign | int | ? | 1 | 是否不显示个人标准章边框:1不显示,其它显示边框(默认) |
http请求其它扩展参数
扩展参数
参数 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
signDoneTip | string | ? | 合同签约完成页面提示语,字符串(200) | |
qrCode | int | ? | 0 | 合同查看二维码0默认不1显示 |
contractAmount | float | ? | 合同金额 | |
remark | string | ? | 备注 | |
preRecored | string | ? | 前置记录,计录到签约日志中,使证据链更加完整,最大字符不能超过2000char,可传入用户的认证记录日志(如:二要素,三要素,人脸等操作日志) | |
ifWebRtc | int | ? | 0 | 是否使用视频签约:0或null不使用;1使用(使用时必须购买相应套餐) |
isArchive | int | ? | 1 | 是否归档:0不归档;1归档(默认),设置不归档可以签约完后再添加签约方,可以失效合同 |
canRefuse | int | ? | 1 | 是否可以拒签:0或null不能拒签(默认);1可拒签,用于页面是否显示拒签按钮 |
signatories字段说明
[!NOTE]
signatories是合同的签署方信息,为JSONArray结构,即JSONObject数组,且签约人不能存在相同的证件号。签署人参数说明如下:
参数 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
fullName | string | * | 签约方名称,不超过50个字符 | |
identityType | int | * | 身份类型:1身份证,2护照,3台胞证,4港澳居民来往内地通行证,11营业执照,12统一社会信用代码 | |
identityCard | string | * | 个人传身份证号,企业传营业执照号/统一社会信用代码号 | |
mobile | string | + | 手机号码(个人必传),11个字符 | |
string | + | 邮箱,企业必传(必须与调“企业实名认证”接口时传的邮箱一致) | ||
orderNum | int | + | 签字顺序:连续签(orderNum只是针对于当前合同,对批量签多个合同顺序不能指定),顺序签时必传,[0,100) | |
chapteJson | JSONArray | + | 签字位置座标信息:positionType=0时可以传入chapteJson | |
chapteName | string | + | 签字位置-表单域名ID:positionType=1时必须传入 | |
searchKey | string | + | 签字位置-按关键字签署,positionType=2时必须传入,关键字支持多个;以英文;分隔 | |
authLevel | array | ? | 验证等级(传数组字符串)例:[2,10];2银行卡四要素认证;10银行卡三要素认证;11人脸识别;12短信验证码;13运营商三要素认证 | |
authLevelRange | int | ? | 最小验证种类:默认为authLevel数组长度;必须小于authLevel长度且大于0(等于0时按authLevel数组长度计录);如authLevel=[2,10],authLevelRange=2表过只需要验证其中的两项即可 | |
signLevel | int | ? | 签字类型,标准图形章或公章:0标准图形章;1 企业公章、个人手写;2 企业公章+手写,个人个性章+手写;3个人方形标准章(用户类型是个人且姓名2-4个字符生效,其他情况默认使用系统标准图形章) | |
noNeedVerify | int | ? | 0 | 签约方需要手签时是否不先行验证手机或邮箱:1不验证,其它验证(默认) |
serverCaAuto | int | ? | 0 | 是否使用自动签署完成,0或null不使用,1自动(当且只当合同处理方式为部份自动或收集批量签时有效) |
signId | long | ? | 企业用户指定签章ID:此值需为商户上传的自定义公章ID,或商户创建的企业的自定义公章ID。自定义公章可通过sass或api上传 | |
qiFengOffset | float | ? | 骑缝章位置设置值为0-1的小数 |
signatories其它扩展参数
扩展参数
参数 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
searchExtend | JSONObject | ? | 签字位置-关键字-扩展,positionType=2时可以传入,支持指定查询页数/关键字颜色/透明度/第几个关键字.可参考相关说明 | |
searchConvertExtend | JSONObject | ? | 签字位置-关键字-扩展,positionType=2时可以传入,可配置查询结果的位置偏移.可参考后面说明 | |
forceEvidence | int | ? | 0 | 强制添加现场:0或null:不强制添加现场,1:强制添加现场 |
int | ? | |||
readTime | int | ? | 强制阅读时间;当通过君子签在线签合同时,可以设置用户必须预览合同多少秒后,才可以继续签署合同 | |
nameHideStatus | long | ? | 标准章时是否对个人或企业章图片打码:0不打,1打码(章图片) | |
string | ? | |||
onlyVideoEvidence | string | ? | 0 | 现场存证只能上传视频:1是,其它不是(默认) |
evidenceTitle | string | ? | 0 | 现场存证自定义标题(注:仅批量签生效) |
evidenceHeading | string | ? | 现场存证主标题(注:仅批量签生效) | |
videoTitle | string | ? | 视频录制提示标题(注:仅批量签生效) | |
videoReadContent | string | ? | 视频录制提示读内容(注:仅批量签生效) | |
certigierName | string | ? | 授权人姓名 | |
certigierCardNo | string | ? | 授权人身份证号 | |
certigierMobile | string | ? | 授权人手机号 | |
certigierId | string | ? | 授权人ID | |
remarkText | json | ? | 备注文本,参考后面表格说明 | |
remarkDate | json | ? | 备注日期,参考后面表格说明 | |
string | ? | |||
string | ? | |||
string | ? | |||
string | ? | |||
string | ? |
sequenceInfo字段说明
[!NOTE]
sequenceInfo 用于指定多个不同合同之间的关联顺序。可用于合同的在线连续签署,和批量一次性签署合同文件。为JSONObject结构,参数说明如下:
参数 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
businessNo | string | * | 客户方合同的唯一编号,可用于批量签署,由于客户指定 | |
sequenceOrder | int | * | 签约合同在业务中的顺序号,为[1,20)整数 | |
totalNum | int | * | 总份数,为[1,20)整数 |
remarkText字段说明
[!NOTE]
remarkText 备注
参数 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
chapteJson | JSONArray | + | 备注内容位置座标信息:positionType=0时可以传入chapteJson | |
chapteName | string | + | 备注内容位置-表单域名ID:positionType=1时必须传入 | |
searchKey | string | + | 备注内容位置-按关键字签署,positionType=2时必须传入,关键字支持多个;以英文;分隔 | |
searchExtend | JSONObject | ? | 备注内容位置-关键字-扩展,positionType=2时可以传入,支持指定查询页数/关键字颜色/透明度/第几个关键字.可参考相关说明 | |
searchConvertExtend | JSONObject | ? | 备注内容位置-关键字-扩展,positionType=2时可以传入,可配置查询结果的位置偏移.可参考后面说明 | |
keySearchType | int | ? | 默认搜索工具使用,null或0原始搜索工具,1使用增强搜索工具 | |
fontSize | int | ? | 字体大小 | |
width | int | ? | 备注内容区域宽度 | |
height | int | ? | 备注内容区域高度 | |
content | string | ? | 备注内容 | |
positionType | int | ? | 指定备注内容位置类型:0或null使用签字座标位置或不指定签字位置;1表单域定位(表单域如果上传为pdf时,需pdf自行定义好表单域);2关键字定义 |
remarkDate字段说明
[!NOTE]
remarkDate 备注日期
参数 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
chapteJson | JSONArray | + | 备注日期位置座标信息:positionType=0时可以传入chapteJson | |
chapteName | string | + | 备注日期位置-表单域名ID:positionType=1时必须传入 | |
searchKey | string | + | 备注日期位置-按关键字签署,positionType=2时必须传入,关键字支持多个;以英文;分隔 | |
searchExtend | JSONObject | ? | 备注日期位置-关键字-扩展,positionType=2时可以传入,支持指定查询页数/关键字颜色/透明度/第几个关键字.可参考相关说明 | |
searchConvertExtend | JSONObject | ? | 备注日期位置-关键字-扩展,positionType=2时可以传入,可配置查询结果的位置偏移.可参考后面说明 | |
keySearchType | int | ? | 默认搜索工具使用,null或0原始搜索工具,1使用增强搜索工具 | |
fontSize | int | ? | 字体大小 | |
width | int | ? | 备注日期区域宽度 | |
height | int | ? | 备注日期区域高度 | |
dateFormatType | int | ? | yyyy年MM月dd日(默认),1:yyyy-MM-dd,2:yyyy/MM/dd,指定日期格式 | |
positionType | int | ? | 指定备注日期位置类型:0或null使用签字座标位置或不指定签字位置;1表单域定位(表单域如果上传为pdf时,需pdf自行定义好表单域,html及url及tmpl等需定义好input标签);2关键字定义 |
http返回参数
[!NOTE]
返回response为application/json的数据,其字段说明如下
参数 | 类型 | 是否必返回 | 说明 |
---|---|---|---|
success | bool | * | 成功true;异常false |
msg | string | ? | 异常时,返回异常原因 |
resultCode | string | ? | 异常时返回 |
data | string | ? | 合同编号信息(APLXXXXX) |
[!NOTE]
返回结果,参考:
//{"msg":"app_secret不可用","resultCode":"HTTP_PARAM_ERROR","success":false}
//{"success":true,data:"APLXXXXXXXXXX"}
JAVA实现
Map<String, Object> params=bodyParams;
String url=SERVICE_URL+"/v2/sign/applySign";
params.put("contractName","合同名称"); //合同名称
params.put("serverCa",1); //使用云证书
params.put("fileType",3);
params.put("htmlContent","<meta charset=\"utf-8\">html文件信测试场侧hi是测测测测测\" +\n" +
" \"<input type=\"text\" name=\"ebq\" style=\"width:0;height:0;border:0;margin:0;padding:0;\">\"+\n" +
" \"<br/><br/><br/><br/><br/><br/><br/><br/><input type=\"text\" name=\"ebq\" style=\"width:0;height:0;border:0;margin:0;padding:0;\">"); params.put("dealType",5); //指定合同文件签署方式(5为部分自动签,0手动签,1自动签,2只报全,6 HASH只保全,17收集信息批量签)
params.put("positionType",0); //指定签字位置类型(0签字坐标,1表单域,2关键字)
// params.put("addPage",1);//ofd文件追加内容,noEbqSign需要设置为2
// params.put("noEbqSign",2);//不要保全章
/**
* 签约方1(个人)
*/
JSONArray signatories=new JSONArray();
SignatoryReq sReq=new SignatoryReq();
signatories.add(sReq);
sReq.setFullName("测试"); //姓名
sReq.setIdentityType(1); //证件类型
sReq.setIdentityCard("500225xxxx");//身份证号
sReq.setMobile("186235xxx"); //手机号
sReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.3047,\"offsetY\":0.2677}]},{\"page\":4,\"chaptes\":[{\"offsetX\":0.2378,\"offsetY\":0.1681}]}]");//坐标(X Y)定位签字位置
// sReq.setSearchKey("服务组件");//关键字定位签字位置
sReq.setNoNeedVerify(1); //取消签约前短信校验
sReq.setServerCaAuto(0);//是否使用自动签署完成,0或null不使用,1自动(当且只当合同处理方式为部份自动或收集批量签时有效)
sReq.setSignLevel(1);//签字类型,标准图形章或公章:0标准图形章,1公章或手写,2公章手写或手写,3个人方形标准章(用户类型是个人且姓名2-4个字符生效,其他情况默认使用系统标准图形章)
/**
* 签约方2(企业)
*/
sReq=new SignatoryReq();
signatories.add(sReq);
sReq.setFullName("重庆小熊文化有限公司"); //企业姓名
sReq.setIdentityType(11); //证件类型
sReq.setIdentityCard("9999999XXXXX9");//营业执照号
sReq.setEmail("1XXXX@111.com"); //在君子签注册认证的邮箱
sReq.setChapteJson("[{\"page\":4,\"chaptes\":[{\"offsetX\":0.121,\"offsetY\":0.3941}]}]");//坐标(X Y)定位签字位置
// sReq.setSearchKey("服务组件");//关键字定位签字位置
sReq.setSignLevel(0);
sReq.setNoNeedVerify(1);
sReq.setServerCaAuto(1);//当前签约方自动签署
params.put("signatories",signatories.toJSONString());
System.out.println(signatories.toJSONString());
/* params.put(new String("attachFiles"),new File("/per.png"));//这里必须用new String,因为使用的是IdentityHashMap(为了多个file的同name上传)
params.put(new String("attachFiles"),new File("/ent.png"));*/
//params.put("attachFiles",new File("/per.png"));
//params.put("attachFiles",new File("/ent.png"));
String str= HttpClientUtils.init().getPost(url,null,params,true);
System.out.println(str);