微信模板消息

微信模板消息

微信接口访问工具封装

// An highlighted block
package com.vingoojuice.common.infrastructure.util.wxUntil.test;

import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
/**
 * By M
 *
 * @Date : 2019/3/21 17:09
 * @Description :微信接口访问工具封装
 */
public class WxTemplateUtil {

    /**
     * 获取access_token的接口地址(GET) 限200(次/天)
     */
    public final static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

    /**
     * 发送模板消息(POST)
     */
    public final static String SEND_TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";

    /**
     * 接口描述:请求工具
     *
     * @return net.sf.json.JSONObject
     * @date 2018/10/8 15:30
     * @params [requestUrl, requestMethod, outputStr]
     */
    public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {
        StringBuffer buffer = new StringBuffer();
        try {

            URL url = new URL(requestUrl);
            HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
            httpUrlConn.setDoOutput(true);
            httpUrlConn.setDoInput(true);
            httpUrlConn.setUseCaches(false);
            // 设置请求方式(GET/POST)
            httpUrlConn.setRequestMethod(requestMethod);
            if ("GET".equalsIgnoreCase(requestMethod))
                httpUrlConn.connect();
            // 当有数据需要提交时
            if (null != outputStr) {
                OutputStream outputStream = httpUrlConn.getOutputStream();
                // 注意编码格式,防止中文乱码
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.close();
            }
            // 将返回的输入流转换成字符串
            InputStream inputStream = httpUrlConn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String str = null;
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }
            bufferedReader.close();
            inputStreamReader.close();
            // 释放资源
            inputStream.close();
            inputStream = null;
            httpUrlConn.disconnect();
            return JSONObject.fromObject(buffer.toString());
        } catch (ConnectException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 接口描述:获取access_token
     *
     * @return com.gzschool.prismtestcms.model.vo.WxAccessTokenVO
     * @date 2018/10/8 15:35
     * @params [appId, appSecret]
     */
    public static WxAccessTokenVO getAccessToken(String appId, String appSecret) {

        WxAccessTokenVO wxAccessTokenVO = null;

        String requestUrl = ACCESS_TOKEN_URL.replace("APPID", appId).replace("APPSECRET", appSecret);
        JSONObject jsonObject = httpRequest(requestUrl, "GET", null);
        // 如果请求成功
        if (null != jsonObject) {
            try {
                wxAccessTokenVO = new WxAccessTokenVO();
                wxAccessTokenVO.setAccessToken(jsonObject.getString("access_token"));
                wxAccessTokenVO.setExpiresIn(jsonObject.getInt("expires_in"));
            } catch (JSONException e) {
                wxAccessTokenVO = null;
                // 获取token失败
                System.out.println("获取token失败");
            }
        }
        return wxAccessTokenVO;
    }
    /**
     * 接口描述:消息模板发送
     *
     * @return net.sf.json.JSONObject
     * @date 2018/10/8 15:44
     * @params [wxTemplateDTO, accessToken]
     */
    public static JSONObject sendTemplateMsg(WxTemplateDTO wxTemplateDTO, String accessToken) {
        String url = SEND_TEMPLATE_URL.replace("ACCESS_TOKEN", accessToken);
        // 将模板数据对象转换成json字符串
        String wxTemplate = JSONObject.fromObject(wxTemplateDTO).toString();
        //发送请求
        JSONObject result = httpRequest(url, "POST", wxTemplate);
        if (result != null) {
            return result;
        } else {
            return null;
        }
    }

}

消息模板基本属性封装,参数命名风格需参照微信参数定义

package com.vingoojuice.common.infrastructure.util.wxUntil.test;
/**
 * @Date : 2019/3/21 17:06
 * @Description :
 */
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.util.Map;
/**
 * By M
 *
 * @Date : 2019/3/21 17:09
 * @Description :消息模板基本属性封装,参数命名风格需参照微信参数定义
 */
@Getter
@Setter
@Data
public class WxTemplateDTO {
    /**
     * 模板消息ID(必填).
     */
    private String template_id;
    /**
     * 接收者(用户)的 openid(必填).
     */
    private String touser;
    /**
     * 模板内容,不填则下发空模板(必填).
     */
    private Map<String, TemplateData> data;
}

获取微信accessToken接口信息,参数封装

package com.vingoojuice.common.infrastructure.util.wxUntil.test;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * By M
 *
 * @Date : 2019/3/21 17:09
 * @Description :获取微信accessToken接口信息,参数封装
 */
@Data
@Getter
@Setter
public class WxAccessTokenVO implements Serializable {
    /**
     * 获取到的凭证.
     */
    private String accessToken;

