From 0d1fda3844d0c87deb9baa0f1729bd7ab0b25d6e Mon Sep 17 00:00:00 2001 From: 陈杰 <504987307@qq.com> Date: Thu, 18 Jun 2020 10:50:31 +0800 Subject: [PATCH] 微信分享 --- src/main/java/com/sincere/student/controller/CommonController.java | 254 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- src/main/java/com/sincere/student/dto/WxSign.java | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/sincere/student/mapper/ParameterMapper.java | 6 ++++++ src/main/java/com/sincere/student/model/AccessToken.java | 35 +++++++++++++++++++++++++++++++++++ src/main/java/com/sincere/student/model/Token.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/sincere/student/service/ParameterService.java | 5 +++++ src/main/java/com/sincere/student/service/impl/ParameterServiceImpl.java | 8 ++++++++ src/main/resources/mapper/ParameterMapper.xml | 15 +++++++++++++++ 8 files changed, 440 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/sincere/student/dto/WxSign.java create mode 100644 src/main/java/com/sincere/student/model/AccessToken.java create mode 100644 src/main/java/com/sincere/student/model/Token.java diff --git a/src/main/java/com/sincere/student/controller/CommonController.java b/src/main/java/com/sincere/student/controller/CommonController.java index f0cc533..09a895d 100644 --- a/src/main/java/com/sincere/student/controller/CommonController.java +++ b/src/main/java/com/sincere/student/controller/CommonController.java @@ -1,18 +1,28 @@ package com.sincere.student.controller; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.sincere.student.dto.BaseDto; import com.sincere.student.dto.Province; +import com.sincere.student.dto.WxSign; +import com.sincere.student.model.AccessToken; import com.sincere.student.model.Area; +import com.sincere.student.model.Token; import com.sincere.student.service.CommonService; +import com.sincere.student.service.ParameterService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.*; @RestController @RequestMapping("/common") @@ -21,10 +31,65 @@ public class CommonController { @Autowired CommonService commonService ; + @Autowired + ParameterService parameterService ; + private static List list = new ArrayList<>(); private static List provinces = new ArrayList<>(); + @RequestMapping(value = "GetWxSign",method = RequestMethod.GET) + @ApiOperation(value = "获取微信分享签名") + public BaseDto GetWxSign(String url){ + try { + url = java.net.URLDecoder.decode(url, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + url=url.replaceAll("\\+", "%2B"); + BaseDto result=new BaseDto<>(); +// String r=Get("http://114.55.30.100:1111/api/UserRegisterApp/GetWxShareSign","url="+url); +// JSONObject jsonObject= JSONObject.parseObject(r); +// String data = jsonObject.getString("result"); +// WxSign wxSign=JSON.parseObject(data,new TypeReference(){}); +// result.setData(wxSign); + + WxSign wxSign1=new WxSign(); + wxSign1.setTimestamp(Long.toString(System.currentTimeMillis())); + wxSign1.setNoncestr(UUID.randomUUID().toString()); + AccessToken accessToken=parameterService.getAccessToken(); + Token token=new Token(); + if(accessToken!=null) { + Calendar dateOne=Calendar.getInstance(); + Calendar dateTwo=Calendar.getInstance(); + dateOne.setTime(new Date()); + dateTwo.setTime(accessToken.getCreateTime()); + long timeOne=dateOne.getTimeInMillis(); + long timeTwo=dateTwo.getTimeInMillis(); + long minute=(timeOne-timeTwo)/(1000*60); + + if(minute<60) token.setAccess_token(accessToken.getAccessToken()); + else{ + token=getAccessToken("wx6078ff3f67524996","8a0465b8ad0f000f568f48853e2818c8"); + accessToken.setAccessToken(token.getAccess_token()); + parameterService.insertAccessToken(accessToken); + } + } + else { + token=getAccessToken("wx6078ff3f67524996","8a0465b8ad0f000f568f48853e2818c8"); + accessToken=new AccessToken(); + accessToken.setAccessToken(token.getAccess_token()); + parameterService.insertAccessToken(accessToken); + } + String js=Get("https://api.weixin.qq.com/cgi-bin/ticket/getticket","type=jsapi&access_token="+token.getAccess_token()); + JSONObject jsonObject= JSONObject.parseObject(js); + wxSign1.setJsapi_ticket(jsonObject.getString("ticket")); + String rawstring = "jsapi_ticket=" + wxSign1.getJsapi_ticket() + "&noncestr=" + wxSign1.getNoncestr() + "×tamp=" + wxSign1.getTimestamp() + "&url=" + url + ""; + wxSign1.setSignature(SHA1(rawstring)); + result.setData(wxSign1); + return result; + } + @ApiOperation("省份") @RequestMapping(value = "getProvince",method = RequestMethod.GET) public List getProvince(){ @@ -115,4 +180,185 @@ public class CommonController { List list = Arrays.asList(array); return list ; } + + public String Get(String url, String param) { + String result = ""; + BufferedReader in = null; + try { + String urlNameString = url + "?" + param; + URL realUrl = new URL(urlNameString); + // 打开和URL之间的连接 + URLConnection connection = realUrl.openConnection(); + // 设置通用的请求属性 + connection.setRequestProperty("accept", "*/*"); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("user-agent", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 建立实际的连接 + connection.connect(); + // 获取所有响应头字段 + Map> map = connection.getHeaderFields(); + // 遍历所有的响应头字段 + for (String key : map.keySet()) { + System.out.println(key + "--->" + map.get(key)); + } + // 定义 BufferedReader输入流来读取URL的响应 + in = new BufferedReader(new InputStreamReader( + connection.getInputStream(),"UTF-8")); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + System.out.println("发送GET请求出现异常!" + e); + e.printStackTrace(); + } + // 使用finally块来关闭输入流 + finally { + try { + if (in != null) { + in.close(); + } + } catch (Exception e2) { + e2.printStackTrace(); + } + } + return result; + } + + public String Post(String httpUrl, String param) + { + HttpURLConnection connection = null; + InputStream is = null; + OutputStream os = null; + BufferedReader br = null; + String result = null; + try { + URL url = new URL(httpUrl); + // 通过远程url连接对象打开连接 + connection = (HttpURLConnection) url.openConnection(); + // 设置连接请求方式 + connection.setRequestMethod("POST"); + // 设置连接主机服务器超时时间:15000毫秒 + connection.setConnectTimeout(15000); + // 设置读取主机服务器返回数据超时时间:60000毫秒 + connection.setReadTimeout(60000); + + // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true + connection.setDoOutput(true); + // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无 + connection.setDoInput(true); + // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。 + connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + + // 设置鉴权信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0 + connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0"); + + // 通过连接对象获取一个输出流 + os = connection.getOutputStream(); + // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的 + os.write(param.getBytes()); + // 通过连接对象获取一个输入流,向远程读取 + if (connection.getResponseCode() == 200) { + + is = connection.getInputStream(); + // 对输入流对象进行包装:charset根据工作项目组的要求来设置 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + StringBuffer sbf = new StringBuffer(); + String temp = null; + // 循环遍历一行一行读取数据 + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != os) { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + // 断开与远程地址url的连接 + connection.disconnect(); + } + return result; + } + + public Token getAccessToken(String appID, String appScret) { + Token token = new Token(); + String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appID + "&secret=" + + appScret; + try { + URL getUrl=new URL(url); + HttpURLConnection http=(HttpURLConnection)getUrl.openConnection(); + http.setRequestMethod("GET"); + http.setRequestProperty("Content-Type", + "application/x-www-form-urlencoded"); + http.setDoOutput(true); + http.setDoInput(true); + + + http.connect(); + InputStream is = http.getInputStream(); + int size = is.available(); + byte[] b = new byte[size]; + is.read(b); + + String message = new String(b, "UTF-8"); + JSONObject json = JSONObject.parseObject(message); + token.setAccess_token(json.getString("access_token")); + System.out.println(message); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return token; + } + + public static String SHA1(String str) { + try { + MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1"); //如果是SHA加密只需要将"SHA-1"改成"SHA"即可 + digest.update(str.getBytes()); + byte messageDigest[] = digest.digest(); + // Create Hex String + StringBuffer hexStr = new StringBuffer(); + // 字节数组转换为 十六进制 数 + for (int i = 0; i < messageDigest.length; i++) { + String shaHex = Integer.toHexString(messageDigest[i] & 0xFF); + if (shaHex.length() < 2) { + hexStr.append(0); + } + hexStr.append(shaHex); + } + return hexStr.toString(); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return null; + } } diff --git a/src/main/java/com/sincere/student/dto/WxSign.java b/src/main/java/com/sincere/student/dto/WxSign.java new file mode 100644 index 0000000..fd68dc6 --- /dev/null +++ b/src/main/java/com/sincere/student/dto/WxSign.java @@ -0,0 +1,68 @@ +package com.sincere.student.dto; + +import io.swagger.annotations.ApiModelProperty; + +public class WxSign { + @ApiModelProperty(value = "时间戳") + private String timestamp; + + @ApiModelProperty(value = "随机码") + private String noncestr; + + @ApiModelProperty(value = "签名") + private String signature; + + private String jsapi_ticket; + + private String sign_before; + + private String basictoken; + + public String getTimestamp() { + return timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + + public String getNoncestr() { + return noncestr; + } + + public void setNoncestr(String noncestr) { + this.noncestr = noncestr; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + public String getJsapi_ticket() { + return jsapi_ticket; + } + + public void setJsapi_ticket(String jsapi_ticket) { + this.jsapi_ticket = jsapi_ticket; + } + + public String getSign_before() { + return sign_before; + } + + public void setSign_before(String sign_before) { + this.sign_before = sign_before; + } + + public String getBasictoken() { + return basictoken; + } + + public void setBasictoken(String basictoken) { + this.basictoken = basictoken; + } +} diff --git a/src/main/java/com/sincere/student/mapper/ParameterMapper.java b/src/main/java/com/sincere/student/mapper/ParameterMapper.java index 92d64d8..b8ecd9e 100644 --- a/src/main/java/com/sincere/student/mapper/ParameterMapper.java +++ b/src/main/java/com/sincere/student/mapper/ParameterMapper.java @@ -1,5 +1,6 @@ package com.sincere.student.mapper; +import com.sincere.student.model.AccessToken; import com.sincere.student.model.Parameter; import java.util.List; @@ -11,4 +12,9 @@ public interface ParameterMapper { int create(Parameter parameter); int update(Parameter parameter); + + + int insertAccessToken(AccessToken accessToken); + + AccessToken getAccessToken(); } diff --git a/src/main/java/com/sincere/student/model/AccessToken.java b/src/main/java/com/sincere/student/model/AccessToken.java new file mode 100644 index 0000000..ba037f8 --- /dev/null +++ b/src/main/java/com/sincere/student/model/AccessToken.java @@ -0,0 +1,35 @@ +package com.sincere.student.model; + +import java.util.Date; + +public class AccessToken { + private Integer id; + + private String accessToken; + + private Date createTime; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} diff --git a/src/main/java/com/sincere/student/model/Token.java b/src/main/java/com/sincere/student/model/Token.java new file mode 100644 index 0000000..cd18940 --- /dev/null +++ b/src/main/java/com/sincere/student/model/Token.java @@ -0,0 +1,53 @@ +package com.sincere.student.model; + +public class Token { + public String access_token; + + public Integer expires_in; + + public String refresh_token; + + public String openid; + + public String scope; + + public String getAccess_token() { + return access_token; + } + + public void setAccess_token(String access_token) { + this.access_token = access_token; + } + + public Integer getExpires_in() { + return expires_in; + } + + public void setExpires_in(Integer expires_in) { + this.expires_in = expires_in; + } + + public String getRefresh_token() { + return refresh_token; + } + + public void setRefresh_token(String refresh_token) { + this.refresh_token = refresh_token; + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public String getScope() { + return scope; + } + + public void setScope(String scope) { + this.scope = scope; + } +} diff --git a/src/main/java/com/sincere/student/service/ParameterService.java b/src/main/java/com/sincere/student/service/ParameterService.java index 8b90e62..996e2cd 100644 --- a/src/main/java/com/sincere/student/service/ParameterService.java +++ b/src/main/java/com/sincere/student/service/ParameterService.java @@ -1,5 +1,6 @@ package com.sincere.student.service; +import com.sincere.student.model.AccessToken; import com.sincere.student.model.Parameter; public interface ParameterService { @@ -9,4 +10,8 @@ public interface ParameterService { int create(Parameter parameter); int update(Parameter parameter); + + int insertAccessToken(AccessToken accessToken); + + AccessToken getAccessToken(); } diff --git a/src/main/java/com/sincere/student/service/impl/ParameterServiceImpl.java b/src/main/java/com/sincere/student/service/impl/ParameterServiceImpl.java index 3365d6c..9ddb12c 100644 --- a/src/main/java/com/sincere/student/service/impl/ParameterServiceImpl.java +++ b/src/main/java/com/sincere/student/service/impl/ParameterServiceImpl.java @@ -1,6 +1,7 @@ package com.sincere.student.service.impl; import com.sincere.student.mapper.ParameterMapper; +import com.sincere.student.model.AccessToken; import com.sincere.student.model.Parameter; import com.sincere.student.service.ParameterService; import org.springframework.beans.factory.annotation.Autowired; @@ -32,4 +33,11 @@ public class ParameterServiceImpl implements ParameterService { public int update(Parameter parameter) { return parameterMapper.update(parameter); } + + @Override + public int insertAccessToken(AccessToken accessToken){return parameterMapper.insertAccessToken(accessToken);} + + @Override + public AccessToken getAccessToken(){return parameterMapper.getAccessToken();} + } diff --git a/src/main/resources/mapper/ParameterMapper.xml b/src/main/resources/mapper/ParameterMapper.xml index cf0d594..b7568e7 100644 --- a/src/main/resources/mapper/ParameterMapper.xml +++ b/src/main/resources/mapper/ParameterMapper.xml @@ -20,4 +20,19 @@ where code = #{code} + + + + + + + + insert into access_token (access_token) + values (#{accessToken,jdbcType=VARCHAR} + ) + + + -- libgit2 0.21.0