身份证实名认证查询接口

**
由于公司业务需要,需核实进来的用户个人信息是否真实性,对比阿里云提供的第三方API接口,货比三家,最终选定了这一家,传参只需:身份证号+姓名即可解析获取详细的用户身份信息
http(s)😕/idenauthen.market.alicloudapi.com/idenAuthentication
请求方式:POST
返回类型:JSON
所需要的参数:请求参数(Body)
名称 类型 是否必须 描述
idNo STRING 必选 身份证号码
name STRING 必选 姓名

可以事先在配置文件里:配置好第三方API接口路径,以及买对应的服务生成的密钥!

#身份证实名认证查询接口
user_patient_idCard_url = https://idenauthen.market.alicloudapi.com/idenAuthentication
#身份证实名认证查询接口密钥
user_patient_idCard_AppCode = *********

对于请求API接口返回的Json解析,创建对应的实体类

public class PatientIdCardVO {
    /*{
            "name": "张三",
            "idNo": "340421190710145412",
            "respMessage": "身份证信息匹配",
            "respCode": "0000",
            "province": "安徽省",
            "city": "淮南市",
            "county": "凤台县",
            "birthday": "19071014",
            "sex": "M",
            "age": "111"
    }*/
    private String name;
    private String idNo;
    private String respMessage;
    private String respCode;
    private String province;
    private String city;
    private String county;
    private String birthday;
    private String sex;
    private String age;
}

具体业务代码如下:把密钥放到header里,注意下header中格式位置;
Authorization:APPCODE 83359fd73fe94948385f570e3c139105

  • -中间一定要有空格区分- -
//获取密钥code
        final String USER_PATIENT_IDCARD_APPCODE = ConfigUtil.getString("user_patient_idCard_AppCode");
        //获取第三方请求url
        final String USER_PATIENT_IDCARD_URL = ConfigUtil.getString("user_patient_idCard_url");

        Map<String, String> headers = new HashMap<String, String>();
        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.put("Authorization", "APPCODE " + USER_PATIENT_IDCARD_APPCODE);
        //根据API的要求,定义相对应的Content-Type
        headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        Map<String, String> bodys = new HashMap<String, String>();
        bodys.put("idNo", idNo);
        bodys.put("name", name);
        ResponseEntity<String> result = RestHttpUtil.post()
                .url(USER_PATIENT_IDCARD_URL)
                .header(headers)
                .paramMap(bodys)
                .execute(new ParameterizedTypeReference<String>() {
        });
        LOGGER.info("--检查--身份证实名认证查询---内容--" + result);
        try {
            String free = result.getBody();
            free = new String(free.getBytes(), StandardCharsets.UTF_8);
            dto = JSON.parseObject(free, PatientIdCardVO.class);
        } catch (Exception e) {
            LOGGER.error("-------------服务升级中,请耐心等待!-------------" + LOGGER);
            throw new BusinessException(ExceptionCodes.WX_RETURN_MESSAGE);
        }
        if (dto.getRespCode().equals("0001")) {
            LOGGER.error("-------------开户名不能为空!-------------" + LOGGER);
            throw new BusinessException(ExceptionCodes.PATIENT_IDCARD_ISNULL);
        }
        if (dto.getRespCode().equals("0002")) {
            LOGGER.error("-------------开户名不能包含特殊字符!-------------" + LOGGER);
            throw new BusinessException(ExceptionCodes.PATIENT_IDCARD_ISCONTENT_SPECIFIC_SYMBOL);
        }
        ******
        ******
        }
        if (dto.getRespCode().equals("0005")) {
            LOGGER.error("-------------姓名错误!-------------" + LOGGER);
            throw new BusinessException(ExceptionCodes.PATIENT_IDCARD_PATIENTNAME_ERROR);
        }
        if(!dto.getRespCode().equals("0000")){
            LOGGER.error("-------------其他错误!-------------" + LOGGER);
            throw new BusinessException(ExceptionCodes.PATIENT_IDCARD_PATIENTNAME_ERROR,dto.getRespMessage());
        }

这里小伙伴们一定要注意!注意!官方提供的错误码不全,一定要捕捉除“0000”之外的错误码,要不然哪天服务接口报的其他错误码没有捕捉,会发生错误!生产环境带来的后果不容小觑–0005就是我自己踩出来的坑,它并未出现在官方给的文档里,但是有这个错误

官方错误码 错误信息 描述
0000 身份证信息匹配
0001 开户名不能为空
0002 开户名不能包含特殊字符
0003 身份证号不能为空
0004 身份证号格式错误
0007 无此身份证号码
0008 身份证信息不匹配
0010 系统维护,请稍后再试 系统维护,请稍后再试(维护前会短信和邮件通知 ,请留意通知信息)