Browse Source

保利威

he2802 4 năm trước cách đây
mục cha
commit
d6ecfaa1d2

+ 5 - 3
zhongzheng-api/src/main/java/com/zhongzheng/controller/polyv/PolyvVideoController.java

@@ -19,6 +19,8 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 /**
  * 保利威视频信息Controller
  *
@@ -39,11 +41,11 @@ public class PolyvVideoController extends BaseController {
 
     @ApiOperation("获取保利威视频小程序播放凭证")
     @GetMapping("/sign/{vid}")
-    public AjaxResult<String> getPlayMobileSign(@PathVariable("vid") String vid) throws Exception {
+    public AjaxResult getPlayMobileSign(@PathVariable("vid") String vid) throws Exception {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         String viewerId = String.valueOf(loginUser.getUser().getUserId());
-        String token = iPolyvVideoService.polyvbMobileSignRequest(vid,viewerId);
-        return AjaxResult.success("成功",token);
+        Map<String,Object> map = iPolyvVideoService.polyvbMobileSignRequest(vid,viewerId);
+        return AjaxResult.success(map);
     }
 
 

+ 7 - 0
zhongzheng-common/pom.xml

@@ -109,6 +109,13 @@
             <artifactId>javax.servlet-api</artifactId>
         </dependency>
 
+        <!-- 腾讯云 -->
+        <dependency>
+            <groupId>com.tencentcloudapi</groupId>
+            <artifactId>tencentcloud-sdk-java</artifactId>
+            <version>4.0.11</version>
+        </dependency>
+
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>

+ 27 - 1
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxTokenService.java

@@ -5,17 +5,28 @@ import cn.hutool.core.util.IdUtil;
 import cn.hutool.http.useragent.UserAgent;
 import cn.hutool.http.useragent.UserAgentUtil;
 import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.exception.user.UserPasswordNotMatchException;
+import com.zhongzheng.common.utils.MessageUtils;
+import com.zhongzheng.framework.manager.AsyncManager;
+import com.zhongzheng.framework.manager.factory.AsyncFactory;
+import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ip.AddressUtils;
 import com.zhongzheng.common.utils.ip.IpUtils;
+import com.zhongzheng.modules.user.service.IUserService;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
@@ -53,6 +64,9 @@ public class WxTokenService
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private IUserService iUserService;
+
     @Resource
     private AuthenticationManager authenticationManager;
 
@@ -63,6 +77,11 @@ public class WxTokenService
      */
     public ClientLoginUser getLoginUser(HttpServletRequest request)
     {
+        //测试用户
+        String test_token = request.getHeader("X-Auth-Token");
+        if("test".equals(test_token)){
+            return getTestUser();
+        }
         // 获取请求携带的令牌
         String token = getToken(request);
         if (Validator.isNotEmpty(token))
@@ -77,7 +96,14 @@ public class WxTokenService
         return null;
     }
 
-
+    private ClientLoginUser getTestUser(){
+        String unionId = "oQ2yp56PgQ-PfwN4vxTZhR5eTpzk";
+        User user = iUserService.queryByUnionId(unionId);
+        ClientLoginUser loginUser = new ClientLoginUser();
+        loginUser.setUser(user);
+        loginUser.setExpireTime(System.currentTimeMillis()+200);
+        return loginUser;
+    }
 
     /**
      * 设置用户身份信息

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/polyv/service/IPolyvVideoService.java

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 保利威视频信息Service接口
@@ -53,5 +54,5 @@ public interface IPolyvVideoService extends IService<PolyvVideo> {
 
 	String polyvbPcSignRequest(String VId,String viewerId) throws Exception;
 
-	String polyvbMobileSignRequest(String VId,String viewerId) throws Exception;
+	Map<String,Object> polyvbMobileSignRequest(String VId, String viewerId) throws Exception;
 }

+ 21 - 37
zhongzheng-system/src/main/java/com/zhongzheng/modules/polyv/service/impl/PolyvVideoServiceImpl.java

@@ -35,6 +35,8 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import static com.squareup.okhttp.internal.Util.md5Hex;
+
 /**
  * 保利威视频信息Service业务层处理
  *
@@ -137,49 +139,31 @@ public class PolyvVideoServiceImpl extends ServiceImpl<PolyvVideoMapper, PolyvVi
     }
 
     @Override
-    public String polyvbMobileSignRequest(String VId, String viewerId) throws Exception {
+    public Map<String,Object> polyvbMobileSignRequest(String VId, String viewerId) throws Exception {
         viewerId = "MOBILE_"+ viewerId;
         String redsKey = "PL_VIDEO_"+viewerId+VId;
-        String token = redisCache.getCacheObject(redsKey);
+/*        String token = redisCache.getCacheObject(redsKey);
         if(token!=null){
             return token;
-        }
-        String secretKey = poliv_token_secretkey;
+        }*/
+        String secretkey = poliv_token_secretkey;
         String userId = poliv_token_userid;
