Browse Source

抖音登录

Althars123 2 years ago
parent
commit
5a5aec8e15

+ 3 - 12
jkt-admin/src/main/java/com/miaxis/app/controller/wx/WxController.java

@@ -9,20 +9,16 @@ import com.miaxis.common.core.controller.BaseController;
 import com.miaxis.common.core.domain.Response;
 import com.miaxis.common.core.domain.entity.SysUser;
 import com.miaxis.common.core.domain.entity.UserInfo;
-import com.miaxis.common.core.page.ResponsePageInfo;
 import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.SecurityUtils;
 import com.miaxis.common.utils.uuid.CommonUtils;
-import com.miaxis.score.domain.ScoreInfo;
 import com.miaxis.system.service.ISysDictDataService;
 import com.miaxis.system.service.ISysUserService;
 import com.miaxis.wx.domain.WxOrder;
-import com.miaxis.wx.dto.WxOrderCreateDTO;
-import com.miaxis.wx.dto.WxOrderCreateFuluDTO;
-import com.miaxis.wx.dto.WxOrderCreatePhoneBillDTO;
-import com.miaxis.wx.dto.WxOrderListDTO;
 import com.miaxis.wx.service.IWxOrderService;
-import io.swagger.annotations.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -42,7 +38,6 @@ import java.io.File;
 import java.security.PrivateKey;
 import java.security.Signature;
 import java.util.Base64;
-import java.util.List;
 
 import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
 
