微信公众号推送模板消息,推送个人消息,给指定的人发送模板消息

 公众号推送个人消息

开发公众号时,需要写推送消息,从网上找了一大堆,都不是很全,,通过这次把代码全都总结起来,方便他人寻找问题的时候,不会跟作者一样,找各种文档,耽误工作时间。最主要的就是微信公众号的推送模板消息的设置,在后头进行把需要的模板推送给关注的微信,需要把微信openId与用户关联起来,这样就方便进行发送指定的人

微信公众号开发文档

微信公众平台开发概述 | 微信开放文档

设置微信公众号模板消息

微信服务号模板消息群发|公众号第三方平台模板消息群发 - 功能介绍 - 微号帮 - 微信公众号营销助手

maven工程pom.xml需要的包

<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.4</version>
			<classifier>jdk15</classifier>
		</dependency>

		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-http</artifactId>
			<version>4.6.5</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-log -->
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-log</artifactId>
			<version>4.1.17</version>
		</dependency>

		<!-- fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.51</version>
		</dependency>

		<!-- httpclient -->
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.6</version>
		</dependency>

controller里的方法

	// 获得access_token的接口
			String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + AppConstants.APPID
					+ "&secret=" + AppConstants.APPSECRET ;
			String returnvalue = GET(getTokenUrl);
			JSONObject jsonObjects = JSONObject.fromObject(returnvalue);
			String access_token = jsonObjects.get("access_token").toString();
			//获取用户信息
			String getUserUrl = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + access_token;
			String returnvalues = GET(getUserUrl);
			JSONObject jsonObject3 = JSONObject.fromObject(returnvalues);
			String openid = "";
			if(lhVipDetail!=null) {
				openid =lhVipDetail.getOpenId();
			}else {
				return  501;
				
			}
			if(!StringUtils.isNotBlank(openid)) {
				return  501;
			}
			
			// object[0];
			// 发送的内容
			WechatTemplate wechatTemplate = new WechatTemplate();
			// 跳转小程序配置
			// Miniprogram miniprogram = new Miniprogram();
			// 设置模板id
			wechatTemplate.setTemplate_id("DA4443rT1UORhell5vqiskNXLbx3oIzm0TmmdQ4kviU");
			wechatTemplate.setTouser(openid);
			// 模板消息点击跳转路径, 如果不配置跳转小程序,可以设置跳转该路径
			// wechatTemplate.setUrl("http://www.baidu.com");
			Map<String, TemplateData> m = new HashMap<String, TemplateData>();
			TemplateData first = new TemplateData();
			first.setColor("#173177");
			first.setValue("订单成功支付通知");//标题
			m.put("first", first);

			TemplateData keyword1 = new TemplateData();
			keyword1.setColor("#173177");
			Timestamp changeTime = Tool.currentDate();
			keyword1.setValue(Tool.changeTimeStampToString(changeTime));//时间
			m.put("keyword1", keyword1);

			TemplateData keyword2 = new TemplateData();
			keyword2.setColor("#173177");
			keyword2.setValue(shop);//商品标题
			m.put("keyword2", keyword2);

			TemplateData keyword3 = new TemplateData();
			keyword3.setColor("#173177");
			if (type == 1) {
				keyword3.setValue(lhStoreOrder.getPracticalPrice().toString());
			} else if (type == 2) {
				keyword3.setValue(lhStoreServerOrder.getServerPrice().toString()); //价格
			}
			m.put("keyword3", keyword3);

			TemplateData keyword4 = new TemplateData();
			keyword4.setColor("#173177");
			if (type == 1) {
				keyword4.setValue(lhStoreOrder.getOrderNum());   //订单号
			} else if (type == 2) {
				keyword4.setValue(lhStoreServerOrder.getServerNum());
			}
			m.put("keyword4", keyword4);

			TemplateData keyword5 = new TemplateData();
			keyword5.setColor("#173177");
			if (type == 1) {
				keyword5.setValue(lhVipDetail.getVipName() + "先生/女生");
			} else if (type == 2) {
				keyword5.setValue(lhVipDetail.getVipName() + "先生/女生"); //姓名
			}
			m.put("keyword5", keyword5);
			TemplateData remark = new TemplateData();
			remark.setColor("#173177");
			remark.setValue("感谢您的光临!");  //结尾
			m.put("remark", remark);
			wechatTemplate.setData(m);
			Integer result = 0;
			if(lhVipDetail!=null) {
				//发送微信通知
				String sendUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
				String jsonString = JSON.toJSONString(wechatTemplate);
				String json2 = HttpUtil.post(sendUrl, jsonString);
				JSONObject jsonObject2 = JSONObject.fromObject(json2);
				
				System.out.println(jsonString);
				System.out.println(json2);
				System.out.println(jsonObject2);
				if (null != jsonObject2) {
					if (0 != jsonObject2.getInt("errcode")) {
						result = jsonObject2.getInt("errcode");
						StaticLog.error("错误 errcode:{} errmsg:{}", jsonObject2.getInt("errcode"),
								jsonObject2.get("errmsg").toString());
						System.err.println("错误 errcode:{} errmsg:{}" + jsonObject2.getInt("errcode")
								+ jsonObject2.get("errmsg").toString());
					}else {
						result = jsonObject2.getInt("errcode");
					}
				}
				StaticLog.info("模板消息发送结果:" + result);
			}
			
			return   result;

