1
0
Quellcode durchsuchen

feat(front): h5登录

Go vor 4 Jahren
Ursprung
Commit
8b0dca6cd7
26 geänderte Dateien mit 181 neuen und 105 gelöschten Zeilen
  1. 2 2
      front/config/local.json
  2. 1 1
      front/project/admin/routes/course/detail/page.js
  3. 12 2
      front/project/admin/routes/setting/rank/page.js
  4. 1 1
      front/project/h5/components/Button/index.js
  5. 1 1
      front/project/h5/index.js
  6. 1 1
      front/project/h5/routes/page/bind/page.js
  7. 3 1
      front/project/h5/routes/page/index.js
  8. 21 10
      front/project/h5/routes/page/login/page.js
  9. 4 4
      front/project/h5/routes/product/dataDetail/page.js
  10. 1 2
      front/project/h5/routes/product/index.js
  11. 2 2
      front/project/h5/stores/user.js
  12. 1 1
      server/data/src/main/resources/db/migration/V1__init_table.sql
  13. 1 0
      server/gateway-api/build.gradle
  14. 51 16
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/SettingController.java
  15. 4 2
      server/gateway-api/src/main/java/com/qxgmat/controller/api/AuthController.java
  16. 1 1
      server/gateway-api/src/main/java/com/qxgmat/controller/gateway/OauthController.java
  17. 22 18
      server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseDetailDto.java
  18. 18 18
      server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseListDto.java
  19. 5 0
      server/gateway-api/src/main/java/com/qxgmat/help/VideoHelp.java
  20. 4 4
      server/gateway-api/src/main/java/com/qxgmat/help/WechatHelp.java
  21. 6 6
      server/gateway-api/src/main/java/com/qxgmat/service/UsersService.java
  22. 1 1
      server/gateway-api/src/main/java/com/qxgmat/util/shiro/OauthRealm.java
  23. 3 3
      server/gateway-api/src/main/profile/dev/application-runtime.yml
  24. 1 1
      server/gateway-api/src/main/profile/test/application-runtime.yml
  25. 5 0
      server/gateway-api/src/main/resources/application.yml
  26. 9 7
      server/tools/src/main/java/com/nuliji/tools/third/wechat/WechatClient.java

+ 2 - 2
front/config/local.json

@@ -15,9 +15,9 @@
         "to": "/"
       }
     ],
-    "PcUrl": "http://127.0.0.1:3000",
+    "PcUrl": "http://test.duoshaojiaoyu.com",
     "WechatPcAppId": "wxa6a1620243459e6a",
