一、登陆微信公众号,选中模板消息,添加需要的模板,
二、在 .properties 配置文件中,记录模板ID
三、模板文件配置,
-SendTemplateMessageController
public class SendTemplateMessageController {
/**
* 发送模板消息sendTemplateMessage
* 小程序模板消息,发送服务通知
* @param touser 接收者(用户)的 openid
* @param template_id 所需下发的模板消息的id
* @param page 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
* @param formid 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
* @return
* @throws UnsupportedEncodingException
*/
public static JSONObject sendTemplateMessage(String touser, String template_id,
String page, String formid, Map<String, TemplateData> map) {
String accessToken = getAccessToken();
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);
String ret = sendPost(MyJwtConfigurer.geSend_template_message()+accessToken, json);
return JSON.parseObject(ret);
}
public static String getAccessToken(){
String param = "grant_type=client_credential&appid="+MyJwtConfigurer.getAppid()+"&secret="+MyJwtConfigurer.getAppsecret();
String result = UrlUtils.sendGet(MyJwtConfigurer.geAccess_token(),param);
JSONObject demoJson = JSONObject.parseObject(result);
String accessToken = demoJson.getString("access_token");
String expiresIn = demoJson.getString("expires_in");
Token token = Token.getInstance();
token.setAccessToken(accessToken);
//过期时间的毫秒数
token.setExpiryTime(System.currentTimeMillis()+1000*60*100L);
return accessToken;
}
/**
* 发送post请求 json格式
* @param url
* @param param
* @return
*/
public static String sendPost(String url, String param) {
BufferedWriter out = null; //也可以使用 PrintWriter 但是没有编码设置(字符流) 1-用PrintWriter在服务器上可能消息乱码,《用 -PrintWriter --本地测试正常,发布到服务器就乱码》
BufferedReader in = null; //同样为设置编码,获取传回的JSON格式或是文件
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Accept-Charset", "UTF-8");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流 2
// out = new PrintWriter(conn.getOutputStream()); -----PrintWriter
out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(),"UTF-8"));
// 发送请求参数 3------PrintWriter
// out.print(param);
out.write(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;
}
}
TemplateData 文件
package com.association.domain;
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() {
}
}
SendTemplateMessage 文件
package com.association.domain;
import java.util.Map;
/**
* 发送模板消息
* @title:SendTemplateMessage
*
* @author juekf
* @data 2019年9月19日下午3:46:50
*/
public class SendTemplateMessage {
private String touser; //接收者(用户)的 openid
private String template_id; //所需下发的模板消息的id
private String page = "pages/start/start"; //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
private String form_id; //表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
private Map<String,TemplateData> data; //模板内容,不填则下发空模板
private String emphasis_keyword; //模板需要放大的关键词,不填则默认无放大
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 getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public String getForm_id() {
return form_id;
}
public void setForm_id(String form_id) {
this.form_id = form_id;
}
public Map<String, TemplateData> getData() {
return data;
}
public void setData(Map<String, TemplateData> data) {
this.data = data;
}
public String getEmphasis_keyword() {
return emphasis_keyword;
}
public void setEmphasis_keyword(String emphasis_keyword) {
this.emphasis_keyword = emphasis_keyword;
}
}
四、最后在 业务需要的地方:
/**
* 绑定成功 发送微信服务通知
*/
Map<String, TemplateData> map = new HashMap<>();
map.put("keyword1", new TemplateData(account.getLoginName()));
map.put("keyword2", new TemplateData(account.getLoginName()));
map.put("keyword3", new TemplateData("绑定成功"));
map.put("keyword5", new TemplateData("账号 :" + account.getLoginName() + " 与此微信号绑定成功!"));
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
map.put("keyword4", new TemplateData(dateString));
SendTemplateMessageController.sendTemplateMessage(openid, MyJwtConfigurer.geBinding_success(), "",
formId, map);
一张是之前的 乱码
修改后正常了
到此结束。