Commit 0d1fda3844d0c87deb9baa0f1729bd7ab0b25d6e

Authored by 陈杰
1 parent d7dac5d8
Exists in master

微信分享

src/main/java/com/sincere/student/controller/CommonController.java
1 1 package com.sincere.student.controller;
2 2  
3   -import com.alibaba.fastjson.JSON;
  3 +import com.alibaba.fastjson.JSONObject;
  4 +import com.sincere.student.dto.BaseDto;
4 5 import com.sincere.student.dto.Province;
  6 +import com.sincere.student.dto.WxSign;
  7 +import com.sincere.student.model.AccessToken;
5 8 import com.sincere.student.model.Area;
  9 +import com.sincere.student.model.Token;
6 10 import com.sincere.student.service.CommonService;
  11 +import com.sincere.student.service.ParameterService;
7 12 import io.swagger.annotations.ApiOperation;
8 13 import org.springframework.beans.factory.annotation.Autowired;
9 14 import org.springframework.web.bind.annotation.RequestMapping;
10 15 import org.springframework.web.bind.annotation.RequestMethod;
11 16 import org.springframework.web.bind.annotation.RestController;
12 17  
13   -import java.util.ArrayList;
14   -import java.util.Arrays;
15   -import java.util.List;
  18 +import java.io.*;
  19 +import java.net.HttpURLConnection;
  20 +import java.net.MalformedURLException;
  21 +import java.net.URL;
  22 +import java.net.URLConnection;
  23 +import java.security.MessageDigest;
  24 +import java.security.NoSuchAlgorithmException;
  25 +import java.util.*;
