公开文档

公开文档


HWA005-理赔第三方报案-待立案接口

<p><strong>简要描述:</strong></p> <ul> <li>第三方自动报案-待立案接口,实现和第三方的系统对接</li> </ul> <p><strong>应用场景:</strong></p> <ul> <li>闪送自动报案-待立案接口</li> </ul> <p><strong>流程图:</strong></p> <p><strong>请求URL:</strong></p> <p>135.169地址 外网网135地址(新):<a href="https://sit-claim.95505.cn/httpClaimServices">https://sit-claim.95505.cn/httpClaimServices</a> 生产接口地址: 核心生产外网:<a href="https://claim-net-api.95505.cn/httpClaimServices">https://claim-net-api.95505.cn/httpClaimServices</a> (需提供白名单)</p> <p><strong>请求方式:</strong></p> <ul> <li>POST +JSON</li> </ul> <p><strong>特别说明:</strong></p> <ul> <li>因加密后存在特殊字符,需要针对整个报文进行urlencode转码</li> <li>在线转码地址:<a href="http://www.jsons.cn/urlencode">http://www.jsons.cn/urlencode</a></li> </ul> <p><strong>调用方法名:</strong></p> <ul> <li>autoCommonClaim</li> </ul> <p><strong>输入参数:</strong></p> <ul> <li>输入流+json</li> </ul> <p><strong>输出参数:</strong></p> <ul> <li>输入流+json</li> </ul> <p><strong>入参返参参数说明</strong> </p> <table> <thead> <tr> <th style="text-align: left;">字段名称</th> <th style="text-align: left;">英文</th> <th>类型</th> <th>字段长度</th> <th>是否可空</th> <th>是否多值</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">httpRequest(请求消息体)</td> </tr> <tr> <td style="text-align: left;">请求交易头信息</td> <td style="text-align: left;">requestHead</td> <td>RequestHead</td> <td>no</td> <td>no</td> <td>详见公共参数</td> </tr> <tr> <td style="text-align: left;">客户必须提供的参数对象</td> <td style="text-align: left;">requestBody</td> <td>RequestBody</td> <td>no</td> <td>no</td> </tr> <tr> <td style="text-align: left;">RequestHead (请求交易头信息)</td> </tr> <tr> <td style="text-align: left;">服务代码</td> <td style="text-align: left;">serviceClass</td> <td>String</td> <td>no</td> <td>no</td> <td>HWA005</td> </tr> <tr> <td style="text-align: left;">服务名称</td> <td style="text-align: left;">serviceName</td> <td>String</td> <td>no</td> <td>no</td> <td>autoCommonClaim</td> </tr> <tr> <td style="text-align: left;">用户代码</td> <td style="text-align: left;">userCode</td> <td>String</td> <td>no</td> <td>no</td> <td>TACommon-渠道来源-时间戳。SHANSONG(闪送)。 示例:TACommon-SHANSONG-1592292706</td> </tr> <tr> <td style="text-align: left;">用户名称</td> <td style="text-align: left;">userName</td> <td>String</td> <td>no</td> <td>no</td> <td>对usercode值进行公钥加密后的密文值</td> </tr> <tr> <td style="text-align: left;">RequestBody (客户必须提供的参数对象)</td> </tr> <tr> <td style="text-align: left;">保单号</td> <td style="text-align: left;">policyNo</td> <td>String</td> <td>50</td> <td>no</td> <td>no</td> <td>保单号</td> </tr> <tr> <td style="text-align: left;">订单号</td> <td style="text-align: left;">orderNo</td> <td>String</td> <td>50</td> <td>no</td> <td>no</td> <td>订单号</td> </tr> <tr> <td style="text-align: left;">报案人名称</td> <td style="text-align: left;">reporterName</td> <td>String</td> <td>255</td> <td>no</td> <td>no</td> </tr> <tr> <td style="text-align: left;">报案人电话</td> <td style="text-align: left;">reporterPhoneNumber</td> <td>String</td> <td>30</td> <td>no</td> <td>no</td> </tr> <tr> <td style="text-align: left;">出险时间</td> <td style="text-align: left;">damageStartDate</td> <td>date</td> <td>no</td> <td>no</td> <td>出险时间:格式:yyyy-MM-dd HH:mm:ss</td> </tr> <tr> <td style="text-align: left;">被保险人</td> <td style="text-align: left;">insuredName</td> <td>String</td> <td>255</td> <td>no</td> <td>no</td> <td>被保险人</td> </tr> <tr> <td style="text-align: left;">出险省</td> <td style="text-align: left;">damageProvince</td> <td>String</td> <td>30</td> <td>no</td> <td>no</td> <td>出险的省(省编码),广东省_440000后的编码code</td> </tr> <tr> <td style="text-align: left;">出险市</td> <td style="text-align: left;">damageCity</td> <td>String</td> <td>30</td> <td>no</td> <td>no</td> <td>出险的市(市编码),广州市_440100后的编码code</td> </tr> <tr> <td style="text-align: left;">出险区/镇</td> <td style="text-align: left;">damageDistrict</td> <td>String</td> <td>30</td> <td>no</td> <td>no</td> <td>出险的区县(区县编码)</td> </tr> <tr> <td style="text-align: left;">出险地点</td> <td style="text-align: left;">address</td> <td>String</td> <td>255</td> <td>no</td> <td>no</td> <td>详细地址</td> </tr> <tr> <td style="text-align: left;">出险经过</td> <td style="text-align: left;">registContext</td> <td>String</td> <td>255</td> <td>no</td> <td>no</td> <td>出险经过</td> </tr> <tr> <td style="text-align: left;">出险原因</td> <td style="text-align: left;">damageCode</td> <td>String</td> <td>255</td> <td>no</td> <td>no</td> <td>出险原因:401-疾病、402-意外、199-其他责任险</td> </tr> <tr> <td style="text-align: left;">报案来源</td> <td style="text-align: left;">reportResource</td> <td>String</td> <td>no</td> <td>no</td> <td>报案来源:SHANSONG(闪送)</td> </tr> </tbody> </table> <p><strong>入参示例</strong></p> <pre><code>--因加密后存在特殊字符,需要针对整个报文进行urlencode转码 --在线转码地址:http://www.jsons.cn/urlencode { &amp;quot;httpRequest&amp;quot;: { &amp;quot;requestHead&amp;quot;: { &amp;quot;serviceClass&amp;quot;: &amp;quot;HWA005&amp;quot;, &amp;quot;serviceName&amp;quot;: &amp;quot;autoCommonClaim&amp;quot;, &amp;quot;userCode&amp;quot;: &amp;quot;TACommon-SHANSONG-1592292706&amp;quot;, &amp;quot;userName&amp;quot;: &amp;quot;Tuxy/bHcJinqTiCMQkunzdfAE0D3BFOSFzDd+Gpg/W32+ssf4N0MLv/ht1k2bzRenjOqvLgFucGgjBrm9pRCnbvBlpgybgP1UaHz5zFW4s6KwnhLMjZh7tfkqKVlpYmU9t6pakuWTvtatMq6KwxKScojv2ebWL5w0V9KFgr6eoA=&amp;quot; }, &amp;quot;requestBody&amp;quot;: { &amp;quot;policyNo&amp;quot;: &amp;quot;6614030110706220000037&amp;quot;, &amp;quot;orderNo&amp;quot;: &amp;quot;ordremoteDev20220803001&amp;quot;, &amp;quot;reporterName&amp;quot;: &amp;quot;张无忌&amp;quot;, &amp;quot;reporterPhoneNumber&amp;quot;: &amp;quot;18404983580&amp;quot;, &amp;quot;damageStartDate&amp;quot;: &amp;quot;2022-07-10 07:19:33&amp;quot;, &amp;quot;insuredName&amp;quot;: &amp;quot;张无忌&amp;quot;, &amp;quot;damageProvince&amp;quot;: &amp;quot;320000&amp;quot;, &amp;quot;damageCity&amp;quot;: &amp;quot;320200&amp;quot;, &amp;quot;damageDistrict&amp;quot;: &amp;quot;320282&amp;quot;, &amp;quot;address&amp;quot;: &amp;quot;卡园三路58号&amp;quot;, &amp;quot;registContext&amp;quot;: &amp;quot;卡园三路58号xxxxxxxxxx&amp;quot;, &amp;quot;damageCode&amp;quot;: &amp;quot;402&amp;quot;, &amp;quot;reportResource&amp;quot;: &amp;quot;SHANSONG&amp;quot;, &amp;quot;kindList&amp;quot;: [ { &amp;quot;lossType&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;lossName&amp;quot;: &amp;quot;张无忌&amp;quot;, &amp;quot;sex&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;identifyType&amp;quot;: &amp;quot;01&amp;quot;, &amp;quot;identifyNo&amp;quot;: &amp;quot;450200198807169335&amp;quot;, &amp;quot;age&amp;quot;: &amp;quot;34&amp;quot;, &amp;quot;kindCode&amp;quot;: &amp;quot;1107096&amp;quot;, &amp;quot;chargeCode&amp;quot;: &amp;quot;03&amp;quot;, &amp;quot;chargeName&amp;quot;: &amp;quot;伤残赔偿金&amp;quot;, &amp;quot;undwrtRate&amp;quot;: &amp;quot;100&amp;quot;, &amp;quot;paidAmount&amp;quot;: &amp;quot;100.00&amp;quot; } ], &amp;quot;clmPaymentInfoList&amp;quot;: [ { &amp;quot;accountName&amp;quot;: &amp;quot;张三&amp;quot;, &amp;quot;accountNo&amp;quot;: &amp;quot;62324567458908&amp;quot;, &amp;quot;bankPayType&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;payeeBankCode&amp;quot;: &amp;quot;10400008&amp;quot;, &amp;quot;idType&amp;quot;: &amp;quot;01&amp;quot;, &amp;quot;idNo&amp;quot;: &amp;quot;110101199003075955&amp;quot;, &amp;quot;payAmount&amp;quot;: &amp;quot;100.00&amp;quot;, &amp;quot;payeeMobile&amp;quot;: &amp;quot;13587980836&amp;quot; } ], &amp;quot;clmXSHospitalDto&amp;quot;: { &amp;quot;hospitalProvince&amp;quot;: &amp;quot;440000&amp;quot;, &amp;quot;hospitalCity&amp;quot;: &amp;quot;440100&amp;quot;, &amp;quot;hospitalName&amp;quot;: &amp;quot;广州市人民医院&amp;quot; } } } } </code></pre> <p><strong>返回示例</strong></p> <pre><code> { &amp;quot;httpResponse&amp;quot;: { &amp;quot;responseHead&amp;quot;: { &amp;quot;resultCode&amp;quot;: &amp;quot;000&amp;quot;, &amp;quot;errorMessage&amp;quot;: &amp;quot;成功&amp;quot;, &amp;quot;serviceClass&amp;quot;: &amp;quot;HWA005&amp;quot;, &amp;quot;serviceName&amp;quot;: &amp;quot;autoCommonClaim&amp;quot; }, &amp;quot;responseBody&amp;quot;: { &amp;quot;registNo&amp;quot;: &amp;quot;07613108082020000050&amp;quot; } } }</code></pre> <p><strong>备注</strong> </p> <ul> <li>无</li> </ul> <p><strong>枚举信息</strong></p> <ul> <li>人伤证件类型</li> </ul> <table> <thead> <tr> <th style="text-align: left;">代码</th> <th style="text-align: left;">名称</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">01</td> <td style="text-align: left;">居民身份证</td> </tr> <tr> <td style="text-align: left;">02</td> <td style="text-align: left;">军官证</td> </tr> <tr> <td style="text-align: left;">03</td> <td style="text-align: left;">护照</td> </tr> <tr> <td style="text-align: left;">04</td> <td style="text-align: left;">居民户口簿</td> </tr> <tr> <td style="text-align: left;">05</td> <td style="text-align: left;">士兵证</td> </tr> <tr> <td style="text-align: left;">06</td> <td style="text-align: left;">学生证</td> </tr> <tr> <td style="text-align: left;">07</td> <td style="text-align: left;">驾驶证</td> </tr> <tr> <td style="text-align: left;">08</td> <td style="text-align: left;">军官退休证</td> </tr> <tr> <td style="text-align: left;">09</td> <td style="text-align: left;">外国人居留证</td> </tr> <tr> <td style="text-align: left;">10</td> <td style="text-align: left;">警官证</td> </tr> <tr> <td style="text-align: left;">11</td> <td style="text-align: left;">其他</td> </tr> <tr> <td style="text-align: left;">550</td> <td style="text-align: left;">港澳台居民居住证</td> </tr> <tr> <td style="text-align: left;">551</td> <td style="text-align: left;">出生证明</td> </tr> </tbody> </table> <ul> <li>险别</li> </ul> <table> <thead> <tr> <th style="text-align: left;">险别编码</th> <th style="text-align: left;">险别名称</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">8901010</td> <td style="text-align: left;">非机动车第三者人员伤亡及财产损失责任</td> <td>敬之:物,三者人</td> </tr> <tr> <td style="text-align: left;">8901004</td> <td style="text-align: left;">意外伤害身故、伤残</td> <td>敬之:出现人为被保险人,根据实际情况传值</td> </tr> <tr> <td style="text-align: left;">8901007</td> <td style="text-align: left;">意外医疗保险</td> <td>敬之:出现人为被保险人,根据实际情况传值</td> </tr> <tr> <td style="text-align: left;">8901008</td> <td style="text-align: left;">猝死保险</td> <td>敬之:出现人为被保险人,根据实际情况传值</td> </tr> </tbody> </table> <p><strong>加解密</strong></p> <ul> <li>针对userCode进行加密,加密后密文存值userName中 --密钥群里或者邮件提供</li> </ul> <pre><code> package com.sinosoft.application.common; import org.apache.commons.codec.binary.Base64; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import javax.crypto.Cipher; import java.io.ByteArrayOutputStream; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Map; import java.util.TreeMap; public class RSASecurityUtil { /** * RSA最大加密明文大小 */ private static final int MAX_ENCRYPT_BLOCK = 117; /** * RSA最大解密密文大小 */ private static final int MAX_DECRYPT_BLOCK = 128; /** * 获取密钥对 * * @return 密钥对 */ public static KeyPair getKeyPair() throws Exception { KeyPairGenerator generator = KeyPairGenerator.getInstance(&amp;quot;RSA&amp;quot;); generator.initialize(1024); return generator.generateKeyPair(); } /** * 获取私钥 * * @param privateKey 私钥字符串 * @return */ public static PrivateKey getPrivateKey(String privateKey) throws Exception { KeyFactory keyFactory = KeyFactory.getInstance(&amp;quot;RSA&amp;quot;); byte[] decodedKey = Base64.decodeBase64(privateKey.getBytes()); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decodedKey); return keyFactory.generatePrivate(keySpec); } /** * 获取公钥 * * @param publicKey 公钥字符串 * @return */ public static PublicKey getPublicKey(String publicKey) throws Exception { KeyFactory keyFactory = KeyFactory.getInstance(&amp;quot;RSA&amp;quot;); byte[] decodedKey = Base64.decodeBase64(publicKey.getBytes()); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(decodedKey); return keyFactory.generatePublic(keySpec); } /** * RSA加密 * * @param data 待加密数据 * @param publicKey 公钥 * @return */ public static String encrypt(String data, PublicKey publicKey) throws Exception { Cipher cipher = Cipher.getInstance(&amp;quot;RSA&amp;quot;); cipher.init(Cipher.ENCRYPT_MODE, publicKey); int inputLen = data.getBytes().length; ByteArrayOutputStream out = new ByteArrayOutputStream(); int offset = 0; byte[] cache; int i = 0; // 对数据分段加密 while (inputLen - offset &amp;gt; 0) { if (inputLen - offset &amp;gt; MAX_ENCRYPT_BLOCK) { cache = cipher.doFinal(data.getBytes(), offset, MAX_ENCRYPT_BLOCK); } else { cache = cipher.doFinal(data.getBytes(), offset, inputLen - offset); } out.write(cache, 0, cache.length); i++; offset = i * MAX_ENCRYPT_BLOCK; } byte[] encryptedData = out.toByteArray(); out.close(); // 获取加密内容使用base64进行编码,并以UTF-8为标准转化成字符串 // 加密后的字符串 return new String(Base64.encodeBase64(encryptedData)); } /** * RSA解密 * * @param data 待解密数据 * @param privateKey 私钥 * @return */ public static String decrypt(String data, PrivateKey privateKey) throws Exception { Cipher cipher = Cipher.getInstance(&amp;quot;RSA&amp;quot;); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] dataBytes = Base64.decodeBase64(data.getBytes()); int inputLen = dataBytes.length; ByteArrayOutputStream out = new ByteArrayOutputStream(); int offset = 0; byte[] cache; int i = 0; // 对数据分段解密 while (inputLen - offset &amp;gt; 0) { if (inputLen - offset &amp;gt; MAX_DECRYPT_BLOCK) { cache = cipher.doFinal(dataBytes, offset, MAX_DECRYPT_BLOCK); } else { cache = cipher.doFinal(dataBytes, offset, inputLen - offset); } out.write(cache, 0, cache.length); i++; offset = i * MAX_DECRYPT_BLOCK; } byte[] decryptedData = out.toByteArray(); out.close(); // 解密后的内容 return new String(decryptedData, &amp;quot;UTF-8&amp;quot;); } /** * 签名 * * @param data 待签名数据 * @param privateKey 私钥 * @return 签名 */ public static String sign(String data, PrivateKey privateKey) throws Exception { byte[] keyBytes = privateKey.getEncoded(); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(&amp;quot;RSA&amp;quot;); PrivateKey key = keyFactory.generatePrivate(keySpec); Signature signature = Signature.getInstance(&amp;quot;MD5withRSA&amp;quot;); signature.initSign(key); signature.update(data.getBytes(&amp;quot;UTF-8&amp;quot;)); return new String(Base64.encodeBase64(signature.sign())); } /** * 验签 * * @param srcData 原始字符串 * @param publicKey 公钥 * @param sign 签名 * @return 是否验签通过 */ public static boolean verify(String srcData, PublicKey publicKey, String sign) throws Exception { byte[] keyBytes = publicKey.getEncoded(); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(&amp;quot;RSA&amp;quot;); PublicKey key = keyFactory.generatePublic(keySpec); Signature signature = Signature.getInstance(&amp;quot;MD5withRSA&amp;quot;); signature.initVerify(key); signature.update(srcData.getBytes(&amp;quot;UTF-8&amp;quot;)); return signature.verify(Base64.decodeBase64(sign.getBytes())); } /** * GET请求,业务参数签名 * @param paramsMap get请求参数的map集合 * @param privateKeyStr 参与签名的私钥 * @return */ public static String signForHttpGet(Map&amp;lt;String, String&amp;gt; paramsMap, String privateKeyStr) { TreeMap&amp;lt;String, String&amp;gt; treeMap = new TreeMap&amp;lt;String, String&amp;gt;(paramsMap); // 将入参进行排序 String data = treeMap.toString(); String sign = null; try { sign = RSASecurityUtil.sign(data, RSASecurityUtil.getPrivateKey(privateKeyStr)); } catch (Exception e) { e.printStackTrace(); } return sign; } /** * POST请求,body业务参数签名 * @param bodyEntity post请求的body参数对象 * @param privateKeyStr 参与签名的私钥 * @return */ public static String signForHttpPost(Object bodyEntity, String privateKeyStr) { String json = null; if (bodyEntity instanceof String) { json = bodyEntity.toString(); } else { ObjectMapper mapper = new ObjectMapper(); try { json = mapper.writeValueAsString(bodyEntity); } catch (JsonProcessingException e) { e.printStackTrace(); } } String sign = null; try { sign = RSASecurityUtil.sign(json, RSASecurityUtil.getPrivateKey(privateKeyStr)); } catch (Exception e) { e.printStackTrace(); } return sign; } public static void main(String[] args) throws Exception { try { // 生成密钥对 KeyPair keyPair = getKeyPair(); String privateKey = new String(Base64.encodeBase64(keyPair.getPrivate().getEncoded())); String publicKey = new String(Base64.encodeBase64(keyPair.getPublic().getEncoded())); System.out.println(&amp;quot;私钥:&amp;quot; + privateKey); System.out.println(&amp;quot;公钥:&amp;quot; + publicKey); // RSA加密 String data = &amp;quot;1234&amp;quot;; String encryptData = encrypt(data, getPublicKey(publicKey)); System.out.println(&amp;quot;加密后内容:&amp;quot; + encryptData); // RSA解密 String decryptData = decrypt(encryptData, getPrivateKey(privateKey)); System.out.println(&amp;quot;解密后内容:&amp;quot; + decryptData); // RSA签名 String sign = sign(data, getPrivateKey(privateKey)); // RSA验签 boolean result = verify(data, getPublicKey(publicKey), sign); System.out.print(&amp;quot;验签结果:&amp;quot; + result); } catch (Exception e) { e.printStackTrace(); System.out.print(&amp;quot;加解密异常&amp;quot;); } } } </code></pre> <ul> <li>httpResponse (公共返回信息)</li> </ul> <table> <thead> <tr> <th style="text-align: left;">字段名称</th> <th style="text-align: left;">变量名</th> <th>类型</th> <th>字段长度</th> <th>是否可空</th> <th>是否多值</th> <th>备注</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">responseHead  </td> <td style="text-align: left;"> (公共返回信息head)</td> </tr> <tr> <td style="text-align: left;">结果代码</td> <td style="text-align: left;">resultCode</td> <td>String</td> <td>no</td> <td>no</td> <td>000-处理成功,999处理失败</td> </tr> <tr> <td style="text-align: left;">服务代码</td> <td style="text-align: left;">serviceClass</td> <td>String</td> <td>no</td> <td>no</td> <td>HWA005</td> </tr> <tr> <td style="text-align: left;">服务名称</td> <td style="text-align: left;">serviceName</td> <td>String</td> <td>no</td> <td>no</td> <td>autoCommonClaim</td> </tr> <tr> <td style="text-align: left;">错误信息</td> <td style="text-align: left;">errorMessage</td> <td>String</td> <td>no</td> <td>no</td> <td>错误信息</td> </tr> <tr> <td style="text-align: left;">responseBody </td> <td style="text-align: left;"> (公共返回信息body)</td> </tr> <tr> <td style="text-align: left;">报案号</td> <td style="text-align: left;">registNo</td> <td>String</td> <td>no</td> <td>no</td> <td>处理成功时返回,失败时为空</td> </tr> </tbody> </table> <ul> <li>接口编号说明</li> </ul> <p>欢迎使用ShowDoc!</p>

页面列表

ITEM_HTML