Commit 66a8f98d authored by daniel's avatar daniel

feat(wxUrl): 新增微信短链接接口

parent ece54f28
package com.dlbridge.jadp.plugins.cmpt.bean;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "小程序urlLink",description = "小程序urlLink")
public class UrlLinkParam {
@ApiModelProperty(value = "页面参数",allowEmptyValue = true)
String query;
@ApiModelProperty(value = "跳转的页面",allowEmptyValue = true)
String page="pages/index/index";
@ApiModelProperty(value = "正式版为 release,体验版为 trial,开发版为 develop" )
String envVersion="release";
@ApiModelProperty(value = "赛客id" )
Integer cmptId;
}
package com.dlbridge.jadp.plugins.cmpt.bean;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "小程序UrlScheme",description = "小程序UrlScheme")
public class UrlSchemeParam {
@ApiModelProperty(value = "页面参数",allowEmptyValue = true)
String query;
@ApiModelProperty(value = "跳转的页面",allowEmptyValue = true)
String page="pages/index/index";
@ApiModelProperty(value = "正式版为 release,体验版为 trial,开发版为 develop" )
String envVersion="release";
@ApiModelProperty(value = "赛客id" )
Integer cmptId;
}
\ No newline at end of file
package com.dlbridge.jadp.plugins.cmpt.web; package com.dlbridge.jadp.plugins.cmpt.web;
import cn.hutool.json.JSONUtil;
import com.dlbridge.jadp.plugins.cmpt.bean.Partner; import com.dlbridge.jadp.plugins.cmpt.bean.Partner;
import com.dlbridge.jadp.plugins.cmpt.bean.UrlLinkParam;
import com.dlbridge.jadp.plugins.cmpt.bean.UrlSchemeParam;
import com.dlbridge.jadp.plugins.cmpt.dao.model.Cmpt; import com.dlbridge.jadp.plugins.cmpt.dao.model.Cmpt;
import com.dlbridge.jadp.plugins.cmpt.service.CmptService; import com.dlbridge.jadp.plugins.cmpt.service.CmptService;
import com.dlbridge.jadp.plugins.cmpt.service.PartnerService; import com.dlbridge.jadp.plugins.cmpt.service.PartnerService;
import com.dlbridge.jadp.plugins.cmpt.utils.HttpUtil; import com.dlbridge.jadp.plugins.cmpt.utils.HttpUtil;
import com.dlbridge.jadp.plugins.cmpt.utils.json.JsonUtil; import com.dlbridge.jadp.plugins.cmpt.utils.json.JsonUtil;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.neusoft.www.utils.web.Result;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.json.JSONObject; import org.json.JSONObject;
import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ValueOperations;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.client.RestClientException; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
...@@ -25,7 +31,9 @@ import javax.servlet.http.HttpServletResponse; ...@@ -25,7 +31,9 @@ import javax.servlet.http.HttpServletResponse;
import java.awt.*; import java.awt.*;
import java.awt.geom.RoundRectangle2D; import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.*; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL; import java.net.URL;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -48,6 +56,15 @@ public class ResourcesController { ...@@ -48,6 +56,15 @@ public class ResourcesController {
@Resource @Resource
private ValueOperations valueOperations; private ValueOperations valueOperations;
/**
* 获取url link
*/
public final static String GENERATE_URL_LINK = "https://api.weixin.qq.com/wxa/generate_urllink";
/**
* 获取 SCHEME
*/
public final static String GENERATE_SCHEME = "https://api.weixin.qq.com/wxa/generatescheme";
/** /**
* 小程序码生成 * 小程序码生成
* @param cmptid 赛事ID * @param cmptid 赛事ID
...@@ -81,6 +98,8 @@ public class ResourcesController { ...@@ -81,6 +98,8 @@ public class ResourcesController {
} }
} }
@RequestMapping("/download/{cmptid}") @RequestMapping("/download/{cmptid}")
public void download(@PathVariable("cmptid") Integer cmptid, HttpServletResponse response) throws IOException { public void download(@PathVariable("cmptid") Integer cmptid, HttpServletResponse response) throws IOException {
response.addHeader("Content-Type", "application/octet-stream"); response.addHeader("Content-Type", "application/octet-stream");
...@@ -89,7 +108,6 @@ public class ResourcesController { ...@@ -89,7 +108,6 @@ public class ResourcesController {
obj.put("scene", "raceId=" + cmptid); obj.put("scene", "raceId=" + cmptid);
obj.put("width", "1280"); obj.put("width", "1280");
String partnerId = cmptService.getPartnerId(cmptid); String partnerId = cmptService.getPartnerId(cmptid);
try { try {
// 重新获取小程序access_token // 重新获取小程序access_token
String accessToken = getMicroAccessToken(partnerId); String accessToken = getMicroAccessToken(partnerId);
...@@ -214,4 +232,81 @@ public class ResourcesController { ...@@ -214,4 +232,81 @@ public class ResourcesController {
return accessToken; return accessToken;
} }
// 生成小程序urlLink
/**
* @param urlLinkParam 参数
* @return string
* @link <a href="https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-link/generateUrlLink.html">...</a>
*/
@PostMapping("/wxUrlLink")
public Result<String> generateUrlLink(@RequestBody UrlLinkParam urlLinkParam) {
String partnerId = cmptService.getPartnerId(urlLinkParam.getCmptId());
try {
// 获取小程序 access_token
String accessToken = getMicroAccessToken(partnerId);
// Creating the parameters
cn.hutool.json.JSONObject params = new cn.hutool.json.JSONObject();
params.set("path", urlLinkParam.getPage());
params.set("query", urlLinkParam.getQuery());
params.set("env_version", urlLinkParam.getEnvVersion());
// 构造请求参数
String jsonParams = JsonUtil.toJson(params);
// 发起请求
String response = HttpUtil.post(GENERATE_URL_LINK, accessToken, "application/json", jsonParams);
// 解析返回结果
cn.hutool.json.JSONObject result = JSONUtil.parseObj(response);
if (result.containsKey("url_link")) {
return Result.success().setContent(result.getStr("url_link"));
} else {
log.error("Failed to generate UrlLink: {}", result);
return null;
}
} catch (Exception e) {
log.error("Error generating UrlLink: {}", e.getMessage(), e);
// 如果失败,重置 access_token
resetMicroAccessToken(partnerId);
return null;
}
}
/**
* @param urlSchemeParam 参数
* @return string
* @link <a href="https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-link/generateUrlLink.html">...</a>
*/
@PostMapping("/wxUrlSchema")
public Result<String> generateUrlScheme(@RequestBody UrlSchemeParam urlSchemeParam) {
String partnerId = cmptService.getPartnerId(urlSchemeParam.getCmptId());
try {
// 获取小程序 access_token
String accessToken = getMicroAccessToken(partnerId);
// 构造请求参数
cn.hutool.json.JSONObject params = new cn.hutool.json.JSONObject();
cn.hutool.json.JSONObject jump_wxa = new cn.hutool.json.JSONObject();
jump_wxa.set("path", urlSchemeParam.getPage());
jump_wxa.set("query", urlSchemeParam.getQuery());
jump_wxa.set("env_version", urlSchemeParam.getEnvVersion());
params.set("jump_wxa", jump_wxa);
// 使用 Hutool 的 toString() 来确保请求体是正确的 JSON 格式
String jsonParams = params.toString();
// 输出调试信息,确认请求的 JSON 格式
System.out.println("Sending JSON: " + jsonParams);
// 发起请求
String response = HttpUtil.post(GENERATE_SCHEME, accessToken, "application/json", jsonParams);
// 解析返回结果
cn.hutool.json.JSONObject result = JSONUtil.parseObj(response);
if (result.containsKey("openlink")) {
return Result.success().setContent(result.getStr("openlink"));
} else {
log.error("Failed to generate UrlSchema: {}", result);
return null;
}
} catch (Exception e) {
log.error("Error generating UrlSchema: {}", e.getMessage(), e);
// 如果失败,重置 access_token
resetMicroAccessToken(partnerId);
return null;
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment