liujc 2 lat temu
rodzic
commit
1dbdeaa0f5

+ 9 - 13
.idea/httpRequests/http-requests-log.http

@@ -1,3 +1,12 @@
+GET http://127.0.0.1:9001/open/sysConfig/queryByParamName?paramName=wechat_appid
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-05-17T183050.200.json
+
+###
+
 POST http://127.0.0.1:8005/imLiveBroadcastRoomMember/queryRoomMember
 Content-Type: application/json
 Authorization: bearer 70c30cec-f77c-4871-beaa-ce4b5224bf3e
@@ -595,16 +604,3 @@ Accept-Encoding: br,deflate,gzip,x-gzip
 
 ###
 
-POST http://127.0.0.1:8001/smsLogin?clientId=EDUCATION&clientSecret=EDUCATION&deviceNum=&phone=15907121011&smsCode=666666
-Content-Type: application/x-www-form-urlencoded
-Content-Length: 2
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{}
-
-<> 2023-05-09T162057.200.json
-
-###
-

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java

@@ -103,6 +103,13 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
     RoomUserInfoVo getVisitorCredentials(String roomUid, String fingerprint);
 
     /**
+     * 游客微信身份
+     * @param code 授权码
+     * @return 用户openId
+     */
+    String visitorFingerprint(String code);
+
+    /**
      * 直播间访问用户信息
      * @param userId 用户编号
      * @param roomUid 直播间编号

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -411,6 +411,13 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     // 按分部强制开始为腾讯服务提供
     String TENCENT_RTC_SERVICE_PROVIDER = "tencent_rtc_service_provider";
 
+    // 微信公众号appid
+    String WECHAT_APPID = "wechat_appid";
+
+    // 微信公众号secret
+    String WECHAT_SECRET = "wechat_secret";
+
+
     static void checkActivityDate(String startTimeStr, String endTimeStr) {
         if(StringUtils.isEmpty(startTimeStr) || StringUtils.isEmpty(startTimeStr)){
             return;

+ 51 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.json.ali.AliJSONMap;
 import com.microsvc.toolkit.middleware.live.LivePluginContext;
 import com.microsvc.toolkit.middleware.live.LivePluginService;
 import com.microsvc.toolkit.middleware.live.impl.RongCloudLivePlugin;
@@ -56,7 +57,10 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.excel.POIUtil;
+import com.ym.mec.util.http.HttpUtil;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.jetbrains.annotations.NotNull;
@@ -1656,6 +1660,53 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     }
 
     /**
+     * 游客微信身份
+     *
+     * @param code 授权码
+     * @return 用户openId
+     */
+    @Override
+    public String visitorFingerprint(String code) {
+
+        // 微信公众号appId
+        String appId = sysConfigDao.findConfigValue(SysConfigService.WECHAT_APPID);
+        // 微信公众号secret
+        String secret = sysConfigDao.findConfigValue(SysConfigService.WECHAT_SECRET);
+
+        if (StringUtils.isAnyBlank(appId, secret, code)) {
+            // 若微信未配置,产生64位随机数
+            return RandomStringUtils.random(64);
+        }
+
+        try {
+            // 获取用户OpenId接口
+            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code";
+
+            // 封装请求参数
+            url = MessageFormat.format(url, appId, secret, code);
+
+            String wxMpOAuth2AccessTokenUrl = HttpUtil.get(url, null);
+            log.info("请求微信授权接口的参数:{}", wxMpOAuth2AccessTokenUrl);
+            if (StringUtils.isEmpty(wxMpOAuth2AccessTokenUrl)) {
+                throw new BizException("授权失败,请重新授权");
+            }
+            Map<String, Object> weChatRes = AliJSONMap.tomap(wxMpOAuth2AccessTokenUrl);
+
+            if (!weChatRes.containsKey("openid")) {
+                log.error("获取微信openId失败:[{}]", JSON.toJSONString(weChatRes));
+                throw new BizException("授权失败,请重新授权");
+            }
+
+            return MapUtils.getString(weChatRes, "openid", "");
+
+        } catch (Exception e) {
+            log.error("获取微信openId失败:[{}]", e.getMessage(), e);
+            throw new BizException("授权失败,请重新授权");
+        }
+
+    }
+
+    /**
      * 获取直播间游客信息
      * @param userId 游客编号
      * @param imLiveBroadcastRoomVo ImLiveBroadcastRoomVo

+ 11 - 0
mec-student/src/main/java/com/ym/mec/student/controller/open/OpenLiveBroadcastRoomController.java

@@ -38,6 +38,17 @@ public class OpenLiveBroadcastRoomController extends BaseController {
     @Resource
     private ImLiveBroadcastRoomService imLiveBroadcastRoomService;
 
+    @ApiOperation("直播间游客微信身份")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "code", value = "微信身份code", required = true, dataType = "String"),
+    })
+    @GetMapping("/visitorFingerprint")
+    public HttpResponseResult<String> visitorFingerprint(@RequestParam String code) {
+
+        // 游客访问直播间凭据信息
+        return succeed(imLiveBroadcastRoomService.visitorFingerprint(code));
+    }
+
     @ApiOperation("直播间游客访问凭据")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "roomUid", value = "直播间编号", required = true, dataType = "String"),

+ 37 - 0
mec-student/src/main/java/com/ym/mec/student/controller/open/OpenSysConfigController.java

@@ -0,0 +1,37 @@
+package com.ym.mec.student.controller.open;
+
+import com.ym.mec.biz.dal.entity.SysConfig;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/** 
+ * 系统配置控制层
+ */
+@RestController
+@Api(tags = "系统参数设置")
+@RequestMapping(value = "open/sysConfig")
+public class OpenSysConfigController extends BaseController {
+
+	@Autowired
+	private SysConfigService sysConfigService;
+
+	@ApiOperation(value = "查询参数")
+	@GetMapping(value = "queryByParamName")
+	public Object queryByParamName(String paramName) {
+		if(StringUtils.isBlank(paramName)){
+			return failed("参数不能为空");
+		}
+		return succeed(sysConfigService.findByParamName(paramName));
+	}
+}