Commit 92630eb6 authored by Administrator's avatar Administrator

小程序二维码token失效问题

parent f5cd3cad
...@@ -14,6 +14,7 @@ import org.springframework.http.ResponseEntity; ...@@ -14,6 +14,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
...@@ -56,25 +57,27 @@ public class ResourcesController { ...@@ -56,25 +57,27 @@ public class ResourcesController {
JSONObject obj = new JSONObject(); JSONObject obj = new JSONObject();
obj.put("scene", "raceId=" + cmptid); obj.put("scene", "raceId=" + cmptid);
String partnerId = cmptService.getPartnerId(cmptid); String partnerId = cmptService.getPartnerId(cmptid);
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=";
// 重新获取小程序access_token try {
String accessToken = getMicroAccessToken(partnerId); // 重新获取小程序access_token
String accessToken = getMicroAccessToken(partnerId);
// String accessToken = (String) valueOperations.get("micro_gk:access_token_" + partnerId); url += accessToken;
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken; ResponseEntity<org.springframework.core.io.Resource> resourceResponseEntity = restTemplate.postForEntity(url, obj.toString(), org.springframework.core.io.Resource.class);
ResponseEntity<org.springframework.core.io.Resource> resourceResponseEntity = restTemplate.postForEntity(url, obj.toString(), org.springframework.core.io.Resource.class); ServletOutputStream outputStream = response.getOutputStream();
org.springframework.core.io.Resource body = resourceResponseEntity.getBody();
ServletOutputStream outputStream = response.getOutputStream(); Cmpt cmpt = cmptService.queryCmptBycmptId(cmptid);
org.springframework.core.io.Resource body = resourceResponseEntity.getBody(); log.info("===== 获取小程序二维码/img/{cmptid}, accessToken:" + accessToken + ", cmptLogo:" + cmpt.getLogo());
Cmpt cmpt = cmptService.queryCmptBycmptId(cmptid); if (!StringUtils.isEmpty(cmpt.getLogo())) {
log.info("=====/img/{cmptid}, accessToken:" + accessToken + ", cmptLogo:" + cmpt.getLogo()); BufferedImage bg = ImageIO.read(resourceResponseEntity.getBody().getInputStream());
if (!StringUtils.isEmpty(cmpt.getLogo())) { BufferedImage qr = ImageIO.read(new URL(cmpt.getLogo()));
BufferedImage bg = ImageIO.read(resourceResponseEntity.getBody().getInputStream()); overlapImage(bg, qr, response);
BufferedImage qr = ImageIO.read(new URL(cmpt.getLogo())); } else {
overlapImage(bg, qr, response); writeBytes(body.getInputStream(), outputStream);
} else { }
writeBytes(body.getInputStream(), outputStream); } catch (Exception e) {
log.info("=====获取小程序二维码异常: "+e.getMessage());
resetMicroAccessToken(partnerId);
} }
} }
...@@ -87,24 +90,27 @@ public class ResourcesController { ...@@ -87,24 +90,27 @@ public class ResourcesController {
obj.put("width", "1280"); obj.put("width", "1280");
String partnerId = cmptService.getPartnerId(cmptid); String partnerId = cmptService.getPartnerId(cmptid);
// 重新获取小程序access_token try {
String accessToken = getMicroAccessToken(partnerId); // 重新获取小程序access_token
String accessToken = getMicroAccessToken(partnerId);
ResponseEntity<org.springframework.core.io.Resource> resourceResponseEntity = restTemplate.postForEntity( ResponseEntity<org.springframework.core.io.Resource> resourceResponseEntity = restTemplate.postForEntity(
"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken , obj.toString(), org.springframework.core.io.Resource.class); "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken , obj.toString(), org.springframework.core.io.Resource.class);
Cmpt cmpt = cmptService.queryCmptBycmptId(cmptid);
Cmpt cmpt = cmptService.queryCmptBycmptId(cmptid); log.info("===== 下载小程序二维码/download/{cmptid}, accessToken:" + accessToken + ", cmptLogo:" + cmpt.getLogo());
if(resourceResponseEntity.getBody().getInputStream() != null){ if(resourceResponseEntity.getBody().getInputStream() != null){
BufferedImage bg = ImageIO.read(resourceResponseEntity.getBody().getInputStream()); BufferedImage bg = ImageIO.read(resourceResponseEntity.getBody().getInputStream());
BufferedImage qr = ImageIO.read(new URL(cmpt.getLogo())); BufferedImage qr = ImageIO.read(new URL(cmpt.getLogo()));
overlapImageHD(bg, qr, response); overlapImageHD(bg, qr, response);
}else{ }else{
log.info("=====获取小程序码为空:"+resourceResponseEntity.getBody().toString()); log.info("=====获取小程序码为空:"+resourceResponseEntity.getBody().toString());
}
} catch (Exception e) {
log.info("=====下载小程序二维码异常: "+e.getMessage());
resetMicroAccessToken(partnerId);
} }
} }
public static String overlapImage(BufferedImage bg, BufferedImage qrCodeIps, HttpServletResponse response) { public static String overlapImage(BufferedImage bg, BufferedImage qrCodeIps, HttpServletResponse response)throws Exception {
try {
//设置图片大小 //设置图片大小
BufferedImage background = resizeImage(300, 300, bg); BufferedImage background = resizeImage(300, 300, bg);
BufferedImage qrCode = resizeImage(140, 140, qrCodeIps); BufferedImage qrCode = resizeImage(140, 140, qrCodeIps);
...@@ -116,28 +122,21 @@ public class ResourcesController { ...@@ -116,28 +122,21 @@ public class ResourcesController {
g.drawImage(qrCode, 80, 80, qrCode.getWidth(), qrCode.getHeight(), null); g.drawImage(qrCode, 80, 80, qrCode.getWidth(), qrCode.getHeight(), null);
g.dispose(); g.dispose();
ImageIO.write(background, "jpg", response.getOutputStream()); ImageIO.write(background, "jpg", response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
return null; return null;
} }
public static String overlapImageHD(BufferedImage bg, BufferedImage qrCodeIps, HttpServletResponse response) { public static String overlapImageHD(BufferedImage bg, BufferedImage qrCodeIps, HttpServletResponse response) throws Exception{
try { //设置图片大小
//设置图片大小 BufferedImage background = resizeImage(1200, 1200, bg);
BufferedImage background = resizeImage(1200, 1200, bg); BufferedImage qrCode = resizeImage(560, 560, qrCodeIps);
BufferedImage qrCode = resizeImage(560, 560, qrCodeIps);
qrCode = converToRadius(qrCode,560,560);
qrCode = converToRadius(qrCode,560,560); qrCode.createGraphics().setBackground(Color.WHITE);
qrCode.createGraphics().setBackground(Color.WHITE); Graphics2D g = background.createGraphics();
Graphics2D g = background.createGraphics(); //在背景图片上添加二维码图片
//在背景图片上添加二维码图片 g.drawImage(qrCode, 320, 320, qrCode.getWidth(), qrCode.getHeight(), null);
g.drawImage(qrCode, 320, 320, qrCode.getWidth(), qrCode.getHeight(), null); g.dispose();
g.dispose(); ImageIO.write(background, "jpg", response.getOutputStream());
ImageIO.write(background, "jpg", response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
return null; return null;
} }
...@@ -201,4 +200,18 @@ public class ResourcesController { ...@@ -201,4 +200,18 @@ public class ResourcesController {
return accessToken; return accessToken;
} }
private String resetMicroAccessToken(String partnerId){
String accessToken = "";
Partner partner = partnerService.getPartnerById(partnerId);
String aokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + partner.getAppId() + "&secret=" + partner.getAppSecret();
String json = HttpUtil.doGet(aokenUrl, null);
log.info("URL:" + aokenUrl + ", 重新获取小程序token返回结果:" + json);
Map<String, Object> resultMap = JsonUtil.fromJson(json, new TypeReference<Map<String, Object>>() {
});
accessToken = resultMap.get("access_token").toString();
String expiresIn = resultMap.get("expires_in").toString();
valueOperations.set("micro_gk:access_token_" + partnerId, accessToken, Long.parseLong(expiresIn), TimeUnit.SECONDS);
return accessToken;
}
} }
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