@tenbentYun
2019-04-10T04:00:30.000000Z
字数 10389
阅读 489
腾保商户中心
- 对于所有的API接口,使用HTTP状态码来代表本次请求是否成功
- 当成功提供服务后返回HTTP200状态码,代表本次请求数据成功,并代表业务也成功
- 当服务器端由于某种错误导致服务失败,将会返回400、415、500,或者其它错误代码
| 属性 | 类型 | 含义 |
|---|---|---|
| sign | string | 签名 |
| bizContent | string | 业务数据密文 |
| requestNo | string | 20位流水号 |
| merchantNo | string | 商户号 |
merchantNo商户号:腾保提供
20位流水号:商户生成唯一字符
注:以下接口文档说明中的字段描述都是指bizContent加密前的业务数据字段。
业务数据以JSON字符串的形式,通过1.4 签名生成方式加密生成密文进行传输
{"sign":"signaaaaaa","bizContent":"bizContentaaaa","requestNo":"a1234567899876543210","merchantNo":"FM001"}
bizContent = encryptAES(业务数据json字符串, 商户密钥)
sign = md5(bizContent + appKey)
商户密钥:腾保提供
appKey:腾保提供
加解密Java代码如下:
import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import java.security.MessageDigest;import java.security.SecureRandom;public class CommonTools {/*** AES 加密* @param content* @param aesKey* @return*/public static String encryptAES(String content, String aesKey) {try {KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");//需手动指定 SecureRandom 随机数生成规则,否则在Linux上可能生成随机keySecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed(aesKey.getBytes());keyGenerator.init(128, secureRandom);SecretKey secretKey = keyGenerator.generateKey();Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] encrypted = cipher.doFinal(content.getBytes("utf-8"));return Base64.encodeBase64String(encrypted);} catch (Exception e) {e.printStackTrace();}return null;}/*** AES解密* @param content* @param aesKey* @return*/public static String decryptAES(String content, String aesKey) {try {KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed(aesKey.getBytes());keyGenerator.init(128, secureRandom);SecretKey secretKey = keyGenerator.generateKey();Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] encrypted = cipher.doFinal(Base64.decodeBase64(content));return new String(encrypted, "utf-8");} catch (Exception e) {e.printStackTrace();}return null;}/*** MD5运算* @param content* @return*/public static String md5(String content) {try {return Base64.encodeBase64String(MessageDigest.getInstance("MD5").digest(content.getBytes("utf-8")));} catch (Exception e) {e.printStackTrace();}return null;}/*** 校验验签* @param sign 签名* @param content 业务报文密文* @param md5Key md5key* @return*/public static boolean checkSign(String sign,String content,String md5Key){String signGen = md5(content+md5Key);if(sign.equals(signGen)){return true;}return false ;}}
| 属性 | 类型 | 含义 |
|---|---|---|
| code | string | 操作状态码 |
| errorMsg | string | 服务器提示信息 |
| success | boolean | 操作状态(true表示成功,false表示失败) |
| result | ResultResponse | 返回数据内容 |
| 属性 | 类型 | 含义 |
|---|---|---|
| sign | string | 签名 |
| bizContent | string | 业务数据密文 |
注:以下接口文档说明中的字段描述都是指bizContent加密前的业务数据字段。
业务数据以JSON字符串的形式,通过1.4 签名生成方式加密生成密文进行传输
{"code": "NM0000","errorMsg": "操作成功","result": {"sign":"signaaaaaa","bizContent":"bizContentaaaa"},"success": true}
若服务器端处理请求发生错误(包含业务错误),将会返回error结构的json数据
如下示例:
{"code": "9999","errorMsg": "系统繁忙,请稍后再试","result": null,"success": false}
客户端请统一处理此异常,错误代码定义如下:
| 错误码 | 错误说明 | 备注 |
|---|---|---|
| NM0000 | 操作成功 | |
| 9999 | 系统繁忙,请稍后再试 |
陈力POST
${baseUrl}/api/public/querySkuInfo
通过该接口可以查询保费计算的SKU信息
详见 1.3通用请求参数 数据结构
请求bizContent明文字段说明:
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| productCode | string | 是 | 产品编码 |
请求bizContent明文样例:
{"productCode":"SINOKOREA_LRSH"}
详见 1.5通用响应参数 数据结构
响应bizContent明文字段说明:
| 属性 | 类型 | 含义 |
|---|---|---|
| productName | string | 产品名称 |
| productCode | string | 产品编码 |
| skuInfoTypes | List<skuInfoType> | sku项 |
| 属性 | 类型 | 含义 |
|---|---|---|
| typeCode | string | 类型编码 |
| typeText | string | 类型说明 |
| skuInfoValues | List<skuInfoValue> | sku取值说明 |
| 属性 | 类型 | 含义 |
|---|---|---|
| valueCode | string | 取值编码 |
| valueText | string | 取值说明 |
| safeguardCode | string | 保障计划编码(创建订单时作为packCode传入) |
响应bizContent明文样例:
{"productName":"中韩丽人守护女性意外险","productCode":"SINOKOREA_LRSH","skuInfoTypes":[{"typeCode":"planCode","typeText":"保障计划","skuInfoValues":[{"valueCode":"b","valueText":"未成年人","safeguardCode":"0022c05c-d19f-4cbd-a0e0-311803e270c9"},{"valueCode":"a","valueText":"成年人","safeguardCode":"da96846a-88fb-4c90-95ac-79e44b4aad42"}]},{"typeCode":"count","typeText":"购买份数","skuInfoValues":[{"valueCode":"input","valueText":"购买份数"}]}]}
陈力POST
${baseUrl}/api/public/premium/calculation
调用方可通过该接口根据SKU信息计算保费
详见 1.3通用请求参数 数据结构
请求bizContent明文字段说明:
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| productCode | String | 是 | 产品编码 |
| skuTypes | List<SkuType> | 是 | 选择的sku值 |
| 属性 | 类型 | 含义 |
|---|---|---|
| typeCode | String | 类型编码 |
| valueCode | String | 值代码 |
请求bizContent明文样例:
{"productCode":"SINOKOREA_LRSH","skuTypes":[{"typeCode":"planCode","valueCode":"b"},{"typeCode":"count","valueCode":"1"}]}
详见 1.5通用响应参数 数据结构
响应bizContent明文字段说明:
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| productCode | String | 是 | 产品编码 |
| totalPrice | String | 是 | 总保费 |
| mainRiskPerm | BigDecimal | 是 | 主险保费 |
响应bizContent明文样例:
{"productCode": "SINOKOREA_LRSH","totalPrice": "36.50","mainRiskPerm": 36.5}
陈力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 |
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| planCode | String | 是 | 产品编码 |
| count | String | 是 | 数量 |
请求bizContent明文样例:
{"merchantNo": "FM001","productCode": "SINOKOREA_LRSH","packCode": "0022c05c-d19f-4cbd-a0e0-311803e270c9","unitPrice": 5365.06,"uid": "17700000000","skuItem": {"planCode": "b","count": "1"}}
详见 1.5通用响应参数 数据结构
响应bizContent明文字段说明:
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| orderId | Integer | 是 | 订单Id |
| orderNo | String | 是 | 订单号 |
响应bizContent明文样例:
{"orderId":623,"orderNo":"20190218163309dmin59"}
陈力POST
${baseUrl}/api/public/underwriting
说明
详见 1.3通用请求参数 数据结构
请求bizContent明文字段说明:
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| outOrderNo | String | 是 | 订单号(创建订单返回的orderNo) |
| productCode | String | 是 | 产品编码 |
| tablesInfo | TablesInfo | 是 | 表单信息 |
| legalBeneficiary | Integer | 是 | 是否法定受益人 1:法定0:指定 |
| holderInfo | HoldInfo | 是 | 投保人信息 |
| insuredInfo | InsuredInfo | 是 | 被保人信息 |
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| startDate | String | 是 | 生效日期(格式:yyyy-MM-dd) |
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| realName | String | 是 | 姓名 |
| gender | String | 是 | 性别 0:女 1:男 |
| String | 否 | 电子邮箱 | |
| phone | String | 是 | 联系电话 |
| idType | String | 是 | 证件类型 1:身份证 |
| idNo | String | 是 | 证件号码 |
| idEndDate | String | 否 | 证件止期(格式:yyyy-MM-dd) |
| birthday | String | 是 | 出生日期(格式:yyyy-MM-dd) |
| occupation | String | 否 | 职业编码 |
| plyAddress | PlyAddress | 是 | 地址信息 |
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| realName | String | 是 | 姓名 |
| gender | String | 是 | 性别 0:女 1:男 |
| 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:子女 |
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| province | String | 是 | 省code |
| city | String | 是 | 市code |
| country | String | 是 | 区code |
| addressDetail | String | 是 | 详细地址(不含省市区) |
| addressInfo | String | 是 | 完整地址 |
请求bizContent明文样例:
{"outOrderNo":"20190220095329dmin01","productCode":"SINOKOREA_LRSH","tablesInfo":{"startDate":"2019-02-25"},"legalBeneficiary":1,"holderInfo": {"realName": "张慧丽","gender": "0","email": "tenbent007@163.com","phone":"17700000000","idType": "1","idNo": "330102200001011483","birthday": "2000-01-01","idEndDate": "9999-12-31","occupation":"3010202","plyAddress": {"province": "330000","city": "330100","country": "330106","addressDetail": "三墩镇古墩路701号紫金广场a座607室","addressInfo": "浙江省杭州市西湖区三墩镇古墩路701号紫金广场a座607室"}},"insuredInfo": {"relation": "1","realName": "张慧丽","gender": "0","email":"tenbent007@163.com","idType": "1","idNo": "330102200001011483","birthday": "2000-01-01","idEndDate": "9999-12-31","occupation":"3010202","plyAddress": {"province": "330000","city": "330100","country": "330106","addressDetail": "三墩镇古墩路701号紫金广场a座607室","addressInfo": "浙江省杭州市西湖区三墩镇古墩路701号紫金广场a座607室"}}}
详见 1.5通用响应参数 数据结构
响应bizContent明文字段说明:
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| orderNo | String | 是 | 内部订单号 |
| orderStatus | String | 是 | 订单状态 |
| outOrderNo | String | 是 | 订单号 |
| proposalNo | String | 是 | 保险公司投保单号 |
响应bizContent明文样例:
{"orderNo": "20190220095441000195","orderStatus": 1,"outOrderNo": "20190220095329dmin01","proposalNo": "2019022005004894"}
陈力POST
${baseUrl}/api/public/accept/insurance
通过该接口可承保
详见 1.3通用请求参数 数据结构
请求bizContent明文字段说明:
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| outOrderNo | String | 是 | 订单号(创建订单返回的orderNo) |
| paymentSerialNumber | String | 是 | 支付流水号 调腾保收银台返回的trade_no |
| productCode | String | 是 | 产品编码 |
请求bizContent明文样例:
{"outOrderNo": "20190220095329dmin01","paymentSerialNumber": "20190215000000000","productCode": "SINOKOREA_LRSH"}
详见 1.5通用响应参数 数据结构
响应bizContent明文字段说明:
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| policyNo | String | 是 | 保单号 |
| epolicyUrl | String | 是 | 电子保单地址 |
响应bizContent明文样例:
{"policyNo": "2019022005004894","epolicyUrl": "http://eserviceuat.sinokorealife.com.cn:9082/eservice/elecCont.action?action=commonDownloadPol&contNo=b5d9d2f0b3c1b3d5fab7f6d3ebe5b3c4e5ebf0ebcbf0cdc3f5c8c7b5daf2fac8&type=c2f9f8afd7c7e2f2e4b2e7bd&sign=5b93e2b65d4677ecb777dcf2acf7448f&thirdOrderId=20190220095441000195×tamp=xiaoyusan"}
陈力POST
${baseUrl}/api/public/search/product/other
说明
详见 1.3通用请求参数 数据结构
请求bizContent明文字段说明:
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| productCode | String | 是 | 产品编码 |
| typeCode | String | 是 | 类型编码(职业编码:occupation) |
请求bizContent明文样例:
{"productCode": "SINOKOREA_LRSH","typeCode": "occupation"}
详见 1.5通用响应参数 数据结构
响应bizContent明文字段说明:
| 属性 | 类型 | 是否必传 | 含义 |
|---|---|---|---|
| productCode | String | 是 | 产品编码 |
| productName | String | 是 | 产品名称 |
| typeCode | String | 是 | 类型编码(职业编码:occupation) |
| typeName | String | 是 | 类型名称 |
| valueJson | String | 是 | 信息内容(name:介绍value:编码) |
响应bizContent明文样例:
{"productCode": "SINOKOREA_LRSH","productName": "中韩丽人守护女性意外伤害保险","typeCode": "occupation","typeName": "职业代码","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\"}]","gmtCreated": "2019-02-19 03:55:22","gmtModified": "2019-02-19 03:55:22"}
常见报价结果错误
| code | name |
|---|