Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fzm-joying
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lei
fzm-joying
Commits
c9e2d04c
Commit
c9e2d04c
authored
Sep 13, 2021
by
tangtuo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
实名认证接口
parent
1b83ec13
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
358 additions
and
49 deletions
+358
-49
Project_Default.xml
.idea/inspectionProfiles/Project_Default.xml
+1
-0
jarRepositories.xml
.idea/jarRepositories.xml
+42
-21
pom.xml
joying-common/pom.xml
+9
-1
AuthStatusEnum.java
...on/src/main/java/com/fzm/common/enums/AuthStatusEnum.java
+0
-1
IdCardVerificationResponse.java
...java/com/fzm/common/enums/IdCardVerificationResponse.java
+23
-0
ResultCode.java
...common/src/main/java/com/fzm/common/enums/ResultCode.java
+1
-0
UserService.java
...mon/src/main/java/com/fzm/common/service/UserService.java
+5
-8
UserServiceImpl.java
...ain/java/com/fzm/common/service/impl/UserServiceImpl.java
+70
-16
TencentApi.java
...common/src/main/java/com/fzm/common/utils/TencentApi.java
+43
-0
LogAop.java
joying-portal/src/main/java/com/fzm/portal/aop/LogAop.java
+158
-0
UserController.java
...c/main/java/com/fzm/portal/controller/UserController.java
+6
-2
No files found.
.idea/inspectionProfiles/Project_Default.xml
View file @
c9e2d04c
<component
name=
"InspectionProjectProfileManager"
>
<component
name=
"InspectionProjectProfileManager"
>
<profile
version=
"1.0"
>
<profile
version=
"1.0"
>
<option
name=
"myName"
value=
"Project Default"
/>
<option
name=
"myName"
value=
"Project Default"
/>
<inspection_tool
class=
"ArgNamesErrorsInspection"
enabled=
"false"
level=
"ERROR"
enabled_by_default=
"false"
/>
<inspection_tool
class=
"JavaDoc"
enabled=
"true"
level=
"WARNING"
enabled_by_default=
"true"
>
<inspection_tool
class=
"JavaDoc"
enabled=
"true"
level=
"WARNING"
enabled_by_default=
"true"
>
<option
name=
"TOP_LEVEL_CLASS_OPTIONS"
>
<option
name=
"TOP_LEVEL_CLASS_OPTIONS"
>
<value>
<value>
...
...
.idea/jarRepositories.xml
View file @
c9e2d04c
...
@@ -2,14 +2,9 @@
...
@@ -2,14 +2,9 @@
<project
version=
"4"
>
<project
version=
"4"
>
<component
name=
"RemoteRepositoriesConfiguration"
>
<component
name=
"RemoteRepositoriesConfiguration"
>
<remote-repository>
<remote-repository>
<option
name=
"id"
value=
"maven-nexus-group"
/>
<option
name=
"id"
value=
"central"
/>
<option
name=
"name"
value=
"maven-nexus-group"
/>
<option
name=
"name"
value=
"central"
/>
<option
name=
"url"
value=
"http://146.56.197.85:12100/repository/maven-central/"
/>
<option
name=
"url"
value=
"https://maven.aliyun.com/nexus/content/groups/public"
/>
</remote-repository>
<remote-repository>
<option
name=
"id"
value=
"fzm"
/>
<option
name=
"name"
value=
"fzm repositories"
/>
<option
name=
"url"
value=
"http://maven.citydo.com.cn/repository/maven-public/"
/>
</remote-repository>
</remote-repository>
<remote-repository>
<remote-repository>
<option
name=
"id"
value=
"central"
/>
<option
name=
"id"
value=
"central"
/>
...
@@ -22,14 +17,44 @@
...
@@ -22,14 +17,44 @@
<option
name=
"url"
value=
"http://maven.aliyun.com/nexus/content/groups/public/"
/>
<option
name=
"url"
value=
"http://maven.aliyun.com/nexus/content/groups/public/"
/>
</remote-repository>
</remote-repository>
<remote-repository>
<remote-repository>
<option
name=
"id"
value=
"fzm"
/>
<option
name=
"name"
value=
"fzm repositories"
/>
<option
name=
"url"
value=
"http://146.56.197.85:12100/repository/maven-public/"
/>
</remote-repository>
<remote-repository>
<option
name=
"id"
value=
"central"
/>
<option
name=
"name"
value=
"Maven Central repository"
/>
<option
name=
"url"
value=
"https://repo1.maven.org/maven2"
/>
</remote-repository>
<remote-repository>
<option
name=
"id"
value=
"nexus"
/>
<option
name=
"id"
value=
"nexus"
/>
<option
name=
"name"
value=
"Nexus Repository"
/>
<option
name=
"name"
value=
"local private nexus"
/>
<option
name=
"url"
value=
"http://maven.citydo.com.cn/repository/maven-public/"
/>
</remote-repository>
<remote-repository>
<option
name=
"id"
value=
"central"
/>
<option
name=
"name"
value=
"Central Repository"
/>
<option
name=
"url"
value=
"https://maven.aliyun.com/repository/public"
/>
</remote-repository>
<remote-repository>
<option
name=
"id"
value=
"maven-nexus-group"
/>
<option
name=
"name"
value=
"maven-nexus-group"
/>
<option
name=
"url"
value=
"http://146.56.197.85:12100/repository/maven-central/"
/>
<option
name=
"url"
value=
"http://146.56.197.85:12100/repository/maven-central/"
/>
</remote-repository>
</remote-repository>
<remote-repository>
<remote-repository>
<option
name=
"id"
value=
"fzm"
/>
<option
name=
"id"
value=
"fzm"
/>
<option
name=
"name"
value=
"fzm repositories"
/>
<option
name=
"name"
value=
"fzm repositories"
/>
<option
name=
"url"
value=
"http://146.56.197.85:12100/repository/maven-public/"
/>
<option
name=
"url"
value=
"http://maven.citydo.com.cn/repository/maven-public/"
/>
</remote-repository>
<remote-repository>
<option
name=
"id"
value=
"rdc-releases"
/>
<option
name=
"name"
value=
"rdc-releases"
/>
<option
name=
"url"
value=
"https://packages.aliyun.com/maven/repository/2114056-release-JzJ1Dj/"
/>
</remote-repository>
<remote-repository>
<option
name=
"id"
value=
"nexus"
/>
<option
name=
"name"
value=
"Nexus Repository"
/>
<option
name=
"url"
value=
"http://146.56.197.85:12100/repository/maven-central/"
/>
</remote-repository>
</remote-repository>
<remote-repository>
<remote-repository>
<option
name=
"id"
value=
"aliyun"
/>
<option
name=
"id"
value=
"aliyun"
/>
...
@@ -37,11 +62,6 @@
...
@@ -37,11 +62,6 @@
<option
name=
"url"
value=
"http://146.56.197.85:12100/repository/maven-public/"
/>
<option
name=
"url"
value=
"http://146.56.197.85:12100/repository/maven-public/"
/>
</remote-repository>
</remote-repository>
<remote-repository>
<remote-repository>
<option
name=
"id"
value=
"central"
/>
<option
name=
"name"
value=
"Maven Central repository"
/>
<option
name=
"url"
value=
"https://repo1.maven.org/maven2"
/>
</remote-repository>
<remote-repository>
<option
name=
"id"
value=
"jboss.community"
/>
<option
name=
"id"
value=
"jboss.community"
/>
<option
name=
"name"
value=
"JBoss Community repository"
/>
<option
name=
"name"
value=
"JBoss Community repository"
/>
<option
name=
"url"
value=
"https://repository.jboss.org/nexus/content/repositories/public/"
/>
<option
name=
"url"
value=
"https://repository.jboss.org/nexus/content/repositories/public/"
/>
...
@@ -52,14 +72,14 @@
...
@@ -52,14 +72,14 @@
<option
name=
"url"
value=
"http://146.56.197.85:12100/repository/maven-central/"
/>
<option
name=
"url"
value=
"http://146.56.197.85:12100/repository/maven-central/"
/>
</remote-repository>
</remote-repository>
<remote-repository>
<remote-repository>
<option
name=
"id"
value=
"
nexu
s"
/>
<option
name=
"id"
value=
"
rdc-snapshot
s"
/>
<option
name=
"name"
value=
"
local private nexu
s"
/>
<option
name=
"name"
value=
"
rdc-snapshot
s"
/>
<option
name=
"url"
value=
"http
://maven.citydo.com.cn/repository/maven-public
/"
/>
<option
name=
"url"
value=
"http
s://packages.aliyun.com/maven/repository/2114056-snapshot-ifYEGu
/"
/>
</remote-repository>
</remote-repository>
<remote-repository>
<remote-repository>
<option
name=
"id"
value=
"
central
"
/>
<option
name=
"id"
value=
"
snapshots
"
/>
<option
name=
"name"
value=
"
Central Repository
"
/>
<option
name=
"name"
value=
"
snapshots
"
/>
<option
name=
"url"
value=
"https://maven.aliyun.com/
repository
/public"
/>
<option
name=
"url"
value=
"https://maven.aliyun.com/
nexus/content/groups
/public"
/>
</remote-repository>
</remote-repository>
</component>
</component>
</project>
</project>
\ No newline at end of file
joying-common/pom.xml
View file @
c9e2d04c
...
@@ -27,7 +27,10 @@
...
@@ -27,7 +27,10 @@
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-validation
</artifactId>
<artifactId>
spring-boot-starter-validation
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-aop
</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-pool2
</artifactId>
<artifactId>
commons-pool2
</artifactId>
...
@@ -84,6 +87,11 @@
...
@@ -84,6 +87,11 @@
<artifactId>
redisson
</artifactId>
<artifactId>
redisson
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
com.tencentcloudapi
</groupId>
<artifactId>
tencentcloud-sdk-java
</artifactId>
<version>
3.1.322
</version>
</dependency>
</dependencies>
</dependencies>
<properties>
<properties>
...
...
joying-common/src/main/java/com/fzm/common/enums/AuthStatusEnum.java
View file @
c9e2d04c
...
@@ -14,7 +14,6 @@ public enum AuthStatusEnum {
...
@@ -14,7 +14,6 @@ public enum AuthStatusEnum {
NOT
(
0
,
"未认证"
),
NOT
(
0
,
"未认证"
),
SUCCESS
(
1
,
"认证成功"
),
SUCCESS
(
1
,
"认证成功"
),
FAIL
(
2
,
"认证失败"
),
FAIL
(
2
,
"认证失败"
),
ONGOING
(
3
,
"认证中"
),
;
;
private
Integer
status
;
private
Integer
status
;
...
...
joying-common/src/main/java/com/fzm/common/enums/IdCardVerificationResponse.java
0 → 100644
View file @
c9e2d04c
package
com
.
fzm
.
common
.
enums
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* @author tangtuo
* @date 2021/9/13 15:20
*/
@Getter
@AllArgsConstructor
public
enum
IdCardVerificationResponse
{
SUCCESS
(
"0"
,
"姓名和身份证号一致"
),
FAILED1
(
"-1"
,
"姓名和身份证号不一致"
),
FAILED2
(
"-2"
,
"非法身份证号(长度、校验位等不正确)"
),
FAILED3
(
"-3"
,
"非法姓名(长度、格式等不正确)"
),
FAILED4
(
"-4"
,
"证件库服务异常"
),
FAILED5
(
"-5"
,
"证件库中无此身份证记录"
),
;
private
String
code
;
private
String
desc
;
}
joying-common/src/main/java/com/fzm/common/enums/ResultCode.java
View file @
c9e2d04c
...
@@ -16,6 +16,7 @@ public enum ResultCode implements IErrorCode {
...
@@ -16,6 +16,7 @@ public enum ResultCode implements IErrorCode {
PUBLISH_ERROR
(
415
,
"nft发行失败"
),
PUBLISH_ERROR
(
415
,
"nft发行失败"
),
RECEIVE_ERROR
(
416
,
"nft领取失败"
),
RECEIVE_ERROR
(
416
,
"nft领取失败"
),
TRANSFER_ERROR
(
416
,
"nft转让失败"
),
TRANSFER_ERROR
(
416
,
"nft转让失败"
),
ID_CARD_VERIFICATION_ERROR
(
417
,
"身份证验证失败"
),
;
;
...
...
joying-common/src/main/java/com/fzm/common/service/UserService.java
View file @
c9e2d04c
package
com
.
fzm
.
common
.
service
;
package
com
.
fzm
.
common
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.fzm.common.entity.AuthPerson
;
import
com.fzm.common.entity.User
;
import
com.fzm.common.entity.User
;
import
com.fzm.common.entity.vo.UserListVo
;
import
com.fzm.common.entity.vo.UserListVo
;
import
com.fzm.common.entity.vo.UserStatisticVo
;
import
com.fzm.common.entity.vo.UserStatisticVo
;
import
com.fzm.common.params.LoginParam
;
import
com.fzm.common.params.LoginParam
;
import
com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.IOException
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -39,13 +41,6 @@ public interface UserService extends IService<User> {
...
@@ -39,13 +41,6 @@ public interface UserService extends IService<User> {
User
getUserByToken
();
User
getUserByToken
();
/**
/**
* 个人实名认证
*
* @param authPerson
*/
Boolean
personAuth
(
AuthPerson
authPerson
);
/**
* 修改头像
* 修改头像
*
*
* @param avatar
* @param avatar
...
@@ -77,4 +72,6 @@ public interface UserService extends IService<User> {
...
@@ -77,4 +72,6 @@ public interface UserService extends IService<User> {
* @return
* @return
*/
*/
User
getUserByWallet
(
String
publishAddress
);
User
getUserByWallet
(
String
publishAddress
);
IdCardOCRVerificationResponse
personAuth
(
MultipartFile
cardPictureFront
,
MultipartFile
cardPictureBack
)
throws
IOException
;
}
}
joying-common/src/main/java/com/fzm/common/service/impl/UserServiceImpl.java
View file @
c9e2d04c
...
@@ -6,7 +6,9 @@ import cn.hutool.core.date.DateTime;
...
@@ -6,7 +6,9 @@ import cn.hutool.core.date.DateTime;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.IdUtil
;
import
cn.hutool.core.util.IdUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
com.baomidou.mybatisplus.core.conditions.Wrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.fzm.common.constant.SystemConstant
;
import
com.fzm.common.constant.SystemConstant
;
import
com.fzm.common.entity.AuthPerson
;
import
com.fzm.common.entity.AuthPerson
;
...
@@ -15,6 +17,7 @@ import com.fzm.common.entity.vo.UserListVo;
...
@@ -15,6 +17,7 @@ import com.fzm.common.entity.vo.UserListVo;
import
com.fzm.common.entity.vo.UserStatisticVo
;
import
com.fzm.common.entity.vo.UserStatisticVo
;
import
com.fzm.common.enums.AuthStatusEnum
;
import
com.fzm.common.enums.AuthStatusEnum
;
import
com.fzm.common.enums.AuthTypeEnum
;
import
com.fzm.common.enums.AuthTypeEnum
;
import
com.fzm.common.enums.IdCardVerificationResponse
;
import
com.fzm.common.enums.ResultCode
;
import
com.fzm.common.enums.ResultCode
;
import
com.fzm.common.exception.GlobalException
;
import
com.fzm.common.exception.GlobalException
;
import
com.fzm.common.mapper.UserMapper
;
import
com.fzm.common.mapper.UserMapper
;
...
@@ -23,18 +26,25 @@ import com.fzm.common.properties.OssProperties;
...
@@ -23,18 +26,25 @@ import com.fzm.common.properties.OssProperties;
import
com.fzm.common.properties.SmsProperties
;
import
com.fzm.common.properties.SmsProperties
;
import
com.fzm.common.service.AuthPersonService
;
import
com.fzm.common.service.AuthPersonService
;
import
com.fzm.common.service.UserService
;
import
com.fzm.common.service.UserService
;
import
com.fzm.common.utils.JwtUtil
;
import
com.fzm.common.utils.*
;
import
com.fzm.common.utils.OssUtil
;
import
com.tencentcloudapi.common.Credential
;
import
com.fzm.common.utils.RedisUtil
;
import
com.tencentcloudapi.common.exception.TencentCloudSDKException
;
import
com.fzm.common.utils.SmsUtil
;
import
com.tencentcloudapi.common.profile.ClientProfile
;
import
com.tencentcloudapi.common.profile.HttpProfile
;
import
com.tencentcloudapi.faceid.v20180301.FaceidClient
;
import
com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationRequest
;
import
com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.security.crypto.password.PasswordEncoder
;
import
org.springframework.security.crypto.password.PasswordEncoder
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.multipart.MultipartFile
;
import
sun.misc.BASE64Encoder
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -157,18 +167,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
...
@@ -157,18 +167,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
}
}
@Override
@Override
public
Boolean
personAuth
(
AuthPerson
authPerson
)
{
Integer
loginId
=
JwtUtil
.
getUserIdFromToken
(
request
.
getHeader
(
"Authorization"
));
User
user
=
new
User
().
setAuthStatus
(
AuthStatusEnum
.
ONGOING
.
getStatus
()).
setAuthType
(
AuthTypeEnum
.
PERSON
.
getType
()).
setId
(
loginId
);
updateById
(
user
);
authPerson
.
setUserId
(
loginId
);
return
authPersonService
.
save
(
authPerson
);
}
@Override
public
User
uploadAvatar
(
String
avatar
)
{
public
User
uploadAvatar
(
String
avatar
)
{
User
loginUser
=
getUserByToken
();
User
loginUser
=
getUserByToken
();
// 如果不是第一次上传头像,需要删除旧头像
// 如果不是第一次上传头像,需要删除旧头像
...
@@ -216,6 +214,37 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
...
@@ -216,6 +214,37 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
}
}
@Override
@Override
public
IdCardOCRVerificationResponse
personAuth
(
MultipartFile
cardPictureFront
,
MultipartFile
cardPictureBack
)
throws
IOException
{
String
token
=
request
.
getHeader
(
"Authorization"
);
Integer
userId
=
JwtUtil
.
getUserIdFromToken
(
token
);
BASE64Encoder
base64Encoder
=
new
BASE64Encoder
();
String
encode
=
"data:image/jpg;base64,"
+
base64Encoder
.
encode
(
cardPictureFront
.
getBytes
());
IdCardOCRVerificationResponse
response
=
TencentApi
.
idCardOCRVerification
(
encode
);
// 验证成功上传身份证证件
String
frontUrl
=
ossUtil
.
putSimpleObject
(
cardPictureFront
);
String
backUrl
=
ossUtil
.
putSimpleObject
(
cardPictureBack
);
AuthPerson
authPerson
=
new
AuthPerson
()
.
setUserId
(
userId
)
.
setIdCard
(
response
.
getIdCard
())
.
setName
(
response
.
getName
())
.
setCardPictureBack
(
backUrl
)
.
setCardPictureFront
(
frontUrl
);
authPersonService
.
save
(
authPerson
);
UpdateWrapper
<
User
>
userUpdateWrapper
=
new
UpdateWrapper
<>();
Integer
status
;
if
(
IdCardVerificationResponse
.
SUCCESS
.
getCode
().
equals
(
response
.
getResult
()))
{
status
=
AuthStatusEnum
.
SUCCESS
.
getStatus
();
}
else
{
status
=
AuthStatusEnum
.
FAIL
.
getStatus
();
}
userUpdateWrapper
.
set
(
"auth_type"
,
AuthTypeEnum
.
PERSON
.
getType
())
.
set
(
"auth_status"
,
status
)
.
eq
(
"id"
,
userId
);
update
(
userUpdateWrapper
);
return
response
;
}
@Override
public
List
<
UserListVo
>
list
(
String
telephone
,
String
nickname
,
Integer
authType
,
String
start
,
String
end
)
{
public
List
<
UserListVo
>
list
(
String
telephone
,
String
nickname
,
Integer
authType
,
String
start
,
String
end
)
{
DateTime
startDate
=
null
;
DateTime
startDate
=
null
;
DateTime
endDate
=
null
;
DateTime
endDate
=
null
;
...
@@ -227,4 +256,29 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
...
@@ -227,4 +256,29 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
}
}
return
userMapper
.
list
(
telephone
,
nickname
,
authType
,
startDate
,
endDate
);
return
userMapper
.
list
(
telephone
,
nickname
,
authType
,
startDate
,
endDate
);
}
}
public
static
void
main
(
String
[]
args
)
{
try
{
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential
cred
=
new
Credential
(
"SecretId"
,
"SecretKey"
);
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile
httpProfile
=
new
HttpProfile
();
httpProfile
.
setEndpoint
(
"faceid.tencentcloudapi.com"
);
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile
clientProfile
=
new
ClientProfile
();
clientProfile
.
setHttpProfile
(
httpProfile
);
// 实例化要请求产品的client对象,clientProfile是可选的
FaceidClient
client
=
new
FaceidClient
(
cred
,
""
,
clientProfile
);
// 实例化一个请求对象,每个接口都会对应一个request对象
IdCardOCRVerificationRequest
req
=
new
IdCardOCRVerificationRequest
();
// 返回的resp是一个IdCardOCRVerificationResponse的实例,与请求对象对应
IdCardOCRVerificationResponse
resp
=
client
.
IdCardOCRVerification
(
req
);
// 输出json格式的字符串回包
System
.
out
.
println
(
IdCardOCRVerificationResponse
.
toJsonString
(
resp
));
}
catch
(
TencentCloudSDKException
e
)
{
System
.
out
.
println
(
e
.
toString
());
}
}
}
}
joying-common/src/main/java/com/fzm/common/utils/TencentApi.java
0 → 100644
View file @
c9e2d04c
package
com
.
fzm
.
common
.
utils
;
import
com.fzm.common.enums.IdCardVerificationResponse
;
import
com.fzm.common.enums.ResultCode
;
import
com.fzm.common.exception.GlobalException
;
import
com.tencentcloudapi.common.Credential
;
import
com.tencentcloudapi.common.exception.TencentCloudSDKException
;
import
com.tencentcloudapi.common.profile.ClientProfile
;
import
com.tencentcloudapi.common.profile.HttpProfile
;
import
com.tencentcloudapi.faceid.v20180301.FaceidClient
;
import
com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationRequest
;
import
com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse
;
/**
* @author tangtuo
* @date 2021/9/13 15:13
*/
public
class
TencentApi
{
public
static
IdCardOCRVerificationResponse
idCardOCRVerification
(
String
imageBase64
)
{
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential
cred
=
new
Credential
(
"AKIDlMm3EC2dxXw50f4C4f092ey2pLaaKnyt"
,
"g5D4ey1nJZXEhtoSovkIZYGhqjLgkgNo"
);
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile
httpProfile
=
new
HttpProfile
();
httpProfile
.
setEndpoint
(
"faceid.tencentcloudapi.com"
);
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile
clientProfile
=
new
ClientProfile
();
clientProfile
.
setHttpProfile
(
httpProfile
);
// 实例化要请求产品的client对象,clientProfile是可选的
FaceidClient
client
=
new
FaceidClient
(
cred
,
"ap-shanghai"
,
clientProfile
);
// 实例化一个请求对象,每个接口都会对应一个request对象
IdCardOCRVerificationRequest
req
=
new
IdCardOCRVerificationRequest
();
req
.
setImageBase64
(
imageBase64
);
// 返回的resp是一个IdCardOCRVerificationResponse的实例,与请求对象对应
try
{
IdCardOCRVerificationResponse
resp
=
client
.
IdCardOCRVerification
(
req
);
return
resp
;
}
catch
(
TencentCloudSDKException
e
)
{
throw
GlobalException
.
newException
(
ResultCode
.
ID_CARD_VERIFICATION_ERROR
,
"实名认证失败,失败原因: "
+
e
.
getMessage
());
}
}
}
joying-portal/src/main/java/com/fzm/portal/aop/LogAop.java
0 → 100644
View file @
c9e2d04c
package
com
.
fzm
.
portal
.
aop
;
import
com.tencentcloudapi.common.Credential
;
import
com.tencentcloudapi.common.exception.TencentCloudSDKException
;
import
com.tencentcloudapi.common.profile.ClientProfile
;
import
com.tencentcloudapi.common.profile.HttpProfile
;
import
com.tencentcloudapi.faceid.v20180301.FaceidClient
;
import
com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationRequest
;
import
com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.annotation.After
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Before
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.bind.annotation.ModelAttribute
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.Parameter
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author tangtuo
* @date 2021/9/10 14:27
*/
@Slf4j
@Order
(
1
)
@Component
@Aspect
public
class
LogAop
{
@Resource
private
HttpServletRequest
request
;
private
static
ThreadLocal
<
Long
>
threadLocal
=
new
ThreadLocal
<>();
@Pointcut
(
value
=
"execution(public * com.fzm.portal.controller.*.*(..))"
)
public
void
pointCut
()
{
}
/**
* 前置通知
*
* @param joinPoint
*/
@Before
(
"pointCut()"
)
public
void
deBefore
(
JoinPoint
joinPoint
)
{
// 记录此次请求的开始时间
long
start
=
System
.
currentTimeMillis
();
threadLocal
.
set
(
start
);
// 获取请求路径
String
requestURI
=
request
.
getRequestURI
();
// 获取请求参数
MethodSignature
signature
=
(
MethodSignature
)
joinPoint
.
getSignature
();
Method
method
=
signature
.
getMethod
();
List
<
Object
>
parameter
=
getParameter
(
method
,
joinPoint
.
getArgs
());
log
.
info
(
"请求路径: {},请求参数:{}"
,
requestURI
,
parameter
);
}
/**
* 后置通知
*
* @param joinPoint
*/
@After
(
"pointCut()"
)
public
void
doAfter
(
JoinPoint
joinPoint
)
{
long
end
=
System
.
currentTimeMillis
();
Long
start
=
threadLocal
.
get
();
long
l
=
end
-
start
;
String
requestURI
=
request
.
getRequestURI
();
log
.
info
(
"请求路径:{},接口耗时:{}ms"
,
requestURI
,
l
);
}
/**
* 根据方法和传入的参数获取请求参数
*/
private
List
<
Object
>
getParameter
(
Method
method
,
Object
[]
args
)
{
List
<
Object
>
argList
=
new
ArrayList
<>();
Parameter
[]
parameters
=
method
.
getParameters
();
for
(
int
i
=
0
;
i
<
parameters
.
length
;
i
++)
{
//将RequestBody注解修饰的参数作为请求参数
RequestBody
requestBody
=
parameters
[
i
].
getAnnotation
(
RequestBody
.
class
);
if
(
requestBody
!=
null
)
{
argList
.
add
(
args
[
i
]);
}
ModelAttribute
modelAttribute
=
parameters
[
i
].
getAnnotation
(
ModelAttribute
.
class
);
if
(
modelAttribute
!=
null
)
{
argList
.
add
(
args
[
i
]);
}
//将RequestParam注解修饰的参数作为请求参数
RequestParam
requestParam
=
parameters
[
i
].
getAnnotation
(
RequestParam
.
class
);
if
(
requestParam
!=
null
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
String
key
=
parameters
[
i
].
getName
();
if
(!
StringUtils
.
isEmpty
(
requestParam
.
value
()))
{
key
=
requestParam
.
value
();
}
map
.
put
(
key
,
args
[
i
]);
argList
.
add
(
map
);
}
// PathVariable修饰的请求参数
PathVariable
pathVariable
=
parameters
[
i
].
getAnnotation
(
PathVariable
.
class
);
if
(
pathVariable
!=
null
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
String
key
=
parameters
[
i
].
getName
();
if
(
StringUtils
.
isNotBlank
(
pathVariable
.
value
()))
{
key
=
pathVariable
.
value
();
}
map
.
put
(
key
,
args
[
i
]);
argList
.
add
(
map
);
}
}
return
argList
;
}
public
static
void
main
(
String
[]
args
){
try
{
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential
cred
=
new
Credential
(
"AKIDlMm3EC2dxXw50f4C4f092ey2pLaaKnyt"
,
"g5D4ey1nJZXEhtoSovkIZYGhqjLgkgNo"
);
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile
httpProfile
=
new
HttpProfile
();
httpProfile
.
setEndpoint
(
"faceid.tencentcloudapi.com"
);
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile
clientProfile
=
new
ClientProfile
();
clientProfile
.
setHttpProfile
(
httpProfile
);
// 实例化要请求产品的client对象,clientProfile是可选的
FaceidClient
client
=
new
FaceidClient
(
cred
,
"ap-shanghai"
,
clientProfile
);
// 实例化一个请求对象,每个接口都会对应一个request对象
IdCardOCRVerificationRequest
req
=
new
IdCardOCRVerificationRequest
();
String
url
=
"https://test-nft.oss-cn-hangzhou.aliyuncs.com/20210913/ff8e541497d1482895be1f038bb0430e/微信图片_20210913144401.jpg"
;
req
.
setImageUrl
(
url
);
// 返回的resp是一个IdCardOCRVerificationResponse的实例,与请求对象对应
IdCardOCRVerificationResponse
resp
=
client
.
IdCardOCRVerification
(
req
);
// 输出json格式的字符串回包
System
.
out
.
println
(
IdCardOCRVerificationResponse
.
toJsonString
(
resp
));
}
catch
(
TencentCloudSDKException
e
)
{
System
.
out
.
println
(
e
.
toString
());
}
}
}
joying-portal/src/main/java/com/fzm/portal/controller/UserController.java
View file @
c9e2d04c
...
@@ -13,8 +13,10 @@ import com.fzm.common.service.UserService;
...
@@ -13,8 +13,10 @@ import com.fzm.common.service.UserService;
import
com.fzm.common.utils.JwtUtil
;
import
com.fzm.common.utils.JwtUtil
;
import
com.fzm.common.utils.OssUtil
;
import
com.fzm.common.utils.OssUtil
;
import
com.fzm.common.utils.RedisUtil
;
import
com.fzm.common.utils.RedisUtil
;
import
com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
...
@@ -125,8 +127,10 @@ public class UserController {
...
@@ -125,8 +127,10 @@ public class UserController {
@Authentication
@Authentication
@PostMapping
(
"/auth/person"
)
@PostMapping
(
"/auth/person"
)
@ApiOperation
(
value
=
"个人认证"
)
@ApiOperation
(
value
=
"个人认证"
)
public
ResponseModel
<
Boolean
>
personAuth
(
@RequestBody
@Validated
AuthPerson
authPerson
)
{
public
ResponseModel
<
IdCardOCRVerificationResponse
>
personAuth
(
@ApiParam
(
"身份证正面照"
)
@RequestParam
MultipartFile
front
,
return
ResponseModel
.
success
(
userService
.
personAuth
(
authPerson
));
@ApiParam
(
"身份证反面照"
)
@RequestParam
MultipartFile
back
)
throws
IOException
{
return
ResponseModel
.
success
(
userService
.
personAuth
(
front
,
back
));
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment