Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wecloud_im_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
wecloud_im_server
Commits
40fd4f56
Commit
40fd4f56
authored
Mar 08, 2021
by
giaogiao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
微信登陆相关.短信验证码
parent
8f51bb00
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
410 additions
and
40 deletions
+410
-40
bootstrap/src/main/java/io/geekidea/springbootplus/SpringBootPlusApplication.java
+3
-1
bootstrap/src/test/java/io/geekidea/springbootplus/test/SpiringPlusTest.java
+23
-2
common/pom.xml
+8
-0
common/src/main/java/com/sien/common/config/WxMpConfiguration.java
+114
-0
common/src/main/java/com/sien/common/controller/WechatUserController.java
+7
-5
common/src/main/java/com/sien/common/factory/GetWx.java
+41
-0
common/src/main/java/com/sien/common/param/app/AppSmsRegisterParam.java
+2
-2
common/src/main/java/com/sien/common/service/AppUserService.java
+6
-0
common/src/main/java/com/sien/common/service/impl/AppUserApiServiceImpl.java
+40
-2
common/src/main/java/com/sien/common/service/impl/AppUserServiceImpl.java
+68
-3
common/src/main/java/com/sien/common/vo/app/LoginAppUserTokenVo.java
+1
-2
config/pom.xml
+0
-15
config/src/main/java/io/geekidea/springbootplus/config/properties/WxMpProperties.java
+73
-0
config/src/main/resources/config/application-dev.yml
+23
-7
pom.xml
+1
-1
No files found.
bootstrap/src/main/java/io/geekidea/springbootplus/SpringBootPlusApplication.java
View file @
40fd4f56
...
@@ -20,6 +20,7 @@ import io.geekidea.springbootplus.framework.util.PrintApplicationInfo;
...
@@ -20,6 +20,7 @@ import io.geekidea.springbootplus.framework.util.PrintApplicationInfo;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.context.properties.ConfigurationPropertiesScan
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.boot.web.servlet.ServletComponentScan
;
import
org.springframework.boot.web.servlet.ServletComponentScan
;
import
org.springframework.context.ConfigurableApplicationContext
;
import
org.springframework.context.ConfigurableApplicationContext
;
...
@@ -38,8 +39,9 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
...
@@ -38,8 +39,9 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
@EnableTransactionManagement
@EnableConfigurationProperties
@EnableConfigurationProperties
@ServletComponentScan
@ServletComponentScan
@ConfigurationPropertiesScan
(
"com.sien.common.config"
)
@MapperScan
({
"io.geekidea.springbootplus.**.mapper"
,
"com.sien.**.mapper"
})
@MapperScan
({
"io.geekidea.springbootplus.**.mapper"
,
"com.sien.**.mapper"
})
@SpringBootApplication
(
scanBasePackages
=
{
"io.geekidea.springbootplus"
,
"com.sien"
})
@SpringBootApplication
(
scanBasePackages
=
{
"io.geekidea.springbootplus"
,
"com.sien"
,
"com.sien.common"
,
"com.sien.common.config"
})
public
class
SpringBootPlusApplication
{
public
class
SpringBootPlusApplication
{
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
...
...
bootstrap/src/test/java/io/geekidea/springbootplus/test/
Push
Test.java
→
bootstrap/src/test/java/io/geekidea/springbootplus/test/
SpiringPlus
Test.java
View file @
40fd4f56
package
io
.
geekidea
.
springbootplus
.
test
;
package
io
.
geekidea
.
springbootplus
.
test
;
import
com.sien.common.factory.PushFactory
;
import
com.sien.common.factory.PushFactory
;
import
me.chanjar.weixin.common.bean.WxOAuth2UserInfo
;
import
me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken
;
import
me.chanjar.weixin.mp.api.WxMpService
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -9,11 +12,14 @@ import org.springframework.test.context.junit4.SpringRunner;
...
@@ -9,11 +12,14 @@ import org.springframework.test.context.junit4.SpringRunner;
@RunWith
(
SpringRunner
.
class
)
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
@SpringBootTest
public
class
Push
Test
{
public
class
SpiringPlus
Test
{
@Autowired
@Autowired
private
PushFactory
pushFactory
;
private
PushFactory
pushFactory
;
@Autowired
private
WxMpService
wxMpService
;
/**
/**
* app推送:1.您有一条新消息(客服回复推送)
* app推送:1.您有一条新消息(客服回复推送)
* 2.您的订单已报价(商家端报价完后推送)
* 2.您的订单已报价(商家端报价完后推送)
...
@@ -22,7 +28,7 @@ public class PushTest {
...
@@ -22,7 +28,7 @@ public class PushTest {
* @throws Exception
* @throws Exception
*/
*/
@Test
@Test
public
void
pu
()
throws
Exception
{
public
void
pu
sh
()
throws
Exception
{
pushFactory
.
getService
(
1
).
unicast
(
"Ar4opHQcGn-UA1-fZ7O6PAeNSJs9rCEEI5XRvS_0rQke"
,
"2"
,
"您的订单已报价"
);
pushFactory
.
getService
(
1
).
unicast
(
"Ar4opHQcGn-UA1-fZ7O6PAeNSJs9rCEEI5XRvS_0rQke"
,
"2"
,
"您的订单已报价"
);
...
@@ -30,4 +36,19 @@ public class PushTest {
...
@@ -30,4 +36,19 @@ public class PushTest {
}
}
@Test
public
void
wxGetOpenId
()
throws
Exception
{
String
code
=
"071iQYGa1jwhCA06vtFa1OHuHE2iQYGq"
;
WxOAuth2AccessToken
accessToken
=
wxMpService
.
getOAuth2Service
().
getAccessToken
(
code
);
// 获取用户头像
WxOAuth2UserInfo
userInfo
=
wxMpService
.
getOAuth2Service
().
getUserInfo
(
accessToken
,
null
);
int
ii
=
1
;
}
}
}
common/pom.xml
View file @
40fd4f56
...
@@ -22,6 +22,14 @@
...
@@ -22,6 +22,14 @@
</dependency>
</dependency>
<!-- 公众号(包括订阅号和服务号):weixin-java-mp -->
<dependency>
<groupId>
com.github.binarywang
</groupId>
<artifactId>
weixin-java-mp
</artifactId>
<version>
4.0.0
</version>
</dependency>
<!-- fastbootWeixin的核心依赖 -->
<!-- fastbootWeixin的核心依赖 -->
<dependency>
<dependency>
<groupId>
com.mxixm
</groupId>
<groupId>
com.mxixm
</groupId>
...
...
common/src/main/java/com/sien/common/config/WxMpConfiguration.java
0 → 100644
View file @
40fd4f56
package
com
.
sien
.
common
.
config
;
import
io.geekidea.springbootplus.config.properties.WxMpProperties
;
import
me.chanjar.weixin.mp.api.WxMpService
;
import
me.chanjar.weixin.mp.api.impl.WxMpServiceImpl
;
import
me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* wechat mp configuration
*
* @author Binary Wang(https://github.com/binarywang)
*/
@Configuration
//@EnableConfigurationProperties(WxMpProperties.class)
public
class
WxMpConfiguration
{
// private final LogHandler logHandler;
// private final NullHandler nullHandler;
// private final KfSessionHandler kfSessionHandler;
// private final StoreCheckNotifyHandler storeCheckNotifyHandler;
// private final LocationHandler locationHandler;
// private final MenuHandler menuHandler;
// private final MsgHandler msgHandler;
// private final UnsubscribeHandler unsubscribeHandler;
// private final SubscribeHandler subscribeHandler;
// private final ScanHandler scanHandler;
// private final WxMpProperties properties;
@Autowired
private
WxMpProperties
properties
;
@Bean
public
WxMpService
wxMpService
()
{
// 代码里 getConfigs()处报错的同学,请注意仔细阅读项目说明,你的IDE需要引入lombok插件!!!!
final
List
<
WxMpProperties
.
MpConfig
>
configs
=
this
.
properties
.
getConfigs
();
if
(
configs
==
null
)
{
throw
new
RuntimeException
(
"添加下相关配置,注意别配错了!"
);
}
WxMpService
service
=
new
WxMpServiceImpl
();
service
.
setMultiConfigStorages
(
configs
.
stream
().
map
(
a
->
{
WxMpDefaultConfigImpl
configStorage
;
// if (this.properties.isUseRedis()) {
// final WxMpProperties.RedisConfig redisConfig = this.properties.getRedisConfig();
// JedisPool jedisPool = new JedisPool(redisConfig.getHost(), redisConfig.getPort());
// configStorage = new WxMpRedisConfigImpl(new JedisWxRedisOps(jedisPool), a.getAppId());
// } else {
configStorage
=
new
WxMpDefaultConfigImpl
();
// }
configStorage
.
setAppId
(
a
.
getAppId
());
configStorage
.
setSecret
(
a
.
getSecret
());
configStorage
.
setToken
(
a
.
getToken
());
configStorage
.
setAesKey
(
a
.
getAesKey
());
return
configStorage
;
}).
collect
(
Collectors
.
toMap
(
WxMpDefaultConfigImpl:
:
getAppId
,
a
->
a
,
(
o
,
n
)
->
o
)));
return
service
;
}
// @Bean
// public WxMpMessageRouter messageRouter(WxMpService wxMpService) {
// final WxMpMessageRouter newRouter = new WxMpMessageRouter(wxMpService);
//
// // 记录所有事件的日志 (异步执行)
// newRouter.rule().handler(this.logHandler).next();
//
// // 接收客服会话管理事件
// newRouter.rule().async(false).msgType(EVENT).event(KF_CREATE_SESSION)
// .handler(this.kfSessionHandler).end();
// newRouter.rule().async(false).msgType(EVENT).event(KF_CLOSE_SESSION)
// .handler(this.kfSessionHandler).end();
// newRouter.rule().async(false).msgType(EVENT).event(KF_SWITCH_SESSION)
// .handler(this.kfSessionHandler).end();
//
// // 门店审核事件
// newRouter.rule().async(false).msgType(EVENT).event(POI_CHECK_NOTIFY).handler(this.storeCheckNotifyHandler).end();
//
// // 自定义菜单事件
// newRouter.rule().async(false).msgType(EVENT).event(EventType.CLICK).handler(this.menuHandler).end();
//
// // 点击菜单连接事件
// newRouter.rule().async(false).msgType(EVENT).event(EventType.VIEW).handler(this.nullHandler).end();
//
// // 关注事件
// newRouter.rule().async(false).msgType(EVENT).event(SUBSCRIBE).handler(this.subscribeHandler).end();
//
// // 取消关注事件
// newRouter.rule().async(false).msgType(EVENT).event(UNSUBSCRIBE).handler(this.unsubscribeHandler).end();
//
// // 上报地理位置事件
// newRouter.rule().async(false).msgType(EVENT).event(EventType.LOCATION).handler(this.locationHandler).end();
//
// // 接收地理位置消息
// newRouter.rule().async(false).msgType(XmlMsgType.LOCATION).handler(this.locationHandler).end();
//
// // 扫码事件
// newRouter.rule().async(false).msgType(EVENT).event(EventType.SCAN).handler(this.scanHandler).end();
//
// // 默认
// newRouter.rule().async(false).handler(this.msgHandler).end();
//
// return newRouter;
// }
}
common/src/main/java/com/sien/common/controller/WechatUserController.java
View file @
40fd4f56
...
@@ -2,6 +2,7 @@ package com.sien.common.controller;
...
@@ -2,6 +2,7 @@ package com.sien.common.controller;
import
com.sien.common.service.AppUserService
;
import
com.sien.common.service.AppUserService
;
import
com.sien.common.vo.AppUserQueryVo
;
import
com.sien.common.vo.AppUserQueryVo
;
import
com.sien.common.vo.app.LoginAppUserTokenVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.geekidea.springbootplus.framework.log.annotation.Module
;
import
io.geekidea.springbootplus.framework.log.annotation.Module
;
...
@@ -13,6 +14,7 @@ import lombok.extern.slf4j.Slf4j;
...
@@ -13,6 +14,7 @@ import lombok.extern.slf4j.Slf4j;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
/**
/**
...
@@ -36,12 +38,12 @@ public class WechatUserController extends BaseController {
...
@@ -36,12 +38,12 @@ public class WechatUserController extends BaseController {
*/
*/
@GetMapping
(
"/check/"
)
@GetMapping
(
"/check/"
)
@OperationLog
(
name
=
"根据微信重定向code查询用户是否绑定"
,
type
=
OperationLogType
.
INFO
)
@OperationLog
(
name
=
"根据微信重定向code查询用户是否绑定"
,
type
=
OperationLogType
.
INFO
)
@ApiOperation
(
value
=
"根据微信重定向code查询用户是否绑定"
,
response
=
AppUserQueryVo
.
class
)
@ApiOperation
(
value
=
"根据微信重定向code查询用户是否绑定"
,
notes
=
"用户每次从微信公众号菜单页跳转,都必须调用此接口,来判断用户是否已经绑定用户,"
+
public
ApiResult
<
AppUserQueryVo
>
getAppUser
()
throws
Exception
{
" 如果已经绑定就直接返回绑定用户的token,如没有绑定则需要用户进行注册,"
,
response
=
AppUserQueryVo
.
class
)
AppUserQueryVo
appUserQueryVo
=
appUserService
.
getMyInfo
();
public
ApiResult
<
LoginAppUserTokenVo
>
checkAppUser
(
@RequestParam
(
"code"
)
String
code
)
throws
Exception
{
return
ApiResult
.
ok
(
appUserQueryVo
);
}
return
appUserService
.
checkWechatUserBinding
(
code
);
}
}
}
common/src/main/java/com/sien/common/factory/GetWx.java
0 → 100644
View file @
40fd4f56
package
com
.
sien
.
common
.
factory
;
import
io.geekidea.springbootplus.config.properties.WxMpProperties
;
import
me.chanjar.weixin.mp.api.WxMpService
;
import
me.chanjar.weixin.mp.api.impl.WxMpServiceImpl
;
import
me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
java.util.List
;
import
java.util.stream.Collectors
;
public
class
GetWx
{
private
static
WxMpProperties
properties
;
public
static
WxMpService
getWxMpService
()
{
// 代码里 getConfigs()处报错的同学,请注意仔细阅读项目说明,你的IDE需要引入lombok插件!!!!
final
List
<
WxMpProperties
.
MpConfig
>
configs
=
properties
.
getConfigs
();
if
(
configs
==
null
)
{
throw
new
RuntimeException
(
"添加下相关配置,注意别配错了!"
);
}
WxMpService
service
=
new
WxMpServiceImpl
();
service
.
setMultiConfigStorages
(
configs
.
stream
().
map
(
a
->
{
WxMpDefaultConfigImpl
configStorage
;
//
configStorage
=
new
WxMpDefaultConfigImpl
();
configStorage
.
setAppId
(
a
.
getAppId
());
configStorage
.
setSecret
(
a
.
getSecret
());
configStorage
.
setToken
(
a
.
getToken
());
configStorage
.
setAesKey
(
a
.
getAesKey
());
return
configStorage
;
}).
collect
(
Collectors
.
toMap
(
WxMpDefaultConfigImpl:
:
getAppId
,
a
->
a
,
(
o
,
n
)
->
o
)));
return
service
;
}
@Autowired
public
void
setProperties
(
WxMpProperties
properties
)
{
this
.
properties
=
properties
;
}
}
common/src/main/java/com/sien/common/param/app/AppSmsRegisterParam.java
View file @
40fd4f56
...
@@ -44,8 +44,8 @@ public class AppSmsRegisterParam implements Serializable {
...
@@ -44,8 +44,8 @@ public class AppSmsRegisterParam implements Serializable {
@ApiModelProperty
(
value
=
"短信验证码"
,
example
=
"666666"
,
required
=
true
)
@ApiModelProperty
(
value
=
"短信验证码"
,
example
=
"666666"
,
required
=
true
)
private
String
smsCode
;
private
String
smsCode
;
@ApiModelProperty
(
value
=
"微信
id
"
,
example
=
"adfadlsfadsf"
,
required
=
false
)
@ApiModelProperty
(
value
=
"微信
重定向地址中的code
"
,
example
=
"adfadlsfadsf"
,
required
=
false
)
private
String
openid
;
private
String
code
;
@ApiModelProperty
(
"姓名"
)
@ApiModelProperty
(
"姓名"
)
private
String
nickname
;
private
String
nickname
;
...
...
common/src/main/java/com/sien/common/service/AppUserService.java
View file @
40fd4f56
...
@@ -101,6 +101,12 @@ public interface AppUserService extends BaseService<AppUser> {
...
@@ -101,6 +101,12 @@ public interface AppUserService extends BaseService<AppUser> {
/**
/**
* 查询用户是否绑定微信
*/
ApiResult
<
LoginAppUserTokenVo
>
checkWechatUserBinding
(
String
code
)
;
/**
* 获取分页对象
* 获取分页对象
*
*
* @param appUserPageParam
* @param appUserPageParam
...
...
common/src/main/java/com/sien/common/service/impl/AppUserApiServiceImpl.java
View file @
40fd4f56
package
com
.
sien
.
common
.
service
.
impl
;
package
com
.
sien
.
common
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.sien.common.entity.AppUser
;
import
com.sien.common.entity.AppUser
;
import
com.sien.common.param.app.AppSmsRegisterParam
;
import
com.sien.common.param.app.AppSmsRegisterParam
;
...
@@ -10,9 +9,15 @@ import com.sien.common.service.AppUserApiService;
...
@@ -10,9 +9,15 @@ import com.sien.common.service.AppUserApiService;
import
com.sien.common.service.AppUserService
;
import
com.sien.common.service.AppUserService
;
import
com.sien.common.vo.AppUserQueryVo
;
import
com.sien.common.vo.AppUserQueryVo
;
import
com.sien.common.vo.app.LoginAppUserTokenVo
;
import
com.sien.common.vo.app.LoginAppUserTokenVo
;
import
io.geekidea.springbootplus.config.properties.WxMpProperties
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
me.chanjar.weixin.common.bean.WxOAuth2UserInfo
;
import
me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken
;
import
me.chanjar.weixin.mp.api.WxMpService
;
import
me.chanjar.weixin.mp.api.impl.WxMpServiceImpl
;
import
me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl
;
import
org.apache.shiro.SecurityUtils
;
import
org.apache.shiro.SecurityUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -20,6 +25,7 @@ import org.springframework.stereotype.Service;
...
@@ -20,6 +25,7 @@ import org.springframework.stereotype.Service;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
@Service
@Service
public
class
AppUserApiServiceImpl
implements
AppUserApiService
{
public
class
AppUserApiServiceImpl
implements
AppUserApiService
{
...
@@ -28,7 +34,32 @@ public class AppUserApiServiceImpl implements AppUserApiService {
...
@@ -28,7 +34,32 @@ public class AppUserApiServiceImpl implements AppUserApiService {
private
AppSmsService
appSmsService
;
private
AppSmsService
appSmsService
;
@Autowired
@Autowired
private
AppUserService
appUserService
;
private
AppUserService
appUserService
;
// @Autowired
// private WxMpService wxMpService;
@Autowired
private
WxMpProperties
properties
;
private
WxMpService
getWxMpService
()
{
// 代码里 getConfigs()处报错的同学,请注意仔细阅读项目说明,你的IDE需要引入lombok插件!!!!
final
List
<
WxMpProperties
.
MpConfig
>
configs
=
this
.
properties
.
getConfigs
();
if
(
configs
==
null
)
{
throw
new
RuntimeException
(
"添加下相关配置,注意别配错了!"
);
}
WxMpService
service
=
new
WxMpServiceImpl
();
service
.
setMultiConfigStorages
(
configs
.
stream
().
map
(
a
->
{
WxMpDefaultConfigImpl
configStorage
;
//
configStorage
=
new
WxMpDefaultConfigImpl
();
configStorage
.
setAppId
(
a
.
getAppId
());
configStorage
.
setSecret
(
a
.
getSecret
());
configStorage
.
setToken
(
a
.
getToken
());
configStorage
.
setAesKey
(
a
.
getAesKey
());
return
configStorage
;
}).
collect
(
Collectors
.
toMap
(
WxMpDefaultConfigImpl:
:
getAppId
,
a
->
a
,
(
o
,
n
)
->
o
)));
return
service
;
}
@Override
@Override
public
ApiResult
<
Boolean
>
updatePhone
(
String
phoneArea
,
String
phone
,
String
code
)
throws
Exception
{
public
ApiResult
<
Boolean
>
updatePhone
(
String
phoneArea
,
String
phone
,
String
code
)
throws
Exception
{
...
@@ -90,11 +121,18 @@ public class AppUserApiServiceImpl implements AppUserApiService {
...
@@ -90,11 +121,18 @@ public class AppUserApiServiceImpl implements AppUserApiService {
return
appUserService
.
login
(
loginParam
,
language
,
true
);
return
appUserService
.
login
(
loginParam
,
language
,
true
);
}
}
WxOAuth2AccessToken
accessToken
=
getWxMpService
().
getOAuth2Service
().
getAccessToken
(
loginParam
.
getCode
());
// 从微信获取用户信息
WxOAuth2UserInfo
wechatUserInfo
=
getWxMpService
().
getOAuth2Service
().
getUserInfo
(
accessToken
,
null
);
// 没注册则先保存到数据库
// 没注册则先保存到数据库
AppUser
appUser
=
new
AppUser
();
AppUser
appUser
=
new
AppUser
();
appUser
.
setNickname
(
wechatUserInfo
.
getNickname
());
appUser
.
setHead
(
wechatUserInfo
.
getHeadImgUrl
());
appUser
.
setLocation
(
wechatUserInfo
.
getCountry
()
+
wechatUserInfo
.
getProvince
()
+
wechatUserInfo
.
getCity
());
appUser
.
setPhoneArea
(
loginParam
.
getPhoneArea
());
appUser
.
setPhoneArea
(
loginParam
.
getPhoneArea
());
appUser
.
setPhone
(
loginParam
.
getPhone
());
appUser
.
setPhone
(
loginParam
.
getPhone
());
appUser
.
setWechatOpenId
(
loginParam
.
getOpenid
());
appUser
.
setWechatOpenId
(
wechatUserInfo
.
getOpenid
());
boolean
isDbOk
=
appUserService
.
saveAppUser
(
appUser
);
boolean
isDbOk
=
appUserService
.
saveAppUser
(
appUser
);
if
(!
isDbOk
)
{
if
(!
isDbOk
)
{
return
ApiResult
.
fail
(
ApiCode
.
SPRING_BOOT_PLUS_EXCEPTION
,
new
LoginAppUserTokenVo
());
return
ApiResult
.
fail
(
ApiCode
.
SPRING_BOOT_PLUS_EXCEPTION
,
new
LoginAppUserTokenVo
());
...
...
common/src/main/java/com/sien/common/service/impl/AppUserServiceImpl.java
View file @
40fd4f56
...
@@ -15,6 +15,7 @@ import com.sien.common.vo.AppUserQueryVo;
...
@@ -15,6 +15,7 @@ import com.sien.common.vo.AppUserQueryVo;
import
com.sien.common.vo.app.LoginAppUserTokenVo
;
import
com.sien.common.vo.app.LoginAppUserTokenVo
;
import
io.geekidea.springbootplus.config.properties.JwtProperties
;
import
io.geekidea.springbootplus.config.properties.JwtProperties
;
import
io.geekidea.springbootplus.config.properties.SpringBootPlusProperties
;
import
io.geekidea.springbootplus.config.properties.SpringBootPlusProperties
;
import
io.geekidea.springbootplus.config.properties.WxMpProperties
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
...
@@ -27,6 +28,11 @@ import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
...
@@ -27,6 +28,11 @@ import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import
io.geekidea.springbootplus.framework.shiro.util.SaltUtil
;
import
io.geekidea.springbootplus.framework.shiro.util.SaltUtil
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginUserVo
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginUserVo
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken
;
import
me.chanjar.weixin.common.error.WxErrorException
;
import
me.chanjar.weixin.mp.api.WxMpService
;
import
me.chanjar.weixin.mp.api.impl.WxMpServiceImpl
;
import
me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.shiro.SecurityUtils
;
import
org.apache.shiro.SecurityUtils
;
import
org.apache.shiro.subject.Subject
;
import
org.apache.shiro.subject.Subject
;
...
@@ -38,7 +44,9 @@ import org.springframework.stereotype.Service;
...
@@ -38,7 +44,9 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.time.Duration
;
import
java.time.Duration
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
;
;
...
@@ -53,6 +61,9 @@ import java.util.concurrent.TimeUnit;
...
@@ -53,6 +61,9 @@ import java.util.concurrent.TimeUnit;
public
class
AppUserServiceImpl
extends
BaseServiceImpl
<
AppUserMapper
,
AppUser
>
implements
AppUserService
{
public
class
AppUserServiceImpl
extends
BaseServiceImpl
<
AppUserMapper
,
AppUser
>
implements
AppUserService
{
@Autowired
@Autowired
private
WxMpProperties
properties
;
@Autowired
private
RedisTemplate
redisTemplate
;
private
RedisTemplate
redisTemplate
;
@Lazy
@Lazy
...
@@ -69,6 +80,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserMapper, AppUser>
...
@@ -69,6 +80,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserMapper, AppUser>
@Autowired
@Autowired
private
AppUserMapper
appUserMapper
;
private
AppUserMapper
appUserMapper
;
@Override
@Override
public
boolean
hasUserByPhoneNumer
(
String
phoneArea
,
String
phone
)
{
public
boolean
hasUserByPhoneNumer
(
String
phoneArea
,
String
phone
)
{
Integer
selectCount
=
appUserMapper
.
selectCount
(
new
QueryWrapper
<
AppUser
>(
Integer
selectCount
=
appUserMapper
.
selectCount
(
new
QueryWrapper
<
AppUser
>(
...
@@ -104,6 +116,12 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserMapper, AppUser>
...
@@ -104,6 +116,12 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserMapper, AppUser>
return
ApiResult
.
fail
(
ApiCode
.
USER_NOT_FOUND
,
language
);
return
ApiResult
.
fail
(
ApiCode
.
USER_NOT_FOUND
,
language
);
}
}
LoginAppUserTokenVo
loginAppUserTokenVo
=
getLoginAppUserTokenVo
(
hasRegister
,
appUser
);
return
ApiResult
.
ok
(
loginAppUserTokenVo
);
}
private
LoginAppUserTokenVo
getLoginAppUserTokenVo
(
Boolean
hasRegister
,
AppUser
appUser
)
{
// 将系统用户对象转换成登录用户对象
// 将系统用户对象转换成登录用户对象
LoginUserVo
loginSysUserVo
=
new
LoginUserVo
();
LoginUserVo
loginSysUserVo
=
new
LoginUserVo
();
...
@@ -145,8 +163,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserMapper, AppUser>
...
@@ -145,8 +163,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserMapper, AppUser>
loginAppUserTokenVo
.
setToken
(
token
);
loginAppUserTokenVo
.
setToken
(
token
);
// loginAppUserTokenVo.setId(appUser.getId());
// loginAppUserTokenVo.setId(appUser.getId());
loginAppUserTokenVo
.
setHasRegister
(
hasRegister
);
loginAppUserTokenVo
.
setHasRegister
(
hasRegister
);
return
ApiResult
.
ok
(
loginAppUserTokenVo
);
return
loginAppUserTokenVo
;
}
}
...
@@ -197,11 +214,59 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserMapper, AppUser>
...
@@ -197,11 +214,59 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserMapper, AppUser>
return
appUserById
;
return
appUserById
;
}
}
private
WxMpService
getWxMpService
()
{
// 代码里 getConfigs()处报错的同学,请注意仔细阅读项目说明,你的IDE需要引入lombok插件!!!!
final
List
<
WxMpProperties
.
MpConfig
>
configs
=
this
.
properties
.
getConfigs
();
if
(
configs
==
null
)
{
throw
new
RuntimeException
(
"添加下相关配置,注意别配错了!"
);
}
WxMpService
service
=
new
WxMpServiceImpl
();
service
.
setMultiConfigStorages
(
configs
.
stream
().
map
(
a
->
{
WxMpDefaultConfigImpl
configStorage
;
//
configStorage
=
new
WxMpDefaultConfigImpl
();
configStorage
.
setAppId
(
a
.
getAppId
());
configStorage
.
setSecret
(
a
.
getSecret
());
configStorage
.
setToken
(
a
.
getToken
());
configStorage
.
setAesKey
(
a
.
getAesKey
());
return
configStorage
;
}).
collect
(
Collectors
.
toMap
(
WxMpDefaultConfigImpl:
:
getAppId
,
a
->
a
,
(
o
,
n
)
->
o
)));
return
service
;
}
@Override
public
ApiResult
<
LoginAppUserTokenVo
>
checkWechatUserBinding
(
String
code
)
{
WxOAuth2AccessToken
accessToken
=
null
;
try
{
accessToken
=
getWxMpService
().
getOAuth2Service
().
getAccessToken
(
code
);
}
catch
(
WxErrorException
e
)
{
e
.
printStackTrace
();
}
// 查询openId是否被绑定
String
openId
=
accessToken
.
getOpenId
();
AppUser
appUser
=
super
.
getOne
(
new
QueryWrapper
<
AppUser
>().
lambda
().
eq
(
AppUser:
:
getWechatOpenId
,
openId
));
if
(
appUser
==
null
)
{
// 返回告诉前端没有绑定过
return
ApiResult
.
ok
(
new
LoginAppUserTokenVo
().
setHasRegister
(
Boolean
.
FALSE
));
}
else
{
// 有绑定直接返回用户token
LoginAppUserTokenVo
loginAppUserTokenVo
=
getLoginAppUserTokenVo
(
Boolean
.
TRUE
,
appUser
);
return
ApiResult
.
ok
(
loginAppUserTokenVo
);
}
}
@Override
@Override
public
Paging
<
AppUserQueryVo
>
getAppUserPageList
(
AppUserPageParam
appUserPageParam
)
throws
Exception
{
public
Paging
<
AppUserQueryVo
>
getAppUserPageList
(
AppUserPageParam
appUserPageParam
)
throws
Exception
{
Page
<
AppUserQueryVo
>
page
=
new
PageInfo
<>(
appUserPageParam
,
OrderItem
.
desc
(
getLambdaColumn
(
AppUser:
:
getCreateTime
)));
Page
<
AppUserQueryVo
>
page
=
new
PageInfo
<>(
appUserPageParam
,
OrderItem
.
desc
(
getLambdaColumn
(
AppUser:
:
getCreateTime
)));
IPage
<
AppUserQueryVo
>
iPage
=
appUserMapper
.
getAppUserPageList
(
page
,
appUserPageParam
);
IPage
<
AppUserQueryVo
>
iPage
=
appUserMapper
.
getAppUserPageList
(
page
,
appUserPageParam
);
return
new
Paging
<
AppUserQueryVo
>(
iPage
);
return
new
Paging
<
AppUserQueryVo
>(
iPage
);
}
}
}
}
common/src/main/java/com/sien/common/vo/app/LoginAppUserTokenVo.java
View file @
40fd4f56
...
@@ -34,10 +34,9 @@ public class LoginAppUserTokenVo implements LoginToken {
...
@@ -34,10 +34,9 @@ public class LoginAppUserTokenVo implements LoginToken {
@ApiModelProperty
(
"token"
)
@ApiModelProperty
(
"token"
)
private
String
token
;
private
String
token
;
@ApiModelProperty
(
"是否已经注册, true = 已经
注册, false = 没有注册
"
)
@ApiModelProperty
(
"是否已经注册, true = 已经
绑定, false = 没有绑定,需要跳转到注册页
"
)
private
Boolean
hasRegister
;
private
Boolean
hasRegister
;
@ApiModelProperty
(
"用户名"
)
@ApiModelProperty
(
"用户名"
)
private
String
username
;
private
String
username
;
...
...
config/pom.xml
View file @
40fd4f56
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2019-2029 geekidea(https://github.com/geekidea)
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns=
"http://maven.apache.org/POM/4.0.0"
<project
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns=
"http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
...
...
config/src/main/java/io/geekidea/springbootplus/config/properties/WxMpProperties.java
0 → 100644
View file @
40fd4f56
package
io
.
geekidea
.
springbootplus
.
config
.
properties
;
import
lombok.Data
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
/**
* wechat mp properties
*
* @author Binary Wang(https://github.com/binarywang)
*/
@Data
@Component
@ConfigurationProperties
(
prefix
=
"wx.mp"
)
public
class
WxMpProperties
{
/**
* 是否使用redis存储access token
*/
private
boolean
useRedis
;
/**
* redis 配置
*/
private
RedisConfig
redisConfig
;
@Data
public
static
class
RedisConfig
{
/**
* redis服务器 主机地址
*/
private
String
host
;
/**
* redis服务器 端口号
*/
private
Integer
port
;
}
/**
* 多个公众号配置信息
*/
private
List
<
MpConfig
>
configs
;
@Data
public
static
class
MpConfig
{
/**
* 设置微信公众号的appid
*/
private
String
appId
;
/**
* 设置微信公众号的app secret
*/
private
String
secret
;
/**
* 设置微信公众号的token
*/
private
String
token
;
/**
* 设置微信公众号的EncodingAESKey
*/
private
String
aesKey
;
}
//
// @Override
// public String toString() {
// return JsonUtils.toJson(this);
// }
}
config/src/main/resources/config/application-dev.yml
View file @
40fd4f56
...
@@ -13,13 +13,29 @@ spring-boot-plus:
...
@@ -13,13 +13,29 @@ spring-boot-plus:
response-log-format
:
false
response-log-format
:
false
wx
:
wx
:
token
:
sDsdaSDADad
# token: sDsdaSDADad
# 测试号的appid,测试号管理界面有
# # 测试号的appid,测试号管理界面有
appid
:
wx7aac805012428dc5
# appid: wx7aac805012428dc5
# 测试号的appsecret,测试号管理界面有
# # 测试号的appsecret,测试号管理界面有
appsecret
:
# appsecret:
# =服务调用的url地址,用于微信web的oauth2授权回调等,若没有可为空。
# # =服务调用的url地址,用于微信web的oauth2授权回调等,若没有可为空。
callback-url
:
wx7aac805012428dc5
# callback-url: wx7aac805012428dc5
#
mp
:
useRedis
:
false
redisConfig
:
host
:
127.0.0.1
port
:
6379
configs
:
-
appId
:
wxe4a696e431b0456b
# 第一个公众号的appid
secret
:
87dbca535a713cd505be2f928fa84c29
# 公众号的appsecret
token
:
111
# 接口配置里的Token值
aesKey
:
111
# 接口配置里的EncodingAESKey值
-
appId
:
2222
# 第二个公众号的appid,以下同上
secret
:
1111
token
:
111
aesKey
:
111
spring
:
spring
:
datasource
:
datasource
:
...
...
pom.xml
View file @
40fd4f56
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
<version>
2.0
</version>
<version>
2.0
</version>
<packaging>
pom
</packaging>
<packaging>
pom
</packaging>
<name>
Jumeirah
</name>
<name>
SiEn
</name>
<url>
https://github.com/geekidea/spring-boot-plus
</url>
<url>
https://github.com/geekidea/spring-boot-plus
</url>
<properties>
<properties>
...
...
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