目录
一、获取实名认证api服务
进入控制台
记下一下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<String> 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 ;
}
三、测试
实名认证成功!