微信公众号发送模板消息—java版本

微信模板消息接口地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277

测试发送模板消息案例:

微信公众号发送模板消息—java版本

一、发送模版消息以及获取 access_token工具类

public class WXInterfaceRequestUtil {
    private static Logger logger = LoggerFactory.getLogger(WXInterfaceRequestUtil.class);

    /**
     * 发送模版消息
     * @param params
     * @param accessToken
     */
    public static void WXIntegralTemplateMessage(String params, String accessToken){
        try {
            Request sendMes = Request.create("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+accessToken, Request.METHOD.POST);
            sendMes.setData(params);
            Response res = Sender.create(sendMes).send();
            if(res.isOK()){
                System.out.println("WXIntegralTemplateMessage发送消息成功");
                logger.error("WXIntegralTemplateMessage发送消息成功");
            }
        } catch (Exception e) {
            System.out.println("WXIntegralTemplateMessage发送消息失败");
            logger.error("WXIntegralTemplateMessage发送消息失败");
            e.printStackTrace();

        }
    }

    /**
     * 获取access_token
     */
    public static String WXGetAccessToken(){
        String accessToken ="";
        try {
            String wxspAppid=WeixinConfig.APP_ID;
            String wxspSecret=WeixinConfig.APP_SECRET;
            Request getToken = Request.create("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+wxspAppid+"&secret=c4eba9961c59534ef7cb0813c6daaf83", Request.METHOD.GET);
            Response respToken = Sender.create(getToken).send();
            if (respToken.isOK()) {
                //解析相应内容(转换成json对象)
                Map map= Json.fromJson(Map.class,respToken.getContent());
                accessToken= Strings.sBlank(map.get("access_token"));
                if(StringUtils.isNotEmpty(accessToken)){
                    System.out.println("WXGetAccessToken获取AccessToken成功");
                    logger.error("WXGetAccessToken获取AccessToken成功");
                    return accessToken;
                }
            }
        } catch (Exception e) {
            System.out.println("WXGetAccessToken获取AccessToken失败");
            logger.error("WXGetAccessToken获取AccessToken失败");
            e.printStackTrace();

        }
        return accessToken;
    }
    public static void main(String[] args){
        WXGetAccessToken();
    }
}

二、封装积分变动消息提醒内容工具类

public class WXIntegralTemplateMessageDTO {
    private Map<String, Object> map;

    private Map<String, Object> data;

    /**
     * 封装积分变动消息提醒内容
     *
     * @param touser       收件人openid
     * @param template_id  模版消息id
     * @param url          积分变动内容链接
     * @param topcolor     颜色
     * @param customerName 会员名称
     * @param vipCode 会员卡号
     * @param text 内容
     */
    public WXIntegralTemplateMessageDTO(String touser, String template_id, String url, String topcolor, String customerName,String vipCode,String text) {

        map = new LinkedHashMap<String, Object>();

        data = new LinkedHashMap<String, Object>();


        LinkedHashMap<String, String> first = new LinkedHashMap<String, String>();

        first.put("value", "会员积分变动提醒");

        first.put("color", "#743A3A");

        data.put("first", first);


        LinkedHashMap<String, String> keyword1 = new LinkedHashMap<String, String>();

        keyword1.put("value",customerName);

        keyword1.put("color", "#FF0000");

        data.put("keyword1", keyword1);


        LinkedHashMap<String, String> keyword2 = new LinkedHashMap<String, String>();

        keyword2.put("value", vipCode);

        keyword2.put("color", "#C4C400");

        data.put("keyword2", keyword2);


        LinkedHashMap<String, String> keyword3 = new LinkedHashMap<String, String>();

        keyword3.put("value", text);

        keyword3.put("color", "#0000FF");

        data.put("keyword3", keyword3);


        LinkedHashMap<String, String> remark = new LinkedHashMap<String, String>();

        remark.put("value", "如有疑问请在公众号留言");

        remark.put("color", "#000000");

        data.put("remark", remark);


        map.put("touser", touser);

        map.put("template_id", template_id);

        map.put("url", url);

        map.put("topcolor", topcolor);

        map.put("data", data);

    }


    public Map<String, Object> getMap() {

        return map;

    }


    public void setMap(Map<String, Object> map) {

        this.map = map;

    }


    public Map<String, Object> getDate() {

        return data;

    }


    public void setDate(Map<String, Object> date) {

        this.data = date;

    }
}

三、开始发送消息

//获取用户accessToken
String accessToken = WXInterfaceRequestUtil.WXGetAccessToken();
if(StringUtils.isNotEmpty(accessToken)){
    //模板id
    String template_id = WeixinConfig.TEMPLATE_ID;
    //点击模板后的链接地址
    String url = "";
    //模板的主题颜色
    String topcolor = "#008000";
    //收件人openId
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
    String nowTime = simpleDateFormat.format(new Date());
    //会员当前总积分 减去 会员消费之后的总积分
    Double aDouble = customer1.getMemberPoint() - customer.getMemberPoint();
    String text = "";
    if (aDouble > 0) {//消费加积分
        text = "您与" + nowTime + ",在门店消费获得" + aDouble + "积分,目前您可用积分为" + customer.getMemberPoint();
    } else {//消费减去积分
        text = "您与" + nowTime + ",在门店消费扣钱" + aDouble + "积分,目前您可用积分为" + customer.getMemberPoint();
    }
    //构造输入参数
    WXIntegralTemplateMessageDTO wn = new WXIntegralTemplateMessageDTO(customer1.getWechaId(), template_id, url, topcolor, customer1.getCustomerName(), customer1.getVipCode(), text);
    Object object = JSONObject.toJSON(wn.getMap());
    WXInterfaceRequestUtil.WXIntegralTemplateMessage(object.toString(), accessToken);
}