    /**
     * 凭证有效时间,单位:秒.
     */
    private Integer expiresIn;
}

模板消息字体颜色

package com.vingoojuice.common.infrastructure.util.wxUntil.test;
import lombok.*;
/** By M
 * @Date : 2019/3/21 17:09
 * @Description :模板消息字体颜色
 */
@Data
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class TemplateData {
    private String value;
    private String color;
}

模板消息内容封装实体

package com.vingoojuice.common.infrastructure.util.wxUntil.test;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;

/**
 * By M
 *
 * @Date : 2019/3/21 17:09
 * @Description :模板消息内容封装实体
 */
@Data
@Setter
@Getter
public class RefundInfoMode {
    private String first;  //标题
    private String keyword1;//退款信息;
    private String keyword2;  //退款执行时间
    private String keyword3; // 订单号
    private String keyword4; //服务热线;
    private String remark;  //备注信息
    public RefundInfoMode() {
    }
}

主函数启动类

注意accessToken 不能频繁获取

package com.vingoojuice.common.infrastructure.util.wxUntil.test;
import net.sf.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
 * @Date : 2019/3/21 17:10
 * @Description :
 */
public class demo {
    public static void main(String[] args) {
        String appId="**必填**";//Appid
        String appserct="**必填**"; //appserct
        WxAccessTokenVO accessToken = WxTemplateUtil.getAccessToken(appId, appserct);
        RefundInfoMode refundInfoMode =new RefundInfoMode();
        refundInfoMode.setFirst("退款信息来了");
        refundInfoMode.setKeyword1("退款信息100");
        refundInfoMode.setKeyword2("2019-03-21");
        refundInfoMode.setKeyword3("00000111111");
        refundInfoMode.setKeyword4("400-400-001");
        refundInfoMode.setRemark("退款测试");
        WxTemplateDTO wechatTemplate=new WxTemplateDTO();
        wechatTemplate.setTemplate_id("**必填**");// 模板消息Id
        wechatTemplate.setTouser("**必填**");//微信OPenid
        Map<String,TemplateData> data=new HashMap<String,TemplateData>();
        data.put("first",new TemplateData(refundInfoMode.getFirst(),"#173177"));
        data.put("keyword1",new TemplateData(refundInfoMode.getKeyword1(),"#173177"));
        data.put("keyword2",new TemplateData(refundInfoMode.getKeyword2().toString(),"#173177"));
        data.put("keyword3",new TemplateData(refundInfoMode.getKeyword3(),"#173177"));
        data.put("keyword4",new TemplateData(refundInfoMode.getKeyword4(),"#173177"));
        data.put("remark",new TemplateData(refundInfoMode.getRemark(),"#173177"));
        wechatTemplate.setData(data);
        //String accessToken="19_jA9zuWtlV7tRS0EfpZJjkpttBRLQMViKcsJSYw3ZkVFUoxkP1kCCE9MJCClxMIKHUhNq47NrIKXqyLvsjWrKfCXT89iNIRzPkds96wBFOeKBvUWChB4Y3_C0HDBWqEw4mrr8RJ7SNY3YLrqMSLMdAHALEF";
        JSONObject jsonObject= WxTemplateUtil.sendTemplateMsg(wechatTemplate,accessToken.getAccessToken());
        System.out.println(jsonObject);
      // System.out.println("accessToken--》"+accessToken.getAccessToken());
    }
}

特别注意 微信的公众号和小程序发送模板地址不一样不要弄错了!!!

结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值