赞
踩
不啰嗦,我们直接开始!
本文使用体验版小程序进行调试。
点开下面链接,使用微信扫码
然后选择一个小程序并登录
AppSecret忘记了可以自行重置
往下翻,在消息推送这儿能看到Token、EncodingAESKey、数据格式
在"公共模板库"选用一个模板
"公共模板库"没有合适的话,可以在最后一页进行申请,这里就不进行申请了
选用模板后可以自行勾选关键词,没有合适的关键词也可以申请
选好模板后在“我的模板”中就能看到了,同时记住模板ID
注意低版本订阅消息api必须在点击事件中触发,一般可做成显示一个按钮,友好的提示用户,然后再让用户点击按钮去手动触发订阅。
我这里就随便找了个页面在一个点击事件上添加了授权弹窗,不要纠结命名,页面是前端做的(疯狂甩锅ing)。
事件定义
微信开发者工具中的效果
真机效果
我这儿是集成订阅消息推送到已有的系统消息中,通过配置是否发送订阅消息进行分发,具体实现各工程不一样,我这儿就不展示了。
引入第三方sdk,我们就只需要封装好消息发送的核心代码,微信相关的token及其他信息的维护就交给sdk,我们不用关注(但是原理要知道)。
sdk的作者:GitHub
<!--微信小程序三方sdk-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>4.1.0</version>
</dependency>
- import cn.binarywang.wx.miniapp.api.WxMaService;
- import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
- import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
- import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
- import com.coyee.core.log.Logger;
- import org.springframework.stereotype.Component;
-
- import java.util.ArrayList;
-
- @Component
- public class WeChatMessageHelperTest {
-
- private static WxMaService wxMaService = new WxMaServiceImpl();
-
- /**
- * 发送小程序订阅消息
- * @param appletsSubType 小程序类型(developer为开发版、trial为体验版、formal为正式版)
- * @param appSubTempId 订阅消息模板id
- * @param appSubPagePath 跳转小程序地址
- * @param appletsAppid 小程序appId
- * @param appletsSecret 小程序secret
- * @param appletsSubToken 小程序token
- * @param appletsSubAesKey 小程序EncodingAESKey
- * @param appletsSubDataFormat 数据格式
- * @param wxMaSubMsgList 消息列表
- * @param userIds 接收用户id
- * @return void
- * @version V1.0
- * modify history
- */
- public static void sendWechatAppSubMessage(String appletsSubType, String appSubTempId, String appSubPagePath, String appletsAppid, String appletsSecret, String appletsSubToken, String appletsSubAesKey, String appletsSubDataFormat, ArrayList<WxMaSubscribeMessage.MsgData> wxMaSubMsgList, String... userIds) throws Exception {
-
- /*
- // wxMaSubMsgList组装示例,在业务里组装好,再调用系统消息发送工具,系统消息判断是否需要发送小程序订阅消息进行分发,此处不做展示
- ArrayList<WxMaSubscribeMessage.MsgData> wxMaSubscribeData = new ArrayList<>();
- WxMaSubscribeMessage.MsgData characterString1 = new WxMaSubscribeMessage.MsgData();
- characterString1.setName("character_string1");
- characterString1.setValue("DR15325419846198615651");
- wxMaSubscribeData.add(characterString1);
- WxMaSubscribeMessage.MsgData thing3 = new WxMaSubscribeMessage.MsgData();
- thing3.setName("thing3");
- thing3.setValue("请XXXXXXXX");
- wxMaSubscribeData.add(thing3);
- WxMaSubscribeMessage.MsgData time5 = new WxMaSubscribeMessage.MsgData();
- time5.setName("time5");
- time5.setValue(DateUtil.format(new Date(),DateUtil.DATE_TIME_FORMAT));
- wxMaSubscribeData.add(time5);
- */
-
- WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
- // 小程序appId
- config.setAppid(appletsAppid);
- // 小程序secret
- config.setSecret(appletsSecret);
- // 小程序token
- config.setToken(appletsSubToken);
- // 小程序EncodingAESKey
- config.setAesKey(appletsSubAesKey);
- // 数据格式
- config.setMsgDataFormat(appletsSubDataFormat);
- wxMaService.setWxMaConfig(config);
-
- for (String userId : userIds) {
- // TODO:根据用户id获取OpenId,测试时写死
- WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage();
- // 要推送的用户openid
- subscribeMessage.setToUser("openId");
- // 小程序类型(developer为开发版、trial为体验版、formal为正式版),默认为formal(正式版)
- subscribeMessage.setMiniprogramState(appletsSubType);
- // 订阅消息模板id
- subscribeMessage.setTemplateId(appSubTempId);
- // 跳转小程序地址
- subscribeMessage.setPage(appSubPagePath);
- // 消息列表(组装示例请看方法开始注释部分)
- subscribeMessage.setData(wxMaSubMsgList);
-
- try {
- // 发送订阅消息
- wxMaService.getMsgService().sendSubscribeMsg(subscribeMessage);
- } catch (Exception e) {
- Logger.error("微信小程序订阅消息推送失败,接收userId: " + userId, e);
- }
- }
- }
- }
订阅消息每个参数都有相关限制,具体以官网的为准:订阅消息参数值内容限制说明
点击“进入小程序查看”即可进入代码里配置的小程序的内置页面
官方文档:发送微信小程序订阅消息
参考文章:
不啰嗦,文章结束,期待三连!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。