提交 3fd0fbdd 编写于 作者: T Thinkingcao

更新sql

上级 79e4c735
/**
* Project Name:hotelfront
* File Name:HttpTools.java
* Package Name:com.iman.tool
* Date:2015年11月4日下午1:23:51
* Copyright (c) 1999 - 2015,iman, Inc or its affiliates. All Rights Reserved.
*/
package com.silence.common.utils;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.SocketTimeoutException;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
/**
* ClassName:HttpTools <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2015年11月4日 下午1:23:51 <br/>
*
* @author haoxi
*/
public class HttpTools {
private static final Logger LOGGER = LoggerFactory.getLogger(HttpTools.class);
public static String doPost(String url, String data) {
// 使用连接池创建连接
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(poolingHttpClientConnectionManager)
.build();
CloseableHttpResponse response = null;
try {
HttpPost post = new HttpPost(url);
// 设置请求和传输超时时间
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(10000).setConnectTimeout(10000)
.build();
post.setConfig(requestConfig);
ContentType contentType = ContentType.create(ContentType.APPLICATION_JSON.getMimeType(),
Charset.forName("UTF-8"));
post.setEntity(new StringEntity(data, contentType));
response = httpClient.execute(post, HttpClientContext.create());
int statusCode = response.getStatusLine().getStatusCode();
if (200 == statusCode) {
HttpEntity entity = response.getEntity();
String s = EntityUtils.toString(entity);
// 关闭httpEntity流
EntityUtils.consume(entity);
return s;
}
} catch (ConnectTimeoutException e) {
LOGGER.error("Connect Timeout.");
} catch (SocketTimeoutException e) {
LOGGER.error("Socket Timeout.");
} catch (Exception e) {
LOGGER.error("doPost Exception : ", e);
} finally {
if (null != response) {
try {
// 关闭response
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
/**
* @disc 对字符串重新编码
* @param src
* @return
*/
public static String isoToGB(String src) {
String strRet = null;
try {
strRet = new String(src.getBytes("ISO_8859_1"), "GB2312");
} catch (Exception e) {
}
return strRet;
}
/**
* @disc 对字符串重新编码
* @param src
* @return
*/
public static String isoToUTF(String src) {
String strRet = null;
try {
strRet = new String(src.getBytes("ISO_8859_1"), "UTF-8");
} catch (Exception e) {
}
return strRet;
}
/**
* 获取url无参数段
* @param url
* @return
*/
public static String getUrlBase(String url){
if(url.indexOf("?") != 0){
String[] arrSplit = null;
arrSplit = url.split("[?]");
return arrSplit[0];
}else{
return url;
}
}
public static String getUrlParam(String url){
if(url.indexOf("?") >= 0){
String[] arrSplit = null;
arrSplit = url.split("[?]");
return arrSplit[1];
}else{
return "";
}
}
/**
* 将url参数转换成map
*
* @param param
* aa=11&bb=22&cc=33
* @return
*/
public static Map<String, Object> getUrlParamMap(String param) {
Map<String, Object> map = new HashMap<String, Object>(0);
if (StringUtils.isBlank(param)) {
return map;
}
String[] params = param.split("&");
for (int i = 0; i < params.length; i++) {
String[] p = params[i].split("=");
if (p.length == 2) {
map.put(p[0], p[1]);
}
}
return map;
}
/**
* 将map转换成url
*
* @param map
* @return
*/
public static String getUrlParamsByMap(Map<String, Object> map) {
if (map == null) {
return "";
}
StringBuffer sb = new StringBuffer();
for (Map.Entry<String, Object> entry : map.entrySet()) {
sb.append(entry.getKey() + "=" + entry.getValue());
sb.append("&");
}
String s = sb.toString();
if (s.endsWith("&")) {
s= StringUtils.substringBeforeLast(s, "&");
}
return s;
}
public static void main(String[] args) {
/**
String tmp = "小许";
System.out.println("testing escape : " + tmp);
tmp = escape(tmp);
System.out.println(tmp);
System.out.println("testing unescape :" + tmp);
System.out.println(unescape("%u6211%u4eec"));
System.out.println(isoToUTF(tmp));
*/
String url = "https://www.baidu.com/s?abc=111";
String params = getUrlParam(url);
System.out.println( params);
System.out.println(getUrlBase(url));
Map<String, Object> map =getUrlParamMap(params);
map.put("haha", "test");
System.out.println(getUrlParamsByMap(map));
}
}
package com.silence.weixin.controller;
import com.silence.common.utils.HttpTools;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Map;
/**
* @author cao_wencao
* @ClassName: WxMpOAuthController
* @Description: 微信网页授权
* @date 2018年7月4日 下午1:27:58
*/
@RestController
@RequestMapping("/wechat/oauth")
@Slf4j
public class WxMpOAuthController {
@Autowired
private WxMpService wxMpService;
@GetMapping("/oauthInfo")
public void authorize(HttpServletRequest request, HttpServletResponse response) throws Exception {
String backUrl = request.getParameter("backUrl");
backUrl = URLEncoder.encode(backUrl, "UTF-8");
String host = request.getRequestURL().toString();
host = host.replaceAll("/oauthInfo", "/getInfo") + "?backUrl=" + backUrl;
// String redirect_uri = URLEncoder.encode(host, "UTF-8");
// 构建授权URL,方法内会自动encode
String redirectUri = wxMpService.oauth2buildAuthorizationUrl(host, WxConsts.OAuth2Scope.SNSAPI_USERINFO, "1");
log.info("redirectUri地址={}", redirectUri);// 日志
response.sendRedirect(redirectUri);
}
@GetMapping("/getInfo")
public void getInfo(HttpServletRequest request, HttpServletResponse response) throws Exception {
String backUrl = "";
String code = request.getParameter("code");
backUrl = request.getParameter("backUrl");
backUrl = URLDecoder.decode(backUrl, "UTF-8");
// 通过code换取access token
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = null;
String openId = null;
try {
wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
// 获取openId
openId = wxMpOAuth2AccessToken.getOpenId();
log.info("openId={}", openId);
//第二个参数为null时默认为zh_CN
WxMpUser wxMpUser = wxMpService.getUserService().userInfo(openId, null);
//TODO: 将微信粉丝信息wxMpUser保存到数据库
log.info("网页授权获取用户信息 :" + wxMpUser.toString());
Map<String, Object> params = HttpTools.getUrlParamMap(HttpTools.getUrlParam(backUrl));
// 重新组装参数
params.put("curoauth", openId);
String baseUrl = HttpTools.getUrlBase(backUrl);
backUrl = baseUrl + "?" + HttpTools.getUrlParamsByMap(params);
log.info("链接微信授权成功 结束======" + backUrl);
} catch (WxErrorException e) {
log.error("【微信网页授权】{}", e.getMessage());
throw new RuntimeException("网页授权失败!");
}
response.sendRedirect(backUrl);
}
}
package com.silence.weixin.controller;
import com.google.common.collect.Maps;
import com.silence.weixin.service.WXJSAPiService;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* <pre>
* @author cao_wencao
* @date 2018年8月13日 下午6:21:27
* </pre>
*/
@Controller
@RequestMapping("/wechat/jsApi")
@Slf4j
public class WxMpWeChatController{
@Autowired
private WxMpService wxMpService;
@Autowired
private WXJSAPiService wXJSAPiService;
/**
* 创建调用jsapi时所需要的签名 传入当前网页的URL,不包含#及其后面部分
*
* @author cao_wencao
* @param
* @return
* @throws WxErrorException
*/
@PostMapping("/getJsapiSignature")
public Object getJsapiSignature(HttpServletRequest request, HttpServletResponse response, Model model) throws WxErrorException {
String url = request.getRequestURL().toString();
log.info("【创建jsapi-URL】 : {}", url);
Map<String, String> paramMap = wXJSAPiService.getJSApiData(url);
return paramMap;
}
/**
* 获得jsapi_ticket,不强制刷新jsapi_ticket
*
* @author cao_wencao
* @param
* @return
*/
@GetMapping("/getJsapiTicket")
public @ResponseBody
Object getJsapiTicket() {
String jsapiTicket = null;
Map<String, String> paramMap = Maps.newHashMap();
try {
jsapiTicket = this.wxMpService.getJsapiTicket();
paramMap.put(jsapiTicket, jsapiTicket);
}
catch (WxErrorException e) {
log.error("获取[jsapi_ticket失败]: {}", e.getMessage());
}
return paramMap;
}
}
package com.silence.weixin.inter;
/**
* <pre>
* @Description:模板消息推送服务接口
* @Aouth: cao_wencao
* @Date: 2019-02-15 10:39
* </pre>
*/
public interface PushMessageService {
/**
* <pre>
* 订单结算通知
* @auther: cao_wencao
* @date: 2019/2/15 10:40
* </pre>
*/
public String orderPay(String openId, Object object);
}
package com.silence.weixin.service;
import com.google.common.collect.Maps;
import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @desc: 获取微信jsapi签名
* @auth: cao_wencao
* @date: 2019/10/28 17:18
*/
@Service
public class WXJSAPiService {
@Autowired
private WxMpService wxMpService;
public Map<String, String> getJSApiData(String url) throws WxErrorException {
Map<String, String> paramMap = Maps.newHashMap();
WxJsapiSignature createJsapiSignature = this.wxMpService.createJsapiSignature(url);
if (null != createJsapiSignature) {
paramMap.put("appId", createJsapiSignature.getAppId());
paramMap.put("nonceStr", createJsapiSignature.getNonceStr());
paramMap.put("timestamp", String.valueOf(createJsapiSignature.getTimestamp()));
paramMap.put("signature", createJsapiSignature.getSignature());
paramMap.put("url", createJsapiSignature.getUrl());
}
return paramMap;
}
}
package com.silence.weixin.utils;
import com.silence.weixin.inter.PushMessageService;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.template.WxMpTemplate;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
/**
* <pre>
* @Description: 微信模板消息推送实现
* @Aouth: cao_wencao
* @Date: 2019-01-24 14:07
* </pre>
*/
@Slf4j
@Component
public class WeChatTemplateMsgUtils implements PushMessageService {
@Autowired
private WxMpService wxMpService;
private static String wx_template_id = "消息推送模板ID可从配置参数读取";
//合作投稿审核通知,发送模板消息
@Override
public String orderPay(String openId, Object object) {
//实例化模板对象
WxMpTemplateMessage wxMpTemplateMessage = new WxMpTemplateMessage();
//设置模板ID
wxMpTemplateMessage.setTemplateId(wx_template_id);
//设置发送给哪个用户
wxMpTemplateMessage.setToUser(openId);
//构建消息格式
List<WxMpTemplateData> listData = Arrays.asList(
new WxMpTemplateData("first", "恭喜你支付成功!", "#173177"),
new WxMpTemplateData("keyword1", "曹.", "#173177"),
new WxMpTemplateData("keyword2", "2019698571200", "#173177"),
new WxMpTemplateData("keyword3", "¥98.80", "#173177"),
new WxMpTemplateData("keyword4", "星冰乐(焦糖味) 家乐氏香甜玉米片*2 乐天七彩爱情糖*3", "#173177"),
new WxMpTemplateData("remark", "如有疑问,请联系客服电话:021-54145323", "#173177")
);
//接收发送模板消息结果,就是msgid,if(msgid! = null)即成功
String wxTemplateResult = null;
//放进模板对象。准备发送
wxMpTemplateMessage.setData(listData);
try {
//发送模板
wxTemplateResult = wxMpService.getTemplateMsgService().sendTemplateMsg(wxMpTemplateMessage);
} catch (WxErrorException e) {
log.error("发送模板消息异常:{}", e.getMessage());
e.printStackTrace();
}
return wxTemplateResult;
}
/**
* <pre>
* 设置所属行业
* @auther: cao_wencao
* @date: 2019/2/18 15:17
* </pre>
*/
public boolean setIndustry(WxMpTemplateIndustry wxMpIndustry) throws WxErrorException {
Boolean flag = wxMpService.getTemplateMsgService().setIndustry(wxMpIndustry);
return flag;
}
/**
* <pre>
* 获取设置的行业信息
* @auther: cao_wencao
* @date: 2019/2/18 15:21
* </pre>
*/
public WxMpTemplateIndustry getIndustry() throws WxErrorException {
WxMpTemplateIndustry wxMpTemplateIndustry = wxMpService.getTemplateMsgService().getIndustry();
return wxMpTemplateIndustry;
}
/**
* <pre>
* 发送模板消息
* @auther: cao_wencao
* @date: 2019/2/18 15:25
* </pre>
*/
public String sendTemplateMsg(WxMpTemplateMessage templateMessage) throws WxErrorException {
String result = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
return result;
}
/**
* <pre>
* 获得模板ID
* shortTemplateId: 模板库中模板的编号,有“TM**”和“OPENTMTM**”等形式
* @auther: cao_wencao
* @date: 2019/2/18 15:29
* </pre>
*/
public String addTemplate(String shortTemplateId) throws WxErrorException {
String result = wxMpService.getTemplateMsgService().addTemplate(shortTemplateId);
return result;
}
/**
* <pre>
* 获得模板列表
* @auther: cao_wencao
* @date: 2019/2/18 15:30
* </pre>
*/
List<WxMpTemplate> getAllPrivateTemplate() throws WxErrorException {
List<WxMpTemplate> templateList = wxMpService.getTemplateMsgService().getAllPrivateTemplate();
return templateList;
}
/**
* <pre>
* 删除模板
* templateId: 公众帐号下模板消息ID
* @auther: cao_wencao
* @date: 2019/2/18 15:32
* </pre>
*/
boolean delPrivateTemplate(String templateId) throws WxErrorException {
Boolean flag = wxMpService.getTemplateMsgService().delPrivateTemplate(templateId);
return flag;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册