Răsfoiți Sursa

增加外国人护照保存+验证 新需求

liudongzhi 17 ore în urmă
părinte
comite
cf7c923973

+ 12 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeUser.java

@@ -131,6 +131,18 @@ public class LifeUser implements Serializable {
     @TableField("id_card")
     private String idCard;
 
+    @ApiModelProperty(value = "国籍")
+    @TableField("nationality")
+    private String nationality;
+
+    @ApiModelProperty(value = "英文名字")
+    @TableField("english_name")
+    private String englishName;
+
+    @ApiModelProperty(value = "证件有效期")
+    @TableField("expiration_date")
+    private String expirationDate;
+
     @ApiModelProperty(value = "邀请码")
     @TableField("invited_num")
     private String invitedNum;

+ 9 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserExpertVo.java

@@ -36,6 +36,15 @@ public class LifeUserExpertVo extends LifeUserExpert {
     @ApiModelProperty(value = "身份证号码")
     private String idCard;
 
+    @ApiModelProperty(value = "国籍")
+    private String nationality;
+
+    @ApiModelProperty(value = "英文名字")
+    private String englishName;
+
+    @ApiModelProperty(value = "证件有效期")
+    private String expirationDate;
+
     @ApiModelProperty(value = "手机号")
     private String userPhone;
 

+ 1 - 1
alien-entity/src/main/java/shop/alien/mapper/LifeUserExpertMapper.java

@@ -177,7 +177,7 @@ public interface LifeUserExpertMapper extends BaseMapper<LifeUserExpert> {
             "    where delete_flag = 0 " +
             "    group by expert_id " +
             ") " +  // 去掉多余的逗号
-            " select expert.id, expert.expert_code, user.user_image, user.real_name, user.id_card, user.user_name, user.jianjie, user.user_phone, " +
+            " select expert.id, expert.expert_code, user.user_image, user.real_name, user.id_card, user.nationality, user.english_name, user.expiration_date, user.user_name, user.jianjie, user.user_phone, " +
             "ifnull(works.worksNum, 0) worksNum, ifnull(works.likeNum, 0) likeNum, " +
             "ifnull(fans.num, 0) fansNum " +
             " from life_user_expert expert " +

+ 17 - 4
alien-store/src/main/java/shop/alien/store/controller/AliController.java

@@ -61,11 +61,11 @@ public class AliController {
         aliService.notify(request);
     }
 
-    @ApiOperation("身份证二要素核验")
+    @ApiOperation("证二要素核验(身份证走阿里核验,护照等非身份证证件跳过核验)")
     @ApiOperationSupport(order = 2)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "name", value = "姓名", dataType = "String", paramType = "query", required = true),
-            @ApiImplicitParam(name = "idCard", value = "身份证号", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "idCard", value = "证件号(身份证号或护照号等)", dataType = "String", paramType = "query", required = true),
             @ApiImplicitParam(name = "appType", value = "端区分(0:用户, 1:商家)", dataType = "Integer", paramType = "query", required = true, defaultValue = "0")
     })
     @GetMapping("/getIdInfo")
@@ -74,14 +74,18 @@ public class AliController {
         String normalizedIdCard = idCard == null ? null : idCard.trim().toUpperCase();
         log.info("AliController.getIdInfo?name={}&idCard={}", normalizedName, normalizedIdCard);
         if (appType == 0) {
-            // 根据身份证查询未注销用户:同一身份证只能实名一个账号
+            // 根据证件号查询未注销用户:同一证只能实名一个账号
             int size = lifeUserService.count(new LambdaQueryWrapper<LifeUser>()
                     .eq(LifeUser::getIdCard, normalizedIdCard)
                     .eq(LifeUser::getLogoutFlag, 0));
             if (size > 0) {
-                return R.fail("该身份证已实名认证过");
+                return R.fail("该证已实名认证过");
             }
         }
+        if (!isChineseIdCard(normalizedIdCard)) {
+            log.info("AliController.getIdInfo 非中国大陆身份证,跳过二要素核验 idCard={}", normalizedIdCard);
+            return R.success("身份验证成功");
+        }
         if (aliPayConfig.getIdInfo(normalizedName, normalizedIdCard)) {
             return R.success("身份验证成功");
         }
@@ -91,6 +95,15 @@ public class AliController {
         return R.fail("身份证号码与姓名不一致,请检查后重新填写");
     }
 
+    /** 是否为中国大陆居民身份证号(18位或15位) */
+    private static boolean isChineseIdCard(String idCard) {
+        if (idCard == null || idCard.isEmpty()) {
+            return false;
+        }
+        return idCard.matches("^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dX]$")
+                || idCard.matches("^\\d{15}$");
+    }
+
     @ApiOperation("单笔转账接口")
     @ApiOperationSupport(order = 3)
     @ApiImplicitParams({@ApiImplicitParam(name = "name", value = "收款人姓名", dataType = "String", paramType = "query", required = true),