文档设计到的参考链接地址文档设计到的参考链接地址:
业务背景
提取小程序端用户上传的身份证图片上面的信息,存到数据库中,以便做实名认证或者其它业务操作;
操作过程
- 上传照片
小程序端将身份证图片上传到文件服务得到文件id,小程序开发者将文件id传给后端开发者,后端开发者接收到文件id后开发处理业务; - 获取access_token
access_token是微信接口调用凭证,根据小程序的appid和appsecret来获取,注意,获取的access_token是有时间限制的,一般是2小时,开发者可以将access_token存到redis上面,不需要个请求都获取一遍; - 根据access_token和图片地址(图片地址是根据小程序开发者传的文件id拼接出来的链接,这里采用的是文件下载的链接,文件查看链接估计也可以,这里没有尝试,注意下,链接必须是域名,否则会报莫名其妙的错误)发起ocr请求(测试前请购买ocr接口次数,有个每天免费100次的选择,测试可以选择那个,以后真正生产就要注意下使用的次数),得到身份证相关信息,正面返回信息如下(xxx 是我自己改掉的,因为这是我个人的信息):
{
"errcode":0,"errmsg":"ok","type":"Front","name":"杨xx","id":"4453xx199xxxxxxxxxxxxx","addr":"广东省云浮市xx县xx镇xxxxxx","gender":"男","nationality":"汉","birth":"199x-xx-xx","card_property":4}
- 信息入库,返回给前端
将信息整理好后,插入数据库,并将身份证号码和姓名返回给小程序开发者,因为信息还需要展示给用户确认;
上代码
代码中用到一些通用的插件和工具类就不一一列举,在pom文件中加入相关的依赖包就可以了,如lombok、hutool、validation等
- controller
/**
* 微信ocr获取用户身份证信息
*
* @param ocrUserVerifyBO 参数对象
* @param bindingResult 错误对象
* @return com.hydosky.cloud.user.vo.miniprogram.MiniprogramUserVO
* @author lingchao.yang
* @date 2020/9/7
*/
@PostMapping("wx-ocr-idcard")
public MiniprogramUserVO getIdCardInfo(@Valid @RequestBody OcrUserVerifyBO ocrUserVerifyBO, BindingResult bindingResult) {
ErrorFormatUtils.validateBindingResult(bindingResult);
return iMiniprogramUserService.getIdCardInfo(ocrUserVerifyBO);
}
- MiniprogramUserVO
package com.hydosky.cloud.user.vo.miniprogram;
import lombok.Data;
/**
* 登录后返回的对象
*
* @author lingchao.yang
* @date 2020/8/24
*/
@Data
public class MiniprogramUserVO {
/**
* 用户id
*/
private String id;
/**
* 电话号码
*/
private String purePhoneNumber;
/**
* 真实姓名
*/
private String realName;
/**
* 身份证号码
*/
private String idCardNumber;
/**
* 认证状态 1未认证;2认证中;3认证成功;4认证失败
*/
private Integer authenticationStatus;
/**
* 认证身份证正面照片id
*/
private String idCardFrontId;
/**
* 认证身份证反面照片id
*/
private String idCardBehindId;
/**
* 认证自拍照照片id
*/
private String selfPortraitId;
}
- OcrUserVerifyBO
package com.hydosky.cloud.user.bo.miniprogram;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 小程序实名认证入参
*
* @author lingchao.yang
* @date 2020/9/7
*/
@Data
public class