Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
xyqb-user2
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
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
head_group
xyqb-user2
Commits
db5b902f
Commit
db5b902f
authored
Jul 07, 2023
by
王亮
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
finished Wechat direct login.
parent
5942f5df
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
154 additions
and
4 deletions
+154
-4
BizExceptionEnum.java
...n/java/cn/quantgroup/xyqb/exception/BizExceptionEnum.java
+1
-0
IWeChatUserRepository.java
.../cn/quantgroup/xyqb/repository/IWeChatUserRepository.java
+1
-0
WechatMiniLoginStrategy.java
...n/quantgroup/xyqb/service/v2/WechatMiniLoginStrategy.java
+35
-2
WechatMiniPhoneLoginStrategy.java
...ntgroup/xyqb/service/v2/WechatMiniPhoneLoginStrategy.java
+117
-2
No files found.
src/main/java/cn/quantgroup/xyqb/exception/BizExceptionEnum.java
View file @
db5b902f
...
@@ -21,6 +21,7 @@ public enum BizExceptionEnum {
...
@@ -21,6 +21,7 @@ public enum BizExceptionEnum {
ERROR_WECHAT_LOGIN
(
"1010"
,
"微信登录失败"
),
ERROR_WECHAT_LOGIN
(
"1010"
,
"微信登录失败"
),
// 验证码相关 20 开头
// 验证码相关 20 开头
FAIL_GENERATE_IMAGE
(
"2001"
,
"生成图片失败"
),
FAIL_GENERATE_IMAGE
(
"2001"
,
"生成图片失败"
),
FAIL_VERIFY_CODE
(
"2002"
,
"图形验证码错误"
),
FAIL_VERIFY_CODE
(
"2002"
,
"图形验证码错误"
),
...
...
src/main/java/cn/quantgroup/xyqb/repository/IWeChatUserRepository.java
View file @
db5b902f
...
@@ -17,6 +17,7 @@ import static org.springframework.transaction.annotation.Propagation.MANDATORY;
...
@@ -17,6 +17,7 @@ import static org.springframework.transaction.annotation.Propagation.MANDATORY;
*/
*/
public
interface
IWeChatUserRepository
extends
JpaRepository
<
WechatUserInfo
,
Long
>
{
public
interface
IWeChatUserRepository
extends
JpaRepository
<
WechatUserInfo
,
Long
>
{
WechatUserInfo
findByOpenIdAndAppNameAndAppIdAndTenantId
(
String
openId
,
String
appName
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findByOpenIdAndAppNameAndAppIdAndTenantId
(
String
openId
,
String
appName
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findByOpenIdAndAppIdAndTenantId
(
String
openId
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findByPhoneNoAndAppNameAndTenantId
(
String
phoneNo
,
String
appName
,
Integer
tenantId
);
WechatUserInfo
findByPhoneNoAndAppNameAndTenantId
(
String
phoneNo
,
String
appName
,
Integer
tenantId
);
...
...
src/main/java/cn/quantgroup/xyqb/service/v2/WechatMiniLoginStrategy.java
View file @
db5b902f
package
cn
.
quantgroup
.
xyqb
.
service
.
v2
;
package
cn
.
quantgroup
.
xyqb
.
service
.
v2
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.config.data.WechatConfiguration
;
import
cn.quantgroup.xyqb.config.data.WechatConfiguration
;
import
cn.quantgroup.xyqb.constant.enums.LoginType
;
import
cn.quantgroup.xyqb.controller.req.v2.LoginReq
;
import
cn.quantgroup.xyqb.controller.req.v2.LoginReq
;
import
cn.quantgroup.xyqb.entity.WechatUserInfo
;
import
cn.quantgroup.xyqb.exception.BizException
;
import
cn.quantgroup.xyqb.exception.BizException
;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.model.AuthBean
;
import
cn.quantgroup.xyqb.model.LoginBean
;
import
cn.quantgroup.xyqb.model.LoginBean
;
import
cn.quantgroup.xyqb.model.LoginProperties
;
import
cn.quantgroup.xyqb.model.WechatConfigBean
;
import
cn.quantgroup.xyqb.model.WechatConfigBean
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.v2.login.BaseLoginParam
;
import
cn.quantgroup.xyqb.model.v2.login.BaseLoginParam
;
import
cn.quantgroup.xyqb.model.v2.login.WechatMiniLoginParam
;
import
cn.quantgroup.xyqb.model.v2.login.WechatMiniLoginParam
;
import
cn.quantgroup.xyqb.remote.WechatRemoteService
;
import
cn.quantgroup.xyqb.remote.WechatRemoteService
;
import
cn.quantgroup.xyqb.repository.IWeChatUserRepository
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
import
com.google.gson.Gson
;
import
com.google.gson.Gson
;
import
com.google.gson.reflect.TypeToken
;
import
com.google.gson.reflect.TypeToken
;
...
@@ -29,11 +34,16 @@ public class WechatMiniLoginStrategy implements LoginStrategy{
...
@@ -29,11 +34,16 @@ public class WechatMiniLoginStrategy implements LoginStrategy{
private
final
WechatRemoteService
wechatRemoteService
;
private
final
WechatRemoteService
wechatRemoteService
;
private
final
WechatConfiguration
wechatConfiguration
;
private
final
WechatConfiguration
wechatConfiguration
;
private
final
IWeChatUserRepository
weChatUserRepository
;
private
final
ISessionService
sessionService
;
private
final
Gson
gson
;
private
final
Gson
gson
;
public
WechatMiniLoginStrategy
(
WechatRemoteService
wechatRemoteService
,
WechatConfiguration
wechatConfiguration
,
Gson
gson
)
{
public
WechatMiniLoginStrategy
(
WechatRemoteService
wechatRemoteService
,
WechatConfiguration
wechatConfiguration
,
IWeChatUserRepository
weChatUserRepository
,
ISessionService
sessionService
,
Gson
gson
)
{
this
.
wechatRemoteService
=
wechatRemoteService
;
this
.
wechatRemoteService
=
wechatRemoteService
;
this
.
wechatConfiguration
=
wechatConfiguration
;
this
.
wechatConfiguration
=
wechatConfiguration
;
this
.
weChatUserRepository
=
weChatUserRepository
;
this
.
sessionService
=
sessionService
;
this
.
gson
=
gson
;
this
.
gson
=
gson
;
}
}
...
@@ -75,6 +85,29 @@ public class WechatMiniLoginStrategy implements LoginStrategy{
...
@@ -75,6 +85,29 @@ public class WechatMiniLoginStrategy implements LoginStrategy{
}
}
//2、登录判断逻辑
//2、登录判断逻辑
WechatUserInfo
wechatUserInfo
=
weChatUserRepository
.
findByOpenIdAndAppIdAndTenantId
(
openid
,
loginParam
.
getAppId
(),
sessionStruct
.
getTenantId
());
boolean
register
=
false
;
if
(
wechatUserInfo
==
null
){
//首次登录
register
=
true
;
}
else
{
// wechatUserInfo = weChatUserRepository.save(null);
}
// LoginProperties loginProperties = new LoginProperties(1, sessionStruct.getRegisteredFrom(), sessionStruct.getTenantId());
// AuthBean authBean = sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(), sessionStruct.getTenantId());
// LoginBean loginBean = new LoginBean();
// if (authBean != null) {
// loginBean.setToken(authBean.getToken());
// loginBean.setPhoneNo(authBean.getPhoneNo());
// loginBean.setUuid(authBean.getUuid());
// loginBean.setHasPassword(authBean.isHasPassword());
// loginBean.setUserId(wechatUserInfo.getUserId());
// loginBean.setTenantId(wechatUserInfo.getTenantId());
// }
// loginBean.setRegister(register);
//
return
null
;
return
null
;
...
...
src/main/java/cn/quantgroup/xyqb/service/v2/WechatMiniPhoneLoginStrategy.java
View file @
db5b902f
package
cn
.
quantgroup
.
xyqb
.
service
.
v2
;
package
cn
.
quantgroup
.
xyqb
.
service
.
v2
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.config.data.WechatConfiguration
;
import
cn.quantgroup.xyqb.constant.enums.LoginType
;
import
cn.quantgroup.xyqb.controller.req.v2.LoginReq
;
import
cn.quantgroup.xyqb.controller.req.v2.LoginReq
;
import
cn.quantgroup.xyqb.model.LoginBean
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.exception.BizException
;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.exception.UserNotExistException
;
import
cn.quantgroup.xyqb.model.*
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.v2.login.BaseLoginParam
;
import
cn.quantgroup.xyqb.model.v2.login.BaseLoginParam
;
import
cn.quantgroup.xyqb.model.v2.login.WechatMiniLoginParam
;
import
cn.quantgroup.xyqb.model.v2.login.WechatMiniPhoneLoginParam
;
import
cn.quantgroup.xyqb.model.v2.login.WechatMiniPhoneLoginParam
;
import
cn.quantgroup.xyqb.remote.WechatRemoteService
;
import
cn.quantgroup.xyqb.repository.IUserRepository
;
import
cn.quantgroup.xyqb.repository.IWeChatUserRepository
;
import
cn.quantgroup.xyqb.service.register.IUserRegisterService
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
import
com.google.gson.Gson
;
import
com.google.gson.reflect.TypeToken
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.lang.reflect.Type
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
/**
* 微信小程序手机号码登录
* 微信小程序手机号码登录
*/
*/
@Service
@Service
@Slf4j
public
class
WechatMiniPhoneLoginStrategy
implements
LoginStrategy
{
public
class
WechatMiniPhoneLoginStrategy
implements
LoginStrategy
{
private
final
WechatRemoteService
wechatRemoteService
;
private
final
WechatConfiguration
wechatConfiguration
;
private
final
IWeChatUserRepository
weChatUserRepository
;
private
final
ISessionService
sessionService
;
private
final
IUserRepository
userRepository
;
private
final
IUserRegisterService
userRegisterService
;
@Autowired
@Qualifier
(
"stringRedisTemplate"
)
private
RedisTemplate
<
String
,
String
>
redisTemplate
;
private
final
Gson
gson
;
public
WechatMiniPhoneLoginStrategy
(
WechatRemoteService
wechatRemoteService
,
WechatConfiguration
wechatConfiguration
,
IWeChatUserRepository
weChatUserRepository
,
ISessionService
sessionService
,
IUserRepository
userRepository
,
IUserRegisterService
userRegisterService
,
Gson
gson
)
{
this
.
wechatRemoteService
=
wechatRemoteService
;
this
.
wechatConfiguration
=
wechatConfiguration
;
this
.
weChatUserRepository
=
weChatUserRepository
;
this
.
sessionService
=
sessionService
;
this
.
userRepository
=
userRepository
;
this
.
userRegisterService
=
userRegisterService
;
this
.
gson
=
gson
;
}
@Override
@Override
public
Integer
getType
()
{
public
Integer
getType
()
{
return
2102
;
return
2102
;
...
@@ -18,7 +68,72 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
...
@@ -18,7 +68,72 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
@Override
@Override
public
LoginBean
login
(
BaseLoginParam
param
)
{
public
LoginBean
login
(
BaseLoginParam
param
)
{
return
null
;
WechatMiniPhoneLoginParam
loginParam
=
(
WechatMiniPhoneLoginParam
)
param
;
SessionStruct
sessionStruct
=
XyqbSessionContextHolder
.
getXSession
();
//1、微信登录逻辑
WechatConfigBean
wechatConfigBean
=
wechatConfiguration
.
getByAppIdAndTenantId
(
loginParam
.
getAppId
(),
sessionStruct
.
getTenantId
());
String
response
=
wechatRemoteService
.
login
(
wechatConfigBean
.
getAppId
(),
wechatConfigBean
.
getAppSecret
(),((
WechatMiniLoginParam
)
param
).
getCode
());
Type
resultType
=
new
TypeToken
<
Map
<
String
,
String
>>()
{
}.
getType
();
Map
<
String
,
String
>
responseMap
=
gson
.
fromJson
(
response
,
resultType
);
String
openid
,
sessionKey
,
unionId
;
assert
responseMap
!=
null
;
if
(
responseMap
.
containsKey
(
"errcode"
)
&&
Integer
.
parseInt
(
responseMap
.
get
(
"errcode"
))
!=
0
)
{
log
.
error
(
"code:{},errcode:{},errmsg:{}"
,
((
WechatMiniLoginParam
)
param
).
getCode
(),
responseMap
.
get
(
"errcode"
),
responseMap
.
get
(
"errmsg"
));
throw
new
BizException
(
BizExceptionEnum
.
ERROR_WECHAT_LOGIN
,
responseMap
.
get
(
"errmsg"
));
}
else
{
openid
=
responseMap
.
get
(
"openid"
);
if
(
responseMap
.
containsKey
(
"session_key"
))
{
sessionKey
=
responseMap
.
get
(
"session_key"
);
}
if
(
responseMap
.
containsKey
(
"unionid"
))
{
unionId
=
responseMap
.
get
(
"unionid"
);
}
}
Map
<
String
,
String
>
phoneParam
=
new
HashMap
<>();
boolean
register
=
false
;
User
user
;
phoneParam
.
put
(
"code"
,
loginParam
.
getPhoneCode
());
String
accessToken
=
redisTemplate
.
opsForValue
().
get
(
Constants
.
WECHAT_ACCESS_TOKEN_REDIS
+
loginParam
.
getAppId
());
WechatPhoneBean
wechatPhoneBean
=
wechatRemoteService
.
getUserPhoneNumber
(
accessToken
,
phoneParam
);
if
(
wechatPhoneBean
.
getErrcode
()
==
0
){
//1、查询库中是否存在用户
user
=
userRepository
.
findByPhoneNoAndTenantId
(
wechatPhoneBean
.
getPhone_info
().
getPurePhoneNumber
(),
sessionStruct
.
getTenantId
());
//2、如果没有用户,新建一条
if
(
user
==
null
){
user
=
userRegisterService
.
register
(
sessionStruct
.
getRegisteredFrom
(),
wechatPhoneBean
.
getPhone_info
().
getPurePhoneNumber
(),
sessionStruct
.
getTenantId
());
}
if
(
user
==
null
)
{
throw
new
BizException
(
BizExceptionEnum
.
UN_EXIT_USER
);
}
register
=
true
;
}
else
{
throw
new
BizException
(
BizExceptionEnum
.
ERROR_WECHAT_LOGIN
,
wechatPhoneBean
.
getErrmsg
());
}
LoginProperties
loginProperties
=
new
LoginProperties
(
1
,
sessionStruct
.
getRegisteredFrom
(),
sessionStruct
.
getTenantId
());
AuthBean
authBean
=
sessionService
.
createSession
(
user
,
loginProperties
,
LoginType
.
ACCOUNTPASSWORD
.
ordinal
(),
sessionStruct
.
getTenantId
());
LoginBean
loginBean
=
new
LoginBean
();
if
(
authBean
!=
null
)
{
loginBean
.
setToken
(
authBean
.
getToken
());
loginBean
.
setPhoneNo
(
authBean
.
getPhoneNo
());
loginBean
.
setUuid
(
authBean
.
getUuid
());
loginBean
.
setHasPassword
(
authBean
.
isHasPassword
());
loginBean
.
setUserId
(
user
.
getId
());
loginBean
.
setTenantId
(
user
.
getTenantId
());
}
loginBean
.
setRegister
(
register
);
return
loginBean
;
}
}
@Override
@Override
...
...
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