diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/client/service/ThirdFaceVerifyServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/client/service/ThirdFaceVerifyServiceImpl.java index a31ecca..088224e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/client/service/ThirdFaceVerifyServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/client/service/ThirdFaceVerifyServiceImpl.java @@ -16,7 +16,12 @@ import com.aliyun.teautil.models.RuntimeOptions; import javax.annotation.Resource; import javax.validation.Valid; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; import java.util.Arrays; +import java.util.Base64; import java.util.List; /** @@ -34,20 +39,43 @@ public class ThirdFaceVerifyServiceImpl implements ThirdFaceVerifyService { private static final List endpoints = Arrays.asList("cloudauth.cn-shanghai.aliyuncs.com", "cloudauth.cn-beijing.aliyuncs.com"); + public static String convertImageUrlToBase64(String imageUrl) { + try { + URL url = new URL(imageUrl); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (InputStream is = url.openStream()) { + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = is.read(buffer)) != -1) { + baos.write(buffer, 0, bytesRead); + } + } + byte[] imageBytes = baos.toByteArray(); + return Base64.getEncoder().encodeToString(imageBytes); + } catch (Exception e) { + log.error("|人脸识别|,图片转换url-image to base64 错误:{}", e.getMessage()); + return null; + } + } + /** * 人脸识别 */ @Override public ThirdFaceVerifyResVO faceVerify(ThirdFaceVerifyReqVO dto) { + String base64Image = convertImageUrlToBase64(dto.getFaceVerifyUrl()); + InitFaceVerifyRequest request = new InitFaceVerifyRequest(); request.setSceneId(thirdAlConfig.getFaceSceneId()); request.setProductCode("PV_FV"); - request.setModel("MOVE_ACTION"); + request.setModel("LIVENESS"); // 参数 request.setOuterOrderNo(dto.getCode()); request.setUserId(String.valueOf(dto.getFaceVerifyUserId())); request.setMetaInfo(dto.getMetaInfoJson()); - request.setFaceContrastPictureUrl(dto.getFaceVerifyUrl()); + // request.setFaceContrastPictureUrl(dto.getFaceVerifyUrl()); + + request.setFaceContrastPicture(base64Image); // 配置 request.setCallbackToken(thirdAlConfig.getFaceVerifyCallbackToken()); request.setCallbackUrl(thirdAlConfig.getFaceVerifyCallbackUrl() + "/admin-api/third-callback/face-verify"); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/thirdcallback/ThirdCallbackController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/thirdcallback/ThirdCallbackController.java index 1fe29b5..1f11fb2 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/thirdcallback/ThirdCallbackController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/thirdcallback/ThirdCallbackController.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; +import cn.iocoder.yudao.module.member.client.service.ChatApi; import cn.iocoder.yudao.module.member.client.service.ThirdFaceVerifyService; import cn.iocoder.yudao.module.member.client.vo.thirdfaceverify.ThirdFindFaceVerifyReqVo; import cn.iocoder.yudao.module.member.client.vo.thirdfaceverify.ThirdFindFaceVerifyResVo; @@ -55,6 +56,9 @@ public class ThirdCallbackController { @Resource private MemberRecentTagService memberRecentTagService; + @Resource + private ChatApi chatApi; + @GetMapping("/face-verify") @Operation(summary = "人脸认证回调") @PermitAll @@ -94,19 +98,26 @@ public class ThirdCallbackController { log.error("人脸认证回调,主动查询,第三方接口无响应"); return; } + + String message = ""; + ComAuthDO updateObj = new ComAuthDO(); updateObj.setFailReason(faceVerifyRes.getErrorMessage()); if (faceVerifyRes.isPassed()) { updateObj.setAuthStatus(MemberComAuthStatusEnum.CHECK_PASS.getType()); memberRecentTagService.setPersonTag(auth.getAuthMemberId(), true); + message = "您好,您已通过人脸识别认证。"; } if (faceVerifyRes.isNotPassed()) { updateObj.setAuthStatus(MemberComAuthStatusEnum.CHECK_FAIL.getType()); + message = "您好,您未通过人脸识别认证,请重新认证。"; } updateObj.setId(auth.getId()); updateObj.setAuthTime(LocalDateTime.now()); updateObj.setFailReason("验证失败"); authMapper.updateById(updateObj); + + chatApi.messageUserSendText(auth.getAuthMemberId(), message); TenantContextHolder.clear(); }); } diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 206d520..1118a4e 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -240,8 +240,8 @@ pf4j: pluginsDir: ../plugins chat: - base-url: http://127.0.0.1:8888 - # base-url: http://chatsever.zianxin.com + # base-url: http://127.0.0.1:8888 + base-url: http://chatsever.zianxin.com app-key: 4H2HkBLygMsxaQKO app-secret: JIizm84av3TK5xaQdsng7X5mqLPjbeQ0 @@ -250,10 +250,17 @@ tx-map: app-key: GGCBZ-SVPWT-IO6XL-LHZ3I-YPMBS-O6B6D app-secret: uYWt4DalxHgFnk6d9ul2KLdPVM1ABD9m +#al-config: +# access-key-id: LTAI5tJ7sSxB96XaY9T3Vq3D +# access-key-secret: EVXWFTS2SB6UkjUVFLhTDBfIvIXgI3 +# face-scene-id: 1000016045 +# face-verify-callback-url: https://dzc001.fy.takin.cc +# face-verify-callback-token: uVuYOzoiQBWPp4A5kPgTddZlKWoSQlzc + al-config: - access-key-id: LTAI5tJ7sSxB96XaY9T3Vq3D - access-key-secret: EVXWFTS2SB6UkjUVFLhTDBfIvIXgI3 - face-scene-id: 1000016045 + access-key-id: LTAI5tBrkf3ynA5CMLb4TYbo + access-key-secret: u3Za5XigBfRXo0iJHSbPgOSZTDVN3C + face-scene-id: 1000016556 face-verify-callback-url: https://dzc001.fy.takin.cc face-verify-callback-token: uVuYOzoiQBWPp4A5kPgTddZlKWoSQlzc diff --git a/yudao-server/src/main/resources/application-prod.yaml b/yudao-server/src/main/resources/application-prod.yaml index df6b01b..bb662e2 100644 --- a/yudao-server/src/main/resources/application-prod.yaml +++ b/yudao-server/src/main/resources/application-prod.yaml @@ -241,11 +241,18 @@ tx-map: app-key: GGCBZ-SVPWT-IO6XL-LHZ3I-YPMBS-O6B6D app-secret: uYWt4DalxHgFnk6d9ul2KLdPVM1ABD9m +#al-config: +# access-key-id: LTAI5tJ7sSxB96XaY9T3Vq3D +# access-key-secret: EVXWFTS2SB6UkjUVFLhTDBfIvIXgI3 +# face-scene-id: 1000016045 +# face-verify-callback-url: https://chatapi.zianxin.com +# face-verify-callback-token: uVuYOzoiQBWPp4A5kPgTddZlKWoSQlzc + al-config: - access-key-id: LTAI5tJ7sSxB96XaY9T3Vq3D - access-key-secret: EVXWFTS2SB6UkjUVFLhTDBfIvIXgI3 - face-scene-id: 1000016045 - face-verify-callback-url: https://chatapi.zianxin.com + access-key-id: LTAI5tBrkf3ynA5CMLb4TYbo + access-key-secret: u3Za5XigBfRXo0iJHSbPgOSZTDVN3C + face-scene-id: 1000016556 + face-verify-callback-url: https://dzc001.fy.takin.cc face-verify-callback-token: uVuYOzoiQBWPp4A5kPgTddZlKWoSQlzc brokerage: