|
@@ -1,5 +1,6 @@
|
|
|
package com.fs.course.service.impl;
|
|
|
|
|
|
+import cn.binarywang.wx.miniapp.api.WxMaService;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
@@ -10,6 +11,7 @@ import com.fs.common.utils.StringUtils;
|
|
|
import com.fs.common.utils.date.DateUtil;
|
|
|
import com.fs.company.mapper.CompanyUserMapper;
|
|
|
import com.fs.config.cloud.CloudHostProper;
|
|
|
+import com.fs.core.config.WxMaConfiguration;
|
|
|
import com.fs.course.config.CourseConfig;
|
|
|
import com.fs.course.domain.*;
|
|
|
import com.fs.course.mapper.FsCourseDomainNameMapper;
|
|
@@ -20,6 +22,8 @@ import com.fs.course.param.FsCourseLinkCreateParam;
|
|
|
import com.fs.course.param.FsCourseLinkRoomParam;
|
|
|
import com.fs.course.service.IFsCourseLinkService;
|
|
|
import com.fs.course.service.IFsUserCourseService;
|
|
|
+import com.fs.his.config.FsSysConfig;
|
|
|
+import com.fs.his.utils.ConfigUtil;
|
|
|
import com.fs.qw.domain.QwGroupChat;
|
|
|
import com.fs.qw.domain.QwGroupChatUser;
|
|
|
import com.fs.qw.domain.QwUser;
|
|
@@ -32,13 +36,26 @@ import com.fs.system.service.ISysConfigService;
|
|
|
import com.fs.voice.utils.StringUtil;
|
|
|
import lombok.Synchronized;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
|
|
|
+import me.chanjar.weixin.common.error.WxErrorException;
|
|
|
+import me.chanjar.weixin.mp.api.WxMpService;
|
|
|
+import org.apache.http.HttpEntity;
|
|
|
+import org.apache.http.client.ClientProtocolException;
|
|
|
+import org.apache.http.client.methods.HttpPost;
|
|
|
+import org.apache.http.entity.StringEntity;
|
|
|
+import org.apache.http.impl.client.CloseableHttpClient;
|
|
|
+import org.apache.http.impl.client.HttpClients;
|
|
|
+import org.apache.http.util.EntityUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.net.URLDecoder;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
@@ -661,4 +678,149 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 生成跳转微信小程序的链接 base
|
|
|
+ *
|
|
|
+ * @param appid 微信appid
|
|
|
+ * @param path 跳转页面路径
|
|
|
+ * @param query 需要传参的String
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getWxAppLink(String appid, String path, String query) {
|
|
|
+
|
|
|
+ StringBuilder wxAppLink = new StringBuilder("weixin://dl/business/?");
|
|
|
+ try {
|
|
|
+ wxAppLink.append("appid=").append(appid);
|
|
|
+ wxAppLink.append("&path=").append(path);
|
|
|
+ String encodedQuery = URLEncoder.encode(URLEncoder.encode(query, StandardCharsets.UTF_8.toString()));
|
|
|
+ wxAppLink.append("&query=").append(encodedQuery);
|
|
|
+// wxAppLink.append("&env_version=trial");
|
|
|
+// if(StringUtils.isNotBlank(envVersion)){
|
|
|
+// wxAppLink.append("&env_version=").append(envVersion);
|
|
|
+// }
|
|
|
+
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ log.error("生成跳转微信小程序的链接失败" + e.getMessage());
|
|
|
+ return "生成失败";
|
|
|
+ }
|
|
|
+ return wxAppLink.toString();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String testGetAppLink() {
|
|
|
+ String pageLink = "/pages_course/video.html?course\\u003d{\\\"companyId\\\":100,\\\"companyUserId\\\":2020,\\\"corpId\\\":\\\"ww51717e2b71d5e2d3\\\",\\\"courseId\\\":63,\\\"link\\\":\\\"1943203055923101696\\\",\\\"linkType\\\":3,\\\"qwExternalId\\\":20812637,\\\"qwUserId\\\":\\\"9112\\\",\\\"videoId\\\":400}";
|
|
|
+ String miniprogramAppid = "wx76cb55db092a41ae";
|
|
|
+ if (StringUtils.isNotBlank(pageLink)) {
|
|
|
+
|
|
|
+ //解析pageLink
|
|
|
+ String[] split = pageLink.split("\\?");
|
|
|
+ if (split.length == 2 && split[0].length() > 0 && split[1].length() > 0) {
|
|
|
+ //处理页面路径
|
|
|
+ String pageUrl =split[0];
|
|
|
+ if(pageUrl.startsWith("/")){
|
|
|
+ pageUrl = pageUrl.substring(1);
|
|
|
+ }
|
|
|
+ if(pageUrl.contains(".html")){
|
|
|
+ pageUrl = pageUrl.replace(".html", "");
|
|
|
+ }
|
|
|
+ //处理参数
|
|
|
+ String query = split[1];
|
|
|
+ query = query.replace("\\u003d", "=");
|
|
|
+ String wxAppLink = getWxAppLink(miniprogramAppid, pageUrl, query);
|
|
|
+ return wxAppLink;
|
|
|
+ } else {
|
|
|
+ return "页面链接错误,获取失败";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return pageLink;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取跳转微信小程序的链接地址
|
|
|
+ * @param linkStr
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String getGotoWxAppLink(String linkStr) {
|
|
|
+// CloseableHttpClient client = null;
|
|
|
+// try {
|
|
|
+// client = HttpClients.createDefault();
|
|
|
+// String[] split = linkStr.split("\\?");
|
|
|
+// if (split.length == 2 && split[0].length() > 0 && split[1].length() > 0) {
|
|
|
+// //处理页面路径
|
|
|
+// String pageUrl = split[0];
|
|
|
+// if (pageUrl.startsWith("/")) {
|
|
|
+// pageUrl = pageUrl.substring(1);
|
|
|
+// }
|
|
|
+// //处理参数
|
|
|
+// String query = split[1];
|
|
|
+// String json = configService.selectConfigByKey("course.config");
|
|
|
+// CourseConfig config = JSON.parseObject(json, CourseConfig.class);
|
|
|
+// String miniprogramAppid = config.getMiniprogramAppid();
|
|
|
+// if (StringUtils.isBlank(miniprogramAppid)) {
|
|
|
+// return "未配置点播小程序id";
|
|
|
+// }
|
|
|
+// if(StringUtils.isBlank(code)){
|
|
|
+// return "参数错误,请传入code";
|
|
|
+// }
|
|
|
+// //获取微信token
|
|
|
+// final WxMaService wxService = WxMaConfiguration.getMaService("wx76cb55db092a41ae");
|
|
|
+// String token = wxService.getAccessToken();
|
|
|
+// HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/generate_urllink?access_token=" + token);
|
|
|
+// JSONObject bodyObj = new JSONObject();
|
|
|
+// bodyObj.put("path", pageUrl);
|
|
|
+// bodyObj.put("query", query);
|
|
|
+// log.info("微信小程序请求参数打印:{}", bodyObj.toJSONString());
|
|
|
+// StringEntity entity = new StringEntity(bodyObj.toJSONString(),"UTF-8");
|
|
|
+// httpPost.setEntity(entity);
|
|
|
+// httpPost.setHeader("Content-type", "application/json");
|
|
|
+// HttpEntity response = client.execute(httpPost).getEntity();
|
|
|
+// String responseString = EntityUtils.toString(response);
|
|
|
+// log.info("微信小程序接口响应数据:{}", responseString);
|
|
|
+// JSONObject jsonObject = JSONObject.parseObject(responseString);
|
|
|
+// if(null != jsonObject && !jsonObject.isEmpty() && jsonObject.containsKey("url_link")){
|
|
|
+// return jsonObject.getString("url_link");
|
|
|
+// }
|
|
|
+// } else {
|
|
|
+// return "页面链接错误,获取失败";
|
|
|
+// }
|
|
|
+//
|
|
|
+// } catch (WxErrorException e) {
|
|
|
+// throw new RuntimeException(e);
|
|
|
+// } catch (ClientProtocolException e) {
|
|
|
+// throw new RuntimeException(e);
|
|
|
+// } catch (IOException e) {
|
|
|
+// throw new RuntimeException(e);
|
|
|
+// }
|
|
|
+ String json = configService.selectConfigByKey("course.config");
|
|
|
+ CourseConfig config = JSON.parseObject(json, CourseConfig.class);
|
|
|
+ String miniprogramAppid = config.getMiniprogramAppid();
|
|
|
+ if (StringUtils.isBlank(miniprogramAppid)) {
|
|
|
+ return "未配置点播小程序id";
|
|
|
+ }
|
|
|
+// String envVersion = "trial";
|
|
|
+// String envVersion = version;
|
|
|
+ if (StringUtils.isNotBlank(linkStr)) {
|
|
|
+ //解析pageLink
|
|
|
+ String[] split = linkStr.split("\\?");
|
|
|
+ if (split.length == 2 && split[0].length() > 0 && split[1].length() > 0) {
|
|
|
+ //处理页面路径
|
|
|
+ String pageUrl =split[0];
|
|
|
+ if(pageUrl.startsWith("/")){
|
|
|
+ pageUrl = pageUrl.substring(1);
|
|
|
+ }
|
|
|
+ //处理参数
|
|
|
+ String query = split[1];
|
|
|
+// query = query.replace("\\u003d", "=");
|
|
|
+ String wxAppLink = getWxAppLink(miniprogramAppid, pageUrl, query);
|
|
|
+ return wxAppLink;
|
|
|
+ } else {
|
|
|
+ return "页面链接错误,获取失败";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
}
|