From 7e6cd2f150f93500f233e674d9cdda3640030b94 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 20 May 2021 18:37:31 +0800 Subject: [PATCH] tt --- .../douyin/miniapp/api/TtMaQrcode.java | 35 +++++++++++++ .../douyin/miniapp/api/TtMaQrcodeService.java | 31 +++++++++++ .../api/impl/TtMaQrcodeServiceImpl.java | 26 ++++++++++ .../controller/base/BaseController.java | 52 +++++++++++++++++++ 4 files changed, 144 insertions(+) create mode 100644 mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaQrcode.java create mode 100644 mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaQrcodeService.java create mode 100644 mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaQrcodeServiceImpl.java diff --git a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaQrcode.java b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaQrcode.java new file mode 100644 index 000000000..d041f204d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaQrcode.java @@ -0,0 +1,35 @@ +package com.iformall.douyin.miniapp.api; + +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 TtMaQrcode extends AbstractWxMaQrcodeWrapper implements Serializable { + private static final long serialVersionUID = 5777119669111011584L; + private String appname; + private String path; + private int width = 430; + + public TtMaQrcode(String appname, String path, int width) { + this.appname = appname; + this.path = path; + this.width = width; + } + + public static TtMaQrcode fromJson(String json) { + return WxMaGsonBuilder.create().fromJson(json, TtMaQrcode.class); + } + + @Override + public String toString() { + return WxMaGsonBuilder.create().toJson(this); + } +} diff --git a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaQrcodeService.java b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaQrcodeService.java new file mode 100644 index 000000000..f212aae8e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/TtMaQrcodeService.java @@ -0,0 +1,31 @@ +package com.iformall.douyin.miniapp.api; + +import me.chanjar.weixin.common.error.WxErrorException; + +import java.io.File; + +/** + *
+ * 二维码相关操作接口.
+ *
+ * 
+ * + * @author Binary Wang + */ +public interface TtMaQrcodeService { + + String GET_TTACODE_URL = "https://developer.toutiao.com/api/apps/qrcode"; + + + /** + * 接口A: 获取小程序码. + * + * @param path 不能为空,最大长度 128 字节 + * @param width 默认430 二维码的宽度 + * @return 文件对象 + * @throws WxErrorException 异常 + */ + File createTtaCode(String appname, String path, int width) throws WxErrorException; + + +} diff --git a/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaQrcodeServiceImpl.java b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaQrcodeServiceImpl.java new file mode 100644 index 000000000..d12fb77aa --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/douyin/miniapp/api/impl/TtMaQrcodeServiceImpl.java @@ -0,0 +1,26 @@ +package com.iformall.douyin.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.util.QrcodeRequestExecutor; +import com.iformall.douyin.miniapp.api.TtMaQrcode; +import com.iformall.douyin.miniapp.api.TtMaQrcodeService; +import com.iformall.douyin.miniapp.api.TtMaService; +import lombok.AllArgsConstructor; +import me.chanjar.weixin.common.error.WxErrorException; + +import java.io.File; + +/** + * @author Binary Wang + */ +@AllArgsConstructor +public class TtMaQrcodeServiceImpl implements TtMaQrcodeService { + + private TtMaService ttMaService; + + @Override + public File createTtaCode(String appname, String path, int width) throws WxErrorException { + final QrcodeRequestExecutor executor = new QrcodeRequestExecutor(this.ttMaService.getRequestHttp()); + return this.ttMaService.execute(executor, GET_TTACODE_URL, new TtMaQrcode(appname,path, width)); + } + +} diff --git a/mallinkTTAdmin/src/main/java/com/iformall/controller/base/BaseController.java b/mallinkTTAdmin/src/main/java/com/iformall/controller/base/BaseController.java index 37d7924ed..4ca648dff 100644 --- a/mallinkTTAdmin/src/main/java/com/iformall/controller/base/BaseController.java +++ b/mallinkTTAdmin/src/main/java/com/iformall/controller/base/BaseController.java @@ -6,12 +6,19 @@ import java.text.SimpleDateFormat; import java.util.Date; import com.iformall.domain.po.MallUserInfo; +import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.douyin.miniapp.api.TtMaService; +import com.iformall.service.WxAppinfoService; import com.iformall.shiro.UserSession; +import com.iformall.utils.Constant; import com.iformall.utils.IPUtil; +import com.iformall.utils.MaUtil; +import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.session.Session; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RestController; @@ -23,6 +30,9 @@ import javax.servlet.http.HttpServletRequest; @RestController public class BaseController { + @Autowired + private WxAppinfoService wxAppinfoService; + @InitBinder public void InitBinder(WebDataBinder dataBinder) { dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() { @@ -60,6 +70,22 @@ public class BaseController { // return tenantId; // } + public TtMaService getWeappServiceByAppInfo(WxAppinfo appinfo) { + TtMaService ttMaService = MaUtil.getTtappService(appinfo); + if (StringUtils.isBlank(appinfo.getAccessToken())) { + // 如果没有accessToken,主动获取保存到数据库中,下次访问可以拿来使用 + updateAppAccessToken(appinfo, ttMaService); + + } else { + // 检查token是否已过期, 1小时就重新获取 + Date curDate = new Date(); + if (curDate.getTime() > appinfo.getLastTokenTime().getTime() + Constant.H_EXPIRE) { + updateAppAccessToken(appinfo, ttMaService); + } + } + return ttMaService; + } + /** * 返回租户信息 * 集团版帐号tenantId为空,parentTenantId为集团tenantId @@ -106,6 +132,32 @@ public class BaseController { return null; } + /** + * WxAppInfo更新accessToken + * + * @param wxAppinfo + * @param TtMaService + */ + private void updateAppAccessToken(WxAppinfo wxAppinfo, TtMaService TtMaService) { + try { + String accessToken = TtMaService.getAccessToken(true); + WxAppinfo updateApp = new WxAppinfo(); + updateApp.setId(wxAppinfo.getId()); + updateApp.setAccessToken(accessToken); + updateApp.setLastTokenTime(new Date()); + updateApp.setExpiresIn(7200); + wxAppinfo.setAccessToken(updateApp.getAccessToken()); + wxAppinfo.setLastTokenTime(updateApp.getLastTokenTime()); + wxAppinfo.setExpiresIn(updateApp.getExpiresIn()); + wxAppinfoService.saveOrUpdate(updateApp); + + } catch (WxErrorException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + public String getIpAddr() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String ipaddress = IPUtil.getIpAddr(request);