一、准备工作
1、参考https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1476434677599 先注册账号;
2、下载官网前端开发工具 https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=1476434678461
3、其他的接口及文档请参考 https://mp.weixin.qq.com/debug/wxadoc/introduction/index.html?t=2018125
二、java后端
1、先去github下载sdk https://github.com/Wechat-Group/weixin-java-tools
2、demo参考 https://github.com/binarywang/weixin-java-miniapp-demo 注: 此demo是采用了jdk8和spring boot开发的。
三、本人折腾过程
我本地是采用jdk7,spring mvc和mybatis的搭建框架;
1、在resources/properties新增wxconfig.properties文件,用于配置
appid=填写自己注册的小程序
appsecret=密钥(通过获取或是重置方式取到,在客服消息转发需要用)
token=自己定义
aeskey=加密
templateId=推送消息模块ID,也是自己在小程序后台-->模板消息中获取;
msgDataFormat=JSON (传送的格式还有或者是XML)
domain=推送模板消息时,如需要点详情时(因为开发小程序有可能是有开发或线上二个域名的)
detail=详情的链接,和在app.json中配置的一样
2、新增一类来加载此配置文件并读取相关的内容到静态变量中;
1 import org.apache.log4j.Logger;
2
3 import java.util.ResourceBundle;
4
5 /**
6 * @author foreach03
7 * @company 深圳市
8 * @create 2018/1/10 13:31
9 */
10 public class WxConfigUtils {
11 private static Logger log = Logger.getLogger(WxConfigUtils.class);
12 private static String appid;
13 private static String appsecret;
14 private static String token;
15 private static String aeskey;
16 private static String templateId;
17 private static String msgDataFormat;
18 private static String domain;
19 private static String detail;
20
21 private WxConfigUtils(){
22
23 }
24 static {
25 // 加载wxcofig配置文件
26 ResourceBundle bundle = ResourceBundle.getBundle("properties/wxconfig");
27 if (bundle == null) {
28 throw new IllegalArgumentException(
29 "[wxcofig.properties] is not found!");
30 }
31 appid = bundle.getString("appid");
32 appsecret = bundle.getString("appsecret");
33 token = bundle.getString("token");
34 aeskey = bundle.getString("aeskey");
35 templateId = bundle.getString("templateId");
37 msgDataFormat = bundle.getString("msgDataFormat");
38 domain = bundle.getString("domain");
39 detail = bundle.getString("detail");
40
41
42 log.info("appid is:" + appid);
43 log.info("appsecret is:" + appsecret);
44 log.info("token is:" + token);
45 log.info("aeskey is:" + aeskey);
46 log.info("templateId is:" + templateId);
47 log.info("msgDataFormat is:" + msgDataFormat);
48 log.info("domain is:" + domain);
49 log.info("detail is:" + detail);
50 }
51
52 public static String getAppid() {
53 return appid;
54 }
55
56 public static void setAppid(String appid) {
57 WxConfigUtils.appid = appid;
58 }
59
60 public static String getAppsecret() {
61 return appsecret;
62 }
63
64 public static void setAppsecret(String appsecret) {
65 WxConfigUtils.appsecret = appsecret;
66 }
67
68 public static String getToken() {
69 return token;
70 }
71
72 public static void setToken(String token) {
73 WxConfigUtils.token = token;
74 }
75
76 public static String getAeskey() {
77 return aeskey;
78 }
79
80 public static void setAeskey(String aeskey) {
81 WxConfigUtils.aeskey = aeskey;
82 }
83
84 public static String getTemplateId() {
85 return templateId;
86 }
87
88 public static void setTemplateId(String templateId) {
89 WxConfigUtils.templateId = templateId;
90 }
91
92 public static String getMsgDataFormat() {
93 return msgDataFormat;
94 }
95
96 public static void setMsgDataFormat(String msgDataFormat) {
97 WxConfigUtils.msgDataFormat = msgDataFormat;
98 }
99
100 public static String getDomain() {
101 return domain;
102 }
103
104 public static void setDomain(String domain) {
105 WxConfigUtils.domain = domain;
106 }
107
108 public static String getDetail() {
109 return detail;
110 }
111
112 public static void setDetail(String detail) {
113 WxConfigUtils.detail = detail;
114 }
115
116 }
3、新增一个常量类WXMPConfig,其实也可以不用此类。
1 /**
2 * @author foreach03
3 * @company 深圳市
4 * @create 2018/1/10 13:37
5 */
6 public class WXMPConfig {
7 // 服务号常量定义
8 public static final String APPID = WxConfigUtils.getAppid();//测试
9 public static final String APPSECRET = WxConfigUtils.getAppsecret();
10 public static final String TOKEN =WxConfigUtils.getToken();
11 public static final String ENCODINGAESKEY =WxConfigUtils.getAeskey();
12 public static final String TEMPLATEID = WxConfigUtils.getTemplateId();
13 public static final String MSGDATAFORMAT = WxConfigUtils.getMsgDataFormat();
14 public static final String DOMAIN = WxConfigUtils.getDomain();
15 public static final String DETAIL = WxConfigUtils.getDetail();
16
17 private WXMPConfig(){
18
19 }
20 }
4、新建一个工厂类WxMpServiceFactory,用于初始化maservice
1 import cn.binarywang.wx.miniapp.api.WxMaService;
2 import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
3 import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig;
4 import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
5 import com.***.config.constant.WXMPConfig;
6
7 /**
8 * @author
9 * @company 深圳市
10 * @create 2018/1/10 13:25
11 */
12 public class WxMpServiceFactory {
13 private static WxMaService instance;
14
15 private static WxMaInMemoryConfig wxMaConfigStorage;
16 private static WxMaMessageRouter router = new WxMaMessageRouter(getInstance());
17 private WxMpServiceFactory() {
18 // ......
19 }
20
21 // 产生WxmaService实例
22 public static WxMaService getInstance() {
23 if(wxMaConfigStorage == null){
24 wxMaConfigStorage = new WxMaInMemoryConfig();
25 wxMaConfigStorage.setAppid(WXMPConfig.APPID);
26 wxMaConfigStorage.setSecret(WXMPConfig.APPSECRET);
27 wxMaConfigStorage.setToken(WXMPConfig.TOKEN);
28 wxMaConfigStorage.setAesKey(WXMPConfig.ENCODINGAESKEY);
29 wxMaConfigStorage.setMsgDataFormat(WXMPConfig.MSGDATAFORMAT);
30 }
31
32 if (instance == null) {
33 instance = new WxMaServiceImpl();
34 instance.setWxMaConfig(wxMaConfigStorage);
35 }
36
37 return instance;
38 }
39
40 public static WxMaInMemoryConfig getWxMaConfigStorage() {
41 return wxMaConfigStorage;
42 }
43
44 public static void setWxMaConfigStorage(WxMaInMemoryConfig wxMpConfigStorage) {
45 WxMpServiceFactory.wxMaConfigStorage = wxMpConfigStorage;
46 }
47
48 public static void setInstance(WxMaService instance) {
49 WxMpServiceFactory.instance = instance;
50 }
51
52 public static WxMaMessageRouter getRouter() {
53 return router;
54 }
55
56 public static void setRouter(WxMaMessageRouter router) {
57 WxMpServiceFactory.router = router;
58 }
59
60 }
5、这样在controller类上就可以通过
private WxMaService wxService= WxMpServiceFactory.getInstance(); 来初始化;
6、如需要发送模板消息的
这里需要注意的是:formid只能提交的那openId才可以使用;
如果想推送很多的消息的话,那就让前端更可能的收集多一些formId
1 wxService.getMsgService().sendTemplateMsg(WxMaTemplateMessage.builder()
2 .templateId(自己配置的模板ID)
3 .formId(前端提交的formId)
4 .data(datalist)
5 .toUser(要推送的openid)
6 .page(就是域名+detail了)
7 .build());