Ver Fonte

fix 微信登录

he2802 há 3 anos atrás
pai
commit
25274f8feb

+ 4 - 4
zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxLoginController.java

@@ -82,7 +82,7 @@ public class WxLoginController
 
     @ApiOperation("小程序校验PC登录二维码")
     @PostMapping("/scan_login_check")
-    public AjaxResult scanLoginCheck(@RequestParam("scanCode") String scanCode)
+    public AjaxResult scanLoginCheck(@RequestBody String scanCode)
     {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         String key = "SCAN_LOGIN_"+scanCode;
@@ -99,13 +99,13 @@ public class WxLoginController
     @GetMapping("/pc_login_url")
     public AjaxResult pcLoginUrl()
     {
-        String url = wxLoginService.pcLoginUrl();
-        return AjaxResult.success(url);
+        Map<String,Object> map = wxLoginService.pcLoginUrl();
+        return AjaxResult.success(map);
     }
 
     @ApiOperation("PC检查小程序是否扫码登录")
     @GetMapping("/check_pc_login")
-    public AjaxResult checkPcLogin(@RequestParam("scanCode") String scanCode)
+    public AjaxResult checkPcLogin(String scanCode)
     {
         Map<String,Object> map = wxLoginService.checkPcLogin(scanCode);
         return AjaxResult.success(map);

+ 1 - 1
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java

@@ -110,7 +110,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 过滤请求
                 .authorizeRequests()
                 // 对于登录login 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/captchaImage", "/testLogin","/wx/pay/callback","/gzh_login").anonymous()
+                .antMatchers("/login", "/captchaImage", "/testLogin","/wx/pay/callback","/gzh_login","/check_pc_login","/pc_login_url").anonymous()
                 .antMatchers("/aliyun/oss/callback").anonymous()
                 .antMatchers(
                         HttpMethod.GET,

+ 27 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -6,6 +6,11 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.WriterException;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
@@ -33,6 +38,8 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -103,11 +110,29 @@ public class WxLoginService
         return map;
     }
 
-    public String pcLoginUrl() {
+    public Map<String,Object> pcLoginUrl(){
         String scanCode = ToolsUtils.getCharAndNumr(6);
         String key = "SCAN_LOGIN_"+scanCode;
+        String code_url = scanLoginHost+"pc/login/"+scanCode;
+        String urlBase64 = null;
+        try {
+            QRCodeWriter qrCodeWriter = new QRCodeWriter();
+            BitMatrix bitMatrix = qrCodeWriter.encode(code_url, BarcodeFormat.QR_CODE, 120, 120);
+            // 写到输出流
+            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+            MatrixToImageWriter.writeToStream(bitMatrix, "jpg", outputStream);
+            //转换为base64
+            java.util.Base64.Encoder encoder1 = java.util.Base64.getEncoder();
+            urlBase64 = "data:image/jpeg;base64,"
+                    + encoder1.encodeToString(outputStream.toByteArray());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         redisCache.setCacheObject(key, -1,30, TimeUnit.SECONDS);//30秒锁定
-        return  scanLoginHost+"pc/login/"+scanCode;
+        Map<String,Object> map = new HashMap<>();
+        map.put("scanCode",scanCode);
+        map.put("urlBase64",urlBase64);
+        return  map;
     }
 
     /**