Ver Fonte

回调发送消息

15376779826 há 1 semana atrás
pai
commit
324d78ae31

+ 26 - 7
fs-service/src/main/java/com/fs/company/util/WechatApi.java

@@ -21,6 +21,8 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
 @Slf4j
 @Component
 public class WechatApi {
@@ -30,6 +32,8 @@ public class WechatApi {
 
     @Value("${wx.mp.configs[0].secret}")
     private String secret;
+    @Autowired
+    private RedisCache redisCache;
 //    private String appId = "wx7670b3b1b1cfcd47";
 //    private String secret = "c6e5726c7039092a907c3242c8d3e406";
 
@@ -38,14 +42,28 @@ public class WechatApi {
 
     // 获取 access_token
     public String getAccessToken() {
-        if (accessToken == null || System.currentTimeMillis() > tokenExpireTime) {
-            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
-                    + appId + "&secret=" + secret;
-            RestTemplate restTemplate = new RestTemplate();
-            Map<String, Object> res = restTemplate.getForObject(url, Map.class);
-            accessToken = (String) res.get("access_token");
-            tokenExpireTime = System.currentTimeMillis() + 7000 * 1000; // 提前100秒刷新
+        Object cachedTokenObj = redisCache.getCacheObject("wxQrCodeToken:");
+        if (cachedTokenObj != null) {
+            return cachedTokenObj.toString();
+        }
+
+        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
+                + appId + "&secret=" + secret;
+        RestTemplate restTemplate = new RestTemplate();
+        Map<String, Object> res = restTemplate.getForObject(url, Map.class);
+
+        // 添加错误处理
+        if (res == null || !res.containsKey("access_token")) {
+            throw new RuntimeException("获取微信access_token失败");
         }
+        log.info("微信返回结果:{}" , res);
+        accessToken = (String) res.get("access_token");
+
+        // 使用微信返回的过期时间,并设置合理的缓存时间
+        Integer expiresIn = (Integer) res.get("expires_in");
+        long cacheTime = (expiresIn != null) ? expiresIn - 300 : 600; // 提前5分钟过期
+
+        redisCache.setCacheObject("wxQrCodeToken:", accessToken, 1200, TimeUnit.SECONDS);
         return accessToken;
     }
 
@@ -63,6 +81,7 @@ public class WechatApi {
 
         RestTemplate restTemplate = new RestTemplate();
         Map<String, Object> res = restTemplate.postForObject(url, body, Map.class);
+        log.info("微信返回结果:{}" , res);
         String ticket = (String) res.get("ticket");
         return "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + URLEncoder.encode(ticket, "UTF-8");
     }

+ 2 - 1
fs-user-app/src/main/java/com/fs/app/controller/WxUserController.java

@@ -101,6 +101,7 @@ public class WxUserController extends AppBaseController{
     @Transactional
     @UserOperationLog(operationType = FsUserOperationEnum.MINLOGIN)
     public R login( @RequestBody LoginParam param) {
+        logger.info("进入互医小程序授权登录, 入参: {}", param);
         if (StringUtils.isBlank(param.getCode())) {
             return R.error("code不存在");
         }
@@ -191,7 +192,7 @@ public class WxUserController extends AppBaseController{
             userService.handleFsUserWx(user,loginMaWxParam,session);
             return R.ok(map);
         } catch (WxErrorException e) {
-            //this.logger.error(e.getMessage(), e);
+            this.logger.error("小程序授权登录失败", e);
             return R.error("授权失败,"+e.getMessage());
         }
     }