IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 微信公众号 - Java推送小程序订阅消息给用户 -> 正文阅读

[移动开发]微信公众号 - Java推送小程序订阅消息给用户

不啰嗦,我们直接开始!

本文使用体验版小程序进行调试。

一、开发前小程序准备:

1、登录微信公众平台

点开下面链接,使用微信扫码

微信公众平台

然后选择一个小程序并登录

2、在小程序后台找到Appid、AppSecret、Token、EncodingAESKey等参数

AppSecret忘记了可以自行重置

往下翻,在消息推送这儿能看到Token、EncodingAESKey、数据格式

?3、选用订阅消息模板,找到模板ID

在"公共模板库"选用一个模板

"公共模板库"没有合适的话,可以在最后一页进行申请,这里就不进行申请了

?选用模板后可以自行勾选关键词,没有合适的关键词也可以申请

?选好模板后在“我的模板”中就能看到了,同时记住模板ID

?二、小程序上添加授权弹窗

官方文档

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

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

事件定义

?微信开发者工具中的效果

真机效果

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

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

1、pom引入第三方sdk

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

sdk的作者:GitHub

?<!--微信小程序三方sdk-->
<dependency>
? ? <groupId>com.github.binarywang</groupId>
? ? <artifactId>weixin-java-miniapp</artifactId>
? ? <version>4.1.0</version>
</dependency>

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

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

3、触发消息推送,查看推送结果

点击“进入小程序查看”即可进入代码里配置的小程序的内置页面

?官方文档:发送微信小程序订阅消息

参考文章:

不啰嗦,文章结束,建议三连!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:28:08  更:2021-09-14 13:28:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:33:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码