Springboot 阿里实名认证api 调用案例

目录

一、获取实名认证api服务

 二、集成

1、先添加IdProperties来集成

2、自动装配配置

3、添加配置

4、认证接口

5、返回实体类

三、测试


一、获取实名认证api服务

进入控制台

Springboot 阿里实名认证api 调用案例_第1张图片

记下一下3各值。

 二、集成

1、先添加IdProperties来集成

package com.dragonwu.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "identify")
@Data
public class IdProperties {

    /**
     * 身份认证的URL地址  // https://idcert.market.alicloudapi.com/idcard?idCard=%s&name=%s
     */
    private String url ;


    /***
     * 你购买的appKey
     */
    private String appKey ;

    /***
     * 你购买的appSecret
     */
    private String appSecret ;

    /***
     * 你购买的appCode
     */
    private String appCode ;
}

2、自动装配配置

package com.dragonwu.config;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;

@Configuration
@EnableConfigurationProperties(IdProperties.class)
public class IdAutoConfiguration {

    private static IdProperties  idProperties;

    /**
     * 发请求的工具
     */
    private static RestTemplate restTemplate = new RestTemplate() ;

    public IdAutoConfiguration(IdProperties idProperties){
        IdAutoConfiguration.idProperties = idProperties ;
    }

    /**
     * 用户信息的实名认证
     * @param realName
     * 用户的真实信息
     * @param cardNum
     * 用户的身份证号
     * @return
     * 验证的结果
     */
    public static boolean check(String realName ,String cardNum){

        /**
         * 本次请求我们是AppCode的形式验证: Authorization:APPCODE 你自己的AppCode
         *  -H Authorization:APPCODE 你自己的AppCode
         */
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Authorization","APPCODE "+idProperties.getAppCode());

        ResponseEntity responseEntity = restTemplate.exchange(
                //%s 是变量,
                String.format(idProperties.getUrl(), cardNum, realName),
                HttpMethod.GET,
                new HttpEntity<>(null, httpHeaders),
                String.class
        );
// https://market.aliyun.com/products/57000002/cmapi022049.html?spm=5176.2020520132.101.2.2fe57218VVSjB0#sku=yuncode1604900000
        if(responseEntity.getStatusCode()== HttpStatus.OK){
            String body = responseEntity.getBody();
            JSONObject jsonObject = JSON.parseObject(body);
            String status = jsonObject.getString("status");
            if("01".equals(status)){ // 验证成功
                return true ;
            }
        }
        return  false ;
    }
}

3、添加配置

3个值就是你之前的那个值

identify:
    url: https://idcert.market.alicloudapi.com/idcard?idCard=%s&name=%s
    appKey:
    appSecret:
    appCode:

4、认证接口

    @PostMapping("/authAccount")
    @ApiOperation(value = "用户的实名认证")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userAuthForm", value = "userAuthFormjson数据")
    })
    public R identifyCheck(@RequestBody UserAuthForm userAuthForm) {
        String idStr = SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString();
        boolean isOk = userService.identifyVerify(Long.valueOf(idStr), userAuthForm);
        if (isOk) {
            return R.ok();
        }
        return R.fail("认证失败");
    }
/**
     * 用户的实名认证
     *
     * @param id           用户的Id
     * @param userAuthForm 认证的表单数据
     * @return 认证的结果
     */
    @Override
    public boolean identifyVerify(Long id, UserAuthForm userAuthForm) {
        User user = getById(id);
        Assert.notNull(user, "认证的用户不存在");
        Byte authStatus = user.getAuthStatus();
        if (!authStatus.equals((byte) 0)) {
            throw new IllegalArgumentException("该用户已经认证成功了");
        }
        // 执行认证
        checkForm(userAuthForm); // 极验
        // 实名认证
        boolean check = IdAutoConfiguration.check(userAuthForm.getRealName(), userAuthForm.getIdCard());
        if (!check) {
            throw new IllegalArgumentException("该用户信息错误,请检查");
        }

        // 设置用户的认证属性
        user.setAuthtime(new Date());
        user.setAuthStatus((byte) 1);
        user.setRealName(userAuthForm.getRealName());
        user.setIdCard(userAuthForm.getIdCard());
        user.setIdCardType(userAuthForm.getIdCardType());

        return updateById(user);
    }

5、返回实体类

package com.dragonwu.model;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springside.modules.utils.base.annotation.NotNull;

@Data
@ApiModel(value = "用户的身份认证信息")
public class UserAuthForm extends GeetestForm{


    @NotNull
    @ApiModelProperty(value = "用户的真实名称")
    private String realName ;

    @NotNull
    @ApiModelProperty(value = "用户的证件类型")
    private Integer idCardType ;

    @NotNull
    @ApiModelProperty(value = "用户的证件号码")
    private String idCard ;

}

三、测试

实名认证成功!

Springboot 阿里实名认证api 调用案例_第2张图片

你可能感兴趣的:(微服务项目笔记,阿里云,java,后端,spring,boot)