shangke 2 years ago
parent
commit
983d40bb78

+ 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

@@ -401,6 +401,13 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     // 游客默认头像
     String VISITOR_DEFAULT_AVATAR = "visitor_default_avatar";
 
+    // 微信公众号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"),