微信公众号 - Java推送小程序订阅消息给用户_java 通过微信公众号发送订阅通知

难道这样就够了吗?不,远远不够!

提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记

我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。

今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

image.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

官方文档

注意低版本订阅消息api必须在点击事件中触发,一般可做成显示一个按钮,友好的提示用户,然后再让用户点击按钮去手动触发订阅。

我这里就随便找了个页面在一个点击事件上添加了授权弹窗,不要纠结命名,页面是前端做的(疯狂甩锅ing)。

事件定义

微信开发者工具中的效果

真机效果

三、引用第三方sdk,集成订阅消息推送

我这儿是集成订阅消息推送到已有的系统消息中,通过配置是否发送订阅消息进行分发,具体实现各工程不一样,我这儿就不展示了。

1、pom引入第三方sdk

引入第三方sdk,我们就只需要封装好消息发送的核心代码,微信相关的token及其他信息的维护就交给sdk,我们不用关注(但是原理要知道)。

sdk的作者:GitHub



    com.github.binarywang
    weixin-java-miniapp
    4.1.0

2、核心代码(有注释)

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);
            }
        }
    }
}

订阅消息每个参数都有相关限制,具体以官网的为准:订阅消息参数值内容限制说明

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

image

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.youkuaiyun.com/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

### 微信小程序集成公众号消息推送教程 #### 一、准备工作 确保已经拥有并配置好微信公众号以及小程序账号,在微信公众平台上完成相应设置。这包括但不限于获取AppID和AppSecret等必要参数,这些将在后续开发过程中频繁使用[^3]。 #### 二、引入官方组件 在页面中添加`<official-account>`标签用于展示关联的小程序入口,并通过事件绑定函数处理加载逻辑: ```html <!-- wxml 文件 --> <view> <!-- 关联已认证的服务号或订阅--> <official-account bindload="onOfficialAccountLoad"></official-account> </view> ``` ```javascript // js文件 Page({ onOfficialAccountLoad(e) { console.log('Official account loaded:', e.detail); } }); ``` 此部分操作允许用户小程序内部访问指定的公众号资料页,从而促进两者之间的互动。 #### 三、服务器端对接口的支持 对于希望向关注者发送模板消息的情况,则需依赖于后端服务来调用微信API接口。这里推荐采用Spring Boot框架构建RESTful API作为中介层,负责接收来自前端请求并向微信服务器发起HTTP POST请求以触发具体的消息推送行为[^1]。 - **创建Controller类** ```java @RestController @RequestMapping("/wx") public class WxMessageController { @Autowired private WxMpService wxMpService; @PostMapping("/sendTemplateMsg") public ResponseEntity<String> sendTemplateMsg(@RequestBody Map<String, String> params){ try{ // 构建模板数据对象... WxMpTemplateMessage templateMessage = new WxMpTemplateMessage(); // 设置模板id和其他属性... boolean result = wxMpService.getTemplateMsgService().send(templateMessage); if(result){ return ResponseEntity.ok("Success"); }else{ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to send message."); } }catch(Exception ex){ log.error(ex.getMessage(),ex); return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); } } } ``` 上述代码片段展示了如何定义一个简单的控制器方法用来接受从前端传来的JSON格式的数据包,解析其中的信息填充到`WxMpTemplateMessage`实例里再经由MP SDK执行实际的通知动作。 请注意,以上仅为简化版示例,真实项目可能还需要考虑更多细节如安全性验证、错误重试机制等方面的设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值