Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gxpt_ht
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
pseer
gxpt_ht
Commits
7d413306
Commit
7d413306
authored
Nov 22, 2023
by
吕明尚
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加通知消息示例
parent
3648e7a6
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
225 additions
and
242 deletions
+225
-242
pom.xml
share-front/pom.xml
+5
-0
WxMsgPushController.java
...java/share/web/controller/common/WxMsgPushController.java
+41
-10
WxMaConfiguration.java
...rc/main/java/share/web/core/config/WxMaConfiguration.java
+131
-0
WxMaProperties.java
...t/src/main/java/share/web/core/config/WxMaProperties.java
+43
-43
WxMaConfiguration.java
...rc/main/java/share/web/interceptor/WxMaConfiguration.java
+0
-129
pom.xml
share-system/pom.xml
+5
-2
WxMsgPushConService.java
...c/main/java/share/system/service/WxMsgPushConService.java
+0
-5
WxMsgPushConServiceeImpl.java
...a/share/system/service/impl/WxMsgPushConServiceeImpl.java
+0
-53
No files found.
share-front/pom.xml
View file @
7d413306
...
@@ -53,6 +53,11 @@
...
@@ -53,6 +53,11 @@
<artifactId>
hutool-all
</artifactId>
<artifactId>
hutool-all
</artifactId>
<version>
5.8.16
</version>
<version>
5.8.16
</version>
</dependency>
</dependency>
<dependency>
<groupId>
com.github.binarywang
</groupId>
<artifactId>
weixin-java-miniapp
</artifactId>
<version>
4.5.0
</version>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
share-front/src/main/java/share/web/controller/common/WxMsgPushController.java
View file @
7d413306
package
share
.
web
.
controller
.
common
;
package
share
.
web
.
controller
.
common
;
import
cn.binarywang.wx.miniapp.api.WxMaService
;
import
cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage
;
import
cn.hutool.core.date.LocalDateTimeUtil
;
import
lombok.AllArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
me.chanjar.weixin.common.error.WxErrorException
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
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.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
share.system.service.WxMsgPushConService
;
import
share.system.util.WXMsgPushUtils
;
import
share.system.util.WXMsgPushUtils
;
import
share.web.core.config.WxMaProperties
;
import
java.time.LocalDateTime
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map
;
/**
/**
...
@@ -18,15 +24,16 @@ import java.util.Map;
...
@@ -18,15 +24,16 @@ import java.util.Map;
**/
**/
@RestController
@RestController
@Slf4j
@Slf4j
@AllArgsConstructor
@RequestMapping
(
"/weixinpublic"
)
@RequestMapping
(
"/weixinpublic"
)
public
class
WxMsgPushController
{
public
class
WxMsgPushController
{
@Value
(
"${wechat.token}"
)
private
final
WxMaService
wxMaService
;
private
String
token
;
private
final
WxMaProperties
properties
;
/**
// @Autowired
* // * 跳转的小程序页面
// private WxMsgPushConService wxMsgPushConService;
* //
*/
private
static
final
String
PAGES_ZP
=
"pages/draft-review/list/list"
;
/**
/**
* 正确响应微信发送的Token验证,注意 这里是 get请求
* 正确响应微信发送的Token验证,注意 这里是 get请求
...
@@ -44,7 +51,7 @@ public class WxMsgPushController {
...
@@ -44,7 +51,7 @@ public class WxMsgPushController {
String
nonce
=
params
.
get
(
"nonce"
);
String
nonce
=
params
.
get
(
"nonce"
);
// 验证
// 验证
String
msgSignature
=
WXMsgPushUtils
.
getSHA1
(
token
,
timestamp
,
nonce
);
String
msgSignature
=
WXMsgPushUtils
.
getSHA1
(
properties
.
getConfigs
().
get
(
0
).
getToken
()
,
timestamp
,
nonce
);
// 验证失败
// 验证失败
if
(!
signature
.
equals
(
msgSignature
))
{
if
(!
signature
.
equals
(
msgSignature
))
{
...
@@ -54,5 +61,29 @@ public class WxMsgPushController {
...
@@ -54,5 +61,29 @@ public class WxMsgPushController {
return
echostr
;
return
echostr
;
}
}
@GetMapping
(
"/getOpenId"
)
public
void
getOpenId
(
String
openId
)
throws
Exception
{
Map
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"thing4"
,
"预约门店"
);
map
.
put
(
"thing7"
,
"服务名称"
);
map
.
put
(
"date3"
,
LocalDateTimeUtil
.
format
(
LocalDateTime
.
now
(),
"yyyy-MM-dd HH:mm:ss"
));
map
.
put
(
"thing5"
,
"地址"
);
WxMaSubscribeMessage
wxMaSubscribeMessage
=
WxMaSubscribeMessage
.
builder
()
.
toUser
(
openId
)
.
templateId
(
"oTc000e4NHkoc7v9OLBZiwM6Q6SFzguemrx6d0iuVS8"
)
.
page
(
PAGES_ZP
)
.
build
();
// 设置将推送的消息
map
.
forEach
((
k
,
v
)
->
{
wxMaSubscribeMessage
.
addData
(
new
WxMaSubscribeMessage
.
MsgData
(
k
,
v
));
});
try
{
log
.
info
(
"开始发送消息!!!!"
);
wxMaService
.
getMsgService
().
sendSubscribeMsg
(
wxMaSubscribeMessage
);
log
.
info
(
"消息发送成功!!!!"
);
}
catch
(
WxErrorException
e
)
{
e
.
printStackTrace
();
}
}
}
}
share-front/src/main/java/share/web/core/config/WxMaConfiguration.java
0 → 100644
View file @
7d413306
package
share
.
web
.
core
.
config
;
import
cn.binarywang.wx.miniapp.api.WxMaService
;
import
cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl
;
import
cn.binarywang.wx.miniapp.bean.WxMaKefuMessage
;
import
cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage
;
import
cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl
;
import
cn.binarywang.wx.miniapp.message.WxMaMessageHandler
;
import
cn.binarywang.wx.miniapp.message.WxMaMessageRouter
;
import
com.google.common.collect.Lists
;
import
lombok.extern.slf4j.Slf4j
;
import
me.chanjar.weixin.common.bean.result.WxMediaUploadResult
;
import
me.chanjar.weixin.common.error.WxErrorException
;
import
me.chanjar.weixin.common.error.WxRuntimeException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
java.io.File
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
@Slf4j
@Configuration
@EnableConfigurationProperties
(
WxMaProperties
.
class
)
public
class
WxMaConfiguration
{
private
final
WxMaProperties
properties
;
@Autowired
public
WxMaConfiguration
(
WxMaProperties
properties
)
{
this
.
properties
=
properties
;
}
@Bean
public
WxMaService
wxMaService
()
{
List
<
WxMaProperties
.
Config
>
configs
=
this
.
properties
.
getConfigs
();
if
(
configs
==
null
)
{
throw
new
WxRuntimeException
(
"大哥,拜托先看下项目首页的说明(readme文件),添加下相关配置,注意别配错了!"
);
}
WxMaService
maService
=
new
WxMaServiceImpl
();
maService
.
setMultiConfigs
(
configs
.
stream
()
.
map
(
a
->
{
WxMaDefaultConfigImpl
config
=
new
WxMaDefaultConfigImpl
();
// WxMaDefaultConfigImpl config = new WxMaRedisConfigImpl(new JedisPool());
// 使用上面的配置时,需要同时引入jedis-lock的依赖,否则会报类无法找到的异常
config
.
setAppid
(
a
.
getAppid
());
config
.
setSecret
(
a
.
getSecret
());
config
.
setToken
(
a
.
getToken
());
config
.
setAesKey
(
a
.
getAesKey
());
config
.
setMsgDataFormat
(
a
.
getMsgDataFormat
());
return
config
;
}).
collect
(
Collectors
.
toMap
(
WxMaDefaultConfigImpl:
:
getAppid
,
a
->
a
,
(
o
,
n
)
->
o
)));
return
maService
;
}
@Bean
public
WxMaMessageRouter
wxMaMessageRouter
(
WxMaService
wxMaService
)
{
final
WxMaMessageRouter
router
=
new
WxMaMessageRouter
(
wxMaService
);
router
.
rule
().
handler
(
logHandler
).
next
()
.
rule
().
async
(
false
).
content
(
"订阅消息"
).
handler
(
subscribeMsgHandler
).
end
()
.
rule
().
async
(
false
).
content
(
"文本"
).
handler
(
textHandler
).
end
()
.
rule
().
async
(
false
).
content
(
"图片"
).
handler
(
picHandler
).
end
()
.
rule
().
async
(
false
).
content
(
"二维码"
).
handler
(
qrcodeHandler
).
end
();
return
router
;
}
private
final
WxMaMessageHandler
subscribeMsgHandler
=
(
wxMessage
,
context
,
service
,
sessionManager
)
->
{
service
.
getMsgService
().
sendSubscribeMsg
(
WxMaSubscribeMessage
.
builder
()
.
templateId
(
"此处更换为自己的模板id"
)
.
data
(
Lists
.
newArrayList
(
new
WxMaSubscribeMessage
.
MsgData
(
"keyword1"
,
"339208499"
)))
.
toUser
(
wxMessage
.
getFromUser
())
.
build
());
return
null
;
};
private
final
WxMaMessageHandler
logHandler
=
(
wxMessage
,
context
,
service
,
sessionManager
)
->
{
log
.
info
(
"收到消息:"
+
wxMessage
.
toString
());
service
.
getMsgService
().
sendKefuMsg
(
WxMaKefuMessage
.
newTextBuilder
().
content
(
"收到信息为:"
+
wxMessage
.
toJson
())
.
toUser
(
wxMessage
.
getFromUser
()).
build
());
return
null
;
};
private
final
WxMaMessageHandler
textHandler
=
(
wxMessage
,
context
,
service
,
sessionManager
)
->
{
service
.
getMsgService
().
sendKefuMsg
(
WxMaKefuMessage
.
newTextBuilder
().
content
(
"回复文本消息"
)
.
toUser
(
wxMessage
.
getFromUser
()).
build
());
return
null
;
};
private
final
WxMaMessageHandler
picHandler
=
(
wxMessage
,
context
,
service
,
sessionManager
)
->
{
try
{
WxMediaUploadResult
uploadResult
=
service
.
getMediaService
()
.
uploadMedia
(
"image"
,
"png"
,
ClassLoader
.
getSystemResourceAsStream
(
"tmp.png"
));
service
.
getMsgService
().
sendKefuMsg
(
WxMaKefuMessage
.
newImageBuilder
()
.
mediaId
(
uploadResult
.
getMediaId
())
.
toUser
(
wxMessage
.
getFromUser
())
.
build
());
}
catch
(
WxErrorException
e
)
{
e
.
printStackTrace
();
}
return
null
;
};
private
final
WxMaMessageHandler
qrcodeHandler
=
(
wxMessage
,
context
,
service
,
sessionManager
)
->
{
try
{
final
File
file
=
service
.
getQrcodeService
().
createQrcode
(
"123"
,
430
);
WxMediaUploadResult
uploadResult
=
service
.
getMediaService
().
uploadMedia
(
"image"
,
file
);
service
.
getMsgService
().
sendKefuMsg
(
WxMaKefuMessage
.
newImageBuilder
()
.
mediaId
(
uploadResult
.
getMediaId
())
.
toUser
(
wxMessage
.
getFromUser
())
.
build
());
}
catch
(
WxErrorException
e
)
{
e
.
printStackTrace
();
}
return
null
;
};
}
share-front/src/main/java/share/web/core/config/WxMaProperties.java
View file @
7d413306
//
package share.web.core.config;
package
share
.
web
.
core
.
config
;
//
//
import lombok.Data;
import
lombok.Data
;
//
import org.springframework.boot.context.properties.ConfigurationProperties;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
//
//
import java.util.List;
import
java.util.List
;
//
//
@Data
@Data
//
@ConfigurationProperties(prefix = "wx.miniapp")
@ConfigurationProperties
(
prefix
=
"wx.miniapp"
)
//
public class WxMaProperties {
public
class
WxMaProperties
{
//
//
private List<Config> configs;
private
List
<
Config
>
configs
;
//
//
@Data
@Data
//
public static class Config {
public
static
class
Config
{
//
/**
/**
//
* 设置微信小程序的appid
* 设置微信小程序的appid
//
*/
*/
//
private String appid;
private
String
appid
;
//
//
/**
/**
//
* 设置微信小程序的Secret
* 设置微信小程序的Secret
//
*/
*/
//
private String secret;
private
String
secret
;
//
//
/**
/**
//
* 设置微信小程序消息服务器配置的token
* 设置微信小程序消息服务器配置的token
//
*/
*/
//
private String token;
private
String
token
;
//
//
/**
/**
//
* 设置微信小程序消息服务器配置的EncodingAESKey
* 设置微信小程序消息服务器配置的EncodingAESKey
//
*/
*/
//
private String aesKey;
private
String
aesKey
;
//
//
/**
/**
//
* 消息格式,XML或者JSON
* 消息格式,XML或者JSON
//
*/
*/
//
private String msgDataFormat;
private
String
msgDataFormat
;
//
}
}
//
//
}
}
//
share-front/src/main/java/share/web/interceptor/WxMaConfiguration.java
deleted
100644 → 0
View file @
3648e7a6
//package share.web.interceptor;
//
//import cn.binarywang.wx.miniapp.api.WxMaService;
//import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
//import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
//import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
//import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
//import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
//import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
//import com.google.common.collect.Lists;
//import lombok.extern.slf4j.Slf4j;
//import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
//import me.chanjar.weixin.common.error.WxErrorException;
//import me.chanjar.weixin.common.error.WxRuntimeException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import share.web.core.config.WxMaProperties;
//
//import java.io.File;
//import java.util.List;
//import java.util.stream.Collectors;
//
//@Slf4j
//@Configuration
//@EnableConfigurationProperties(WxMaProperties.class)
//public class WxMaConfiguration {
// private final WxMaProperties properties;
//
// @Autowired
// public WxMaConfiguration(WxMaProperties properties) {
// this.properties = properties;
// }
//
// @Bean
// public WxMaService wxMaService() {
// List<WxMaProperties.Config> configs = this.properties.getConfigs();
// if (configs == null) {
// throw new WxRuntimeException("大哥,拜托先看下项目首页的说明(readme文件),添加下相关配置,注意别配错了!");
// }
// WxMaService maService = new WxMaServiceImpl();
// maService.setMultiConfigs(
// configs.stream()
// .map(a -> {
// WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
//// WxMaDefaultConfigImpl config = new WxMaRedisConfigImpl(new JedisPool());
// // 使用上面的配置时,需要同时引入jedis-lock的依赖,否则会报类无法找到的异常
// config.setAppid(a.getAppid());
// config.setSecret(a.getSecret());
// config.setToken(a.getToken());
// config.setAesKey(a.getAesKey());
// config.setMsgDataFormat(a.getMsgDataFormat());
// return config;
// }).collect(Collectors.toMap(WxMaDefaultConfigImpl::getAppid, a -> a, (o, n) -> o)));
// return maService;
// }
//
// @Bean
// public WxMaMessageRouter wxMaMessageRouter(WxMaService wxMaService) {
// final WxMaMessageRouter router = new WxMaMessageRouter(wxMaService);
// router
// .rule().handler(logHandler).next()
// .rule().async(false).content("订阅消息").handler(subscribeMsgHandler).end()
// .rule().async(false).content("文本").handler(textHandler).end()
// .rule().async(false).content("图片").handler(picHandler).end()
// .rule().async(false).content("二维码").handler(qrcodeHandler).end();
// return router;
// }
//
// private final WxMaMessageHandler subscribeMsgHandler = (wxMessage, context, service, sessionManager) -> {
// service.getMsgService().sendSubscribeMsg(WxMaSubscribeMessage.builder()
// .templateId("此处更换为自己的模板id")
// .data(Lists.newArrayList(
// new WxMaSubscribeMessage.MsgData("keyword1", "339208499")))
// .toUser(wxMessage.getFromUser())
// .build());
// return null;
// };
//
// private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> {
// log.info("收到消息:" + wxMessage.toString());
// service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson())
// .toUser(wxMessage.getFromUser()).build());
// return null;
// };
//
// private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) -> {
// service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息")
// .toUser(wxMessage.getFromUser()).build());
// return null;
// };
//
// private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> {
// try {
// WxMediaUploadResult uploadResult = service.getMediaService()
// .uploadMedia("image", "png",
// ClassLoader.getSystemResourceAsStream("tmp.png"));
// service.getMsgService().sendKefuMsg(
// WxMaKefuMessage
// .newImageBuilder()
// .mediaId(uploadResult.getMediaId())
// .toUser(wxMessage.getFromUser())
// .build());
// } catch (WxErrorException e) {
// e.printStackTrace();
// }
//
// return null;
// };
//
// private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> {
// try {
// final File file = service.getQrcodeService().createQrcode("123", 430);
// WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file);
// service.getMsgService().sendKefuMsg(
// WxMaKefuMessage
// .newImageBuilder()
// .mediaId(uploadResult.getMediaId())
// .toUser(wxMessage.getFromUser())
// .build());
// } catch (WxErrorException e) {
// e.printStackTrace();
// }
//
// return null;
// };
//
//}
share-system/pom.xml
View file @
7d413306
...
@@ -129,6 +129,11 @@
...
@@ -129,6 +129,11 @@
<artifactId>
spring-integration-mqtt
</artifactId>
<artifactId>
spring-integration-mqtt
</artifactId>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
com.github.binarywang
</groupId>
<artifactId>
weixin-java-miniapp
</artifactId>
<version>
4.5.0
</version>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<artifactId>
junit
</artifactId>
</dependency>
</dependency>
...
@@ -139,5 +144,4 @@
...
@@ -139,5 +144,4 @@
<scope>
compile
</scope>
<scope>
compile
</scope>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
\ No newline at end of file
share-system/src/main/java/share/system/service/WxMsgPushConService.java
deleted
100644 → 0
View file @
3648e7a6
package
share
.
system
.
service
;
public
interface
WxMsgPushConService
{
void
sendSmallMsg
(
String
openID
);
}
share-system/src/main/java/share/system/service/impl/WxMsgPushConServiceeImpl.java
deleted
100644 → 0
View file @
3648e7a6
//package share.system.service.impl;
//
//import cn.binarywang.wx.miniapp.api.WxMaService;
//import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
//import cn.hutool.core.date.LocalDateTimeUtil;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import me.chanjar.weixin.common.error.WxErrorException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Repository;
//import org.springframework.stereotype.Service;
//import share.system.service.WxMsgPushConService;
//
//import javax.annotation.Resource;
//import java.time.LocalDateTime;
//import java.util.HashMap;
//import java.util.Map;
//
//@Slf4j
//@Service
//public class WxMsgPushConServiceeImpl implements WxMsgPushConService {
// @Resource
// private WxMaService wxMaService;
// /**
// * 跳转的小程序页面
// */
// private static final String PAGES_ZP = "pages/draft-review/list/list";
//
// @Override
// public void sendSmallMsg(String openID) {
// Map<String, String> map = new HashMap<>();
// map.put("thing4", "预约门店");
// map.put("thing7", "服务名称");
// map.put("date3", LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss"));
// map.put("thing5", "地址");
// WxMaSubscribeMessage wxMaSubscribeMessage = WxMaSubscribeMessage.builder()
// .toUser(openID)
// .templateId("oTc000e4NHkoc7v9OLBZiwM6Q6SFzguemrx6d0iuVS8")
// .page(PAGES_ZP)
// .build();
// // 设置将推送的消息
// map.forEach((k, v) -> {
// wxMaSubscribeMessage.addData(new WxMaSubscribeMessage.MsgData(k, v));
// });
// try {
// log.info("开始发送消息!!!!");
// wxMaService.getMsgService().sendSubscribeMsg(wxMaSubscribeMessage);
// log.info("消息发送成功!!!!");
// } catch (WxErrorException e) {
// e.printStackTrace();
// }
// }
//}
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