From a548d16436bf7e761c34d751ccec67c19678c88c Mon Sep 17 00:00:00 2001 From: xhxu Date: Tue, 12 Apr 2022 23:54:18 +0800 Subject: [PATCH] update tt --- .../service/toutiao/api/TtOpenMaService.java | 2 +- .../toutiao/api/bean/TtOpenMaQrcode.java | 34 ++++++++++++++ .../toutiao/api/impl/TtOpenMaServiceImpl.java | 10 ++-- .../controller/WxWeappInfoController.java | 47 +++++++++++++++++++ 4 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/service/toutiao/api/bean/TtOpenMaQrcode.java diff --git a/mallinkService/src/main/java/com/iformall/service/toutiao/api/TtOpenMaService.java b/mallinkService/src/main/java/com/iformall/service/toutiao/api/TtOpenMaService.java index 184b002..5295848 100644 --- a/mallinkService/src/main/java/com/iformall/service/toutiao/api/TtOpenMaService.java +++ b/mallinkService/src/main/java/com/iformall/service/toutiao/api/TtOpenMaService.java @@ -114,7 +114,7 @@ public interface TtOpenMaService extends TtMaService { /** * 2. 获取体验小程序的体验二维码 */ - String API_TEST_QRCODE = "https://api.weixin.qq.com/wxa/get_qrcode"; + String API_TEST_QRCODE = "https://open.microapp.bytedance.com/openapi/v1/microapp/app/qrcode"; /** * 3. 获取授权小程序帐号的可选类目 diff --git a/mallinkService/src/main/java/com/iformall/service/toutiao/api/bean/TtOpenMaQrcode.java b/mallinkService/src/main/java/com/iformall/service/toutiao/api/bean/TtOpenMaQrcode.java new file mode 100644 index 0000000..be54b44 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/toutiao/api/bean/TtOpenMaQrcode.java @@ -0,0 +1,34 @@ +package com.iformall.service.toutiao.api.bean; + +import cn.binarywang.wx.miniapp.bean.AbstractWxMaQrcodeWrapper; +import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author Binary Wang + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class TtOpenMaQrcode extends AbstractWxMaQrcodeWrapper implements Serializable { + + private String version; + + private String path; + + public TtOpenMaQrcode(String version, String path) { + this.version = version; + this.path = path; + } + + public static TtOpenMaQrcode fromJson(String json) { + return WxMaGsonBuilder.create().fromJson(json, TtOpenMaQrcode.class); + } + + @Override + public String toString() { + return WxMaGsonBuilder.create().toJson(this); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/toutiao/api/impl/TtOpenMaServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/toutiao/api/impl/TtOpenMaServiceImpl.java index 0430860..1c12df9 100644 --- a/mallinkService/src/main/java/com/iformall/service/toutiao/api/impl/TtOpenMaServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/toutiao/api/impl/TtOpenMaServiceImpl.java @@ -8,7 +8,10 @@ import com.google.gson.JsonObject; import com.iformall.service.toutiao.api.TtOpenComponentService; import com.iformall.service.toutiao.api.TtOpenMaService; import com.iformall.service.toutiao.api.bean.TtOpenGsonBuilder; +import com.iformall.service.toutiao.api.bean.TtOpenMaQrcode; import com.iformall.service.toutiao.api.bean.TtOpenResult; +import com.iformall.service.toutiao.miniapp.TtMaQrcode; +import com.iformall.service.toutiao.miniapp.TtQrcodeRequestExecutor; import com.iformall.service.toutiao.miniapp.impl.TtMaServiceImpl; import lombok.extern.java.Log; import me.chanjar.weixin.common.error.WxErrorException; @@ -316,9 +319,10 @@ public class TtOpenMaServiceImpl extends TtMaServiceImpl implements TtOpenMaServ */ @Override public File getTestQrcode(String pagePath, Map params) throws WxErrorException { - WxMaQrcodeParam qrcodeParam = WxMaQrcodeParam.create(pagePath); - qrcodeParam.addPageParam(params); - return execute(MaQrCodeRequestExecutor.create(getRequestHttp()), API_TEST_QRCODE, qrcodeParam); + String uri = API_TEST_QRCODE +"?component_appid="+ttOpenComponentService.getWxOpenConfigStorage().getComponentAppId() + +"&authorizer_access_token="+getAccessToken(false); + final TtQrcodeRequestExecutor executor = new TtQrcodeRequestExecutor(this.getRequestHttp()); + return this.execute(executor, uri, new TtOpenMaQrcode("audit",pagePath)); } /** diff --git a/mlToutiaoOpen/src/main/java/com/iformall/controller/WxWeappInfoController.java b/mlToutiaoOpen/src/main/java/com/iformall/controller/WxWeappInfoController.java index ee3b7d1..11be335 100644 --- a/mlToutiaoOpen/src/main/java/com/iformall/controller/WxWeappInfoController.java +++ b/mlToutiaoOpen/src/main/java/com/iformall/controller/WxWeappInfoController.java @@ -46,6 +46,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; import java.util.*; /** @@ -1048,4 +1056,43 @@ public class WxWeappInfoController extends BaseController { * 22. oauth2refreshAccessToken */ + + + @ApiOperation("获取体验小程序的体验二维码") + @GetMapping("/getQrcode") + public void getQrcode(@RequestParam(value = "appId") String appId, @RequestParam(value = "pagePath") String pagePath, + @RequestParam(value = "params", required = false) Map params, + HttpServletResponse response, HttpServletRequest req) { + try { + TtOpenMaService openMaService = openService.getTtOpenComponentService().getTtMaServiceByAppid(appId); + File file = openMaService.getTestQrcode(pagePath,params); + ServletOutputStream out = response.getOutputStream(); + + response.reset(); + response.setContentType("image/jpeg"); + String agent = req.getHeader("user-agent"); + String filename = "QRCode.jpg"; + if (agent.contains("Firefox")) { + response.setHeader("Content-disposition", + "attachment; filename=" + new String(filename.getBytes("GB2312"),"ISO-8859-1")); + } else { + response.setHeader("Content-disposition", + "attachment; filename=" + URLEncoder.encode(filename,"UTF-8")); + } + // 循环取出流中的数据 + byte[] b = new byte[1024]; + int len; + InputStream inStream = new FileInputStream(file); + while ((len = inStream.read(b)) > 0) + response.getOutputStream().write(b, 0, len); + inStream.close(); + + } catch (WxErrorException e) { + logger.error(e.getMessage()); + } catch (IOException e) { + logger.error(e.getMessage()); + } + + } + }