微信小程序订阅消息通过服务通知发送

代码实现:

    核心代码
    传输实体类
package com.minapp.management.entity.dto;

import lombok.Data;

import java.io.Serializable;

//小程序模板消息发送模板
@Data
public class AppletTemplateMessageSendDTO implements Serializable {
          
   


    //接收者(用户)的 openid
    private String touser;

    //所需下发的订阅模板id
    private String template_id;

    //所跳转的页面
    private String page;

    //模板消息内容
    private Object data;

}
    本地缓存类
package com.minapp.management.utils;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

// 本地缓存类
public class CacheManager {
          
   
    private static Map<String, CacheData> CACHE_DATA = new ConcurrentHashMap<>();
	
    public static <T> T getData(String key, Load<T> load, int expire) {
          
   
        T data = getData(key);
        if (data == null && load != null) {
          
   
            data = load.load();
            if (data != null) {
          
   
                setData(key, data, expire);
            }
        }
        return data;
    }

	// 根据key获取数据
    public static <T> T getData(String key) {
          
   
        CacheData<T> data = CACHE_DATA.get(key);
        if (data != null && (data.getExpire() <= 0 || data.getSaveTime() >= System.currentTimeMillis())) {
          
   
            return data.getData();
        }
        return null;
    }
	
	// 存入数据并设置过期时间
    public static <T> void setData(String key, T data, int expire) {
          
   
        CACHE_DATA.put(key, new CacheData(data, expire));
    }
	
	// 根据key清除数据
    public static void clear(String key) {
          
   
        CACHE_DATA.remove(key);
    }

	// 清除所有缓存数据
    public static void clearAll() {
          
   
        CACHE_DATA.clear();
    }

    public interface Load<T> {
          
   
        T load();
    }

    private static class CacheData<T> {
          
   
        CacheData(T t, int expire) {
          
   
            this.data = t;
            this.expire = expire <= 0 ? 0 : expire * 1000;
            this.saveTime = System.currentTimeMillis() + this.expire;
        }

        private T data;
        private long saveTime; // 存活时间
        private long expire;   // 过期时间 小于等于0标识永久存活

        public T getData() {
          
   
            return data;
        }

        public long getExpire() {
          
   
            return expire;
        }

        public long getSaveTime() {
          
   
            return saveTime;
        }
    }
}

测试:

AppletTemplateMessageSendDTO appletTemplateMessageSendDTO = new AppletTemplateMessageSendDTO();
        appletTemplateMessageSendDTO.setTouser("openid");
        appletTemplateMessageSendDTO.setTemplate_id("模板id");
        appletTemplateMessageSendDTO.setPage("跳转的页面");
    Map<String,Object> map = new HashMap<>();
    Map<String,Object> thing6 = new HashMap<>();
    Map<String,Object> time8 = new HashMap<>();
    Map<String,Object> phone_number7 = new HashMap<>();
    Map<String,Object> thing10 = new HashMap<>();
        thing6.put("value","xqd");
        time8.put("value","2020-12-29");
        phone_number7.put("value", "17600026666");
        thing10.put("value","测试一下订阅消息");
        map.put("thing6",thing6);
        map.put("time8",time8);
        map.put("phone_number7",phone_number7);
        map.put("thing10",thing10);
        appletTemplateMessageSendDTO.setData(map);
        wxAppletRemoteService.uniformMessageSend(appletTemplateMessageSendDTO);

发送成功

经验分享 程序员 微信小程序 职场和发展