本篇文章为你整理了开发微信订阅消息推送(开发微信订阅消息推送怎么弄)的详细内容,包含有开发微信订阅消息推送怎么设置 开发微信订阅消息推送怎么弄 微信订阅号消息怎么开启推送 微信订阅号的推送 开发微信订阅消息推送,希望能帮助你了解 开发微信订阅消息推送。
9 //用于测试,后期可维护到数据库中,公众平台配置
10 public static String TEMPLATE_ID_ = "z8eVgH_fEY-s-IE57-jbB0uYySJMb2hysm1yR2zPH0w";
13 // 微信小程序获取tokenURL
14 public static String TOKEN_URL_ = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential appid="
15 + WxContanst.APPID + " secret=" + WxContanst.SECRET;
17 // 获取小程序openid的url
18 public static String URL(String js_code) {
19 return "https://api.weixin.qq.com/sns/jscode2session?appid=" + WxContanst.APPID + " secret=" + WxContanst.SECRET
20 + " js_code=" + js_code + " grant_type=authorization_code";
23 /**
24 * 获取消息订阅的Url
25 * @param accessToken接口认证
26 * @return 消息订阅的Url
27 */
28 public static String subscribeUrl(String accessToken){
29 return "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken ;
32 }
2,http请求工具HttpSendUtils.java:
1 package com.pgo.modules.inv.subscribe;
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.net.URI;
7 import java.util.ArrayList;
8 import java.util.Iterator;
9 import java.util.List;
10 import java.util.Map;
12 import org.apache.http.HttpEntity;
13 import org.apache.http.HttpResponse;
14 import org.apache.http.HttpStatus;
15 import org.apache.http.NameValuePair;
16 import org.apache.http.StatusLine;
17 import org.apache.http.client.HttpClient;
18 import org.apache.http.client.entity.UrlEncodedFormEntity;
19 import org.apache.http.client.methods.CloseableHttpResponse;
20 import org.apache.http.client.methods.HttpGet;
21 import org.apache.http.client.methods.HttpPost;
22 import org.apache.http.entity.StringEntity;
23 import org.apache.http.impl.client.CloseableHttpClient;
24 import org.apache.http.impl.client.DefaultHttpClient;
25 import org.apache.http.impl.client.HttpClients;
26 import org.apache.http.message.BasicNameValuePair;
27 import org.apache.http.protocol.HTTP;
28 import org.apache.http.util.EntityUtils;
29 import org.hibernate.internal.util.StringHelper;
30 import org.testng.log4testng.Logger;
32 @SuppressWarnings("deprecation")
33 public class HttpSendUtils {
34 private static Logger logger = Logger.getLogger(HttpSendUtils.class);
36 /**
37 * get请求
38 *
39 * @return
40 */
41 public static String doGet(String url) {
42 try {
43 HttpClient client = new DefaultHttpClient();
44 // 发送get请求
45 HttpGet request = new HttpGet(url);
46 HttpResponse response = client.execute(request);
48 /** 请求发送成功,并得到响应 **/
49 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
50 /** 读取服务器返回过来的json字符串数据 **/
51 String strResult = EntityUtils.toString(response.getEntity());
53 return strResult;
54 }
55 } catch (IOException e) {
56 e.printStackTrace();
57 }
59 return null;
60 }
62 /**
63 * post请求(用于key-value格式的参数)
64 *
65 * @param url
66 * @param params
67 * @return
68 */
69 public static String doPost(String url, Map params) {
71 BufferedReader in = null;
72 try {
73 // 定义HttpClient
74 HttpClient client = new DefaultHttpClient();
75 // 实例化HTTP方法
76 HttpPost request = new HttpPost();
77 request.setURI(new URI(url));
79 // 设置参数
80 List NameValuePair nvps = new ArrayList NameValuePair ();
81 for (Iterator iter = params.keySet().iterator(); iter.hasNext();) {
82 String name = (String) iter.next();
83 String value = String.valueOf(params.get(name));
84 nvps.add(new BasicNameValuePair(name, value));
86 // System.out.println(name +"-"+value);
87 }
88 request.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
90 HttpResponse response = client.execute(request);
91 int code = response.getStatusLine().getStatusCode();
92 if (code == 200) { // 请求成功
93 in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "utf-8"));
94 StringBuffer sb = new StringBuffer("");
95 String line = "";
96 String NL = System.getProperty("line.separator");
97 while ((line = in.readLine()) != null) {
98 sb.append(line + NL);
99 }
101 in.close();
103 return sb.toString();
104 } else { //
105 System.out.println("状态码:" + code);
106 return null;
107 }
108 } catch (Exception e) {
109 e.printStackTrace();
111 return null;
112 }
113 }
115 /**
116 * post请求(用于请求json格式的参数)
117 *
118 * @param url
119 * @param params
120 * @return
121 */
122 public static String doPost(String url, String params) throws Exception {
123 System.out.println("==============="+params+"=====================");
124 CloseableHttpClient httpclient = HttpClients.createDefault();
125 HttpPost httpPost = new HttpPost(url);// 创建httpPost
126 httpPost.setHeader("Accept", "application/json");
127 httpPost.setHeader("Content-Type", "application/json");
128 String charSet = "UTF-8";
129 if(StringHelper.isNotEmpty(params)){
130 StringEntity entity = new StringEntity(params, charSet);
131 httpPost.setEntity(entity);
132 }
133 CloseableHttpResponse response = null;
135 try {
137 response = httpclient.execute(httpPost);
138 StatusLine status = response.getStatusLine();
139 int state = status.getStatusCode();
140 if (state == HttpStatus.SC_OK) {
141 HttpEntity responseEntity = response.getEntity();
142 String jsonString = EntityUtils.toString(responseEntity);
143 return jsonString;
144 } else {
145 //logger.error("请求返回:" + state + "(" + url + ")");
146 }
147 } finally {
148 if (response != null) {
149 try {
150 response.close();
151 } catch (IOException e) {
152 e.printStackTrace();
153 }
154 }
155 try {
156 httpclient.close();
157 } catch (IOException e) {
158 e.printStackTrace();
159 }
160 }
161 return null;
162 }
163 }
3,微信操作工具类WxUtils.java:
1 package com.pgo.modules.inv.subscribe;
3 import java.util.Map;
5 import com.google.gson.Gson;
6 import com.pgo.modules.doradoframework.base.BaseBO;
8 public class WxUtils extends BaseBO {
9 /**
10 * 获取微信openId
11 *
12 * @param param
13 * @return
14 * @throws Exception
15 */
16 @SuppressWarnings("unchecked")
17 public static String getOpenIdByCode(String code, String param) throws Exception {
18 String openid = HttpSendUtils.doPost(WxContanst.URL(code), param);
19 Gson gson = new Gson();
20 Map String, Object res = gson.fromJson(openid, Map.class);
21 return (String) res.get("openid");
24 /**
25 * 获取微信access_token_
26 *
27 * @param param
28 * @return
29 * @throws Exception
30 */
31 @SuppressWarnings("unchecked")
32 public static String getAccessToken(String param) throws Exception {
33 String token = HttpSendUtils.doPost(WxContanst.TOKEN_URL_, param);
34 Gson gson = new Gson();
35 Map String, Object res = gson.fromJson(token, Map.class);
36 return (String) res.get("access_token");
39 // 通过关联的用户表查找openId
40 public static String getOpenIdByUserId(String userId) throws Exception {
41 // 此处为模拟测试,后期通过登录后保存的code直接使用
42 String code = "";
43 return WxUtils.getOpenIdByCode(code, null);
46 /**
47 * 获取订阅消息的Url
48 * @return url
49 * @throws Exception
50 */
51 public static String getSubUrl() throws Exception{
52 return WxContanst.subscribeUrl(WxUtils.getAccessToken(null));
54 /**
55 * 受框架影响openId可以直接从后台获取
56 * @param userId 用户的id
57 * @return openId
58 * @throws Exception
59 */
60 public static String getOpenIdDub1(String userId) throws Exception {
62 return null;
65 }
4,微信模板操作工具类WxSubscribeMessageUtils.java
1 package com.pgo.modules.inv.subscribe;
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map;
6 import java.util.Map.Entry;
8 import com.alibaba.fastjson.JSONObject;
9 import com.pgo.modules.common.du.domain.Tbdub1;
10 import com.pgo.modules.core.support.Result;
11 /**
12 * 通用订阅模板发送处理类
13 * @author baolu
15 */
16 public class WxSubscribeMessageUtils {
18 /**
19 * 消息模板通用设置
20 * @param parameter 模板参数
21 * @param template_id 模板ID
22 * @param userId 用户ID
23 * @param pageIndex 消息跳转的画面
24 * @return 发送结果
25 * @throws Exception
26 * 注:获取用户的openId可以灵活获取。
27 * 1,通过调用WxUtils.getOpenIdByUserId(userId),但是需要数据库存储openID和userId;
28 * 2,通过前端code调用getOpenIdByCode(code , paramer)获取openId
29 */
30 public static Result sendMessage(String toUserOpenId , Map String , Object parameter , String template_id , String userId , String pageIndex) throws Exception{
31 JSONObject templateData = new JSONObject();
32 //设置用户的openId,此处受到框架后台处理,可直接取openid,
33 //所以WxUtils.getOpenIdByUserId(null)暂时弃用
34 //WxUtils.getOpenIdByUserId(null);
35 //测试发送给管理员的消息
36 templateData.put("touser", toUserOpenId);
37 //设置订阅消息模板ID
38 templateData.put("template_id", template_id);
39 //设置点击消息跳转路径
40 templateData.put("page", pageIndex);
41 //设置消息内容
42 JSONObject data = new JSONObject();
43 for(Entry String, Object vo : parameter.entrySet()){
44 Map String , Object value = new HashMap String , Object ();
45 value.put("value", vo.getValue());
46 data.put(vo.getKey() , value);
48 templateData.put("data", data);
49 //发送订阅消息的请求
50 String resMessage = HttpSendUtils.doPost(WxUtils.getSubUrl() , templateData.toString());
51 Result res = new Result("1" , resMessage);
52 return res;
54 }
5,测试代码:
package com.pgo.modules.inv.subscribe;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.pgo.modules.core.support.Result;
* 订阅消息模板发送
* @author baolu
public class SubscribeMessage {
//测试消息发送是否成功
public static void main(String[] arg) throws Exception{
Map String , Object mp = new HashMap String , Object ();
mp.put("name1", "通知");
mp.put("date2", "2013-01-01");
mp.put("time3", "16:28:00");
Result sendMessage = WxSubscribeMessageUtils.sendMessage("oglgM5Pi2MF8KbC6_PhCtFw6o2HI" , mp, WxContanst.TEMPLATE_ID_, "admin", "pages/login/login");
System.out.println(sendMessage.getMessage());
}
注意:access_token_有时间限制和请求次数限制,可以存放在redis或者内存中,这里没有做处理,请参考微信小程序开发手册
以上就是开发微信订阅消息推送(开发微信订阅消息推送怎么弄)的详细内容,想要了解更多 开发微信订阅消息推送的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。