[关闭]
@tenbentYun 2019-04-10T04:00:30.000000Z 字数 10389 阅读 489

腾保商户中心意健险产品对接 API文档(v1.0.0)

腾保商户中心

1.概述

1.1 流程图

1.2 HTTP协议层请求状态码设计

  • 对于所有的API接口,使用HTTP状态码来代表本次请求是否成功
  • 当成功提供服务后返回HTTP200状态码,代表本次请求数据成功,并代表业务也成功
  • 当服务器端由于某种错误导致服务失败,将会返回400、415、500,或者其它错误代码

1.3 通用请求参数

openRequest
属性 类型 含义
sign string 签名
bizContent string 业务数据密文
requestNo string 20位流水号
merchantNo string 商户号

merchantNo商户号:腾保提供
20位流水号:商户生成唯一字符
注:以下接口文档说明中的字段描述都是指bizContent加密前的业务数据字段。
业务数据以JSON字符串的形式,通过1.4 签名生成方式加密生成密文进行传输

  1. {
  2. "sign":"signaaaaaa",
  3. "bizContent":"bizContentaaaa",
  4. "requestNo":"a1234567899876543210",
  5. "merchantNo":"FM001"
  6. }

1.4 签名生成方式

encryptData

bizContent = encryptAES(业务数据json字符串, 商户密钥)
sign = md5(bizContent + appKey)
商户密钥:腾保提供
appKey:腾保提供