16 26  
17 27 @RestController
18 28 @RequestMapping("/common")
... ... @@ -21,10 +31,65 @@ public class CommonController {
21 31 @Autowired
22 32 CommonService commonService ;
23 33  
  34 + @Autowired
  35 + ParameterService parameterService ;
  36 +
24 37 private static List<Area> list = new ArrayList<>();
25 38  
26 39 private static List<Province> provinces = new ArrayList<>();
27 40  
  41 + @RequestMapping(value = "GetWxSign",method = RequestMethod.GET)
  42 + @ApiOperation(value = "获取微信分享签名")
  43 + public BaseDto<WxSign> GetWxSign(String url){
  44 + try {
  45 + url = java.net.URLDecoder.decode(url, "UTF-8");
  46 + } catch (UnsupportedEncodingException e) {
  47 + e.printStackTrace();
  48 + }
  49 + url=url.replaceAll("\\+", "%2B");
  50 + BaseDto<WxSign> result=new BaseDto<>();
  51 +// String r=Get("http://114.55.30.100:1111/api/UserRegisterApp/GetWxShareSign","url="+url);
  52 +// JSONObject jsonObject= JSONObject.parseObject(r);
  53 +// String data = jsonObject.getString("result");
  54 +// WxSign wxSign=JSON.parseObject(data,new TypeReference<WxSign>(){});
  55 +// result.setData(wxSign);
  56 +
  57 + WxSign wxSign1=new WxSign();
  58 + wxSign1.setTimestamp(Long.toString(System.currentTimeMillis()));
  59 + wxSign1.setNoncestr(UUID.randomUUID().toString());
  60 + AccessToken accessToken=parameterService.getAccessToken();
  61 + Token token=new Token();
  62 + if(accessToken!=null) {
  63 + Calendar dateOne=Calendar.getInstance();
  64 + Calendar dateTwo=Calendar.getInstance();
  65 + dateOne.setTime(new Date());
  66 + dateTwo.setTime(accessToken.getCreateTime());
  67 + long timeOne=dateOne.getTimeInMillis();
  68 + long timeTwo=dateTwo.getTimeInMillis();
  69 + long minute=(timeOne-timeTwo)/(1000*60);
  70 +
  71 + if(minute<60) token.setAccess_token(accessToken.getAccessToken());
  72 + else{
  73 + token=getAccessToken("wx6078ff3f67524996","8a0465b8ad0f000f568f48853e2818c8");
  74 + accessToken.setAccessToken(token.getAccess_token());
  75 + parameterService.insertAccessToken(accessToken);
  76 + }
  77 + }
  78 + else {
  79 + token=getAccessToken("wx6078ff3f67524996","8a0465b8ad0f000f568f48853e2818c8");
  80 + accessToken=new AccessToken();
  81 + accessToken.setAccessToken(token.getAccess_token());
  82 + parameterService.insertAccessToken(accessToken);
  83 + }
  84 + String js=Get("https://api.weixin.qq.com/cgi-bin/ticket/getticket","type=jsapi&access_token="+token.getAccess_token());
  85 + JSONObject jsonObject= JSONObject.parseObject(js);
  86 + wxSign1.setJsapi_ticket(jsonObject.getString("ticket"));
  87 + String rawstring = "jsapi_ticket=" + wxSign1.getJsapi_ticket() + "&noncestr=" + wxSign1.getNoncestr() + "&timestamp=" + wxSign1.getTimestamp() + "&url=" + url + "";
  88 + wxSign1.setSignature(SHA1(rawstring));
  89 + result.setData(wxSign1);
  90 + return result;
  91 + }
  92 +
28 93 @ApiOperation("省份")
29 94 @RequestMapping(value = "getProvince",method = RequestMethod.GET)
30 95 public List<Area> getProvince(){
... ... @@ -115,4 +180,185 @@ public class CommonController {
115 180 List<String> list = Arrays.asList(array);
116 181 return list ;
117 182 }
  183 +
  184 + public String Get(String url, String param) {
  185 + String result = "";
  186 + BufferedReader in = null;
  187 + try {
  188 + String urlNameString = url + "?" + param;
  189 + URL realUrl = new URL(urlNameString);
  190 + // 打开和URL之间的连接
  191 + URLConnection connection = realUrl.openConnection();
  192 + // 设置通用的请求属性
  193 + connection.setRequestProperty("accept", "*/*");
  194 + connection.setRequestProperty("connection", "Keep-Alive");
  195 + connection.setRequestProperty("user-agent",
  196 + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  197 + // 建立实际的连接
  198 + connection.connect();
  199 + // 获取所有响应头字段
  200 + Map<String, List<String>> map = connection.getHeaderFields();
  201 + // 遍历所有的响应头字段
  202 + for (String key : map.keySet()) {
  203 + System.out.println(key + "--->" + map.get(key));
  204 + }
  205 + // 定义 BufferedReader输入流来读取URL的响应
  206 + in = new BufferedReader(new InputStreamReader(
  207 + connection.getInputStream(),"UTF-8"));
  208 + String line;
  209 + while ((line = in.readLine()) != null) {
  210 + result += line;
  211 + }
  212 + } catch (Exception e) {
  213 + System.out.println("发送GET请求出现异常!" + e);
  214 + e.printStackTrace();
  215 + }
  216 + // 使用finally块来关闭输入流
  217 + finally {
  218 + try {
  219 + if (in != null) {
  220 + in.close();
  221 + }
  222 + } catch (Exception e2) {
  223 + e2.printStackTrace();
  224 + }
  225 + }
  226 + return result;
  227 + }
  228 +
  229 + public String Post(String httpUrl, String param)
  230 + {
  231 + HttpURLConnection connection = null;
  232 + InputStream is = null;
  233 + OutputStream os = null;
  234 + BufferedReader br = null;
  235 + String result = null;
  236 + try {
  237 + URL url = new URL(httpUrl);
  238 + // 通过远程url连接对象打开连接
  239 + connection = (HttpURLConnection) url.openConnection();
  240 + // 设置连接请求方式
  241 + connection.setRequestMethod("POST");
  242 + // 设置连接主机服务器超时时间:15000毫秒
  243 + connection.setConnectTimeout(15000);
  244 + // 设置读取主机服务器返回数据超时时间:60000毫秒
  245 + connection.setReadTimeout(60000);
  246 +
  247 + // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
  248 + connection.setDoOutput(true);
  249 + // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
  250 + connection.setDoInput(true);
  251 + // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
  252 + connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  253 +
  254 + // 设置鉴权信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0
  255 + connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
  256 +
  257 + // 通过连接对象获取一个输出流
  258 + os = connection.getOutputStream();
  259 + // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
  260 + os.write(param.getBytes());
  261 + // 通过连接对象获取一个输入流,向远程读取
  262 + if (connection.getResponseCode() == 200) {
  263 +
  264 + is = connection.getInputStream();
  265 + // 对输入流对象进行包装:charset根据工作项目组的要求来设置
  266 + br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
  267 +
  268 + StringBuffer sbf = new StringBuffer();
  269 + String temp = null;
  270 + // 循环遍历一行一行读取数据
  271 + while ((temp = br.readLine()) != null) {
  272 + sbf.append(temp);
  273 + sbf.append("\r\n");
  274 + }
  275 + result = sbf.toString();
  276 + }
  277 + } catch (MalformedURLException e) {
  278 + e.printStackTrace();
  279 + } catch (IOException e) {
  280 + e.printStackTrace();
  281 + } finally {
  282 + // 关闭资源
  283 + if (null != br) {
  284 + try {
  285 + br.close();
  286 + } catch (IOException e) {
  287 + e.printStackTrace();
  288 + }
  289 + }
  290 + if (null != os) {
  291 + try {
  292 + os.close();
  293 + } catch (IOException e) {
  294 + e.printStackTrace();
  295 + }
  296 + }
  297 + if (null != is) {
  298 + try {
  299 + is.close();
  300 + } catch (IOException e) {
  301 + e.printStackTrace();
  302 + }
  303 + }
  304 + // 断开与远程地址url的连接
  305 + connection.disconnect();
  306 + }
  307 + return result;
  308 + }
  309 +
  310 + public Token getAccessToken(String appID, String appScret) {
  311 + Token token = new Token();
  312 + String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appID + "&secret="
  313 + + appScret;
  314 + try {
  315 + URL getUrl=new URL(url);
  316 + HttpURLConnection http=(HttpURLConnection)getUrl.openConnection();
  317 + http.setRequestMethod("GET");
  318 + http.setRequestProperty("Content-Type",
  319 + "application/x-www-form-urlencoded");
  320 + http.setDoOutput(true);
  321 + http.setDoInput(true);
  322 +
  323 +
  324 + http.connect();
  325 + InputStream is = http.getInputStream();
  326 + int size = is.available();
  327 + byte[] b = new byte[size];
  328 + is.read(b);
  329 +
  330 + String message = new String(b, "UTF-8");
  331 + JSONObject json = JSONObject.parseObject(message);
  332 + token.setAccess_token(json.getString("access_token"));
  333 + System.out.println(message);
  334 + } catch (MalformedURLException e) {
  335 + e.printStackTrace();
  336 + } catch (IOException e) {
  337 + e.printStackTrace();
  338 + }
  339 + return token;
  340 + }
  341 +
  342 + public static String SHA1(String str) {
  343 + try {
  344 + MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1"); //如果是SHA加密只需要将"SHA-1"改成"SHA"即可
  345 + digest.update(str.getBytes());
  346 + byte messageDigest[] = digest.digest();
  347 + // Create Hex String
  348 + StringBuffer hexStr = new StringBuffer();
  349 + // 字节数组转换为 十六进制 数
  350 + for (int i = 0; i < messageDigest.length; i++) {
  351 + String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
  352 + if (shaHex.length() < 2) {
  353 + hexStr.append(0);
  354 + }
  355 + hexStr.append(shaHex);
  356 + }
  357 + return hexStr.toString();
  358 +
  359 + } catch (NoSuchAlgorithmException e) {
  360 + e.printStackTrace();
  361 + }
  362 + return null;
  363 + }
118 364 }
... ...
src/main/java/com/sincere/student/dto/WxSign.java 0 → 100644
... ... @@ -0,0 +1,68 @@
  1 +package com.sincere.student.dto;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +
  5 +public class WxSign {
  6 + @ApiModelProperty(value = "时间戳")
  7 + private String timestamp;
  8 +
  9 + @ApiModelProperty(value = "随机码")
  10 + private String noncestr;
  11 +
  12 + @ApiModelProperty(value = "签名")
  13 + private String signature;
  14 +
  15 + private String jsapi_ticket;
  16 +
  17 + private String sign_before;
  18 +
  19 + private String basictoken;
  20 +
  21 + public String getTimestamp() {
  22 + return timestamp;
  23 + }
  24 +
  25 + public void setTimestamp(String timestamp) {
  26 + this.timestamp = timestamp;
  27 + }
  28 +
  29 + public String getNoncestr() {
  30 + return noncestr;
  31 + }
  32 +
  33 + public void setNoncestr(String noncestr) {
  34 + this.noncestr = noncestr;
  35 + }
  36 +
  37 + public String getSignature() {
  38 + return signature;
  39 + }
  40 +
  41 + public void setSignature(String signature) {
  42 + this.signature = signature;
  43 + }
  44 +
  45 + public String getJsapi_ticket() {
  46 + return jsapi_ticket;
  47 + }
  48 +
  49 + public void setJsapi_ticket(String jsapi_ticket) {
  50 + this.jsapi_ticket = jsapi_ticket;
  51 + }
  52 +
  53 + public String getSign_before() {
  54 + return sign_before;
  55 + }
  56 +
  57 + public void setSign_before(String sign_before) {
  58 + this.sign_before = sign_before;
  59 + }
  60 +
  61 + public String getBasictoken() {
  62 + return basictoken;
  63 + }
  64 +
  65 + public void setBasictoken(String basictoken) {
  66 + this.basictoken = basictoken;
  67 + }
  68 +}
... ...
src/main/java/com/sincere/student/mapper/ParameterMapper.java
1 1 package com.sincere.student.mapper;
2 2  
  3 +import com.sincere.student.model.AccessToken;
3 4 import com.sincere.student.model.Parameter;
4 5  
5 6 import java.util.List;
... ... @@ -11,4 +12,9 @@ public interface ParameterMapper {
11 12 int create(Parameter parameter);
12 13  
13 14 int update(Parameter parameter);
  15 +
  16 +
  17 + int insertAccessToken(AccessToken accessToken);
  18 +
  19 + AccessToken getAccessToken();
14 20 }
... ...
src/main/java/com/sincere/student/model/AccessToken.java 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +package com.sincere.student.model;
  2 +
  3 +import java.util.Date;
  4 +
  5 +public class AccessToken {
  6 + private Integer id;
  7 +
  8 + private String accessToken;
  9 +
  10 + private Date createTime;
  11 +
  12 + public Integer getId() {
  13 + return id;
  14 + }
  15 +
  16 + public void setId(Integer id) {
  17 + this.id = id;
  18 + }
  19 +
  20 + public String getAccessToken() {
  21 + return accessToken;
  22 + }
  23 +
  24 + public void setAccessToken(String accessToken) {
  25 + this.accessToken = accessToken;
  26 + }
  27 +
  28 + public Date getCreateTime() {
  29 + return createTime;
  30 + }
  31 +
  32 + public void setCreateTime(Date createTime) {
  33 + this.createTime = createTime;
  34 + }
  35 +}
... ...
src/main/java/com/sincere/student/model/Token.java 0 → 100644
... ... @@ -0,0 +1,53 @@
  1 +package com.sincere.student.model;
  2 +
  3 +public class Token {
  4 + public String access_token;
  5 +
  6 + public Integer expires_in;
  7 +
  8 + public String refresh_token;
  9 +
  10 + public String openid;
  11 +
  12 + public String scope;
  13 +
  14 + public String getAccess_token() {
  15 + return access_token;
  16 + }
  17 +
  18 + public void setAccess_token(String access_token) {
  19 + this.access_token = access_token;
  20 + }
  21 +
  22 + public Integer getExpires_in() {
  23 + return expires_in;
  24 + }
  25 +
  26 + public void setExpires_in(Integer expires_in) {
  27 + this.expires_in = expires_in;
  28 + }
  29 +
  30 + public String getRefresh_token() {
  31 + return refresh_token;
  32 + }
  33 +
  34 + public void setRefresh_token(String refresh_token) {
  35 + this.refresh_token = refresh_token;
  36 + }
  37 +
  38 + public String getOpenid() {
  39 + return openid;
  40 + }
  41 +
  42 + public void setOpenid(String openid) {
  43 + this.openid = openid;
  44 + }
  45 +
  46 + public String getScope() {
  47 + return scope;
  48 + }
  49 +
  50 + public void setScope(String scope) {
  51 + this.scope = scope;
  52 + }
  53 +}
... ...
src/main/java/com/sincere/student/service/ParameterService.java
1 1 package com.sincere.student.service;
2 2  
  3 +import com.sincere.student.model.AccessToken;
3 4 import com.sincere.student.model.Parameter;
4 5  
5 6 public interface ParameterService {
... ... @@ -9,4 +10,8 @@ public interface ParameterService {
9 10 int create(Parameter parameter);
10 11  
11 12 int update(Parameter parameter);
  13 +
  14 + int insertAccessToken(AccessToken accessToken);
  15 +
  16 + AccessToken getAccessToken();
12 17 }
... ...
src/main/java/com/sincere/student/service/impl/ParameterServiceImpl.java
1 1 package com.sincere.student.service.impl;
2 2  
3 3 import com.sincere.student.mapper.ParameterMapper;
  4 +import com.sincere.student.model.AccessToken;
4 5 import com.sincere.student.model.Parameter;
5 6 import com.sincere.student.service.ParameterService;
6 7 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -32,4 +33,11 @@ public class ParameterServiceImpl implements ParameterService {
32 33 public int update(Parameter parameter) {
33 34 return parameterMapper.update(parameter);
34 35 }
  36 +
  37 + @Override
  38 + public int insertAccessToken(AccessToken accessToken){return parameterMapper.insertAccessToken(accessToken);}
  39 +
  40 + @Override
  41 + public AccessToken getAccessToken(){return parameterMapper.getAccessToken();}
  42 +
35 43 }
... ...
src/main/resources/mapper/ParameterMapper.xml
... ... @@ -20,4 +20,19 @@
20 20 where code = #{code}
21 21 </update>
22 22  
  23 + <resultMap id="AccessTokenMap" type="com.sincere.student.model.AccessToken">
  24 + <id column="id" jdbcType="INTEGER" property="id" />
  25 + <result column="access_token" jdbcType="VARCHAR" property="accessToken" />
  26 + <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
  27 + </resultMap>
  28 +
  29 + <insert id="insertAccessToken" parameterType="com.sincere.student.model.AccessToken">
  30 + insert into access_token (access_token)
  31 + values (#{accessToken,jdbcType=VARCHAR}
  32 + )
  33 + </insert>
  34 +
  35 + <select id="getAccessToken" resultMap="AccessTokenMap">
  36 + select top 1.* from access_token order by create_time desc
  37 + </select>
23 38 </mapper>
... ...