-    "H5Url": "http://127.0.0.1:3000",
+    "H5Url": "http://mobiletest.duoshaojiaoyu.com",
     "WechatH5AppId": "wx65c7d378b4184bcc"
   },
   "test": {

+ 1 - 1
front/project/admin/routes/course/detail/page.js

@@ -33,7 +33,7 @@ export default class extends Page {
         return <Upload
           showUploadList={false}
           beforeUpload={(file) => System.uploadVideo(file).then((result) => {
-            return Course.addNo({ courseId: this.params.id, resource: result.url, time: result.time });
+            return Course.addNo({ courseId: this.params.id, resource: result.url, time: result.time, title: file.name.split('.')[0] });
           }).then(() => {
             this.refreshNo();
           })}

+ 12 - 2
front/project/admin/routes/setting/rank/page.js

@@ -61,6 +61,12 @@ export default class extends Page {
       title: 'Q排名',
       dataIndex: 'quantRank',
     }, {
+      title: 'V分',
+      dataIndex: 'verbalScore',
+    }, {
+      title: 'V排名',
+      dataIndex: 'verbalRank',
+    }, {
       title: 'IR分',
       dataIndex: 'irScore',
     }, {
@@ -74,8 +80,12 @@ export default class extends Page {
       render: (item) => {
         return <Upload
           showUploadList={false}
-          beforeUpload={(file) => System.importRank(file).then((result) => {
-            asyncSMessage(result);
+          beforeUpload={(file) => System.importRank({ file }).then((result) => {
+            asyncSMessage(`导入成功: ${result}条数据`);
+            this.refresh();
+            return Promise.reject();
+          }).catch(e => {
+            asyncSMessage(e.message, 'error');
             return Promise.reject();
           })}
         >

+ 1 - 1
front/project/h5/components/Button/index.js

@@ -21,11 +21,11 @@ export default class Button extends Component {
         className={`g-button-wrapper ${className} ${size} ${theme} ${radius ? 'radius' : ''} ${block ? 'block' : ''} ${
           disabled ? 'disabled' : ''
         }`}
+        onClick={() => onClick && onClick()}
       >
         <Touch
           style={{ width: width || 'auto', margin: margin ? `0 ${margin}px` : '0 auto' }}
           className="g-button"
-          onClick={() => onClick && onClick()}
         >
           {children}
         </Touch>

+ 1 - 1
front/project/h5/index.js

@@ -2,7 +2,7 @@ export default {
   mode: () => import('./app'),
   apiToken: 'token',
   loginAuth(route, { user }) {
-    if (route.needLogin && !user.login) return true;
+    if (route.needLogin && !user.login) return false;
     return true;
   },
 };

+ 1 - 1
front/project/h5/routes/page/bind/page.js

@@ -76,7 +76,7 @@ export default class extends Page {
     if (!area || !mobile || !mobileVerifyCode) return;
     if (needEmail && !email) return;
     User.bind(area, mobile, mobileVerifyCode, email).then(() => {
-      linkTo('/product');
+      linkTo(this.state.search.jump || '/');
     })
       .catch(err => {
         if (err.message.indexOf('验证码') >= 0) {

+ 3 - 1
front/project/h5/routes/page/index.js

@@ -7,5 +7,7 @@ import invitation from './invitation';
 import study from './study';
 import message from './message';
 import open from './open';
+import pay from './pay';
+import bought from './bought';
 
-export default [home, login, bind, identity, invitation, study, id, message, open];
+export default [home, login, bind, identity, invitation, study, id, message, open, pay, bought];

+ 21 - 10
front/project/h5/routes/page/login/page.js

@@ -1,28 +1,39 @@
 import React from 'react';
 import './index.less';
 import Page from '@src/containers/Page';
+import { asyncSMessage } from '@src/services/AsyncTools';
 import { WechatH5AppId, H5Url } from '../../../../Constant';
 import { User } from '../../../stores/user';
 
 export default class extends Page {
   init() {
-    const { code } = this.props.core.query;
+    const { code, state = '' } = this.props.core.query;
+    const [scope, jump] = state.split('|');
     if (code) {
-      User.loginWechat(code).then((info) => {
-        if (info.bindMobile) {
-          replaceLink('/');
+      User.loginWechat(code, !!scope).then((info) => {
+        if (!info.id && !scope) {
+          this.redirect('snsapi_userinfo', jump || '1|/');
+        } else if (info.bindMobile) {
+          replaceLink(jump || '/');
         } else {
-          replaceLink('/bind');
+          replaceLink(`/bind?jump=${encodeURIComponent(jump)}`);
         }
-      });
+      })
+        .catch(e => {
+          asyncSMessage(e.message, 'error');
+        });
     } else {
-      const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${WechatH5AppId}&redirect_uri=${encodeURIComponent(
-        `${H5Url}/login`,
-      )}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`;
-      window.location.href = url;
+      this.redirect('snsapi_base', '|/');
     }
   }
 
+  redirect(scope, state) {
+    const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${WechatH5AppId}&redirect_uri=${encodeURIComponent(
+      `${H5Url}/login`,
+    )}&response_type=code&scope=${scope}&state=${encodeURIComponent(state)}#wechat_redirect`;
+    window.location.href = url;
+  }
+
   renderView() {
     return <div />;
   }

+ 4 - 4
front/project/h5/routes/product/dataDetail/page.js

@@ -20,7 +20,7 @@ export default class extends Page {
   }
 
   initData() {
-    const { id } = this.state;
+    const { id } = this.params;
     Course.getData(id).then(data => {
       this.setState({ data });
     });
@@ -75,10 +75,10 @@ export default class extends Page {
           <div className="info">
             <div className="title">{data.title}</div>
             <div className="tags">
-              {data.isOriginal && <Tag size="small">原创</Tag>}
-              {data.isNovice && <Tag size="small">适合新手</Tag>}
+              {data.isOriginal > 0 && <Tag size="small">原创</Tag>}
+              {data.isNovice > 0 && <Tag size="small">适合新手</Tag>}
             </div>
-            <div className="data">页数: {data.page}页</div>
+            <div className="data">页数: {data.pages}页</div>
             <div className="data">格式: {DataTypeMap[data.dataType]}</div>
             <div className="data">{formatDate(data.updateTime, 'YYYY-MM-DD HH:mm')} 更新</div>
             <Money value={data.price} size="lager" theme="sell" />

+ 1 - 2
front/project/h5/routes/product/index.js

@@ -6,7 +6,6 @@ import courseVideo from './courseVideo';
 import courseDetail from './courseDetail';
 import coursePackage from './coursePackage';
 import courseVs from './courseVs';
-import bought from './bought';
 import main from './main';
 
-export default [courseVideo, coursePackage, courseVs, courseDetail, serviceDetail, data, dataDetail, dataHistory, bought, main];
+export default [courseVideo, coursePackage, courseVs, courseDetail, serviceDetail, data, dataDetail, dataHistory, main];

+ 2 - 2
front/project/h5/stores/user.js

@@ -52,8 +52,8 @@ export default class UserStore extends BaseStore {
     });
   }
 
-  loginWechat(code) {
-    return this.apiGet('/auth/wechat', { code }).then((result) => {
+  loginWechat(code, userInfo) {
+    return this.apiGet('/auth/wechat', { code, userInfo }).then((result) => {
       this.infoHandle(result);
       return result;
     });

+ 1 - 1
server/data/src/main/resources/db/migration/V1__init_table.sql

@@ -66,7 +66,7 @@ CREATE TABLE course (
   expire_pre_days int(11) unsigned NOT NULL DEFAULT '0' COMMENT '1v1课时有效天数',
   expire_days int(11) unsigned NOT NULL DEFAULT '0' COMMENT '视频课程开通有效时长',
   ask_extend_days int(11) unsigned NOT NULL DEFAULT '0' COMMENT '提问扩展天数',
-  use_expire_time int(11) unsigned NOT NULL DEFAULT '0' COMMENT '使用有效时长',
+  use_expire_days int(11) unsigned NOT NULL DEFAULT '0' COMMENT '使用有效时长',
   wechat_avatar varchar(255) DEFAULT NULL COMMENT '微信头像',
   teacher_content text COMMENT '老师资质',
   base_content text COMMENT '基本参数',

+ 1 - 0
server/gateway-api/build.gradle

@@ -24,6 +24,7 @@ dependencies {
 
     // https://mvnrepository.com/artifact/org.apache.poi/poi
     compileClasspath group: 'org.apache.poi', name: 'poi', version: '3.17'
+    compileClasspath group: 'org.apache.poi', name: 'poi-ooxml', version: '3.17'
 
 
 //    compile group: 'commons-lang', name: 'commons-lang', version:'2.6'

+ 51 - 16
server/gateway-api/src/main/java/com/qxgmat/controller/admin/SettingController.java

@@ -28,6 +28,11 @@ import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -756,29 +761,34 @@ public class SettingController {
         return ResponseHelp.success(rankList);
     }
 
-    @RequestMapping(value = "/rank/import", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE, method = RequestMethod.POST)
+    @RequestMapping(value = "/rank/import", method = RequestMethod.POST)
     @ApiOperation(value = "导入排行数据", httpMethod = "POST")
-    private Response<Boolean> importRank(@RequestParam("file") MultipartFile multipartFile) throws IOException {
+    private Response<Integer> importRank(@RequestParam("file") MultipartFile multipartFile) throws IOException {
         // 删除所有排行数据, 并导入excel数据
         // 读取文件
-        InputStream is = new FileInputStream("002.xls");
+//        InputStream is = new FileInputStream();
         // 将文件流解析成 POI 文档
-        POIFSFileSystem fs = new POIFSFileSystem(is);
-        // 再将 POI 文档解析成 Excel 工作簿
-        HSSFWorkbook wb = new HSSFWorkbook(fs);
-        HSSFRow row = null;
-        HSSFCell cell = null;
+        Workbook wb =null;
+        Row row = null;
+        Cell cell = null;
+
+        if (multipartFile.getOriginalFilename().contains(".xlsx")){
+            // 再将 POI 文档解析成 Excel 工作簿
+            wb = new XSSFWorkbook(multipartFile.getInputStream());
+        }else{
+            // 再将 POI 文档解析成 Excel 工作簿
+            wb = new HSSFWorkbook(multipartFile.getInputStream());
+        }
         // 得到第 1 个工作簿
-        HSSFSheet sheet = wb.getSheetAt(0);
-        // 得到这一行一共有多少列
-        int totalColumns = sheet.getRow(0).getPhysicalNumberOfCells();
+        Sheet sheet = wb.getSheetAt(0);
+        int totalColumns = 8; // total_score, total_rank, quant_score, quant_rank, verbal_score, verbal_rank
         // 得到最后一行的坐标
         Integer lastRowNum = sheet.getLastRowNum();
         System.out.println("lastRowNum => " + lastRowNum);
 
+
         List<Rank> rankList = new ArrayList<>();
         Rank rank = null;
-        String cellValue = null;
 
         // 从第 2 行开始读
         for(int i=1;i<=lastRowNum;i++){
@@ -787,14 +797,39 @@ public class SettingController {
             for(int j=0;j<totalColumns;j++){
                 cell = row.getCell(j);
                 if(cell!=null){
-                    cellValue = cell.getStringCellValue();
-                }else {
-                    cellValue = "【没有数据】";
+                    switch(j){
+                        case 0:
+                            rank.setTotalScore((int) cell.getNumericCellValue());
+                            break;
+                        case 1:
+                            rank.setTotalRank((int) cell.getNumericCellValue());
+                            break;
+                        case 2:
+                            rank.setQuantScore((int) cell.getNumericCellValue());
+                            break;
+                        case 3:
+                            rank.setQuantRank((int) cell.getNumericCellValue());
+                            break;
+                        case 4:
+                            rank.setVerbalScore((int) cell.getNumericCellValue());
+                            break;
+                        case 5:
+                            rank.setVerbalRank((int) cell.getNumericCellValue());
+                            break;
+                        case 6:
+                            rank.setIrScore((int) cell.getNumericCellValue());
+                            break;
+                        case 7:
+                            rank.setIrRank((int) cell.getNumericCellValue());
+                            break;
+                    }
+                }else{
+                    throw new ParameterException(String.format("%d行%d列数据为空", i, j));
                 }
             }
             rankList.add(rank);
         }
         rankService.replaceAll(rankList);
-        return ResponseHelp.success(true);
+        return ResponseHelp.success(rankList.size());
     }
 }

+ 4 - 2
server/gateway-api/src/main/java/com/qxgmat/controller/api/AuthController.java

@@ -105,11 +105,12 @@ public class AuthController {
     @ApiOperation(value = "直接微信二维码登录", httpMethod = "GET")
     public Response<MyDto> directWechatPc(
             @RequestParam(required = false, defaultValue = "") String code,
+            @RequestParam(required = false, defaultValue = "") boolean userInfo,
             HttpSession session, HttpServletRequest request) {
         User user = (User) shiroHelp.getLoginUser();
         if (user!=null){
             // 已登录用户,绑定
-            usersService.Oauth(user, code, "wechat_pc");
+            usersService.Oauth(user, code, "wechat_pc", userInfo);
         }else{
             shiroHelp.getSession().login(shiroHelp.oauth(code, "wechat_pc"));
         }
@@ -122,11 +123,12 @@ public class AuthController {
     @ApiOperation(value = "直接微信二维码登录", httpMethod = "GET")
     public Response<MyDto> directWechat(
             @RequestParam(required = false, defaultValue = "") String code,
+            @RequestParam(required = false, defaultValue = "") boolean userInfo,
             HttpSession session, HttpServletRequest request) {
         User user = (User) shiroHelp.getLoginUser();
         if (user!=null){
             // 已登录用户,绑定
-            usersService.Oauth(user, code, "wechat_native");
+            usersService.Oauth(user, code, "wechat_native", userInfo);
         }else{
             shiroHelp.getSession().login(shiroHelp.oauth(code, "wechat_native"));
         }

+ 1 - 1
server/gateway-api/src/main/java/com/qxgmat/controller/gateway/OauthController.java

@@ -50,7 +50,7 @@ public class OauthController {
         User user = (User) shiroHelp.getLoginUser();
         if (user!=null){
             // 已登录用户,绑定
-            usersService.Oauth(user, code, "wechat_pc");
+            usersService.Oauth(user, code, "wechat_pc", true);
         }
         shiroHelp.getSession().login(shiroHelp.oauth(code, "wechat_pc"));
         Object jump = session.getAttribute("jump");

+ 22 - 18
server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseDetailDto.java

@@ -39,9 +39,9 @@ public class CourseDetailDto extends Course {
 
     private Integer expireDays;
 
-    private Integer expireTime;
+    private Integer expirePreDays;
 
-    private Integer useExpireTime;
+    private Integer useExpireDays;
 
     private Collection<CourseNoExtendDto> courseNos;
 
@@ -145,22 +145,6 @@ public class CourseDetailDto extends Course {
         this.expireDays = expireDays;
     }
 
-    public Integer getExpireTime() {
-        return expireTime;
-    }
-
-    public void setExpireTime(Integer expireTime) {
-        this.expireTime = expireTime;
-    }
-
-    public Integer getUseExpireTime() {
-        return useExpireTime;
-    }
-
-    public void setUseExpireTime(Integer useExpireTime) {
-        this.useExpireTime = useExpireTime;
-    }
-
     public String getComment() {
         return comment;
     }
@@ -200,4 +184,24 @@ public class CourseDetailDto extends Course {
     public void setCourseNos(Collection<CourseNoExtendDto> courseNos) {
         this.courseNos = courseNos;
     }
+
+    @Override
+    public Integer getUseExpireDays() {
+        return useExpireDays;
+    }
+
+    @Override
+    public void setUseExpireDays(Integer useExpireDays) {
+        this.useExpireDays = useExpireDays;
+    }
+
+    @Override
+    public Integer getExpirePreDays() {
+        return expirePreDays;
+    }
+
+    @Override
+    public void setExpirePreDays(Integer expirePreDays) {
+        this.expirePreDays = expirePreDays;
+    }
 }

+ 18 - 18
server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseListDto.java

@@ -35,9 +35,9 @@ public class CourseListDto {
 
     private Integer expireDays;
 
-    private Integer expireTime;
+    private Integer expirePreDays;
 
-    private Integer useExpireTime;
+    private Integer useExpireDays;
 
     private Collection<CommentExtendDto> comments;
 
@@ -137,22 +137,6 @@ public class CourseListDto {
         this.expireDays = expireDays;
     }
 
-    public Integer getExpireTime() {
-        return expireTime;
-    }
-
-    public void setExpireTime(Integer expireTime) {
-        this.expireTime = expireTime;
-    }
-
-    public Integer getUseExpireTime() {
-        return useExpireTime;
-    }
-
-    public void setUseExpireTime(Integer useExpireTime) {
-        this.useExpireTime = useExpireTime;
-    }
-
     public String getCover() {
         return cover;
     }
@@ -168,4 +152,20 @@ public class CourseListDto {
     public void setComments(Collection<CommentExtendDto> comments) {
         this.comments = comments;
     }
+
+    public Integer getUseExpireDays() {
+        return useExpireDays;
+    }
+
+    public void setUseExpireDays(Integer useExpireDays) {
+        this.useExpireDays = useExpireDays;
+    }
+
+    public Integer getExpirePreDays() {
+        return expirePreDays;
+    }
+
+    public void setExpirePreDays(Integer expirePreDays) {
+        this.expirePreDays = expirePreDays;
+    }
 }

+ 5 - 0
server/gateway-api/src/main/java/com/qxgmat/help/VideoHelp.java

@@ -1,5 +1,7 @@
 package com.qxgmat.help;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -11,6 +13,7 @@ import java.util.regex.Pattern;
 
 @Service
 public class VideoHelp {
+    private static final Logger logger = LoggerFactory.getLogger(VideoHelp.class);
 
     @Value("${video.ffmpeg}")
     private String ffmpegPath;
@@ -33,6 +36,8 @@ public class VideoHelp {
                 sb.append(line);
             }
             br.close();
+            logger.debug("videoPath: {}", videoPath);
+            logger.debug("ffmpeg: {}", sb.toString());
 
             //从视频信息中解析时长
             String regexDuration = "Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";

+ 4 - 4
server/gateway-api/src/main/java/com/qxgmat/help/WechatHelp.java

@@ -38,12 +38,12 @@ public class WechatHelp {
     @Value("${third.wechat.courseTemplate}")
     private String courseTemplate;
 
-    public OauthData oauthPc(String code) {
-        return wechatPc.webAuthorize(code);
+    public OauthData oauthPc(String code, boolean userInfo) {
+        return wechatPc.webAuthorize(code,userInfo);
     }
 
-    public OauthData oauthNative(String code){
-        return wechat.webAuthorize(code);
+    public OauthData oauthNative(String code, boolean userInfo){
+        return wechat.webAuthorize(code, userInfo);
     }
 
     public OauthData refreshNative(String refreshToken) {

+ 6 - 6
server/gateway-api/src/main/java/com/qxgmat/service/UsersService.java

@@ -39,9 +39,9 @@ import java.util.*;
  */
 @Service
 public class UsersService extends AbstractService {
-    final public String PLATORM_WECHAT_NATIVE = "wechat_openid_wechat";
-    final public String PLATORM_WECHAT_PC = "wechat_openid_pc";
-    final public String PLATORM_WECHAT = "wechat_unionid";
+    final public String PLATORM_WECHAT_NATIVE = "wechatOpenidWechat";
+    final public String PLATORM_WECHAT_PC = "wechatOpenidPc";
+    final public String PLATORM_WECHAT = "wechatUnionid";
 
     @Value("${self.secret}")
     private String secret;
@@ -105,14 +105,14 @@ public class UsersService extends AbstractService {
      * @return
      */
     @Transactional
-    public User Oauth(User user, String code, String platform){
+    public User Oauth(User user, String code, String platform, boolean userInfo){
         OauthData data;
         switch(platform){
             case "wechat_pc":
-                data = wechatHelp.oauthPc(code);
+                data = wechatHelp.oauthPc(code, userInfo);
                 break;
             case "wechat_native":
-                data = wechatHelp.oauthNative(code);
+                data = wechatHelp.oauthNative(code, userInfo);
                 break;
             default:
                 throw new ParameterException("第三方平台"+platform+"不支持");

+ 1 - 1
server/gateway-api/src/main/java/com/qxgmat/util/shiro/OauthRealm.java

@@ -28,7 +28,7 @@ public class OauthRealm extends AuthorizingRealm {
         String code = token.getUsername();
         String platform = new String(token.getPassword());
 
-        User user = usersService.Oauth(null, code, platform);
+        User user = usersService.Oauth(null, code, platform, false);
         return new SimpleAuthenticationInfo(user, platform, getName());
     }
 }

+ 3 - 3
server/gateway-api/src/main/profile/dev/application-runtime.yml

@@ -91,11 +91,11 @@ third:
   wechat:
     pc:
       appId: wxa6a1620243459e6a
-      appSecret: 51b8bf5029502d8eccb7a658529b1372
+      appSecret: 2fa03342c000253b9e3b06f631c885df
 
     native:
-      appId: wxbee75af2ece94ed7
-      appSecret: efdef63acfae765b0b890072e12a0198
+      appId: wx65c7d378b4184bcc
+      appSecret: 1c14eb97a156863770e115463c44a83f
 
     questionTemplate: 123123
     courseTemplate: 1312

+ 1 - 1
server/gateway-api/src/main/profile/test/application-runtime.yml

@@ -91,7 +91,7 @@ third:
   wechat:
     pc:
       appId: wxa6a1620243459e6a
-      appSecret: 51b8bf5029502d8eccb7a658529b1372
+      appSecret: 2fa03342c000253b9e3b06f631c885df
 
     native:
       appId: wx65c7d378b4184bcc

+ 5 - 0
server/gateway-api/src/main/resources/application.yml

@@ -2,6 +2,11 @@ spring:
   profiles:
     active: runtime, tools, data
 
+  servlet:
+    multipart:
+      max-file-size: -1
+      max-request-size: -1
+
   jpa:
     database: mysql
     show-sql: true

+ 9 - 7
server/tools/src/main/java/com/nuliji/tools/third/wechat/WechatClient.java

@@ -114,7 +114,7 @@ public class WechatClient {
     }
 
 
-    public OauthData webAuthorize(String code) {
+    public OauthData webAuthorize(String code, boolean userInfo) {
         JSONObject result = getWebAccessToken(code);
 
         // 从result中解析出openid和session
@@ -122,16 +122,18 @@ public class WechatClient {
             logger.warn(String.format("jscodeToSession failed: result = %s", result));
             throw new RuntimeException(String.format("从微信服务器换取用户登录态信息: 错误码: %d, 错误信息: %s", result.getIntValue("errcode"), result.getString("errmsg")));
         }
-        JSONObject info = getWebUserInfo(result.getString("access_token"), result.getString("openid"));
         OauthData data = new OauthData();
         data.setRefreshToken(result.getString("refresh_token"));
         data.setAccessToken(result.getString("access_token"));
         data.setExpiresTime(new Date(new Date().getTime() + result.getInteger("expires_in")));
-        data.setAvatar(info.getString("avatar"));
-        data.setNickName(info.getString("nickname"));
-        data.setUnionId(info.getString("unionid"));
-        data.setOpenId(info.getString("openid"));
-        data.setGender(info.getIntValue("sex") == 1 ? "mela":"femela");
+        if (userInfo){
+            JSONObject info = getWebUserInfo(result.getString("access_token"), result.getString("openid"));
+            data.setAvatar(info.getString("avatar"));
+            data.setNickName(info.getString("nickname"));
+            data.setUnionId(info.getString("unionid"));
+            data.setOpenId(info.getString("openid"));
+            data.setGender(info.getIntValue("sex") == 1 ? "mela":"femela");
+        }
         return data;
     }