正在做的项目为一个类似于代驾的项目
实在没什么好总结的 项目大量使用腾讯云技术
我单抽出来一个身份/驾驶证认证技术模块(人脸检验)

前面肯定会碰到很多问题 都一一总结
我就单抽出来一个比较困扰的问题:
地图无法加载使用

真机调试 Error: 系统错误,错误码:80082,get plugin(id: wx76a9a06e5b4e693e, version: 1.0.10) failed, permission deny [20250922 21:18:01][wxb35eca7bf02a0244]

image

比如想要得到小程序以上加载地图插件
需要申请接口插件

image

想必你申请肯定会遇到很xx的问题:
image
image

参考:https://zhuanlan.zhihu.com/p/576989072

我直接给出类似图片 按照上述话术写即可 大概率会通过(仅限于地图申请接口)
申请权限

然后回归正题 无法加载是原项目未更新 早就迭代了
此版本不再适配 参考官方文档https://lbs.qq.com/miniProgram/demoCenter/wxGuide/plugin/citySelector

修改如下
image


再看 腾讯云的认证功能使用
1.首先申请接口

image
可以参考文档快速上手:https://cloud.tencent.com/document/product/866/34681

2.注入依赖

        <dependency>
            <groupId>com.tencentcloudapi</groupId>
            <artifactId>tencentcloud-sdk-java</artifactId>
        </dependency>

3.编写使用
在开始编写之前 我需要再次阐述一下项目结构 就当复习了 因为这个功能是抽出于一个项目中的
image

数据回显 用VO包装
例如:
@Data
public class IdCardOcrVo {

	@Schema(description = "姓名")
	private String name;

	@Schema(description = "性别 1:男 2:女")
	private String gender;

	@Schema(description = "生日")
	private Date birthday;

	@Schema(description = "身份证号码")
	private String idcardNo;

	@Schema(description = "身份证地址")
	private String idcardAddress;

	@Schema(description = "身份证有效期")
	private Date idcardExpire;

	@Schema(description = "身份证正面")
	private String idcardFrontUrl;
	@Schema(description = "身份证正面回显")
	private String idcardFrontShowUrl;

	@Schema(description = "身份证背面")
	private String idcardBackUrl;
	@Schema(description = "身份证背面回显")
	private String idcardBackShowUrl;
}

service模块

controller:
    @Operation(summary = "身份证识别")
    @PostMapping("/idCardOcr")
    public Result<IdCardOcrVo> idCardOcr(@RequestPart("file") MultipartFile file) {
        IdCardOcrVo idCardOcrVo = ocrService.idCardOcr(file);
        return Result.ok(idCardOcrVo);
    }
service:
IdCardOcrVo idCardOcr(MultipartFile file);

实现类参考官方给的文档:

image
注意我上述标记 检验图片是用字符串来检验的

Impl:
 public IdCardOcrVo idCardOcr(MultipartFile file) {
            //图片转换base64格式字符串
            byte[] base64 = Base64.encodeBase64(file.getBytes());
            String fileBase64 = new String(base64);

            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
            Credential cred = new Credential(tencentCloudProperties.getSecretId(),
                                             tencentCloudProperties.getSecretKey());
            // 实例化一个http选项,可选的,没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("ocr.tencentcloudapi.com");
            // 实例化一个client选项,可选的,没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的
            OcrClient client = new OcrClient(cred,tencentCloudProperties.getRegion(), clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象
            IDCardOCRRequest req = new IDCardOCRRequest();
            //设置文件
            req.setImageBase64(fileBase64);

            // 返回的resp是一个IDCardOCRResponse的实例,与请求对象对应
            IDCardOCRResponse resp = client.IDCardOCR(req);

            //转换为IdCardOcrVo对象
            IdCardOcrVo idCardOcrVo = new IdCardOcrVo();
            if (StringUtils.hasText(resp.getName())) {
                //身份证正面
                idCardOcrVo.setName(resp.getName());
                idCardOcrVo.setGender("男".equals(resp.getSex()) ? "1" : "2");
                idCardOcrVo.setBirthday(DateTimeFormat.forPattern("yyyy/MM/dd").parseDateTime(resp.getBirth()).toDate());
                idCardOcrVo.setIdcardNo(resp.getIdNum());
                idCardOcrVo.setIdcardAddress(resp.getAddress());

                //上传身份证正面图片到腾讯云cos
                CosUploadVo cosUploadVo = cosService.upload(file, "idCard");
                idCardOcrVo.setIdcardFrontUrl(cosUploadVo.getUrl());
                idCardOcrVo.setIdcardFrontShowUrl(cosUploadVo.getShowUrl());
            } else {
                //身份证反面
                //证件有效期:"2010.07.21-2020.07.21"
                String idcardExpireString = resp.getValidDate().split("-")[1];
                idCardOcrVo.setIdcardExpire(DateTimeFormat.forPattern("yyyy.MM.dd").parseDateTime(idcardExpireString).toDate());
                //上传身份证反面图片到腾讯云cos
                CosUploadVo cosUploadVo = cosService.upload(file, "idCard");
                idCardOcrVo.setIdcardBackUrl(cosUploadVo.getUrl());
                idCardOcrVo.setIdcardBackShowUrl(cosUploadVo.getShowUrl());
            }
            return idCardOcrVo;}

基本没啥可说的 三件套走 照着官网文档即可

gateway模块

 @PostMapping(value = "/ocr/idCardOcr", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    Result<IdCardOcrVo> idCardOcr(@RequestPart("file") MultipartFile file);

web模块

controller和service和service模块一样没啥好说的
    @Override
    public IdCardOcrVo idCardOcr(MultipartFile file) {
        Result<IdCardOcrVo> ocrVoResult = ocrFeignClient.idCardOcr(file);
        IdCardOcrVo idCardOcrVo = ocrVoResult.getData();
        return idCardOcrVo;
    }

实现后检验:
Screenshot 2025-10-11 1

在进行登录的时候数据出现这个小问题:
com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed
MySQL 连接时常见的公钥检索问题
最新版mysql的版本问题 需要设置一些 在配置文件加入
useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC】

记得修改nacos上传的配置文件

posted on 2025-10-11 16:39  蒸饺  阅读(21)  评论(0)    收藏  举报