需要的实体类

/**
  * 包含Miniprogram, TemplateData
 * @Description  * 参数的类, 调用微信发送模板消息的参数类
 * @author scf
 * @Date 2019-09-16 15:24:03
 * @version 1.0.0
 */
public class WechatTemplate {
    private String touser;

    private Miniprogram miniprogram;

    private String template_id;

    private String url;

    private Map<String, TemplateData> data;

    public String getTouser() {
        return touser;
    }

    public void setTouser(String touser) {
        this.touser = touser;
    }

    public String getTemplate_id() {
        return template_id;
    }

    public void setTemplate_id(String template_id) {
        this.template_id = template_id;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Map<String, TemplateData> getData() {
        return data;
    }

    public Miniprogram getMiniprogram() {
        return miniprogram;
    }

    public void setMiniprogram(Miniprogram miniprogram) {
        this.miniprogram = miniprogram;
    }

    public void setData(Map<String, TemplateData> data) {
        this.data = data;
    }
}
/**
 * @ClassName TemplateData
 * @Description   模板消息的内容, 封装模板消息具体内容的类
 * @author scf
 * @Date 2019-09-16 15:00:30
 * @version 1.0.0
 */
public class TemplateData {

    private String value;
    private String color;

    public String getValue() {
        return value;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}
/**
 * 模板消息跳转连接, 封装参数的类
 * @author scf
 * @Date 2019-09-16 15:10:30
 * @version 1.0.0
 */
public class Miniprogram {

    private String appid;

    private String  pagepath;

    public String getAppid() {
        return appid;
    }

    public void setAppid(String appid) {
        this.appid = appid;
    }

    public String getPagepath() {
        return pagepath;
    }

    public void setPagepath(String pagepath) {
        this.pagepath = pagepath;
    }
}

http请求封装的类

/**
 * http请求封装的类
 */
public class HttpClientUtils {

    /**
     * httpclient执行get请求
     *
     * @param url
     * @param params
     * @return
     */
    public static String doGet(String url, Map<String, String> params) {
        // 创建httpclient
        CloseableHttpClient httpClient = HttpClients.createDefault();

        String result = "";
        CloseableHttpResponse httpResponse = null;
        try {
            // 构建uri
            URIBuilder builder = new URIBuilder(url);

            // 构建参数
            if (params != null) {
                for (Map.Entry<String, String> param : params.entrySet()) {
                    builder.addParameter(param.getKey(), param.getValue());
                }
            }

            URI uri = builder.build();

            // 构建get请求
            HttpGet httpGet = new HttpGet(uri);

            // 执行
            httpResponse = httpClient.execute(httpGet);

            result = EntityUtils.toString(httpResponse.getEntity(), Charset.defaultCharset());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(httpClient, httpResponse);
        }
        return result;
    }

    /**
     * 执行get请求没有参数
     *
     * @param url
     * @return
     */
    public static String doGet(String url) {
        return doGet(url, null);
    }

    /**
     * 执行post请求
     *
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, Map<String, String> params) {
        // 创建httpclient
        CloseableHttpClient httpClient = HttpClients.createDefault();

        String result = "";
        CloseableHttpResponse httpResponse = null;
        try {
            // 构建请求
            HttpPost httpPost = new HttpPost(url);

            // 构建参数
            if (params != null) {
                List<NameValuePair> paramList = new ArrayList<NameValuePair>();
                for (Map.Entry<String, String> param : params.entrySet()) {
                    paramList.add(new BasicNameValuePair(param.getKey(), param.getValue()));
                }

                // 模拟form表单entity
                UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(paramList, Charset.defaultCharset());
                httpPost.setEntity(formEntity);
            }

            // 执行
            httpResponse = httpClient.execute(httpPost);
            result = EntityUtils.toString(httpResponse.getEntity(), Charset.defaultCharset());

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(httpClient, httpResponse);
        }
        return result;
    }

    /**
     * 执行post请求没有参数
     *
     * @param url
     * @return
     */
    public static String doPost(String url) {
        return doPost(url, null);
    }

    /**
     * 执行post请求,参数为json字符串
     *
     * @param url
     * @param jsonParam
     * @return
     */
    public static String doPostJsonParam(String url, String jsonParam) {
        // 创建httpclient
        CloseableHttpClient httpClient = HttpClients.createDefault();

        String result = "";
        CloseableHttpResponse httpResponse = null;
        try {
            // 构建请求
            HttpPost httpPost = new HttpPost(url);

            if (!StringUtils.isEmpty(jsonParam)) {
                // 创建请求实体
                StringEntity stringEntity = new StringEntity(jsonParam, ContentType.APPLICATION_JSON);
                httpPost.setEntity(stringEntity);
            }

            // 执行
            httpResponse = httpClient.execute(httpPost);
            result = EntityUtils.toString(httpResponse.getEntity(), Charset.defaultCharset());

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(httpClient, httpResponse);
        }
        return result;
    }

    /**
     * 关闭httpClient和httpResponse
     *
     * @param httpClient
     * @param httpResponse
     */
    private static void close(CloseableHttpClient httpClient, CloseableHttpResponse httpResponse) {
        if (httpResponse != null) {
            try {
                httpResponse.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (httpClient != null) {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值