zq-erp/src/main/java/com/matrix/component/tools/HttpClientUtil.java
New file @@ -0,0 +1,55 @@ package com.matrix.component.tools; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.matrix.core.exception.GlobleException; import com.matrix.core.tools.LogUtil; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import java.io.IOException; /** * POST 请求工具 */ public class HttpClientUtil { public static JSONObject sendPostWithJson(String url, String json) { CloseableHttpClient httpClient = HttpClients.createDefault(); ResponseHandler<String> responseHandler = new BasicResponseHandler(); try { //第一步:创建HttpClient对象 httpClient = HttpClients.createDefault(); //第二步:创建httpPost对象 HttpPost httpPost = new HttpPost(url); //第三步:给httpPost设置JSON格式的参数 StringEntity requestEntity = new StringEntity(json, "utf-8"); requestEntity.setContentEncoding("UTF-8"); httpPost.setHeader("Content-type", "application/json"); httpPost.setEntity(requestEntity); //第四步:发送HttpPost请求,获取返回值 String returnValue = httpClient.execute(httpPost, responseHandler); //调接口获取返回值时,必须用此方法 return JSON.parseObject(returnValue); } catch (Exception e) { e.printStackTrace(); } finally { try { httpClient.close(); } catch (IOException e) { LogUtil.error("http请求发送失败", e); throw new GlobleException(e.getMessage()); } } //第五步:处理返回值 return null; } } zq-erp/src/main/java/com/matrix/system/shopXcx/api/WeChatGzhApiTools.java
New file @@ -0,0 +1,134 @@ package com.matrix.system.shopXcx.api; import com.matrix.component.tools.HttpRequest; import com.matrix.component.tools.HttpResponse; import com.matrix.core.exception.GlobleException; import com.matrix.core.tools.LogUtil; import com.matrix.core.tools.PropertiesUtil; import com.matrix.core.tools.StringUtils; import net.sf.json.JSONObject; import java.io.IOException; /*** * 公众号api工具 */ public class WeChatGzhApiTools { /** * 公众号秘钥 */ private static final String GZH_SECRET = "gzh_secret"; /** * 公众号appid */ private static final String GZH_APPID = "gzh_appid"; /** * 微信登录url */ private static final String WECHAT_LOGIN_URL = "wechar_login_url"; /** * 上一次获取时间 */ private static Long preTime; /** * 当前有效的微信token */ private static String accessToken = ""; private static String appid = ""; private static String secret = ""; /** * 获取公众号APPId * @return */ public static String getAppid(){ if(StringUtils.isBlank(appid)){ appid = PropertiesUtil.getString(GZH_APPID); } return appid; } /** * 获取公众号秘钥 * @return */ public static String getSecret(){ if(StringUtils.isBlank(secret)){ secret = PropertiesUtil.getString(GZH_SECRET); } return secret; } /** * 清空token */ public static void cleanAccessToken() { preTime = null; accessToken = ""; } public static String getAccessToken(String gzhAppId, String gzhSecret) { if (isTokenInvalid()) { synchronized (accessToken) { if (isTokenInvalid()) { LogUtil.info("刷新微信accessToken"); HttpRequest reqObj = new HttpRequest(); HttpResponse result = null; try { result = reqObj .sendHttpGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + gzhAppId+ "&secret=" + gzhSecret, null); } catch (IOException e) { LogUtil.error("获取公众号accessToken失败"+e.getMessage(),e); throw new GlobleException(e.getMessage()); } JSONObject json = JSONObject.fromObject(result.getDataString()); if(json.has("errmsg")){ throw new GlobleException("获取返回刷新的accessToken失败"+json.toString()); }else{ String access_token = json.getString("access_token"); accessToken = access_token; preTime = System.currentTimeMillis(); LogUtil.info("返回刷新的accessToken={}", accessToken); return access_token; } } else { return accessToken; } } } else { LogUtil.info("返回现有accessToken={}", accessToken); return accessToken; } } /** * token是否无效 * TODO 由于现在有多个环境,为了防止冲突每次都获取新的token * @return */ private static boolean isTokenInvalid() { /** if (StringUtils.isNotBlank(accessToken) && preTime != null) { Long now = System.currentTimeMillis() / 1000; Long pre = preTime / 1000; boolean invalid = (now - pre) > 6200; return invalid; } else { return true; }*/ return true; } } zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/GzhTemplateMessagePojo.java
New file @@ -0,0 +1,134 @@ package com.matrix.system.wechart.templateMsg; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.utils.HttpsUtils; import org.apache.commons.collections.map.HashedMap; import java.util.Map; /** * 公众号模板消息对象 */ public class GzhTemplateMessagePojo { private String appid; private String touser; private String template_id; private String url; private Miniprogram miniprogram; public static class Miniprogram{ private String appid; private String pagepath; public Miniprogram(String appid, String pagepath) { this.appid = appid; this.pagepath = 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; } } public Map<String ,Item> data=new HashedMap(); public static class Item{ private String value; private String color; public Item(String value, String color) { this.value = value; this.color = 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; } } public String getAppid() { return appid; } public void setAppid(String appid) { this.appid = appid; } public void setMiniprogram(String appid, String url){ this.setMiniprogram(new Miniprogram(appid,url)); } public void setFirst(String value, String color){ this.data.put("first",new Item(value,color)); } public void setKeyWord(String value, String color){ this.data.put("keyword"+(this.data.size()),new Item(value,color)); } public void setRemark(String value, String color){ this.data.put("remark",new Item(value,color)); } public Miniprogram getMiniprogram() { return miniprogram; } public void setMiniprogram(Miniprogram miniprogram) { this.miniprogram = miniprogram; } public Map<String, Item> getData() { return data; } public void setData(Map<String, Item> data) { this.data = 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; } } zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/MsgDemo.java
New file @@ -0,0 +1,77 @@ package com.matrix.system.wechart.templateMsg; import com.alibaba.fastjson.JSONObject; import com.matrix.component.tools.HttpClientUtil; import com.matrix.core.pojo.AjaxResult; import com.matrix.system.hive.plugin.util.HttpUtils; import com.matrix.system.shopXcx.api.WeChatGzhApiTools; import com.matrix.system.shopXcx.bean.ShopAdvertisType; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.swing.text.html.HTML; import java.io.IOException; @Controller @RequestMapping(value = "test") public class MsgDemo { @Value("${gzh_appid}") String gzhAppId; @Value("${gzh_secret}") String gzhSecret; @RequestMapping("/template") @ResponseBody public AjaxResult template() { GzhTemplateMessagePojo messagePojo=new GzhTemplateMessagePojo(); messagePojo.setTouser("o8EB656NQYwhUuKPMhVVwP_wtLJI"); messagePojo.setTemplate_id("Mqu9xPYj_JFhXNj7nLJS7LESQUy6Z7FoCOmVO66Oxe8"); //messagePojo.setUrl("www.baidu.com"); // messagePojo.setMiniprogram(gzhAppId,"/123/234123412"); messagePojo.setFirst("尊敬的谭娅:","#453454"); messagePojo.setKeyWord("活细胞肩部护理","#453454"); messagePojo.setKeyWord("2014年7月21日 18:36","#453454"); messagePojo.setRemark("您的护理课程剩余3次。","#453454"); String ACCESS_TOKEN=WeChatGzhApiTools.getAccessToken(gzhAppId,gzhSecret); String url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+ACCESS_TOKEN; System.out.println(JSONObject.toJSON(messagePojo).toString()); JSONObject result= HttpClientUtil.sendPostWithJson(url,JSONObject.toJSON(messagePojo).toString()); System.out.println(result.toString()); return AjaxResult.buildSuccessInstance("1"); } @RequestMapping("/getUserList") @ResponseBody public AjaxResult getUserList() { String ACCESS_TOKEN=WeChatGzhApiTools.getAccessToken(gzhAppId,gzhSecret); String url="https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID".replaceAll("ACCESS_TOKEN",ACCESS_TOKEN); String result= HttpUtils.sendGet(url,""); System.out.println(result.toString()); return AjaxResult.buildSuccessInstance("1"); } } zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/MsgDemo2.java
New file @@ -0,0 +1,69 @@ package com.matrix.system.wechart.templateMsg; import com.alibaba.fastjson.JSONObject; import com.matrix.component.tools.HttpClientUtil; import com.matrix.core.pojo.AjaxResult; import com.matrix.system.hive.plugin.util.HttpUtils; import com.matrix.system.shopXcx.api.WeChatGzhApiTools; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping(value = "test2") public class MsgDemo2 { String xcxAppId="wx5cc58f796224af61"; String xcxSecret="facea088aae414e5c2ee86b459887721"; @RequestMapping("/template") @ResponseBody public AjaxResult template() { UniformMsgPojo uniformMsgPojo=new UniformMsgPojo(); GzhTemplateMessagePojo messagePojo=new GzhTemplateMessagePojo(); uniformMsgPojo.setTouser("oJkRK4yelehsY4S7I6Ee1ydWtQMI"); messagePojo.setTemplate_id("Mqu9xPYj_JFhXNj7nLJS7LESQUy6Z7FoCOmVO66Oxe8"); //messagePojo.setUrl("www.baidu.com"); // messagePojo.setMiniprogram(gzhAppId,"/123/234123412"); messagePojo.setAppid("wx57e6335559bdbda6"); messagePojo.setFirst("尊敬的谭娅:","#453454"); messagePojo.setKeyWord("活细胞肩部护理","#453454"); messagePojo.setKeyWord("2014年7月21日 18:36","#453454"); messagePojo.setRemark("您的护理课程剩余3次。","#453454"); String ACCESS_TOKEN=WeChatGzhApiTools.getAccessToken(xcxAppId,xcxSecret); String url="https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN".replaceAll("ACCESS_TOKEN",ACCESS_TOKEN); uniformMsgPojo.setMp_template_msg(messagePojo); System.out.println(JSONObject.toJSON(uniformMsgPojo).toString()); JSONObject result= HttpClientUtil.sendPostWithJson(url,JSONObject.toJSON(uniformMsgPojo).toString()); System.out.println(result.toString()); return AjaxResult.buildSuccessInstance("1"); } @RequestMapping("/getUserList") @ResponseBody public AjaxResult getUserList() { String ACCESS_TOKEN=WeChatGzhApiTools.getAccessToken(xcxAppId,xcxSecret); String url="https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID".replaceAll("ACCESS_TOKEN",ACCESS_TOKEN); String result= HttpUtils.sendGet(url,""); System.out.println(result.toString()); return AjaxResult.buildSuccessInstance("1"); } } zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/UniformMsgPojo.java
New file @@ -0,0 +1,32 @@ package com.matrix.system.wechart.templateMsg; public class UniformMsgPojo { private String touser; private GzhTemplateMessagePojo mp_template_msg; private String weapp_template_msg; public String getTouser() { return touser; } public void setTouser(String touser) { this.touser = touser; } public GzhTemplateMessagePojo getMp_template_msg() { return mp_template_msg; } public void setMp_template_msg(GzhTemplateMessagePojo mp_template_msg) { this.mp_template_msg = mp_template_msg; } public String getWeapp_template_msg() { return weapp_template_msg; } public void setWeapp_template_msg(String weapp_template_msg) { this.weapp_template_msg = weapp_template_msg; } } zq-erp/src/main/resources/config/dev/system.properties
@@ -58,6 +58,12 @@ xcx_appid =wx3836ab3c1490ff29 xcx_secret =39a3687ec5b2666ed68e7c8b83b26b47 #公众号 gzh_appid=wx57e6335559bdbda6 gzh_secret=ecb408af170e3890e6544290cad33760 #微信支付调试开关 wx_pay_debug_onoff = false zq-erp/src/main/resources/config/system.properties
@@ -48,8 +48,14 @@ wechar_login_url =https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code xcx_appid =wx3836ab3c1490ff29 xcx_secret =39a3687ec5b2666ed68e7c8b83b26b47 xcx_appid =wx5cc58f796224af61 xcx_secret =facea088aae414e5c2ee86b459887721 #公众号 gzh_appid=wx57e6335559bdbda6 gzh_secret=ecb408af170e3890e6544290cad33760 #微信支付调试开关 wx_pay_debug_onoff = false zq-erp/src/main/resources/config/test/system.properties
@@ -46,8 +46,10 @@ wechar_login_url =https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code xcx_appid =wx3836ab3c1490ff29 xcx_secret =39a3687ec5b2666ed68e7c8b83b26b47 xcx_appid =wx5cc58f796224af61 xcx_secret =facea088aae414e5c2ee86b459887721 gzh_appid=wx57e6335559bdbda6 gzh_secret=ecb408af170e3890e6544290cad33760 #微信支付调试开关 wx_pay_debug_onoff = false