微信开发:Java 实现推送模板消息

介绍一下啥是模板消息,模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等,模版消息可以不通过用户主动交互向用户推送消息,但是个人建议尽量少推送消息,避免被举报,下方是关于微信模板消息的使用规则

官方文档:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html


接口调用请求说明

http请求方式: https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

第一步

    申请测试公众号,通过测试公众号 ID 和 密钥,获取 access_token 信息
        申请一个测试号公众号,详情请看 微信开发:申请测试公众号(一)
        获取 access_token 信息,详细请看 微信开发:获取 access_token(二)

第二步

    配置模板类,微信模板推送采用的是 JSON 格式,因此我们有两种方式对他进行配置,第一种就是我们下边这个配置模板,然后一步一步中规中矩的来搞,第二种就是我们手动拼 JSON 内容串,然后进行推送,这个地方其实我个人喜欢第二种

    分别为 微信消息参数,模版消息内容,模版消息(模版名称规范建议和本博文一样,反正是一个公用的类)

    微信消息参数模版  WechatTemplate

package org.ry.utils;

import lombok.Data;

import java.util.Map;

/**
 * @ClassName:WechatTemplate
 * @Description:TODO 微信消息参数模板
 * @Author LinLuoChen
 * @Date 2019/11/1/17:32
 * @Version V1.0
 **/
@Data
public class WechatTemplate {

    // 接收人
    private String touser;

    // 模板消息 ID
    private String template_id;

    // 跳转路径
    private String url;

    // 标题颜色
    public String topcolor;

    // 模板内容信息
    private Map<String, TemplateData> data;

}

    模版消息内容  TemplateData

package org.ry.utils;

import lombok.Data;

/**
 * @ClassName:TemplateData
 * @Description:TODO 模板消息的内容,封装模板消息具体内容的类
 * @Author LinLuoChen
 * @Date 2019/11/1/17:31
 * @Version V1.0
 **/
@Data
public class TemplateData {

    private String value; // 消息内容
    private String color; // 消息颜色

}

     微信消息模版 MessageTemplate      这个根据 你获取的消息模版的字段来定义

package org.ry.utils;

import lombok.Data;

/**
 * @ClassName:wxMessageTemplate
 * @Description:TODO 微信消息模板
 * @Author LinLuoChen
 * @Date 2019/11/4/9:45
 * @Version V1.0
 **/
@Data
public class MessageTemplate {

    // 标题
    private String first;

    // 内容1
    private String keyword1;

    // 内容2
    private String keyword2;

    // 内容3
    private String keyword3;

    // 内容4
    private String keyword4;

    // 结束
    private String remark;

}

配置这一块就到此结束了


第三步

    配置好上边所需要的参数之后们就可以进最后一步,配置推送

package org.ry.demo;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.log4j.Logger;
import org.ry.utils.HttpRequestUtil;
import org.ry.utils.MessageTemplate;
import org.ry.utils.TemplateData;
import org.ry.utils.WechatTemplate;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName:wx_message
 * @Description:TODO 微信消息模版,详细文档说明请查看 instructions/wx_massage_txt 文件
 * @Author LinLuoChen
 * @Date 2019/11/1/17:01
 * @Version V1.0
 **/
@Service
public class WxMassage {

    // 调用 log 日志
    static Logger log = Logger.getLogger(WxMassage.class.getClass());

    // 发起救援
    public static Integer send_template_messageStart(String openId, MessageTemplate messageTemplate, String access_token) {
        // 配置推送连接
        String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
        WechatTemplate wechatTemplate = new WechatTemplate();
        //设置模板id
        wechatTemplate.setTemplate_id("ouEWjE5zczKwhCcLPtLdZcokWZ0sY1BA3IErXoBneV4");  //需要替换成自己的
        wechatTemplate.setTouser(openId);
        wechatTemplate.setTopcolor("#000000");
        //模板消息点击跳转路径, 如果不配置跳转小程序,可以设置跳转该路径
        wechatTemplate.setUrl("http://www.baidu.com");

        // 配置模版消息
        Map<String, TemplateData> m = new HashMap<String,TemplateData>();
        TemplateData first = new TemplateData();
        first.setColor("#000000");
        first.setValue(messageTemplate.getFirst());
        m.put("first", first);

        TemplateData keyword1 = new TemplateData();
        keyword1.setColor("#000000");
        keyword1.setValue(messageTemplate.getKeyword1());
        m.put("keyword1", keyword1);

        TemplateData keyword2 = new TemplateData();
        keyword2.setColor("#000000");
        keyword2.setValue(messageTemplate.getKeyword2());
        m.put("keyword2", keyword2);

        TemplateData keyword3 = new TemplateData();
        keyword3.setColor("#000000");
        keyword3.setValue(messageTemplate.getKeyword3());
        m.put("keyword3", keyword3);

        TemplateData keyword4 = new TemplateData();
        keyword4.setColor("#000000");
        keyword4.setValue("2018-11-10");
        m.put("keyword4", keyword4);

        TemplateData remark = new TemplateData();
        remark.setColor("#000000");
        remark.setValue(messageTemplate.getRemark());
        m.put("remark", remark);
        wechatTemplate.setData(m);

        String jsonString = JSON.toJSONString(wechatTemplate).toString();
        JSONObject jsonObject = HttpRequestUtil.httpRequest(url, "POST",jsonString);
        System.out.println("消息模版:"+jsonObject);
        log.info("消息模版:"+jsonObject);
        int result = 0;
        if (null != jsonObject) {
            if (0 != jsonObject.getInteger("errcode")) {
                result = jsonObject.getInteger("errcode");
            }
        }
        return result;
    }

    public static void main(String[] args) {
        MessageTemplate messageTemplate = new MessageTemplate();
        messageTemplate.setFirst("尊敬的用户");
        messageTemplate.setKeyword1("测试");
        messageTemplate.setKeyword2("测试的服务");
        messageTemplate.setRemark("感谢您的使用");
        send_template_messageStart("oLv4UwlggsT1U58k60zetFXi5d3k",messageTemplate,"28_PxuakRwvBI_BTDBleYPQJMUVSsp5fmJTpkeoFr3ZkHtuw3BULX_YGdopWOW4ZF8-Ajnm7ku0HBosGQ3u2oay49XVbFkyKKVPDXvuUxV2XtuA8OGW2s7CwQKQIH_fn42_EKNJJm0XodMxn1E9VFMhADAYIP");
    }

}

第二种拼接 JSON 串,以这个为例子

// 最外层 
JSONObject data = new JSONObject();
// 存放内容
JSONObject map = new JSONObject();
// 循环遍历内容
for(int i=0;i<strArr.length;i++){
   JSONObject o = new JSONObject();
   o.put("value",strArrData[i]);
   o.put("color","#000000");
   map.put(strArr[i],o);
}
// 模板 ID 
data.put("template_id","xxxxx");
// 模板颜色
data.put("topcolor","#000000");
// 接收人
data.put("touser","xxxxx");
// 要跳转的路径
data.put("url","www.baidu.com");
// 把内容放进 data 总 json 里边
data.put("data",map);
String jsonString = JSON.toJSONString(data);
// 执行推送
JSONObject jsonObject = HttpRequestUtil.httpRequest(url, "POST",jsonString);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

平凡的人类

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

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

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

打赏作者

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

抵扣说明:

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

余额充值