diff --git a/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/config/WeChatConfig.java b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/config/WeChatConfig.java index 69ac8777..d5030374 100644 --- a/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/config/WeChatConfig.java +++ b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/config/WeChatConfig.java @@ -76,6 +76,12 @@ public class WeChatConfig implements Serializable { */ private String OPEN_USER_INFO_URL ="https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN"; + + /** + * 小程序订阅服务 + */ + private String ORDER_URL ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; + // 设置@Value注解取值不到忽略(不报错) @Bean public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { diff --git a/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/controller/WXTokenController.java b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/controller/WXTokenController.java index 95a71bfc..7712776d 100644 --- a/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/controller/WXTokenController.java +++ b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/controller/WXTokenController.java @@ -1,19 +1,29 @@ package com.daqing.financial.hrauth.controller; - -import com.daqing.financial.hrauth.util.WXPublicUtils; +import com.alibaba.fastjson.JSON; +import com.daqing.financial.hrauth.config.WeChatConfig; +import com.daqing.financial.hrauth.util.*; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; @RestController @RequestMapping("/wxpublic") @Api(tags = "验证公众平台token") @Slf4j public class WXTokenController { + + @Autowired + private WeChatConfig weChatConfig; + @RequestMapping("/verify_wx_token") public String verifyWXToken(HttpServletRequest request) { String msgSignature = request.getParameter("signature"); @@ -26,6 +36,52 @@ public class WXTokenController { return null; } + @RequestMapping("/sendDingyue") + public void sendDingyue(String open_id,String time,String jieguo){ + System.out.println("来了订阅服务推送~~~~~~~~~~~~~~~~~~~~"); + Template template=new Template(); + template.setTemplate_id("Oj6kc3K8a1CWd-l4VaWsYM3R-Obr3UOX_M6AQxD7Hpc");//签名id + template.setTouser(open_id);//用户的 openid + List paras=new ArrayList(); + paras.add(new TemplateParam("thing1.DATA","模板内容")); + paras.add(new TemplateParam("thing2.DATA",time)); + paras.add(new TemplateParam("thing3.DATA",jieguo)); + paras.add(new TemplateParam("thing4.DATA","模板内容")); + template.setTemplateParamList(paras); + +/* String url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + + 小程序的appid + + "&secret=" + + 小程序的Secret*/ + + String url = String.format(weChatConfig.getORDER_URL(),weChatConfig.getXcxAppid(),weChatConfig.getXcxAppsecret()); + + System.out.println("消息订阅请求路径===="+url); + //获取access_token + Map baseMap = HttpUtils.doGet(url); + String accessToken = (String)baseMap.get("access_token"); + + String requestUrl="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN"; + requestUrl=requestUrl.replace("ACCESS_TOKEN", accessToken); + //requestUrl=requestUrl.replace("ACCESS_TOKEN", WxAppletUserInfo.getMPToken().getString("access_token")); + + System.out.println(template.toJSON()); + JSONObject jsonResult= CommonUtil.httpsRequest(requestUrl, "POST", template.toJSON()); + System.out.println("jsonResult===="+jsonResult); + if(jsonResult!=null){ + System.out.println(jsonResult); + int errorCode=jsonResult.getInt("errcode"); + String errorMessage=jsonResult.getString("errmsg"); + if(errorCode==0){ + System.out.println("Send Success"); + }else{ + System.out.println("服务通知发送失败:"+errorCode+","+errorMessage); + } + } + } + + + } diff --git a/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/CommonUtil.java b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/CommonUtil.java new file mode 100644 index 00000000..a81e6766 --- /dev/null +++ b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/CommonUtil.java @@ -0,0 +1,202 @@ +package com.daqing.financial.hrauth.util; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.ConnectException; +import java.net.HttpURLConnection; +import java.net.URL; + +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; + +import net.sf.json.JSONObject; + +public class CommonUtil { + + public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) { + + JSONObject jsonObject = null; + StringBuffer buffer = new StringBuffer(); + try { + // 创建SSLContext对象,并使用我们指定的信任管理器初始化 + TrustManager[] tm = { new MyX509TrustManager() }; + SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); + sslContext.init(null, tm, new java.security.SecureRandom()); + // 从上述SSLContext对象中得到SSLSocketFactory对象 + SSLSocketFactory ssf = sslContext.getSocketFactory(); + + URL url = new URL(requestUrl); + HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection(); + httpUrlConn.setSSLSocketFactory(ssf); + + 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(); + jsonObject = JSONObject.fromObject(buffer.toString()); + } catch (ConnectException ce) { + ce.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + return jsonObject; + } + + public static String 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(); + //jsonObject = JSONObject.fromObject(buffer.toString()); + } catch (ConnectException ce) { + ce.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + return buffer.toString(); + } + public static String urlEncodeUTF8(String source){ + String result = source; + try { + result = java.net.URLEncoder.encode(source,"utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return result; + } + + public static String httpsRequestForStr(String requestUrl, String requestMethod, String outputStr) { + + String result=""; + StringBuffer buffer = new StringBuffer(); + try { + // 创建SSLContext对象,并使用我们指定的信任管理器初始化 + TrustManager[] tm = { new MyX509TrustManager() }; + SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); + sslContext.init(null, tm, new java.security.SecureRandom()); + // 从上述SSLContext对象中得到SSLSocketFactory对象 + SSLSocketFactory ssf = sslContext.getSocketFactory(); + + URL url = new URL(requestUrl); + HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection(); + httpUrlConn.setSSLSocketFactory(ssf); + + 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(); + result=buffer.toString(); + } catch (ConnectException ce) { + ce.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + +} \ No newline at end of file diff --git a/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/HttpUtil.java b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/HttpUtil.java new file mode 100644 index 00000000..4a56115f --- /dev/null +++ b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/HttpUtil.java @@ -0,0 +1,108 @@ +package com.daqing.financial.hrauth.util; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.apache.http.Consts; +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +public class HttpUtil { + + private static final CloseableHttpClient httpclient = HttpClients.createDefault(); + + /** + * 发送HttpGet请求 + * @param url + * @return + */ + public static String sendGet(String url) { + + HttpGet httpget = new HttpGet(url); + CloseableHttpResponse response = null; + try { + response = httpclient.execute(httpget); + } catch (IOException e1) { + e1.printStackTrace(); + } + String result = null; + try { + HttpEntity entity = response.getEntity(); + if (entity != null) { + result = EntityUtils.toString(entity); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return result; + } + + /** + * 发送HttpPost请求,参数为map + * @param url + * @param map + * @return + */ + public static String sendPost(String url, Map map) { + List formparams = new ArrayList(); + for (Map.Entry entry : map.entrySet()) { + formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8); + HttpPost httppost = new HttpPost(url); + httppost.setEntity(entity); + CloseableHttpResponse response = null; + try { + response = httpclient.execute(httppost); + } catch (IOException e) { + e.printStackTrace(); + } + HttpEntity entity1 = response.getEntity(); + String result = null; + try { + result = EntityUtils.toString(entity1); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * 发送不带参数的HttpPost请求 + * @param url + * @return + */ + public static String sendPost(String url) { + HttpPost httppost = new HttpPost(url); + CloseableHttpResponse response = null; + try { + response = httpclient.execute(httppost); + } catch (IOException e) { + e.printStackTrace(); + } + HttpEntity entity = response.getEntity(); + String result = null; + try { + result = EntityUtils.toString(entity); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + +} \ No newline at end of file diff --git a/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/MyX509TrustManager.java b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/MyX509TrustManager.java new file mode 100644 index 00000000..1629ae38 --- /dev/null +++ b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/MyX509TrustManager.java @@ -0,0 +1,26 @@ +package com.daqing.financial.hrauth.util; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import javax.net.ssl.X509TrustManager; + +/** + * 信任管理器 + * + * @author liufeng + * @date 2013-04-10 + */ +public class MyX509TrustManager implements X509TrustManager { + + // 检查客户端证书 + public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { + } + + // 检查服务器端证书 + public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { + } + + // 返回受信任的X509证书数组 + public X509Certificate[] getAcceptedIssuers() { + return null; + } +} diff --git a/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/Template.java b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/Template.java new file mode 100644 index 00000000..4ec5e54a --- /dev/null +++ b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/Template.java @@ -0,0 +1,68 @@ +package com.daqing.financial.hrauth.util; + +import java.util.List; + +public class Template { + + private String touser; + private String template_id; + private String page; + private List templateParamList; + + + 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 toJSON() { + StringBuffer buffer = new StringBuffer(); + buffer.append("{"); + buffer.append(String.format("\"touser\":\"%s\"", this.touser)).append(","); + buffer.append(String.format("\"template_id\":\"%s\"", this.template_id)).append(","); + buffer.append(String.format("\"page\":\"%s\"", this.page)).append(","); + buffer.append("\"data\":{"); + TemplateParam param = null; + for (int i = 0; i < this.templateParamList.size(); i++) { + param = templateParamList.get(i); + // 判断是否追加逗号 + if (i < this.templateParamList.size() - 1){ + buffer.append(String.format("\"%s\": {\"value\":\"%s\"},", param.getKey(), param.getValue())); + }else{ + buffer.append(String.format("\"%s\": {\"value\":\"%s\"}", param.getKey(), param.getValue())); + } + } + buffer.append("}"); + buffer.append("}"); + return buffer.toString(); + } + + public List getTemplateParamList() { + return templateParamList; + } + + public void setTemplateParamList(List templateParamList) { + this.templateParamList = templateParamList; + } +} \ No newline at end of file diff --git a/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/TemplateParam.java b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/TemplateParam.java new file mode 100644 index 00000000..42e74e55 --- /dev/null +++ b/dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/util/TemplateParam.java @@ -0,0 +1,25 @@ +package com.daqing.financial.hrauth.util; + +public class TemplateParam { + + private String key; + private String value; + + public TemplateParam(String key,String value){ + this.key=key; + this.value=value; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } + public String getKey() { + return key; + } + public void setKey(String key) { + this.key = key; + } + +} \ No newline at end of file