java发送微信小程序模版通知

2020年1月7日10:41:51 

由于微信关闭了模版消息发送,所有改为订阅消息发送,此篇技术已经过时,请浏览最新的服务通知,新博客地址

https://blog.youkuaiyun.com/qq_34706514/article/details/103870208

 

首先先上官方文档

https://developers.weixin.qq.com/miniprogram/dev/api/open-api/template-message/sendTemplateMessage.html

关键部分代码

/**
     * 发送模板消息sendTemplateMessage
     * 小程序模板消息,发送服务通知
     * @param touser 接收者(用户)的 openid
     * @param template_id 所需下发的模板消息的id
     * @param page 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
     * @param formid 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
     * @return
     */
    public static JSONObject sendTemplateMessage(String touser,String template_id,String page,String formid,Map<String,TemplateData> map){
        String accessToken = GetTokenUtil.getAccessToken();
//        String accessToken = "14_J1q4pOmeNcQNTZijKctjByU4SNHJ9ge7eWqUPh98bpjRCzg4Inx50WMZpL06epBJ3wzVaTI9iYXDC_-glxbFYr5PQ9JVDncc67Q7NbvLn4NSW-zasZx_hFCgI8LmBGybI3a-FVjLPzyKMxlpAGFdAIAUAZ";
        sendTemplateMessage sendTemplateMessage = new sendTemplateMessage();
        //拼接数据
        sendTemplateMessage.setTouser(touser);
        sendTemplateMessage.setTemplate_id(template_id);
        sendTemplateMessage.setPage(page);
        sendTemplateMessage.setForm_id(formid);
        sendTemplateMessage.setData(map);
        sendTemplateMessage.setEmphasis_keyword("");
        String json =  JSONObject.toJSONString(sendTemplateMessage);
        log.info("##模版发送JSON数据:  "+json);
        String ret = UrlUtils.sendPost(Wechat.SEND_TEMPLATE_MESSAGE+accessToken, json);
        return JSON.parseObject(ret);
    }
/**发送模板消息*/
    String SEND_TEMPLATE_MESSAGE = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=";

用到的封装的实体

TemplateData.java
sendTemplateMessage.java
/**
 * 发送模板消息
 * @Author: liangkesai
 * @CreateDate: 2018/9/30 16:21
 */
public class sendTemplateMessage {

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

    private String template_id; //所需下发的模板消息的id

    private String page; //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。

    private String form_id; //表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id

    private Map<String,TemplateData> data; //模板内容,不填则下发空模板

    private String emphasis_keyword; //模板需要放大的关键词,不填则默认无放大

    get set 省略
}
public class TemplateData {

    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public TemplateData(String value) {
        this.value = value;
    }

    public TemplateData() {
    }
}

发送post请求代码

 /**
     * 发送post请求 json格式
     * @param url
     * @param param
     * @return
     */
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("Content-Type", "application/json");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    }

测试用main方法

public static void main(String[] args) {
        Map<String,TemplateData> map = new HashMap<>();
        map.put("keyword1",new TemplateData("339208499"));
        map.put("keyword2",new TemplateData("2018年9月30日16:33:44"));
        map.put("keyword3",new TemplateData("***总部"));
        map.put("keyword4",new TemplateData("*****学院"));
        JSONObject js = sendTemplateMessage("o89rs0M0EIzrkiN9Va88mFbQyUdQ", "vAsdSQIUPI47H5K5xQVFrc36hK2zgyxioRC_rUxMF9M", "", "1539830935602",map);
        System.out.println(js);
    }

 

有不懂的地方可以留言

 

 

 

### 使用Java实现微信小程序推送消息接口 为了使用Java实现向微信小程序发送通知的功能,可以按照以下方法构建应用程序。此过程涉及创建HTTP请求来调用微信服务器端API。 #### 准备工作 确保已经获取了必要的配置项: - `AppID` 和 `AppSecret`: 这些是从微信公众平台注册的小程序获得的应用凭证。 - `Template ID`: 需要在微信公众平台上设置并审核通过的消息模板ID[^1]。 #### 构建请求对象 定义用于封装模板消息的数据结构体,在Spring Boot环境中通常会借助第三方库简化操作流程。这里采用WeChat官方推荐的`WxMaTemplateMessage`类作为基础模型[^3]。 ```java // 导入依赖包 import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; public class TemplateMsgSender { private final WxMaService wxService; public void sendMessage(String openId, String formId, Map<String,Object> data){ WxMaTemplateMessage templateMessage = new WxMaTemplateMessage(); templateMessage.setTouser(openId); templateMessage.setTemplateId("YOUR_TEMPLATE_ID"); templateMessage.setFormId(formId); templateMessage.setData(data); try{ this.wxService.getMsgService().sendTemplateMsg(templateMessage); }catch (Exception e){ System.out.println(e.getMessage()); } } } ``` 上述代码片段展示了如何利用`cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage`构造函数初始化一个新的模板消息实例,并设置了收件人的OpenID、表单提交事件返回的form-id以及自定义的数据字典。 #### 发送POST请求 当准备好所有必需的信息之后,就可以发起HTTPS POST请求给定的目标URL地址。对于微信小程序而言,目标链接通常是固定的,而具体的路径取决于所使用的SDK版本或框架特性[^4]。 注意:在实际开发过程中,建议集成成熟的开源项目如wxa-java-sdk等工具包,它们提供了更加便捷的方式处理这类场景下的网络通信逻辑[^2]。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赛赛liangks

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值