@@ -69,10 +64,6 @@ public class WxController extends BaseController {
     private IWxOrderService wxOrderService;
 
 
-    @Autowired
-    private ISysDictDataService dictDataService;
-
-
     @Autowired
     private ISysUserService sysUserService;
 

+ 47 - 17
jkt-admin/src/main/java/com/miaxis/system/controller/system/SysLoginController.java

@@ -2,16 +2,14 @@ package com.miaxis.system.controller.system;
 
 import com.alibaba.fastjson.JSONObject;
 import com.miaxis.apple.service.IAppleService;
+import com.miaxis.common.core.domain.DyUserInfoResult;
 import com.miaxis.common.core.domain.Response;
 import com.miaxis.common.core.domain.WxUserInfo;
 import com.miaxis.common.core.domain.entity.SysMenu;
 import com.miaxis.common.core.domain.entity.SysUser;
-import com.miaxis.common.core.domain.model.LoginBody;
-import com.miaxis.common.core.domain.model.LoginBodyNoCode;
-import com.miaxis.common.core.domain.model.LoginUser;
+import com.miaxis.common.core.domain.model.*;
 import com.miaxis.common.enums.StudentLoginTypeEnum;
 import com.miaxis.common.exception.CustomException;
-import com.miaxis.common.utils.AppleUtil;
 import com.miaxis.common.utils.SecurityUtils;
 import com.miaxis.common.utils.ServletUtils;
 import com.miaxis.framework.web.service.SysLoginService;
@@ -22,7 +20,7 @@ import com.miaxis.system.dto.system.AppleTokenDTO;
 import com.miaxis.system.dto.system.TokenDTO;
 import com.miaxis.system.dto.system.UserInfoDTO;
 import com.miaxis.system.service.ISysMenuService;
-import com.miaxis.common.core.domain.model.WxResult;
+import com.miaxis.wx.service.DyService;
 import com.miaxis.wx.service.WxService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -36,10 +34,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 /**
@@ -69,6 +64,11 @@ public class SysLoginController
 
     @Autowired
     private WxService wxService;
+
+
+    @Autowired
+    private DyService dyService;
+
     private static Logger logger = LoggerFactory.getLogger(SysLoginController.class);
 
 
@@ -83,11 +83,6 @@ public class SysLoginController
 
 
 
-
-
-
-
-
     /**
      * 登录方法 (含验证码)
      *
@@ -125,8 +120,8 @@ public class SysLoginController
      *
      */
     @PostMapping("/login/code")
-    @ApiOperation("用户授权码模式登录")
-    public Response<TokenDTO> loginByAuthorizationCode(String authorizationCode ){
+    @ApiOperation("微信用户授权码模式登录")
+    public Response<TokenDTO> loginByWxAuthorizationCode(String authorizationCode ){
         String wxResultStr = wxService.getWxToken(appid, appSecret, authorizationCode, "authorization_code");
         logger.info("微信授权码登录返回值:"+wxResultStr);
         WxResult wxResult = JSONObject.parseObject(wxResultStr,WxResult.class);
@@ -135,21 +130,55 @@ public class SysLoginController
         if (wxResult.getErrcode() != null){
             throw new CustomException("微信授权无效,请重新授权");
         }
+
         String userInfoStr = wxService.getUserInfo("zh_CN", wxResult.getAccess_token(), wxResult.getOpenid());
         WxUserInfo wxUserInfo = JSONObject.parseObject(userInfoStr,WxUserInfo.class);
         ServletUtils.getRequest().setAttribute("headImage",wxUserInfo.getHeadimgurl());
         ServletUtils.getRequest().setAttribute("nickName",wxUserInfo.getNickname());
+        ServletUtils.getRequest().setAttribute("third","weixin");
         String token = loginService.login(wxUserInfo.getOpenid(),null, StudentLoginTypeEnum.AUTHORIZATION_CODE_LOGIN.getCode());
         TokenDTO tokenDTO = new TokenDTO();
         tokenDTO.setToken(token);
-        tokenDTO.setWxResult(wxResult);
+        tokenDTO.setThirdResult(wxResult);
+        return Response.success(tokenDTO) ;
+
+
+
+    }
+
+    /**
+     * 用户 openid登录
+     *
+     */
+    @PostMapping("/login/dycode")
+    @ApiOperation("抖音用户授权码模式登录")
+    public Response<TokenDTO> loginByDyAuthorizationCode(String authorizationCode ){
+        String dyResultStr = dyService.getDyToken(appid, appSecret, authorizationCode, "authorization_code");
+        logger.info("抖音授权码登录返回值:"+dyResultStr);
+        DyResult dyResult = JSONObject.parseObject(dyResultStr,DyResult.class);
+
+        // 生成令牌
+        if (dyResult.getDyToken().getError_code() != null){
+            throw new CustomException("抖音授权登录无效,错误原因:"+dyResult.getDyToken().getDescription());
+        }
+        String userInfoStr = dyService.getUserInfo(dyResult.getDyToken().getAccess_token(),dyResult.getDyToken().getOpen_id());
+        DyUserInfoResult dyUserInfoResult = JSONObject.parseObject(userInfoStr,DyUserInfoResult.class);
+
+        ServletUtils.getRequest().setAttribute("third","douyin");
+        ServletUtils.getRequest().setAttribute("headImage",dyUserInfoResult.getData().getAvatar());
+        ServletUtils.getRequest().setAttribute("nickName",dyUserInfoResult.getData().getNickname());
+
+        String token = loginService.login(dyResult.getDyToken().getOpen_id(),null, StudentLoginTypeEnum.AUTHORIZATION_CODE_LOGIN.getCode());
+        TokenDTO tokenDTO = new TokenDTO();
+        tokenDTO.setToken(token);
+        tokenDTO.setThirdResult(dyResult);
         return Response.success(tokenDTO) ;
 
 
 
     }
     @PostMapping("/login/code/test")
-    @ApiOperation("用户授权码模式登录--测试")
+    @ApiOperation("微信用户授权码模式登录--测试")
     public Response<TokenDTO> testloginByAuthorizationCode(String authorizationCode ){
         WxUserInfo wxUserInfo = new WxUserInfo();
         wxUserInfo.setOpenid("oN0Np5sK6JeTRa06hlE4-OkHDlDY");
@@ -158,6 +187,7 @@ public class SysLoginController
         wxUserInfo.setHeadimgurl("https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83erGMFzKaOmz6cIaA0J1nicWSlBLdLKY46N5CNCoASiajT7Z3RIfPngPhJsjmqsSjGCFibPU4vCtfz3aw/132");
         ServletUtils.getRequest().setAttribute("headImage",wxUserInfo.getHeadimgurl());
         ServletUtils.getRequest().setAttribute("nickName",wxUserInfo.getNickname());
+        ServletUtils.getRequest().setAttribute("third","weixin");
         String token = loginService.login(wxUserInfo.getOpenid(),null, StudentLoginTypeEnum.AUTHORIZATION_CODE_LOGIN.getCode());
         TokenDTO tokenDTO = new TokenDTO();
         tokenDTO.setToken(token);

+ 20 - 0
jkt-common/src/main/java/com/miaxis/common/core/domain/DyUserInfo.java

@@ -0,0 +1,20 @@
+package com.miaxis.common.core.domain;
+
+
+import lombok.Data;
+
+@Data
+public class DyUserInfo {
+     String open_id;
+     String nickname;
+     String gender;
+     String province;
+     String city;
+     String country;
+     String description;
+     String e_account_role;
+     String avatar;
+     Integer error_code;
+     String union_id;
+
+}

+ 10 - 0
jkt-common/src/main/java/com/miaxis/common/core/domain/DyUserInfoResult.java

@@ -0,0 +1,10 @@
+package com.miaxis.common.core.domain;
+
+
+import lombok.Data;
+
+@Data
+public class DyUserInfoResult {
+     DyUserInfo data;
+
+}

+ 6 - 5
jkt-common/src/main/java/com/miaxis/common/core/domain/entity/UserInfo.java

@@ -38,11 +38,6 @@ public class UserInfo extends BaseBusinessEntity{
     private String phone;
 
 
-    /** 微信号码 */
-    @Excel(name = "微信号码")
-    @TableField("wechar")
-    @ApiModelProperty(value = "微信号码")
-    private String wechar;
 
     /** app头像地址 */
     @Excel(name = "app头像地址")
@@ -86,5 +81,11 @@ public class UserInfo extends BaseBusinessEntity{
     private String unionId;
 
 
+    /** app昵称 */
+    @Excel(name = "第三方平台")
+    @TableField("third_platform")
+    @ApiModelProperty(value = "第三方平台")
+    private String thirdPlatform;
+
 
 }

+ 11 - 0
jkt-common/src/main/java/com/miaxis/common/core/domain/model/DyResult.java

@@ -0,0 +1,11 @@
+package com.miaxis.common.core.domain.model;
+
+
+import lombok.Data;
+
+@Data
+public class DyResult {
+     String message;
+     DyToken dyToken;
+
+}

+ 17 - 0
jkt-common/src/main/java/com/miaxis/common/core/domain/model/DyToken.java

@@ -0,0 +1,17 @@
+package com.miaxis.common.core.domain.model;
+
+
+import lombok.Data;
+
+@Data
+public class DyToken {
+     String open_id;
+     String access_token;
+     String refresh_token;
+     Integer refresh_expires_in;
+     Integer expires_in;
+     String scope;
+     String error_code;
+     String description;
+
+}

+ 2 - 0
jkt-framework/src/main/java/com/miaxis/framework/web/service/UserDetailsServiceImpl.java

@@ -67,10 +67,12 @@ public class UserDetailsServiceImpl implements UserDetailsService
         } else if (StudentLoginTypeEnum.AUTHORIZATION_CODE_LOGIN.getCode().equals(loginType)){
             {
                 UserInfo userInfo = userService.getStudentByOpenId(identification);
+                String third = (String)ServletUtils.getRequest().getAttribute("third");
                 if (userInfo == null) {
                     userInfo = new UserInfo();
                     userInfo.setHeadImage((String) ServletUtils.getRequest().getAttribute("headImage"));
                     userInfo.setNickName((String) ServletUtils.getRequest().getAttribute("nickName"));
+                    userInfo.setThirdPlatform(third);
                     userInfo.setOpenid(identification);
                     userInfo.setIsVip(0);
                     userService.saveUserInfo(userInfo);

+ 44 - 0
jkt-service/src/main/java/com/miaxis/wx/service/DyService.java

@@ -0,0 +1,44 @@
+package com.miaxis.wx.service;
+
+
+import com.miaxis.common.config.FeignConfig;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ *
+ * 抖音
+ */
+@FeignClient(name="wxService",
+        url = "https://open.douyin.com",configuration = FeignConfig.class)
+@Component
+public interface DyService {
+    /**
+     *  获取openid
+     * @param code
+     * @param grantType
+     * @return
+     */
+    @PostMapping(value = "/oauth/access_token")
+    String getDyToken(
+            String clientKey,
+            String clientSecret,
+            String code,
+            String grantType);
+
+
+
+    /**
+     * 获取用户信息
+     */
+    @PostMapping(value = "/oauth/userinfo")
+    String getUserInfo(
+            String accessToken,
+            String openid
+    );
+
+
+}

+ 2 - 2
jkt-system/src/main/java/com/miaxis/system/dto/system/TokenDTO.java

@@ -17,6 +17,6 @@ public class TokenDTO {
     private static final long serialVersionUID = 1L;
     @ApiModelProperty(value = "令牌")
     private String token;
-    @ApiModelProperty(value = "微信返回数据")
-    private WxResult wxResult;
+    @ApiModelProperty(value = "第三方登录返回数据")
+    private Object thirdResult;
 }