Commit 1bb33c09 authored by muhong's avatar muhong

修改 微信获取token

parent 95513f3e
...@@ -25,5 +25,10 @@ public interface CommConsts { ...@@ -25,5 +25,10 @@ public interface CommConsts {
/** /**
* 上传视频目录 * 上传视频目录
*/ */
public static final String UPLOAD_PRE_VEDIO_DIRECTORY = "quanku/vedio/"; public static final String UPLOAD_PRE_VIDEO_DIRECTORY = "quanku/video/";
/**
* 上传微信小程序码目录
*/
public static final String UPLOAD_PRE_WXACODE_DIRECTORY = "quanku/wxacode/";
} }
package com.wwdz.ch.core.storage; package com.wwdz.ch.core.storage;
import java.io.InputStream; import com.aliyun.oss.OSSClient;
import java.net.MalformedURLException; import com.aliyun.oss.model.ObjectMetadata;
import java.net.URL; import com.aliyun.oss.model.PutObjectRequest;
import java.nio.file.Path; import com.aliyun.oss.model.PutObjectResult;
import java.util.stream.Stream;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource; import org.springframework.core.io.UrlResource;
import com.aliyun.oss.OSSClient; import java.io.InputStream;
import com.aliyun.oss.model.ObjectMetadata; import java.net.MalformedURLException;
import com.aliyun.oss.model.PutObjectRequest; import java.net.URL;
import com.aliyun.oss.model.PutObjectResult; import java.nio.file.Path;
import java.util.stream.Stream;
public class AliyunStorage implements Storage { public class AliyunStorage implements Storage {
private static final Logger logger = LoggerFactory.getLogger(AliyunStorage.class); private static final Logger logger = LoggerFactory.getLogger(AliyunStorage.class);
...@@ -135,4 +134,9 @@ public class AliyunStorage implements Storage { ...@@ -135,4 +134,9 @@ public class AliyunStorage implements Storage {
public String generateUrl(String keyName) { public String generateUrl(String keyName) {
return getBaseUrl() + keyName; return getBaseUrl() + keyName;
} }
@Override
public Object checkFile(String keyName) {
return null;
}
} }
...@@ -101,4 +101,9 @@ public class LocalStorage implements Storage { ...@@ -101,4 +101,9 @@ public class LocalStorage implements Storage {
String url = address + keyName; String url = address + keyName;
return url; return url;
} }
@Override
public Object checkFile(String keyName) {
return null;
}
} }
\ No newline at end of file
package com.wwdz.ch.core.storage; package com.wwdz.ch.core.storage;
import java.awt.image.BufferedImage; import com.qiniu.common.QiniuException;
import java.io.ByteArrayInputStream; import com.qiniu.http.Response;
import java.io.InputStream; import com.qiniu.storage.BucketManager;
import java.net.MalformedURLException; import com.qiniu.storage.Configuration;
import java.net.URL; import com.qiniu.storage.UploadManager;
import java.nio.file.Path; import com.qiniu.storage.model.FileInfo;
import java.util.Base64; import com.qiniu.util.Auth;
import java.util.stream.Stream;
import com.wwdz.ch.core.consts.CommConsts; import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.MediaTypeEnum; import com.wwdz.ch.core.consts.MediaTypeEnum;
import com.wwdz.ch.core.util.MediaUtil; import com.wwdz.ch.core.util.MediaUtil;
...@@ -19,14 +17,15 @@ import org.apache.commons.logging.LogFactory; ...@@ -19,14 +17,15 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource; import org.springframework.core.io.UrlResource;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Path;
import java.util.Base64;
import java.util.stream.Stream;
public class QiniuStorage implements Storage { public class QiniuStorage implements Storage {
...@@ -201,6 +200,24 @@ public class QiniuStorage implements Storage { ...@@ -201,6 +200,24 @@ public class QiniuStorage implements Storage {
return endpoint + "/" + keyName; return endpoint + "/" + keyName;
} }
@Override
public Object checkFile(String keyName) {
if (bucketManager == null) {
if (auth == null) {
auth = Auth.create(accessKey, secretKey);
}
bucketManager = new BucketManager(auth, new Configuration());
}
FileInfo fileInfo = null;
try {
fileInfo = bucketManager.stat(bucketName, keyName);
} catch (Exception e) {
e.printStackTrace();
}
return fileInfo;
}
/** /**
* 原图片地址没尺寸信息的加上尺寸信息重新上传 * 原图片地址没尺寸信息的加上尺寸信息重新上传
......
...@@ -34,4 +34,12 @@ public interface Storage { ...@@ -34,4 +34,12 @@ public interface Storage {
void delete(String keyName); void delete(String keyName);
String generateUrl(String keyName); String generateUrl(String keyName);
/**
* 获取文件
*
* @param keyName
* @return
*/
Object checkFile(String keyName);
} }
\ No newline at end of file
package com.wwdz.ch.wx.impl; package com.wwdz.ch.wx.impl;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.qiniu.storage.model.FileInfo;
import com.wwdz.ch.core.consts.CommConsts; import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.CommonEnum; import com.wwdz.ch.core.consts.CommonEnum;
import com.wwdz.ch.core.consts.MediaTypeEnum; import com.wwdz.ch.core.consts.MediaTypeEnum;
...@@ -30,7 +31,10 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -30,7 +31,10 @@ import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.*; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.util.*; import java.util.*;
...@@ -407,36 +411,28 @@ public class ItemServiceImpl implements ItemService { ...@@ -407,36 +411,28 @@ public class ItemServiceImpl implements ItemService {
} }
@Override @Override
public void getWxacode(String page, String scene, HttpServletResponse response) { public Result getWxacode(String page, String scene, HttpServletResponse response) {
try { try {
InputStream inputStream = wxLoginService.getWxacodeStream(page, scene); // 判断是否存储过该请求路径的微信小程序码图片
if (Objects.isNull(inputStream)) { String keyName = CommConsts.UPLOAD_PRE_WXACODE_DIRECTORY + page + "/" + scene + "." + MediaTypeEnum.IMAGE_JPG.getExt();
response.setStatus(HttpServletResponse.SC_BAD_GATEWAY); FileInfo fileInfo = (FileInfo) qiniuStorage.checkFile(keyName);
return; if (Objects.isNull(fileInfo)) {
} InputStream inputStream = wxLoginService.getWxacodeStream(page, scene);
ByteArrayOutputStream outStream = new ByteArrayOutputStream(); if (Objects.isNull(inputStream)) {
//创建一个Buffer字符串 return Result.failed("获取微信小程序流失败");
byte[] buffer = new byte[4096]; }
//每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0; // 新生成微信小程序码并上传到七牛云
//使用一个输入流从buffer里把数据读取出来 qiniuStorage.store(inputStream, 1, MediaTypeEnum.IMAGE_JPG.getMime(), keyName);
while ((len = inputStream.read(buffer)) != -1) {
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outStream.write(buffer, 0, len);
} }
//关闭输入流
inputStream.close(); String urlOfSize = qiniuStorage.generateUrl(keyName);
//把outStream里的数据写入内存 Map<String, Object> map = new HashMap<>();
byte[] data = outStream.toByteArray(); map.put("url", urlOfSize);
OutputStream outputStream = response.getOutputStream();//输出数据 return Result.success(map);
//写入数据
outputStream.write(data);
outputStream.flush();
//关闭输出流
outStream.close();
} catch (Exception e) { } catch (Exception e) {
logger.error("获取小程序码失败", e); logger.error("获取微信小程序码失败", e);
response.setStatus(HttpServletResponse.SC_BAD_GATEWAY); return Result.failed("获取微信小程序码失败");
} }
} }
...@@ -445,14 +441,14 @@ public class ItemServiceImpl implements ItemService { ...@@ -445,14 +441,14 @@ public class ItemServiceImpl implements ItemService {
try { try {
String link = wxLoginService.getLink(pageUrl); String link = wxLoginService.getLink(pageUrl);
if (StringUtils.isBlank(link)) { if (StringUtils.isBlank(link)) {
return Result.failed("获取小程序链接失败"); return Result.failed("获取微信小程序链接失败");
} }
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("link", link); map.put("link", link);
return Result.success(map); return Result.success(map);
} catch (Exception e) { } catch (Exception e) {
logger.error("获取小程序链接失败", e); logger.error("获取微信小程序链接失败", e);
return Result.failed("获取小程序链接失败"); return Result.failed("获取微信小程序链接失败");
} }
} }
...@@ -486,7 +482,7 @@ public class ItemServiceImpl implements ItemService { ...@@ -486,7 +482,7 @@ public class ItemServiceImpl implements ItemService {
if (StringUtils.isNotBlank(file.getOriginalFilename())) { if (StringUtils.isNotBlank(file.getOriginalFilename())) {
lastKey = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); lastKey = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
} }
String keyName = CommConsts.UPLOAD_PRE_VEDIO_DIRECTORY + CommonUtils.getUUID() + lastKey; String keyName = CommConsts.UPLOAD_PRE_VIDEO_DIRECTORY + CommonUtils.getUUID() + lastKey;
qiniuStorage.store(inputStream, file.getSize(), file.getContentType(), keyName); qiniuStorage.store(inputStream, file.getSize(), file.getContentType(), keyName);
String urlOfSize = qiniuStorage.generateUrl(keyName); String urlOfSize = qiniuStorage.generateUrl(keyName);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
......
...@@ -6,7 +6,6 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; ...@@ -6,7 +6,6 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wwdz.ch.core.util.OkHttpUtil; import com.wwdz.ch.core.util.OkHttpUtil;
import com.wwdz.ch.wx.constant.CacheCodeConstants;
import com.wwdz.ch.wx.entity.request.UserRequestDto; import com.wwdz.ch.wx.entity.request.UserRequestDto;
import com.wwdz.ch.wx.service.WxLoginService; import com.wwdz.ch.wx.service.WxLoginService;
import com.wwdz.ch.wx.util.RedisUtil; import com.wwdz.ch.wx.util.RedisUtil;
...@@ -93,23 +92,32 @@ public class WxLoginServiceImpl implements WxLoginService { ...@@ -93,23 +92,32 @@ public class WxLoginServiceImpl implements WxLoginService {
public String getAccessToken() { public String getAccessToken() {
logger.info("开始获取access_token----------------"); logger.info("开始获取access_token----------------");
try { try {
if (redisUtil.hasKey(CacheCodeConstants.WX_ACCESS_TOKEN)) { // if (redisUtil.hasKey(CacheCodeConstants.WX_ACCESS_TOKEN)) {
logger.info("从redis获取access_token成功"); // logger.info("从redis获取access_token成功");
return redisUtil.get(CacheCodeConstants.WX_ACCESS_TOKEN).toString(); // return redisUtil.get(CacheCodeConstants.WX_ACCESS_TOKEN).toString();
} else { // } else {
String accessTokenUrl = String.format(GET_ACCESS_TOKEN_URL, appid, secret); // String accessTokenUrl = String.format(GET_ACCESS_TOKEN_URL, appid, secret);
String res = OkHttpUtil.builder().url(accessTokenUrl) // String res = OkHttpUtil.builder().url(accessTokenUrl)
.get().sync(); // .get().sync();
logger.info("获取access_token结果:" + res); // logger.info("获取access_token结果:" + res);
if (!res.contains("access_token")) { // if (!res.contains("access_token")) {
logger.error("获取accessToken出错,返回结果是:" + res); // logger.error("获取accessToken出错,返回结果是:" + res);
return null; // return null;
} // }
String accessToken = JsonUtils.getValueByPath(res, "access_token"); // String accessToken = JsonUtils.getValueByPath(res, "access_token");
String expiresIn = JsonUtils.getValueByPath(res, "expires_in"); // String expiresIn = JsonUtils.getValueByPath(res, "expires_in");
redisUtil.set(CacheCodeConstants.WX_ACCESS_TOKEN, accessToken, Long.parseLong(expiresIn)); // redisUtil.set(CacheCodeConstants.WX_ACCESS_TOKEN, accessToken, Long.parseLong(expiresIn));
return accessToken; // return accessToken;
// }
String accessTokenUrl = String.format(GET_ACCESS_TOKEN_URL, appid, secret);
String res = OkHttpUtil.builder().url(accessTokenUrl)
.get().sync();
logger.info("获取access_token结果:" + res);
if (!res.contains("access_token")) {
logger.error("获取accessToken出错,返回结果是:" + res);
return null;
} }
return JsonUtils.getValueByPath(res, "access_token");
} catch (Exception e) { } catch (Exception e) {
logger.error("获取access_token失败", e); logger.error("获取access_token失败", e);
return null; return null;
......
...@@ -22,7 +22,7 @@ public interface ItemService { ...@@ -22,7 +22,7 @@ public interface ItemService {
Result update(ItemRequestDto dto); Result update(ItemRequestDto dto);
void getWxacode(String page, String scene, HttpServletResponse response); Result getWxacode(String page, String scene, HttpServletResponse response);
Result getWxLink(String pageUrl); Result getWxLink(String pageUrl);
Result uploadImage(MultipartFile file); Result uploadImage(MultipartFile file);
......
...@@ -245,8 +245,8 @@ public class WxItemController { ...@@ -245,8 +245,8 @@ public class WxItemController {
@ApiOperation(value = "小程序码") @ApiOperation(value = "小程序码")
@GetMapping("/getWxacode") @GetMapping("/getWxacode")
public void getWxacode(String page, String scene, HttpServletResponse response) { public Result getWxacode(String page, String scene, HttpServletResponse response) {
itemService.getWxacode(page, scene, response); return itemService.getWxacode(page, scene, response);
} }
@ApiOperation(value = "小程序链接") @ApiOperation(value = "小程序链接")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment