背景概述
中国人民银行发布了个人征信电子授权安全技术指南,里边包括个人征信电子授权机制、线上有效鉴别个人身份、签发数字证书、签署有效征信授权电子协议、存证有效征信授权电子数据、数据安全、个人信息保护等内容。e签宝围绕这个规范(GB/T 38540-2020 信息安全技术 安全电子签章密码技术规范),针对电子签名SDK 3.0产品的证书创建、印章创建、签署,验签,出证等全流程来支持该标准。
适用场景
适用于金融领域涉及个人征信电子授权的相关业务。示例:征信信息采集、报送、查询等。
使用流程
【注】:
- 使用前先需要先提供开发者应用ID(appId)给到e签宝技术人员,将数字证书加密算法修改为:SM2(默认是RSA)。应用创建方法:沙箱模拟环境使用说明、正式生产环境使用说明。
- SDK版本限制:核心Jar包在3.0.3及以上版本
Java语言版本
点击跳转Demo下载:PaaS_SDKDemoForJava_GB_SEAL.zip(paas-sdk-3.0.3.jar)
一、签署账号管理(原有接口)
发起e签宝电子签名前需要先给签署用户创建签署账号,生成数字证书(SM2证书),需要让用户勾选相关协议,具体页面展示,由贵司自主开发。
1、相关协议请参考:电子签名使用合规性处理说明(协议具体如何展示由贵司自己业务决定);
2、根据用户信息(名字、证件号)生成e签宝签署账号:创建个人签署账号、创建企业签署账号。

二、印章服务(需使用新接口)
需使用《国标印章》内相关接口:

三、模板文件服务(原有接口)
待签署文件的生成与签署位置的指定需要贵司自行开发实现并通过页面展示给用户。如果需要使用e签宝的模板文件,需要先线下制作模板文件,再用SDK接口填充数据:填充本地PDF模板文件。

四、签署服务(原有接口 + 新增参数)
1、平台自动签署:平台自身PDF文件签署(appId所属平台方企业可直接自动盖章);
2、企业用户签署:企业签署授权服务 + 企业用户PDF文件签署(需要先做企业用户授权,授权协议签署后才可以调用企业签署接口进行企业用户盖章);
3、个人用户签署:个人核身认证服务 + 个人用户PDF文件签署(需要先在核身认证接口获取到的认证成功的认证流程ID,再传入个人签署接口进行个人用户签署);
4、签署后的文件可以提供预览/下载给到用户,也可自主加入文件的验签环节:核验文件签名有效性。

其中1、2、3的签署接口都需要新增参数,更换印章规格:(sealSpec:GB_SEAL)
参数名称 | 类型 | 必选 | 参数说明 | ||||
sealSpec | SealSpecEnum | 是 | 印章规格,默认:IMAGE
|
且签署接口的入参sealData需要更换成新的个人/企业电子印章制章接口返回的sealData
以个人用户PDF文件签署接口为例,请求示例:
//获取客户端的代码:
ServiceClient getKHD = ServiceClientManager.get("您的pojectId");
// 用户签署服务
UserSignService userSignService = getKHD.userSignService();
/**
* 个人用户PDF文件签署
*/
// 签署文件信息
SignFilePdfParam file = new SignFilePdfParam();
file.setFileName("我的平台签署文件.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(100);// 签署位置X坐标,若为关键字定位,相对于关键字的X坐标偏移量,默认0
signPos.setPosY(0);// 签署位置Y坐标,若为关键字定位,相对于关键字的Y坐标偏移量,默认0
signPos.setKeyWord("乙方签名");// 关键字,仅限关键字签章时有效,若为关键字定位时,不可空
signPos.setAddSignTime(true);// 是否显示本地签署时间,需要width设置92以上才可以看到时间
posBeans.add(signPos);
//印章Base64数据
String sealData = "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";
PersonSignParam personSignParam = new PersonSignParam();
personSignParam.setAccountId("57B3914DC6111E928EE4096C6043AB");//个人账号ID(创建个人签署账号接口返回)
personSignParam.setWillingnessId("123456789001");//个人认证流程ID(通过 身份核验认证服务-个人认证模块 选择任意一种方式认证完成)
personSignParam.setSealData(sealData);//印章Base64数据
personSignParam.setPosBeans(posBeans);//签章位置信息
personSignParam.setSignType(SignType.Key);//签章类型:Single,单页签章; Multi,多页签章; Edges,签骑缝章; Key,关键字签章
personSignParam.setFileBean(file);//签署文件信息
personSignParam.setSealSpec(SealSpecEnum.GB_SEAL);//印章规格:IMAGE-图片base64,GB_SEAL-国标印章
//开始个人签署
FileDigestSignResult fileDigestSignResult = userSignService.personSign(personSignParam);
if (fileDigestSignResult.getErrCode() != 0)
System.out.println("签署失败:" + JSONObject.fromObject(fileDigestSignResult));
else
System.out.println("签署成功" + JSONObject.fromObject(fileDigestSignResult));
非Java语言版本
一、签署账号管理(原有接口)
发起e签宝电子签名前需要先给签署用户创建签署账号,生成数字证书(SM2证书),需要让用户勾选相关协议,具体页面展示,由贵司自主开发。
1、相关协议请参考:电子签名使用合规性处理说明(协议具体如何展示由贵司自己业务决定);
2、根据用户信息(名字、证件号)生成e签宝签署账号:创建个人签署账号、创建企业签署账号。

二、印章服务(需使用新接口)
需使用《国标印章》内相关接口:

三、模板文件服务(原有接口)
待签署文件的生成与签署位置的指定需要贵司自行开发实现并通过页面展示给用户。如果需要使用e签宝的模板文件,需要先线下制作模板文件,再用SDK接口填充数据:填充本地PDF模板文件。

四、签署服务(原有接口 + 新增参数)
1、平台自动签署:平台自身PDF文件签署(appId所属平台方企业可直接自动盖章);
2、企业用户签署:企业签署授权服务 + 企业用户PDF文件签署(需要先做企业用户授权,授权协议签署后才可以调用企业签署接口进行企业用户盖章);
3、个人用户签署:个人核身认证服务 + 个人用户PDF文件签署(需要先在核身认证接口获取到的认证成功的认证流程ID,再传入个人签署接口进行个人用户签署);
4、签署后的文件可以提供预览/下载给到用户,也可自主加入文件的验签环节:核验文件签名有效性。

其中1、2、3的签署接口都需要新增参数,更换印章规格:(sealSpec:GB_SEAL)
参数名称 | 类型 | 必选 | 参数说明 | ||||
sealSpec | string | 是 | 印章规格,默认::IMAGE
|
且签署接口的入参sealData需要更换成新的个人/企业电子印章制章接口返回的sealData
以个人用户PDF文件签署接口为例,请求示例:
personSignParam参数案例:
{"accountId":"03B7C30A1AE3497A99C2152EF4F77C15","willingnessId":"3433228901827479210","sealSpec":"GB_SEAL","signType":"Key","fileBean":{"fileName":"signed.pdf","srcPdfFile":"/Users/zhanghe/Downloads/testPdf/PDFTemplate.pdf","dstPdfFile":"/Users/zhanghe/Downloads/testPdf/Signed_Person.pdf"},"posBeans":[{"keyWord":"甲方盖章","posPage":"1","posX":150,"posY":0}],"sealData":"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"}
