微信消息推送详解
微信模版消息推送详解
-
应用企业注册微信公众号并认证https://mp.weixin.qq.com
-
登录微信公众号获取appID和appsecret本次使用的测试帐号进行说明
-
扫码关注和新建消息模版拿到openid作为我们推送的对象
4、查看官方开发文档https://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=tmplmsg/faq_tmpl
-
开始撸代码
创建工具类
TestWechatMsg.java
package testWeb;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import testWeb.bean.WechatSendMsg;
import testWeb.bean.WechatSendMsgBody;
import testWeb.bean.WechatSendMsgData;
public class TestWechatMsg {
private static String TEST_APPID = "wxa1d64a418271a654";
private static String TEST_APPSECRET = "bd814671571d837e287ee10887a77fc1";
private static String WECHART_URL_TOKEN = "https://api.weixin.qq.com/cgi-bin/token";
private static String WECHART_URL_SEND_TEMPLATE_MSG = "https://api.weixin.qq.com/cgi-bin/message/template/send";
private static String OPEN_ID_1 = "oDfGiwEHCvsUQDl-nytTEzLVf9rA";
private static String TEMPLATE_ID = "N6rCGkAPQa6W_0l32lVBtLwhhXEDfmA5oDX6kPHU_bg";
private static String TOP_COLOR = "#FF0000";
private static String GO_URL = "http://weixin.qq.com/download";
public static void main(String[] args) {
String tokenStr = getAccessToken();
Map<String, String> dataMap = new HashMap<String, String>();
dataMap.put("barcode", "000000211");
dataMap.put("status", "已发车");
dataMap.put("payment", "500元");
dataMap.put("goodspaystatus", "已支付");
dataMap.put("postage", "50元");
dataMap.put("paystatus", "已支付");
String result = sendWechatTempMsg(tokenStr, OPEN_ID_1, GO_URL, dataMap);
System.out.println(result);
}
public static String doPostRequest(String urlStr, String data) {
StringBuffer answer = new StringBuffer();
// Build parameter string
try {
// Send the request
URL url = new URL(urlStr);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
// write parameters
writer.write(data);
writer.flush();
// Get the response
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
answer.append(line);
}
writer.close();
reader.close();
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
return answer.toString();
}
public static String doGetRequest(String urlStr, String data) {
String res = "";
// Build parameter string
try {
BufferedReader rd = null;
// Send the request
URL url = new URL(urlStr + "?" + data);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.connect();
rd = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
/*
* while (rd.read() != -1) { res = rd.readLine();
* //res=URLDecoder.decode(res,"UTF-8"); }
*/
String line;
while ((line = rd.readLine()) != null) {
res += line;
}
rd.close();
System.out.println(res);
return res;
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
return res;
}
public static String getAccessToken() {
String data = "grant_type=client_credential" + "&appid=" + TEST_APPID + "&secret=" + TEST_APPSECRET;
String res = doGetRequest(WECHART_URL_TOKEN, data);
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap = JSON.parseObject(res);
return (String) dataMap.get("access_token");
}
public static String sendWechatTempMsg(String accessToken, String openid, String url, Map<String, String> dataMap) {
String result = null;
String data = "access_token=" + accessToken;
String sendMsg = getSendMsg(openid, url, dataMap);
result = doPostRequest(WECHART_URL_SEND_TEMPLATE_MSG + "?" + data, sendMsg);
return result;
}
public static String getSendMsg(String openid, String url, Map<String, String> dataMap) {
WechatSendMsgBody msgBody = new WechatSendMsgBody();
msgBody.setTouser(openid);
msgBody.setTemplate_id(TEMPLATE_ID);
msgBody.setTopcolor(TOP_COLOR);
msgBody.setUrl(url);
WechatSendMsgData data = new WechatSendMsgData();
WechatSendMsg barcode = new WechatSendMsg();
barcode.setValue(dataMap.get("barcode"));
WechatSendMsg status = new WechatSendMsg();
status.setValue(dataMap.get("status"));
WechatSendMsg payment = new WechatSendMsg();
payment.setValue(dataMap.get("payment"));
WechatSendMsg goodspaystatus = new WechatSendMsg();
goodspaystatus.setValue(dataMap.get("goodspaystatus"));
WechatSendMsg postage = new WechatSendMsg();
postage.setValue(dataMap.get("postage"));
WechatSendMsg paystatus = new WechatSendMsg();
paystatus.setValue(dataMap.get("paystatus"));
data.setBarcode(barcode);
data.setGoodspaystatus(goodspaystatus);
data.setPayment(payment);
data.setPaystatus(paystatus);
data.setPostage(postage);
data.setStatus(status);
msgBody.setData(data);
return JSON.toJSONString(msgBody);
}
}
-
封装对象后转换成json传递给微信平台发信息
WechatSendMsgBody.java 消息体
package testWeb.bean;
import java.io.Serializable;
import java.util.List;
public class WechatSendMsgBody implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
//发送对象的
private String touser;
//消息模版id
private String template_id;
//消息链接url
private String url;
//标题颜色
private String topcolor;
//内容数据
private WechatSendMsgData 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 String getTopcolor() {
return topcolor;
}
public void setTopcolor(String topcolor) {
this.topcolor = topcolor;
}
public WechatSendMsgData getData() {
return data;
}
public void setData(WechatSendMsgData data) {
this.data = data;
}
}
WechatSendMsgData.java 消息数据
package testWeb.bean;
import java.io.Serializable;
public class WechatSendMsgData implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private WechatSendMsg barcode;
private WechatSendMsg status;
private WechatSendMsg payment;
private WechatSendMsg goodspaystatus;
private WechatSendMsg postage;
private WechatSendMsg paystatus;
public WechatSendMsg getBarcode() {
return barcode;
}
public void setBarcode(WechatSendMsg barcode) {
this.barcode = barcode;
}
public WechatSendMsg getStatus() {
return status;
}
public void setStatus(WechatSendMsg status) {
this.status = status;
}
public WechatSendMsg getPayment() {
return payment;
}
public void setPayment(WechatSendMsg payment) {
this.payment = payment;
}
public WechatSendMsg getGoodspaystatus() {
return goodspaystatus;
}
public void setGoodspaystatus(WechatSendMsg goodspaystatus) {
this.goodspaystatus = goodspaystatus;
}
public WechatSendMsg getPostage() {
return postage;
}
public void setPostage(WechatSendMsg postage) {
this.postage = postage;
}
public WechatSendMsg getPaystatus() {
return paystatus;
}
public void setPaystatus(WechatSendMsg paystatus) {
this.paystatus = paystatus;
}
}
WechatSendMsg.java 数据内容颜色
package testWeb.bean;
import java.io.Serializable;
public class WechatSendMsg implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String value;
private String color="#173177";
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;
}
}
总结微信消息推送主要还是通过微信api进行get或者Post请求进行消息好发送类似于短信发送
正式公众号openid获得方式请查看微信官方开发文档