当前位置: 首页 > ds >正文

Java生成微信小程序码及小程序短链接

使用wx-java-miniapp-spring-boot-starter 生成微信小程序码及小程序短链接

  1. 在pom.xml文件中引入依赖
		<dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-miniapp-spring-boot-starter</artifactId><version>4.7.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
  1. application.yml中配置小程序参数
spring:application:name: wx-posterdata:redis:host: 192.168.1.111port: 6379password: 123456database: 0wx:miniapp:configs:scm:appid: wx1234567890abcdefsecret: test-567890abcdef1234567890abcdefmsgDataFormat: JSONmall:appid: wxe8db97a0603abcdesecret: test-35f85ebb2135bdcd9e154de12345msgDataFormat: JSON
  1. 加载配置及实例化服务类
@Data
@Configuration
@ConfigurationProperties(prefix = "wx.miniapp")
public class WxMaProperties {private Map<String, Config> configs;@Datapublic static class Config {private String appid;private String secret;private String msgDataFormat;}
}@Configuration
public class WxMaConfiguration {@Autowiredprivate WxMaProperties properties;@Autowiredprivate StringRedisTemplate redisTemplate;@Beanpublic Map<String, WxMaConfig> wxMaConfigs() {Map<String, WxMaConfig> configMap = new HashMap<>();WxRedisOps wxRedisOps = new RedisTemplateWxRedisOps(redisTemplate);properties.getConfigs().forEach((key, config) -> {WxMaRedisBetterConfigImpl maConfig = new WxMaRedisBetterConfigImpl(wxRedisOps, "wechat");maConfig.setAppid(config.getAppid());maConfig.setSecret(config.getSecret());maConfig.setMsgDataFormat(config.getMsgDataFormat());configMap.put(key, maConfig);});return configMap;}@Beanpublic WxMaService wxMaService() {WxMaService service = new WxMaServiceImpl();service.setMultiConfigs(wxMaConfigs());return service;}
}
  1. 根据微信小程序标识及页面路径,生成小程序码
@Slf4j
@Service
public class WxMaManagerService {@Autowiredprivate WxMaService wxMaService;/*** 生成小程序码*/@SneakyThrowspublic byte[] createWxaCode(WechatGenerateQrCodeParam param) {WxMaService service = wxMaService.switchoverTo(param.getAppKey());try {return service.getQrcodeService().createWxaCodeUnlimitBytes(param.getScene(), param.getPage(), param.getCheckPath(), param.getEnvVersion(),param.getWidth(), param.getAutoColor(), param.getLineColor(), param.getIsHyaline());} catch (Exception e) {if (isTokenInvalid(e)) {// 如果token无效,刷新一次后重试service.getWxMaConfig().expireAccessToken();return service.getQrcodeService().createWxaCodeUnlimitBytes(param.getScene(), param.getPage(), param.getCheckPath(), param.getEnvVersion(),param.getWidth(), param.getAutoColor(), param.getLineColor(), param.getIsHyaline());}throw new RuntimeException("生成小程序码失败", e);}}/*** 生成短链接*/@SneakyThrowspublic String createShortLink(WechatGenerateShortLinkParam param) {WxMaService service = wxMaService.switchoverTo(param.getAppKey());// 短期有效GenerateShortLinkRequest shortLinkRequest = GenerateShortLinkRequest.builder().pageUrl(param.getPageUrl()).isPermanent(false).build();try {return service.getLinkService().generateShortLink(shortLinkRequest);} catch (Exception e) {if (isTokenInvalid(e)) {// 如果token无效,刷新一次后重试service.getWxMaConfig().expireAccessToken();return service.getLinkService().generateShortLink(shortLinkRequest);}throw new RuntimeException("生成短链接失败", e);}}/*** 判断是否是token无效的错误*/private boolean isTokenInvalid(Exception e) {String errorMsg = e.getMessage();return StringUtils.containsIgnoreCase(errorMsg, "access_token")&& (StringUtils.containsIgnoreCase(errorMsg, "invalid")|| StringUtils.containsIgnoreCase(errorMsg, "expired"));}
}

完整代码地址 https://gitee.com/galen.zhang/wx-poster

http://www.xdnf.cn/news/2748.html

相关文章:

  • TensorFlow深度学习框架:从入门到精通的完整指南
  • 基于Java,SSH,Vue电子商品交易二手平台仿闲鱼转转验机系统设计
  • Eureka 深度解析:从原理到部署的全场景实践
  • 喷泉码技术在现代物联网中的应用 设计
  • 组装 (DIY) 一台显示器 (4K 屏支持 4 画面分屏 PBP 1080p x4)
  • 前端基础面试题(4-8)
  • 推荐 1 款 9.3k stars 的全景式开源数据分析与可视化工具
  • Python爬虫(9)Python数据存储实战:基于pymysql的MySQL数据库操作详解
  • 疫苗接种体系进入“全生命周期”时代:公共卫生治理再提速
  • 学习记录:DAY19
  • AI在Java中的场景面试题深度解析
  • 从外卖大战看O2O新趋势:上门私厨平台系统架构设计解析
  • kalibr:相机模型
  • 8.Three.js中的 StereoCamera 立体相机详解+示例代码
  • 第十三章-PHP MySQL扩展
  • 处理对象集合,输出Map<String, Map<String, List<MyObject>>>格式数据,无序组合键处理方法
  • Android学习总结之Java篇(一)
  • 记一次pdf转Word的技术经历
  • Mioty|采用报文分割(Telegram Splitting)以提高抗干扰能力的无线通信技术
  • elasticsearch底层模块解析与实践系列
  • 基于大模型的胆总管结石全流程预测与临床应用研究报告
  • 基于 SpringBoot 与 Redis 的缓存预热案例
  • 【计算机视觉】CV实战项目-高分辨率遥感图像语义分割:High-Resolution-Remote-Sensing-Semantic-Segmentation
  • 《Vue3学习手记6》
  • 人工智能期末复习1
  • Java8 后接口的用法总结
  • 「Mac畅玩AIGC与多模态04」开发篇01 - 创建第一个 LLM 对话应用
  • 深入理解布隆过滤器:参数设定与优化
  • EXCEL常用函数公式和VBA汇总第二篇
  • CUDA Stream 回调函数示例代码