-        //业务参数
-        String url = "http://hls.videocc.net/service/v1/token";
-        String videoId = VId;
-        String ts = Long.toString(System.currentTimeMillis());
-        int expireTime = 30;//分钟
-        String disposable = "false"; //true:token仅一次有效
-        String iswxa = "1"; //是否微信小程序播放
+        String videoId = VId;  // 视频vid
+        long ts = System.currentTimeMillis();      // 时间戳
+        String extraParams = "HTML5";  // 自定义扩展参数
+        boolean disposable = false; // true 表示 token 仅一次有效。false 则表示在有效期内可以多次验证。默认为 false。
 
-        Map<String, String> requestMap = new HashMap<>();
-        requestMap.put("userId", userId);
-        requestMap.put("videoId", videoId);
-        requestMap.put("ts", ts);
-        requestMap.put("viewerId", viewerId);
-        requestMap.put("expires", String.valueOf((expireTime*60))); //令牌有效期半小时
-        requestMap.put("disposable", disposable);
-        requestMap.put("iswxa", iswxa);
-        //用md5进行签名
-        requestMap.put("sign", PolyvUtils.getSignMd5(requestMap, secretKey));
-        String response = HttpUtils.postFormBody(url, requestMap);
-        try {
-            //解析json
-            ObjectMapper objectMapper = new ObjectMapper();
-            TokenResponse tokenResponse = objectMapper.readValue(response, TokenResponse.class);
-            // 响应代码,200为成功,403为ts过期或签名错误,400为参数错误(例如缺少 userId 或 videoId)
-            if (tokenResponse.getCode() == 200) {
-                Map data = (Map) tokenResponse.getData();
-                token = data.get("token").toString();
-                redisCache.setCacheObject(redsKey, token, expireTime, TimeUnit.MINUTES);
-                return token;
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return null;
+        /* 将参数 userId、secretkey、videoId、ts、viewerIp、viewerIp、viewerId、viewerName、extraParams按照ASCKII升序 key + value + key + value ... +value 拼接
+         */
+        String concated = "extraParams" + extraParams + "ts" + ts + "userId" + userId + "videoId" + videoId + "viewerId" + viewerId  ;
+        // 首尾加上secretkey值
+        String plain = secretkey + concated + secretkey;
+        // 取大写MD5,可自行选择md5库
+        String sign = md5Hex(plain).toUpperCase();
+        Map<String,Object> map = new HashMap<>();
+        map.put("sign",sign);
+        map.put("ts",ts);
+        return map;
     }
 
 

+ 17 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/bo/FaceVo.java

@@ -0,0 +1,17 @@
+package com.zhongzheng.modules.tencentcloud.bo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+public class FaceVo {
+
+    private String Url;
+
+    private String BizToken;
+
+    private String RequestId;
+}

+ 17 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/domain/DetectAuth.java

@@ -0,0 +1,17 @@
+package com.zhongzheng.modules.tencentcloud.domain;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+public class DetectAuth {
+
+    private String Url;
+
+    private String BizToken;
+
+    private String RequestId;
+}

+ 10 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/IFaceService.java

@@ -0,0 +1,10 @@
+package com.zhongzheng.modules.tencentcloud.service;
+
+
+import com.zhongzheng.modules.tencentcloud.bo.FaceVo;
+
+public interface IFaceService {
+
+    FaceVo getFaceDetectAuth();
+
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/FaceServiceImpl.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.tencentcloud.service.impl;
+
+
+import com.zhongzheng.modules.system.service.ISysConfigService;
+import com.zhongzheng.modules.tencentcloud.bo.FaceVo;
+import com.zhongzheng.modules.tencentcloud.service.IFaceService;
+
+public class FaceServiceImpl implements IFaceService {
+
+
+    @Override
+    public FaceVo getFaceDetectAuth() {
+        return null;
+    }
+}