Merge branch 'api' into order_reform
6 files added
4 files modified
New file |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | 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"); |
| | | |
| | | |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | 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"); |
| | | |
| | | |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | xcx_appid =wx3836ab3c1490ff29 |
| | | xcx_secret =39a3687ec5b2666ed68e7c8b83b26b47 |
| | | |
| | | #公众号 |
| | | gzh_appid=wx57e6335559bdbda6 |
| | | gzh_secret=ecb408af170e3890e6544290cad33760 |
| | | |
| | | |
| | | |
| | | #微信支付调试开关 |
| | | wx_pay_debug_onoff = false |
| | | |
| | |
| | | |
| | | |
| | | 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 |
| | |
| | | |
| | | |
| | | 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 |
| | |
| | | <el-button matrix:btn="serviceClub-paidan" type="text" size="small" v-if="scope.row.state=='预约成功待处理'" @click="giveServiceOrder(scope.$index, scope.row)">派单</el-button> |
| | | <el-button matrix:btn="serviceClub-edit" type="text" size="small" v-if="scope.row.state=='预约成功待处理'" @click="modifyServiceOrder(scope.$index, scope.row)">修改</el-button> |
| | | <el-button matrix:btn="serviceClub-peiliao" type="text" size="small" v-if="scope.row.state=='需配料'" @click="peiliao(scope.$index, scope.row)">配料</el-button> |
| | | <el-button matrix:btn="serviceClub-huakou" type="text" size="small" v-if="scope.row.state=='服务完成'" @click="openHKService(scope.$index, scope.row)">划扣</el-button> |
| | | <el-button matrix:btn="serviceClub-huakou" type="text" size="small" v-if="scope.row.state=='服务完成'" @click="hkService(scope.$index, scope.row)">划扣</el-button> |
| | | <el-button matrix:btn="serviceClub-edit" type="text" size="small" @click="modifyTime(scope.$index, scope.row)">修改时间</el-button> |
| | | <el-button matrix:btn="serviceClub-del" type="text" size="small" v-if="scope.row.state!='预约取消'" @click="cancelServiceOrder(scope.$index, scope.row)">取消</el-button> |
| | | </template> |
| | |
| | | })); |
| | | }, |
| | | // 划扣 |
| | | openHkService(index, row) { |
| | | hkService(index, row) { |
| | | openHkServcie(row.id); |
| | | }, |
| | | // 取消 |