农银人寿集成

面向农银人寿合作场景,提供权益数据推送与 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-Idstring是控制台「凭证管理」中的 App ID
X-Timestampinteger是Unix 秒级时间戳,有效窗口 ±5 分钟
X-Signaturestring是请求签名,见鉴权说明
X-Request-IDstring否链路追踪 ID,建议传入以便联调排查

token 载荷说明

请求体中的 token 为 SM4-ECB 加密后的 JSON 载荷(Base64 编码)。 解密后须包含以下字段:

字段类型必填说明
customer_nostring是客户号
equity_typestring是权益类别枚举:臻享-zx / 安享-ax / 康享-kx
service_codestring是服务编码
policy_nostring条件必填保单号;当 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):

字段类型必填说明
tokenstring是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 字段说明:

字段类型说明
urlstringH5 落地页完整 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):

字段类型必填说明
headobject否交易头信息(透传保存,不参与业务校验)
bodyobject是业务数据容器
body.messageInfoarray是权益记录列表,至少 1 条

head 常见字段(均可选,字段名大小写须与下表一致):

字段说明
sysCode交易系统编码
tranCode交易编码
tranDate交易日期
tranNo交易流水号
tranTime交易时间
txCodeDTX 交易编码
txIdDTX 交易 ID
version接口版本号

body.messageInfo[] 单条字段:

字段类型必填说明
ServiceNostring是服务编码,最长 20 字符
customerIDNostring是客户号(被保险人客户号码),最长 30 字符
Mobilestring是被保险人联系电话
SerStartDatestring是服务生效日期,格式 yyyy-MM-dd
SerEndDatestring是服务终止日期,格式 yyyy-MM-dd
EnjoyFlagstring是是否享有权益,最长 2 字符
RiskCodestring否险种代码
ContNostring否保单号
CvaliDatestring否保单生效日期
customerNamestring否被保人姓名
IdTypestring否被保险人证件类型
IdNostring否被保险人证件号码
Amntstring否保额
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 字段说明:

字段类型说明
totalinteger本次提交的 messageInfo 总条数
successinteger成功落库条数
failedarray失败明细;每条含 index(数组下标)、customerIDNo、ServiceNo、error。 全部成功时为空数组
批量处理采用「部分成功」策略:单条落库失败不会导致整批 500, 接口仍返回 200,请检查 data.failed 并对失败条目重试。
平台落库映射(仅供联调理解):customerIDNo → 卡号,ServiceNo → 激活码,SerStartDate / SerEndDate → 生效 / 失效日期, 单条完整字段存入 third_party_ext_data。

错误码

HTTP说明处理建议
422card-pool:请求体结构或 messageInfo 字段校验失败 (如 body 缺失、数组为空、必填字段缺失、日期格式非法等)核对 head / body.messageInfo 结构与字段名大小写
422h5-url:token 参数缺失;SM4 解密失败;载荷字段校验失败 (如 equity_type 非法、康享缺少 policy_no); 或客户号与服务编码在卡池中不存在核对 token 加密方式与载荷字段;确认权益类别与保单号规则; 确认已通过 card-pool 推送对应客户数据
500h5-url 服务端配置缺失(如 SM4 密钥未配置)联系实施排查;可稍后重试
401开放平台签名校验失败检查 App 签名与时间戳
429请求频率超限降速并指数退避重试