农银人寿集成
面向农银人寿合作场景,提供权益数据推送与 H5 落地页 URL 获取两类 S2S 接口。 农银侧先通过 card-pool 推送客户权益数据至卡池; 合作方 APP 再携带 SM4 加密 token 调用 h5-url 换取短期 H5 链接。
概述
接口路径前缀:/open/v1/integrations/abclife
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /open/v1/integrations/abclife/h5-url | 解密业务 token,校验卡池记录后返回 H5 落地页 URL |
| POST | /open/v1/integrations/abclife/card-pool | 接收农银批量推送的权益数据,逐条幂等写入第三方卡池 |
典型调用顺序:农银侧先通过
card-pool 推送权益数据至卡池, 合作方 APP 再携带 SM4 加密 token 调用 h5-url 换取 H5 落地页 URL(默认 20 分钟有效)。h5-url 会校验客户号与服务编码是否已在卡池中存在,不会重复写入卡池。接入前提
- 开放平台应用已由实施侧开通「农银人寿」集成能力。
- 调用
h5-url前,对应客户号与服务编码须已通过card-pool接口写入第三方卡池;否则将返回 422。 - 合作方与农银侧约定 SM4 密钥及 token 载荷格式,由合作方在调用
h5-url前完成 SM4-ECB 加密与 Base64 编码。 - 厂商侧 SM4 密钥由晓葆平台配置与保管,合作方调用本接口时只需携带开放平台 App 签名,无需在请求中传递密钥。
本页不提供 SM4 加解密算法细节、密钥字段名或任何可用于伪造 token 的材料。 相关安全材料仅存在于平台服务端配置中。
鉴权说明
标准 S2S 签名。完整算法见鉴权说明。
| Header | 类型 | 必填 | 说明 |
|---|---|---|---|
X-App-Id | string | 是 | 控制台「凭证管理」中的 App ID |
X-Timestamp | integer | 是 | Unix 秒级时间戳,有效窗口 ±5 分钟 |
X-Signature | string | 是 | 请求签名,见鉴权说明 |
X-Request-ID | string | 否 | 链路追踪 ID,建议传入以便联调排查 |
token 载荷说明
请求体中的 token 为 SM4-ECB 加密后的 JSON 载荷(Base64 编码)。 解密后须包含以下字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
customer_no | string | 是 | 客户号 |
equity_type | string | 是 | 权益类别枚举:臻享-zx / 安享-ax / 康享-kx |
service_code | string | 是 | 服务编码 |
policy_no | string | 条件必填 | 保单号;当 equity_type 为 康享-kx 时必填 |
解密后的 JSON 示例(加密前明文,仅供字段理解,勿直接作为请求 token 使用):
{
"customer_no": "<customer_no>",
"equity_type": "臻享-zx",
"service_code": "<service_code>"
}康享(康享-kx)示例:
{
"customer_no": "<customer_no>",
"equity_type": "康享-kx",
"service_code": "<service_code>",
"policy_no": "<policy_no>"
}获取 H5 落地页 URL
提交 SM4 加密的业务 token。平台解密并校验载荷后,确认客户号与服务编码 已在第三方卡池中存在,并返回带访问凭证的 H5 落地页完整 URL。 本接口不会写入或更新卡池数据。
POST/open/v1/integrations/abclife/h5-url
请求体(application/json):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
token | string | 是 | SM4-ECB 加密的 JSON 载荷(Base64 编码),见上方「token 载荷说明」 |
请求示例(占位符,非真实数据):
POST /open/v1/integrations/abclife/h5-url
X-App-Id: <your_app_id>
X-Timestamp: <unix_seconds>
X-Signature: <signature>
Content-Type: application/json
{
"token": "<sm4_encrypted_base64_token>"
}成功响应(200 OK):
{
"success": true,
"code": 0,
"message": "H5 URL 获取成功",
"data": {
"url": "https://<host>/open/h5/abclife/order?token=<access_token>"
},
"timestamp": "2026-01-01T00:00:00+08:00"
}data 字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
url | string | H5 落地页完整 URL,含独立访问凭证 query 参数 token; 默认 20 分钟有效,过期需重新调用本接口获取 |
返回的 H5 URL 访问凭证与请求 token 不同:平台会重新加密生成含
customer_no、service_code、exp 的短期访问 token。 请勿将 URL 中的 token 与请求体 token 混用。推送权益数据至卡池
农银侧主动推送客户权益数据,请求体为 head + body.messageInfo 结构, 支持一次提交多条记录。平台逐条校验并幂等写入第三方卡池(键为应用 ID + customerIDNo + ServiceNo);重复推送相同键时更新记录。
POST/open/v1/integrations/abclife/card-pool
请求体(application/json):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
head | object | 否 | 交易头信息(透传保存,不参与业务校验) |
body | object | 是 | 业务数据容器 |
body.messageInfo | array | 是 | 权益记录列表,至少 1 条 |
head 常见字段(均可选,字段名大小写须与下表一致):
| 字段 | 说明 |
|---|---|
sysCode | 交易系统编码 |
tranCode | 交易编码 |
tranDate | 交易日期 |
tranNo | 交易流水号 |
tranTime | 交易时间 |
txCode | DTX 交易编码 |
txId | DTX 交易 ID |
version | 接口版本号 |
body.messageInfo[] 单条字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
ServiceNo | string | 是 | 服务编码,最长 20 字符 |
customerIDNo | string | 是 | 客户号(被保险人客户号码),最长 30 字符 |
Mobile | string | 是 | 被保险人联系电话 |
SerStartDate | string | 是 | 服务生效日期,格式 yyyy-MM-dd |
SerEndDate | string | 是 | 服务终止日期,格式 yyyy-MM-dd |
EnjoyFlag | string | 是 | 是否享有权益,最长 2 字符 |
RiskCode | string | 否 | 险种代码 |
ContNo | string | 否 | 保单号 |
CvaliDate | string | 否 | 保单生效日期 |
customerName | string | 否 | 被保人姓名 |
IdType | string | 否 | 被保险人证件类型 |
IdNo | string | 否 | 被保险人证件号码 |
Amnt | string | 否 | 保额 |
messageInfo 内字段名区分大小写(如 ServiceNo、customerIDNo), 须与上表完全一致,不可使用 camelCase 变体(如 serviceNo)。请求示例(占位符,非真实数据):
POST /open/v1/integrations/abclife/card-pool
X-App-Id: <your_app_id>
X-Timestamp: <unix_seconds>
X-Signature: <signature>
Content-Type: application/json
{
"head": {
"sysCode": "<sys_code>",
"tranCode": "<tran_code>",
"tranDate": "2026-03-03",
"tranNo": "<tran_no>",
"tranTime": "09:58:00",
"txCode": "<tx_code>",
"txId": "<tx_id>",
"version": "1.0"
},
"body": {
"messageInfo": [
{
"ServiceNo": "<service_no>",
"RiskCode": "<risk_code>",
"ContNo": "<cont_no>",
"CvaliDate": "2026-01-01",
"customerIDNo": "<customer_id_no>",
"customerName": "***",
"IdType": "0",
"IdNo": "******************",
"Mobile": "13800138000",
"SerStartDate": "2026-01-01",
"SerEndDate": "2026-12-31",
"EnjoyFlag": "1",
"Amnt": "100000"
}
]
}
}成功响应(200 OK):
{
"success": true,
"code": 0,
"message": "处理完成",
"data": {
"total": 2,
"success": 1,
"failed": [
{
"index": 1,
"customerIDNo": "<customer_id_no>",
"ServiceNo": "<service_no>",
"error": "卡池写入失败原因"
}
]
},
"timestamp": "2026-01-01T00:00:00+08:00"
}data 字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
total | integer | 本次提交的 messageInfo 总条数 |
success | integer | 成功落库条数 |
failed | array | 失败明细;每条含 index(数组下标)、customerIDNo、ServiceNo、error。 全部成功时为空数组 |
批量处理采用「部分成功」策略:单条落库失败不会导致整批 500, 接口仍返回 200,请检查
平台落库映射(仅供联调理解):
data.failed 并对失败条目重试。平台落库映射(仅供联调理解):
customerIDNo → 卡号,ServiceNo → 激活码,SerStartDate / SerEndDate → 生效 / 失效日期, 单条完整字段存入 third_party_ext_data。错误码
| HTTP | 说明 | 处理建议 |
|---|---|---|
| 422 | card-pool:请求体结构或 messageInfo 字段校验失败 (如 body 缺失、数组为空、必填字段缺失、日期格式非法等) | 核对 head / body.messageInfo 结构与字段名大小写 |
| 422 | h5-url:token 参数缺失;SM4 解密失败;载荷字段校验失败 (如 equity_type 非法、康享缺少 policy_no); 或客户号与服务编码在卡池中不存在 | 核对 token 加密方式与载荷字段;确认权益类别与保单号规则; 确认已通过 card-pool 推送对应客户数据 |
| 500 | h5-url 服务端配置缺失(如 SM4 密钥未配置) | 联系实施排查;可稍后重试 |
| 401 | 开放平台签名校验失败 | 检查 App 签名与时间戳 |
| 429 | 请求频率超限 | 降速并指数退避重试 |