zyx 2 年之前
父節點
當前提交
a3def685a7

+ 6 - 68
src/main/java/com/sxtvs/open/api/odata/controller/OauthController.java

@@ -27,18 +27,7 @@ public class OauthController {
     @Autowired
     private AliyunLogger logger;
 
-    @RequestMapping("douyin/code")
-    @LoginRequired
-    public String douyinQrCode() {
-        var state = IdUtil.nanoId();
-        var token = HttpContextUtil.mustToken();
-        logger.info("key", "oauth/douyin/code", "state", state);
-        oauthService.saveStateMapping(token, state);
-        return "redirect:https://open.douyin.com/platform/oauth/connect/?" +
-                "client_key=awfrca76s1petwh0&response_type=code&" +
-                "scope=video.data%2Cfans.list%2Cdata.external.item%2Cdata.external.user%2Cfans.data%2Cvideo.list%2Crenew_refresh_token%2Cuser_info&" +
-                "redirect_uri=https%3A%2F%2Fimport.smcic.net%2Fdouyin%2Fcallback-open&state=" + state;
-    }
+
 
     @RequestMapping("douyin/callback")
     public String douyinCallback(String code, String state) {
@@ -48,18 +37,7 @@ public class OauthController {
         return "redirect:https://www.baidu.com";
     }
 
-    @RequestMapping("kuaishou/code")
-    @LoginRequired
-    public String kuaishouQrCode() {
-        var state = IdUtil.nanoId();
-        var token = HttpContextUtil.mustToken();
-        logger.info("key", "oauth/douyin/code", "state", state, "token", token);
-        oauthService.saveStateMapping(token, state);
-        return "redirect:https://open.kuaishou.com/oauth2/connect?" +
-                "app_id=" + OauthConfig.kuaishouClientKey + "&response_type=code&" +
-                "scope=user_info%2Cuser_video_info&" +
-                "redirect_uri=https%3A%2F%2Fimport.smcic.net%2Fkuaishou%2Fcallback-open&state=" + state;
-    }
+
 
     @RequestMapping("kuaishou/callback")
     public String kuaishouCallback(String code, String state) {
@@ -69,17 +47,7 @@ public class OauthController {
         return "redirect:https://www.baidu.com";
     }
 
-    @RequestMapping("toutiao/code")
-    @LoginRequired
-    public String toutiaoQrCode() {
-        var state = IdUtil.nanoId();
-        var token = HttpContextUtil.mustToken();
-        logger.info("key", "oauth/toutiao/code", "state", state, "token", token);
-        return "redirect:https://open.snssdk.com/oauth/authorize/?" +
-                "client_key=awfrca76s1petwh0&response_type=code&" +
-                "scope=toutiao.video.data,user_info&" +
-                "redirect_uri=http%3A%2F%2Fimport.smcic.net%2Ftoutiao%2Fcallback-open";
-    }
+
 
     @RequestMapping("toutiao/callback")
     public String toutiaoCallback(String code, String state) {
@@ -89,14 +57,7 @@ public class OauthController {
         return "redirect:https://www.baidu.com";
     }
 
-    @RequestMapping("weibo/code")
-    @LoginRequired
-    public String weiboQrCode() {
-        logger.info("key", "oauth/weibo/code");
-        var weiboUrl = oauthService.getWeiboUrl();
-        logger.info("key", "weiboQrCode", "url", weiboUrl);
-        return weiboUrl;
-    }
+
 
     @RequestMapping("weibo/callback")
     public String weiboCallback(String code, String state) {
@@ -105,15 +66,7 @@ public class OauthController {
         return "redirect:https://www.baidu.com";
     }
 
-    @RequestMapping("bilibili/code")
-    @LoginRequired
-    public String bilibiliQrCode() {
-        var state = IdUtil.nanoId();
-        var token = HttpContextUtil.mustToken();
-        logger.info("key", "oauth/bilibili/code", "state", state, "token", token);
-        return "redirect:https://passport.bilibili.com/register/pc_oauth2.html#/?client_id=e79e6fdef9d446d7" +
-                "&return_url=https%3A%2F%2Fimport.smcic.net%2Fbilibili%2Fcallback-open&response_type=code&state=" + state;
-    }
+
 
     @RequestMapping("bilibili/callback")
     public String bilibiliCallback(String code, String state) {
@@ -123,22 +76,7 @@ public class OauthController {
         return "redirect:https://www.baidu.com";
     }
 
-    @RequestMapping("weixin/code")
-    @LoginRequired
-    public ModelAndView weixinQrCode() {
-        var token = HttpContextUtil.mustToken();
-        logger.info("key", "oauth/weixin/code", "token", token);
-        WxApiCreatePreAuthCodeResponse preAuthCodeResponse = oauthService.createPreAuthCodeResponse();
-
-        // 这里使用预授权码跟用户token做一个映射
-        var preAuthCode = preAuthCodeResponse.getPreAuthCode();
-        oauthService.saveStateMapping(token, preAuthCode);
-
-        ModelAndView view = new ModelAndView();
-        view.setViewName("weixin-code");
-        view.addObject("pre_auth_code", preAuthCode);
-        return view;
-    }
+
 
     @RequestMapping("weixin/{appid}/callback")
     public String callback(

+ 83 - 0
src/main/java/com/sxtvs/open/api/odata/controller/OauthRestController.java

@@ -1,8 +1,15 @@
 package com.sxtvs.open.api.odata.controller;
 
+import cn.hutool.core.util.IdUtil;
+import com.sxtvs.open.api.odata.dto.oauth.RedirectDto;
+import com.sxtvs.open.api.odata.dto.wx.WxApiCreatePreAuthCodeResponse;
+import com.sxtvs.open.api.odata.service.OauthService;
 import com.sxtvs.open.api.odata.wxutil.WxCrypt;
 import com.sxtvs.open.api.odata.wxutil.WxXmlUtil;
 import com.sxtvs.open.core.advice.NoAPIResponse;
+import com.sxtvs.open.core.auth.HttpContextUtil;
+import com.sxtvs.open.core.auth.LoginRequired;
+import com.sxtvs.open.core.conf.OauthConfig;
 import com.sxtvs.open.core.sls.AliyunLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -20,6 +27,9 @@ public class OauthRestController {
     @Autowired
     private StringRedisTemplate redisTemplate;
 
+    @Autowired
+    private OauthService oauthService;
+
     @RequestMapping("weixin/auth")
     @NoAPIResponse
     public String auth(@RequestBody String body) {
@@ -33,4 +43,77 @@ public class OauthRestController {
         redisTemplate.opsForValue().set("WX_TICKET", componentVerifyTicket);
         return "success";
     }
+
+    @RequestMapping("douyin/code")
+    @LoginRequired
+    public Object douyinQrCode() {
+        var state = IdUtil.nanoId();
+        var token = HttpContextUtil.mustToken();
+        logger.info("key", "oauth/douyin/code", "state", state);
+        oauthService.saveStateMapping(token, state);
+        return new RedirectDto("https://open.douyin.com/platform/oauth/connect/?" +
+                "client_key=awfrca76s1petwh0&response_type=code&" +
+                "scope=video.data%2Cfans.list%2Cdata.external.item%2Cdata.external.user%2Cfans.data%2Cvideo.list%2Crenew_refresh_token%2Cuser_info&" +
+                "redirect_uri=https%3A%2F%2Fimport.smcic.net%2Fdouyin%2Fcallback-open&state=" + state);
+    }
+
+    @RequestMapping("kuaishou/code")
+    @LoginRequired
+    public RedirectDto kuaishouQrCode() {
+        var state = IdUtil.nanoId();
+        var token = HttpContextUtil.mustToken();
+        logger.info("key", "oauth/douyin/code", "state", state, "token", token);
+        oauthService.saveStateMapping(token, state);
+        return new RedirectDto("https://open.kuaishou.com/oauth2/connect?" +
+                "app_id=" + OauthConfig.kuaishouClientKey + "&response_type=code&" +
+                "scope=user_info%2Cuser_video_info&" +
+                "redirect_uri=https%3A%2F%2Fimport.smcic.net%2Fkuaishou%2Fcallback-open&state=" + state);
+    }
+
+    @RequestMapping("toutiao/code")
+    @LoginRequired
+    public RedirectDto toutiaoQrCode() {
+        var state = IdUtil.nanoId();
+        var token = HttpContextUtil.mustToken();
+        logger.info("key", "oauth/toutiao/code", "state", state, "token", token);
+        return new RedirectDto("https://open.snssdk.com/oauth/authorize/?" +
+                "client_key=awfrca76s1petwh0&response_type=code&" +
+                "scope=toutiao.video.data,user_info&" +
+                "redirect_uri=http%3A%2F%2Fimport.smcic.net%2Ftoutiao%2Fcallback-open&state=" + state);
+    }
+
+    @RequestMapping("weibo/code")
+    @LoginRequired
+    public RedirectDto weiboQrCode() {
+        logger.info("key", "oauth/weibo/code");
+        var weiboUrl = oauthService.getWeiboUrl();
+        logger.info("key", "weiboQrCode", "url", weiboUrl);
+        return new RedirectDto("wait 还得找厂家对");
+    }
+
+    @RequestMapping("bilibili/code")
+    @LoginRequired
+    public RedirectDto bilibiliQrCode() {
+        var state = IdUtil.nanoId();
+        var token = HttpContextUtil.mustToken();
+        logger.info("key", "oauth/bilibili/code", "state", state, "token", token);
+        return new RedirectDto("https://passport.bilibili.com/register/pc_oauth2.html#/?client_id=e79e6fdef9d446d7" +
+                "&return_url=https%3A%2F%2Fimport.smcic.net%2Fbilibili%2Fcallback-open&response_type=code&state=" + state);
+    }
+
+    @RequestMapping("weixin/code")
+    @LoginRequired
+    public RedirectDto weixinQrCode() {
+        var token = HttpContextUtil.mustToken();
+        logger.info("key", "oauth/weixin/code", "token", token);
+        WxApiCreatePreAuthCodeResponse preAuthCodeResponse = oauthService.createPreAuthCodeResponse();
+        // 这里使用预授权码跟用户token做一个映射
+        var preAuthCode = preAuthCodeResponse.getPreAuthCode();
+        oauthService.saveStateMapping(token, preAuthCode);
+
+        return new RedirectDto("https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=wx7040933fd0e4b0e8&pre_auth_code="
+                + preAuthCode + "&redirect_uri=http%3A%2F%2Fopen.sxtvs.net%2Foauth%2Fweixin%2Fwx7040933fd0e4b0e8%2Fcallback&auth_type=1");
+    }
+
+
 }

+ 10 - 0
src/main/java/com/sxtvs/open/api/odata/dto/oauth/RedirectDto.java

@@ -0,0 +1,10 @@
+package com.sxtvs.open.api.odata.dto.oauth;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class RedirectDto {
+    private String url;
+}

+ 0 - 16
src/main/resources/templates/weixin-code.html

@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>Title</title>
-</head>
-<body>
-<script th:inline="javascript">
-    /*<![CDATA[*/
-    var pre_auth_code = /*[[${pre_auth_code}]]*/ '';
-    window.location = 'https://mp.weixin.qq.com/cgi-bin/componentloginpage?' +
-        'component_appid=wx7040933fd0e4b0e8&pre_auth_code=' + pre_auth_code + '&redirect_uri=http%3A%2F%2Fopen.sxtvs.net%2Foauth%2Fweixin%2Fwx7040933fd0e4b0e8%2Fcallback&auth_type=1'
-    /*]]>*/
-</script>
-</body>
-</html>