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