Commit 1bb33c09 authored by muhong's avatar muhong

修改 微信获取token

parent 95513f3e
......@@ -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;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Path;
import java.util.stream.Stream;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Path;
import java.util.stream.Stream;
public class AliyunStorage implements Storage {
private static final Logger logger = LoggerFactory.getLogger(AliyunStorage.class);
......@@ -135,4 +134,9 @@ public class AliyunStorage implements Storage {
public String generateUrl(String keyName) {
return getBaseUrl() + keyName;
}
@Override
public Object checkFile(String keyName) {
return null;
}
}
......@@ -101,4 +101,9 @@ public class LocalStorage implements Storage {
String url = address + keyName;
return url;
}
@Override
public Object checkFile(String keyName) {
return null;
}
}
\ No newline at end of file
package com.wwdz.ch.core.storage;
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;
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.storage.model.FileInfo;
import com.qiniu.util.Auth;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.MediaTypeEnum;
import com.wwdz.ch.core.util.MediaUtil;
......@@ -19,14 +17,15 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.Resource;
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 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 {
......@@ -201,6 +200,24 @@ public class QiniuStorage implements Storage {
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 {
void delete(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;
import com.github.pagehelper.PageInfo;
import com.qiniu.storage.model.FileInfo;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.CommonEnum;
import com.wwdz.ch.core.consts.MediaTypeEnum;
......@@ -30,7 +31,10 @@ import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
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.util.*;
......@@ -407,36 +411,28 @@ public class ItemServiceImpl implements ItemService {
}
@Override
public void getWxacode(String page, String scene, HttpServletResponse response) {
public Result getWxacode(String page, String scene, HttpServletResponse response) {
try {
InputStream inputStream = wxLoginService.getWxacodeStream(page, scene);
if (Objects.isNull(inputStream)) {
response.setStatus(HttpServletResponse.SC_BAD_GATEWAY);
return;
}
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//创建一个Buffer字符串
byte[] buffer = new byte[4096];
//每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
//使用一个输入流从buffer里把数据读取出来
while ((len = inputStream.read(buffer)) != -1) {
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outStream.write(buffer, 0, len);
// 判断是否存储过该请求路径的微信小程序码图片
String keyName = CommConsts.UPLOAD_PRE_WXACODE_DIRECTORY + page + "/" + scene + "." + MediaTypeEnum.IMAGE_JPG.getExt();
FileInfo fileInfo = (FileInfo) qiniuStorage.checkFile(keyName);
if (Objects.isNull(fileInfo)) {
InputStream inputStream = wxLoginService.getWxacodeStream(page, scene);
if (Objects.isNull(inputStream)) {
return Result.failed("获取微信小程序流失败");
}
// 新生成微信小程序码并上传到七牛云
qiniuStorage.store(inputStream, 1, MediaTypeEnum.IMAGE_JPG.getMime(), keyName);
}
//关闭输入流
inputStream.close();
//把outStream里的数据写入内存
byte[] data = outStream.toByteArray();
OutputStream outputStream = response.getOutputStream();//输出数据
//写入数据
outputStream.write(data);
outputStream.flush();
//关闭输出流
outStream.close();
String urlOfSize = qiniuStorage.generateUrl(keyName);
Map<String, Object> map = new HashMap<>();
map.put("url", urlOfSize);
return Result.success(map);
} catch (Exception e) {
logger.error("获取小程序码失败", e);
response.setStatus(HttpServletResponse.SC_BAD_GATEWAY);
logger.error("获取微信小程序码失败", e);
return Result.failed("获取微信小程序码失败");
}
}
......@@ -445,14 +441,14 @@ public class ItemServiceImpl implements ItemService {
try {
String link = wxLoginService.getLink(pageUrl);
if (StringUtils.isBlank(link)) {
return Result.failed("获取小程序链接失败");
return Result.failed("获取微信小程序链接失败");
}
Map<String, Object> map = new HashMap<>();
map.put("link", link);
return Result.success(map);
} catch (Exception e) {
logger.error("获取小程序链接失败", e);
return Result.failed("获取小程序链接失败");
logger.error("获取微信小程序链接失败", e);
return Result.failed("获取微信小程序链接失败");
}
}
......@@ -486,7 +482,7 @@ public class ItemServiceImpl implements ItemService {
if (StringUtils.isNotBlank(file.getOriginalFilename())) {
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);
String urlOfSize = qiniuStorage.generateUrl(keyName);
Map<String, Object> map = new HashMap<>();
......
......@@ -6,7 +6,6 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import com.alibaba.fastjson.JSON;
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.service.WxLoginService;
import com.wwdz.ch.wx.util.RedisUtil;
......@@ -93,23 +92,32 @@ public class WxLoginServiceImpl implements WxLoginService {
public String getAccessToken() {
logger.info("开始获取access_token----------------");
try {
if (redisUtil.hasKey(CacheCodeConstants.WX_ACCESS_TOKEN)) {
logger.info("从redis获取access_token成功");
return redisUtil.get(CacheCodeConstants.WX_ACCESS_TOKEN).toString();
} else {
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;
}
String accessToken = JsonUtils.getValueByPath(res, "access_token");
String expiresIn = JsonUtils.getValueByPath(res, "expires_in");
redisUtil.set(CacheCodeConstants.WX_ACCESS_TOKEN, accessToken, Long.parseLong(expiresIn));
return accessToken;
// if (redisUtil.hasKey(CacheCodeConstants.WX_ACCESS_TOKEN)) {
// logger.info("从redis获取access_token成功");
// return redisUtil.get(CacheCodeConstants.WX_ACCESS_TOKEN).toString();
// } else {
// 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;
// }
// String accessToken = JsonUtils.getValueByPath(res, "access_token");
// String expiresIn = JsonUtils.getValueByPath(res, "expires_in");
// redisUtil.set(CacheCodeConstants.WX_ACCESS_TOKEN, accessToken, Long.parseLong(expiresIn));
// 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) {
logger.error("获取access_token失败", e);
return null;
......
......@@ -22,7 +22,7 @@ public interface ItemService {
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 uploadImage(MultipartFile file);
......
......@@ -245,8 +245,8 @@ public class WxItemController {
@ApiOperation(value = "小程序码")
@GetMapping("/getWxacode")
public void getWxacode(String page, String scene, HttpServletResponse response) {
itemService.getWxacode(page, scene, response);
public Result getWxacode(String page, String scene, HttpServletResponse response) {
return itemService.getWxacode(page, scene, response);
}
@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