加解密Java代码如下:

  1. import org.apache.commons.codec.binary.Base64;
  2. import javax.crypto.Cipher;
  3. import javax.crypto.KeyGenerator;
  4. import javax.crypto.SecretKey;
  5. import java.security.MessageDigest;
  6. import java.security.SecureRandom;
  7. public class CommonTools {
  8. /**
  9. * AES 加密
  10. * @param content
  11. * @param aesKey
  12. * @return
  13. */
  14. public static String encryptAES(String content, String aesKey) {
  15. try {
  16. KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
  17. //需手动指定 SecureRandom 随机数生成规则,否则在Linux上可能生成随机key
  18. SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
  19. secureRandom.setSeed(aesKey.getBytes());
  20. keyGenerator.init(128, secureRandom);
  21. SecretKey secretKey = keyGenerator.generateKey();
  22. Cipher cipher = Cipher.getInstance("AES");
  23. cipher.init(Cipher.ENCRYPT_MODE, secretKey);
  24. byte[] encrypted = cipher.doFinal(content.getBytes("utf-8"));
  25. return Base64.encodeBase64String(encrypted);
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. return null;
  30. }
  31. /**
  32. * AES解密
  33. * @param content
  34. * @param aesKey
  35. * @return
  36. */
  37. public static String decryptAES(String content, String aesKey) {
  38. try {
  39. KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
  40. SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
  41. secureRandom.setSeed(aesKey.getBytes());
  42. keyGenerator.init(128, secureRandom);
  43. SecretKey secretKey = keyGenerator.generateKey();
  44. Cipher cipher = Cipher.getInstance("AES");
  45. cipher.init(Cipher.DECRYPT_MODE, secretKey);
  46. byte[] encrypted = cipher.doFinal(Base64.decodeBase64(content));
  47. return new String(encrypted, "utf-8");
  48. } catch (Exception e) {
  49. e.printStackTrace();
  50. }
  51. return null;
  52. }
  53. /**
  54. * MD5运算
  55. * @param content
  56. * @return
  57. */
  58. public static String md5(String content) {
  59. try {
  60. return Base64.encodeBase64String(MessageDigest.getInstance("MD5").digest(content.getBytes("utf-8")));
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. }
  64. return null;
  65. }
  66. /**
  67. * 校验验签
  68. * @param sign 签名
  69. * @param content 业务报文密文
  70. * @param md5Key md5key
  71. * @return
  72. */
  73. public static boolean checkSign(String sign,String content,String md5Key){
  74. String signGen = md5(content+md5Key);
  75. if(sign.equals(signGen)){
  76. return true;
  77. }
  78. return false ;
  79. }
  80. }

1.5通用响应参数

openResponse
属性 类型 含义
code string 操作状态码
errorMsg string 服务器提示信息
success boolean 操作状态(true表示成功,false表示失败)
result ResultResponse 返回数据内容
resultResponse
属性 类型 含义
sign string 签名
bizContent string 业务数据密文

注:以下接口文档说明中的字段描述都是指bizContent加密前的业务数据字段。
业务数据以JSON字符串的形式,通过1.4 签名生成方式加密生成密文进行传输

  1. {
  2. "code": "NM0000",
  3. "errorMsg": "操作成功",
  4. "result": {
  5. "sign":"signaaaaaa",
  6. "bizContent":"bizContentaaaa"
  7. },
  8. "success": true
  9. }

1.6通用响应异常

若服务器端处理请求发生错误(包含业务错误),将会返回error结构的json数据
如下示例:

  1. {
  2. "code": "9999",
  3. "errorMsg": "系统繁忙,请稍后再试",
  4. "result": null,
  5. "success": false
  6. }

客户端请统一处理此异常,错误代码定义如下:

错误码 错误说明 备注
NM0000 操作成功
9999 系统繁忙,请稍后再试

2. 意健险对接流程 API

2.1 保费计算SKU信息查询接口

作者 陈力

接口地址

POST ${baseUrl}/api/public/querySkuInfo

场景说明

通过该接口可以查询保费计算的SKU信息

请求体

详见 1.3通用请求参数 数据结构

请求bizContent明文字段说明:

属性 类型 是否必传 含义
productCode string 产品编码

请求bizContent明文样例:

  1. {
  2. "productCode":"SINOKOREA_LRSH"
  3. }

响应体

详见 1.5通用响应参数 数据结构

响应bizContent明文字段说明:

属性 类型 含义
productName string 产品名称
productCode string 产品编码
skuInfoTypes List<skuInfoType> sku项
skuInfoType
属性 类型 含义
typeCode string 类型编码
typeText string 类型说明
skuInfoValues List<skuInfoValue> sku取值说明
skuInfoValue
属性 类型 含义
valueCode string 取值编码
valueText string 取值说明
safeguardCode string 保障计划编码(创建订单时作为packCode传入)

响应bizContent明文样例:

  1. {
  2. "productName":"中韩丽人守护女性意外险",
  3. "productCode":"SINOKOREA_LRSH",
  4. "skuInfoTypes":[
  5. {
  6. "typeCode":"planCode",
  7. "typeText":"保障计划",
  8. "skuInfoValues":[
  9. {
  10. "valueCode":"b",
  11. "valueText":"未成年人",
  12. "safeguardCode":"0022c05c-d19f-4cbd-a0e0-311803e270c9"
  13. },
  14. {
  15. "valueCode":"a",
  16. "valueText":"成年人",
  17. "safeguardCode":"da96846a-88fb-4c90-95ac-79e44b4aad42"
  18. }
  19. ]
  20. },
  21. {
  22. "typeCode":"count",
  23. "typeText":"购买份数",
  24. "skuInfoValues":[
  25. {
  26. "valueCode":"input",
  27. "valueText":"购买份数"
  28. }
  29. ]
  30. }
  31. ]
  32. }

2.2 根据SKU信息计算保费接口

作者 陈力

接口地址

POST ${baseUrl}/api/public/premium/calculation

场景说明

调用方可通过该接口根据SKU信息计算保费

请求体

详见 1.3通用请求参数 数据结构

请求bizContent明文字段说明:

属性 类型 是否必传 含义
productCode String 产品编码
skuTypes List<SkuType> 选择的sku值
skuType
属性 类型 含义
typeCode String 类型编码
valueCode String 值代码

请求bizContent明文样例:

  1. {
  2. "productCode":"SINOKOREA_LRSH",
  3. "skuTypes":[
  4. {
  5. "typeCode":"planCode",
  6. "valueCode":"b"
  7. },
  8. {
  9. "typeCode":"count",
  10. "valueCode":"1"
  11. }
  12. ]
  13. }

响应体

详见 1.5通用响应参数 数据结构

响应bizContent明文字段说明:

属性 类型 是否必传 含义
productCode String 产品编码
totalPrice String 总保费
mainRiskPerm BigDecimal 主险保费

响应bizContent明文样例:

  1. {
  2. "productCode": "SINOKOREA_LRSH",
  3. "totalPrice": "36.50",
  4. "mainRiskPerm": 36.5
  5. }

2.3 生成订单接口

作者 陈力

接口地址

POST ${baseUrl}/api/public/createOrder

场景说明

生成订单

请求体

详见 1.3通用请求参数 数据结构

请求bizContent明文字段说明:

属性 类型 是否必传 含义
merchantNo String 商户号
productCode String 产品编码
packCode String 保障计划编码(sku查询接口返回的safeguardCode)
unitPrice BigDecimal 订单价格
uid String 商户对应用户唯一ID(建议用户手机号码)
skuItem skuItem sku查询接口返回的skuInfoType

skuItem

属性 类型 是否必传 含义
planCode String 产品编码
count String 数量

请求bizContent明文样例:

  1. {
  2. "merchantNo": "FM001",
  3. "productCode": "SINOKOREA_LRSH",
  4. "packCode": "0022c05c-d19f-4cbd-a0e0-311803e270c9",
  5. "unitPrice": 5365.06,
  6. "uid": "17700000000",
  7. "skuItem": {
  8. "planCode": "b",
  9. "count": "1"
  10. }
  11. }

响应体

详见 1.5通用响应参数 数据结构

响应bizContent明文字段说明:

属性 类型 是否必传 含义
orderId Integer 订单Id
orderNo String 订单号

响应bizContent明文样例:

  1. {
  2. "orderId":623,
  3. "orderNo":"20190218163309dmin59"
  4. }

2.4 核保接口

作者 陈力

接口地址

POST ${baseUrl}/api/public/underwriting

场景说明

说明

请求体

详见 1.3通用请求参数 数据结构

请求bizContent明文字段说明:

属性 类型 是否必传 含义
outOrderNo String 订单号(创建订单返回的orderNo)
productCode String 产品编码
tablesInfo TablesInfo 表单信息
legalBeneficiary Integer 是否法定受益人 1:法定0:指定
holderInfo HoldInfo 投保人信息
insuredInfo InsuredInfo 被保人信息

TablesInfo

属性 类型 是否必传 含义
startDate String 生效日期(格式:yyyy-MM-dd)

HoldInfo

属性 类型 是否必传 含义
realName String 姓名
gender String 性别 0:女 1:男
email String 电子邮箱
phone String 联系电话
idType String 证件类型 1:身份证
idNo String 证件号码
idEndDate String 证件止期(格式:yyyy-MM-dd)
birthday String 出生日期(格式:yyyy-MM-dd)
occupation String 职业编码
plyAddress PlyAddress 地址信息

InsuredInfo

属性 类型 是否必传 含义
realName String 姓名
gender String 性别 0:女 1:男
email String 电子邮箱
phone String 联系电话
idType String 证件类型 1:身份证 5:户口本
idNo String 证件号码
idEndDate String 证件止期(格式:yyyy-MM-dd)
birthday String 出生日期(格式:yyyy-MM-dd)
occupation String 职业编码
plyAddress PlyAddress 地址信息
relation String 投被保人关系 1:本人 3:子女

PlyAddress

属性 类型 是否必传 含义
province String 省code
city String 市code
country String 区code
addressDetail String 详细地址(不含省市区)
addressInfo String 完整地址

请求bizContent明文样例:

  1. {
  2. "outOrderNo":"20190220095329dmin01",
  3. "productCode":"SINOKOREA_LRSH",
  4. "tablesInfo":{
  5. "startDate":"2019-02-25"
  6. },
  7. "legalBeneficiary":1,
  8. "holderInfo": {
  9. "realName": "张慧丽",
  10. "gender": "0",
  11. "email": "tenbent007@163.com",
  12. "phone":"17700000000",
  13. "idType": "1",
  14. "idNo": "330102200001011483",
  15. "birthday": "2000-01-01",
  16. "idEndDate": "9999-12-31",
  17. "occupation":"3010202",
  18. "plyAddress": {
  19. "province": "330000",
  20. "city": "330100",
  21. "country": "330106",
  22. "addressDetail": "三墩镇古墩路701号紫金广场a座607室",
  23. "addressInfo": "浙江省杭州市西湖区三墩镇古墩路701号紫金广场a座607室"
  24. }
  25. },
  26. "insuredInfo": {
  27. "relation": "1",
  28. "realName": "张慧丽",
  29. "gender": "0",
  30. "email":"tenbent007@163.com",
  31. "idType": "1",
  32. "idNo": "330102200001011483",
  33. "birthday": "2000-01-01",
  34. "idEndDate": "9999-12-31",
  35. "occupation":"3010202",
  36. "plyAddress": {
  37. "province": "330000",
  38. "city": "330100",
  39. "country": "330106",
  40. "addressDetail": "三墩镇古墩路701号紫金广场a座607室",
  41. "addressInfo": "浙江省杭州市西湖区三墩镇古墩路701号紫金广场a座607室"
  42. }
  43. }
  44. }

响应体

详见 1.5通用响应参数 数据结构

响应bizContent明文字段说明:

属性 类型 是否必传 含义
orderNo String 内部订单号
orderStatus String 订单状态
outOrderNo String 订单号
proposalNo String 保险公司投保单号

响应bizContent明文样例:

  1. {
  2. "orderNo": "20190220095441000195",
  3. "orderStatus": 1,
  4. "outOrderNo": "20190220095329dmin01",
  5. "proposalNo": "2019022005004894"
  6. }

2.5 承保接口

作者 陈力

接口地址

POST ${baseUrl}/api/public/accept/insurance

场景说明

通过该接口可承保

请求体

详见 1.3通用请求参数 数据结构

请求bizContent明文字段说明:

属性 类型 是否必传 含义
outOrderNo String 订单号(创建订单返回的orderNo)
paymentSerialNumber String 支付流水号 调腾保收银台返回的trade_no
productCode String 产品编码

请求bizContent明文样例:

  1. {
  2. "outOrderNo": "20190220095329dmin01",
  3. "paymentSerialNumber": "20190215000000000",
  4. "productCode": "SINOKOREA_LRSH"
  5. }

响应体

详见 1.5通用响应参数 数据结构

响应bizContent明文字段说明:

属性 类型 是否必传 含义
policyNo String 保单号
epolicyUrl String 电子保单地址

响应bizContent明文样例:

  1. {
  2. "policyNo": "2019022005004894",
  3. "epolicyUrl": "http://eserviceuat.sinokorealife.com.cn:9082/eservice/elecCont.action?action=commonDownloadPol&contNo=b5d9d2f0b3c1b3d5fab7f6d3ebe5b3c4e5ebf0ebcbf0cdc3f5c8c7b5daf2fac8&type=c2f9f8afd7c7e2f2e4b2e7bd&sign=5b93e2b65d4677ecb777dcf2acf7448f&thirdOrderId=20190220095441000195&timestamp=xiaoyusan"
  4. }

2.6 查询产品对应的其他属性接口

作者 陈力

接口地址

POST ${baseUrl}/api/public/search/product/other

场景说明

说明

请求体

详见 1.3通用请求参数 数据结构

请求bizContent明文字段说明:

属性 类型 是否必传 含义
productCode String 产品编码
typeCode String 类型编码(职业编码:occupation)

请求bizContent明文样例:

  1. {
  2. "productCode": "SINOKOREA_LRSH",
  3. "typeCode": "occupation"
  4. }

响应体

详见 1.5通用响应参数 数据结构

响应bizContent明文字段说明:

属性 类型 是否必传 含义
productCode String 产品编码
productName String 产品名称
typeCode String 类型编码(职业编码:occupation)
typeName String 类型名称
valueJson String 信息内容(name:介绍value:编码)

响应bizContent明文样例:

  1. {
  2. "productCode": "SINOKOREA_LRSH",
  3. "productName": "中韩丽人守护女性意外伤害保险",
  4. "typeCode": "occupation",
  5. "typeName": "职业代码",
  6. "valueJson": "[ { \"name\" : \"一般内勤\" , \"value\" : \"3010101\"} , { \"name\" : \"学生\" , \"value\" : \"2099907\"} , { \"name\" : \"学龄前儿童\" , \"value\" : \"2099908\"} , { \"name\" : \"公务员\" , \"value\" : \"3010202\"} , { \"name\" : \"教师\" , \"value\" : \"2090101\"} , { \"name\" : \"内科医生\" , \"value\" : \"2050101\"} , { \"name\" : \"家庭主妇\" , \"value\" : \"4071203\"} , { \"name\" : \"退休人员\" , \"value\" : \"8000002\"} , { \"name\" : \"财务人员\" , \"value\" : \"2060301\"} , { \"name\" : \"食品服饰买卖商\" , \"value\" : \"4071521\"} , { \"name\" : \"企业负责人和经理\" , \"value\" : \"1050102\"} , { \"name\" : \"外勤\" , \"value\" : \"3010102\"} , { \"name\" : \"销售人员\" , \"value\" : \"3010102\"} , { \"name\" : \"个体摊贩\" , \"value\" : \"4019903\"} , { \"name\" : \"农夫\" , \"value\" : \"5010101\"} , { \"name\" : \"外科医生\" , \"value\" : \"2050102\"} , { \"name\" : \"物业管理人员\" , \"value\" : \"4070201\"} , { \"name\" : \"一般技术人员\" , \"value\" : \"2021201\"} , { \"name\" : \"工程师\" , \"value\" : \"6030515\"} , { \"name\" : \"建材五金电器商\" , \"value\" : \"4071514\"} , { \"name\" : \"一般工人\" , \"value\" : \"6030517\"} , { \"name\" : \"承保商(土木建筑)\" , \"value\" : \"2022112\"} , { \"name\" : \"室内装潢人员\" , \"value\" : \"6230708\"} , { \"name\" : \"一般警察\" , \"value\" : \"3020102\"} , { \"name\" : \"驾校教练\" , \"value\" : \"2099903\"} , { \"name\" : \"客车司机\" , \"value\" : \"6240102\"} , { \"name\" : \"有摩托车驾照人员\" , \"value\" : \"6240115\"} , { \"name\" : \"出租车司机\" , \"value\" : \"6240103\"} , { \"name\" : \"自用货车司机\" , \"value\" : \"6240107\"} , { \"name\" : \"机修技工\" , \"value\" : \"6040116\"} , { \"name\" : \"搬运工\" , \"value\" : \"4050212\"} , { \"name\" : \"保安\" , \"value\" : \"3020201\"} , { \"name\" : \"门窗空调安装人员\" , \"value\" : \"6051001\"} , { \"name\" : \"水电工\" , \"value\" : \"6070408\"} , { \"name\" : \"车床工(全自动)\" , \"value\" : \"6040119\"} , { \"name\" : \"交通警察\" , \"value\" : \"3020104\"}]",
  7. "gmtCreated": "2019-02-19 03:55:22",
  8. "gmtModified": "2019-02-19 03:55:22"
  9. }

3. 意健险对接流程 API

3.1 码值信息

errorDisplay

常见报价结果错误

code name
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注