PIN码相关回调
一. PIN 码生成、重置、清除回调
1. 回调触发时机
当自动签场景下的 PIN 码被生成、重置、清除时,电子签平台会推送此回调。三种行为共用同一个消息类型,通过 OperateType 字段区分。
会触发回调的操作
| 业务操作 | 对应 OperateType | 触发说明 |
|---|---|---|
| 批量生成 PIN(已有 PIN 则沿用) | GENERATE | 仅为本次新建的 PIN 推送一次;已有 PIN 的被授权方沿用原 PIN,不重复推送 |
| 批量生成并重置 PIN(不存在则生成,已存在则重置) | GENERATE / RESET | 新建的推送 GENERATE;已有 PIN 的推送 RESET(携带旧 PIN 指纹) |
| 批量重置 PIN | RESET | 要求被授权方都已存在 PIN,重置后逐条推送 |
| 批量清除 PIN | DELETE | 仅为本次命中并清除的被授权方推送;不存在的被授权方不推送 |
PIN 的查询(是否存在)、校验(比对 PIN)均不会触发回调。
2. 回调消息类型
OperatePinPartner
3. 其他说明
1)OperateType 取值
| PIN 操作 | 对应 OperateType | 说明 |
|---|---|---|
| 生成 PIN | GENERATE | PIN 首次创建,CurPinCodeEncrypted 有值 |
| 重置 PIN | RESET | PIN 被替换为新值,CurPinCodeEncrypted 与 PrevPinCodeEncrypted 均有值 |
| 清除 PIN | DELETE | PIN 被清除(软删除),仅 PrevPinCodeEncrypted 有值 |
2)PinType 取值
| PIN 场景 | PinType | 说明 |
|---|---|---|
| 员工个人 | EMPLOYEE | 员工在企业下的个人 PIN,回调给 PIN 归属企业 |
| 企业授权 | PARTNER | 企业间相互授权(含授权给他人 / 被他人邀请),回调给被授权方企业 |
| 个人自动签 | PERSONAL | 个人用户的自动签 PIN 授权给企业,回调给被授权方企业 |
3)字段省略
MsgData 中取值为空的字段不会出现在回调报文中(例如 GENERATE 场景没有 PrevPinCodeEncrypted,个人自动签场景没有授权方 OrganizationId 等字段)。请按"字段可能缺省"的方式解析。
4)推送时序
- 回调为异步推送,与接口返回解耦:接口返回成功仅代表 PIN 已落库,回调可能有秒级延迟。
- 一次批量操作涉及多个被授权方时,会逐条推送,可能收到多条回调。
- 请以
PinId+OperateType做幂等处理,避免因重试导致重复消费。
4. 回调结构体
MsgData结构体定义
| 参数名称 | 参数类型 | 参数描述 |
|---|---|---|
| PinType | String | PIN 场景类型: EMPLOYEE:员工个人 PARTNER:企业授权 PERSONAL:个人自动签 |
| OperateType | String | 本次 PIN 操作类型: GENERATE:生成 RESET:重置 DELETE:清除 |
| PinId | String | PIN 的唯一标识,为32位字符串。 重置不改变 PinId;清除后该 PinId 失效 |
| UserId | String | 操作人(员工)的用户 ID。 EMPLOYEE、PERSONAL 场景返回 |
| OpenId | String | 操作人的用户唯一标识。 EMPLOYEE、PERSONAL 场景返回 |
| OrganizationId | String | PIN 归属企业(授权方企业)的企业 ID。 EMPLOYEE、PARTNER 场景返回 |
| OrganizationOpenId | String | PIN 归属企业的企业唯一标识。 EMPLOYEE、PARTNER 场景返回 |
| ApplicationId | String | PIN 归属企业使用的应用 ID。 EMPLOYEE、PARTNER 场景返回 |
| AuthOrganizationId | String | 被授权方企业 ID,即本次回调的接收方企业 |
| AuthOrganizationOpenId | String | 被授权方企业的企业唯一标识 |
| CurPinCodeEncrypted | String | 本次操作后 PIN 的加密字段。 GENERATE、RESET 场景返回;DELETE 场景不返回 |
| PrevPinCodeEncrypted | String | 本次操作前(旧)PIN 的加密字段。 RESET、DELETE 场景返回;首次 GENERATE 场景不返回 |
5. 示例
示例一: 企业授权(PARTNER)场景,新建 PIN
{
"MsgId": "yDwFkUUckpstin4sUuZjBEY5Ia2XB7sz",
"MsgType": "OperatePinPartner",
"MsgVersion": "CustomApp",
"MsgData": {
"PinType": "PARTNER",
"OperateType": "GENERATE",
"PinId": "yDRS4UUgygqdcj51UuO4zjEyWTmzsIAR",
"OrganizationId": "yDRSRUUgygj6qnyvUuO4zjE1vLuGdWjL",
"AuthOrganizationId": "yDxbNUyKQDxGYNUuO4zjEwvl3XYQmAcO",
"CurPinCodeEncrypted": "b1946ac92492d2347c6235b4d2611184"
}
}
示例二: 员工个人(EMPLOYEE)场景,重置 PIN(携带新旧指纹)
{
"MsgId": "yDRIGUUgygs8oey1UuO4zjEC8S6bOcm8",
"MsgType": "OperatePinPartner",
"MsgVersion": "CustomApp",
"MsgData": {
"PinType": "EMPLOYEE",
"OperateType": "RESET",
"PinId": "yDRS4UUgygqdcj51UuO4zjEyWTmzsIAR",
"UserId": "yDRS4UUgygqdcjjdUuO4zjEC0osCOsHS",
"OrganizationId": "yDRSRUUgygj6qnyvUuO4zjE1vLuGdWjL",
"AuthOrganizationId": "yDRSRUUgygj6qnyvUuO4zjE1vLuGdWjL",
"CurPinCodeEncrypted": "25f9e794323b453885f5181f1b624d0b",
"PrevPinCodeEncrypted": "b1946ac92492d2347c6235b4d2611184"
}
}
示例三: 个人自动签(PERSONAL)场景,清除 PIN
{
"MsgId": "yDxbNUyKQDxGYNUuO4zjEwvl3XYQmAcO",
"MsgType": "OperatePinPartner",
"MsgVersion": "CustomApp",
"MsgData": {
"PinType": "PERSONAL",
"OperateType": "DELETE",
"PinId": "yDRS4UUgygqdcj51UuO4zjEyWTmzsIAR",
"UserId": "yDRS4UUgygqdcjjdUuO4zjEC0osCOsHS",
"AuthOrganizationId": "yDxbNUyKQDxGYNUuO4zjEwvl3XYQmAcO",
"PrevPinCodeEncrypted": "25f9e794323b453885f5181f1b624d0b"
}
}