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.pswp.cn/web/78152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78152.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78152.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何讓通義千問大模型支持結構化輸出?

之前的文章提到通義千問API無法通過with_structured_output/json schema的方式支持結構化輸出&#xff0c;如果就是想使用通義千問大模型做結構化輸出&#xff0c;應該怎么辦呢&#xff1f;有兩種辦法 使用Ollama來運行通義千問大模型 從Ollama博客文章 Structured output 中…

一條 SQL 查詢語句是如何執行的(MySQL)

第一講&#xff1a;一條 SQL 查詢語句是如何執行的 總覽圖示 MySQL 查詢的執行流程可以大致分為以下步驟&#xff08;如圖所示&#xff09;&#xff1a; 連接器&#xff08;Connection&#xff09;查詢緩存&#xff08;Query Cache&#xff0c;MySQL 8.0 已廢棄&#xff09;…

汽車OTA在線升級法規分析

摘要 本文介紹了R156法規即《關于批準車輛的軟件升級和軟件升級管理體系統一規定的法規》、該法規專注于汽車軟件升級功能&#xff0c;并為此提出了一系列具體要求&#xff0c;旨在確保軟件升級流程的安全性、可控性和合規性&#xff0c;從而順應汽車行業智能化、聯網化的發展趨…

Notepad編輯器實現換行符替換

在不同的Note編輯器中&#xff0c;批量把換行替換為空的方法有所不同&#xff0c;以下是常見編輯器的操作方法&#xff1a; Notepad 打開文件后&#xff0c;按CtrlH打開“查找和替換”對話框&#xff0c;在“查找”字段中輸入\r\n&#xff0c;在“替換為”字段中輸入一個空格…

Rust多線程性能優化:打破Arc+鎖的瓶頸,效率提升10倍

一、引言 在 Rust 開發中&#xff0c;多線程編程是提升程序性能的重要手段。Arc&#xff08;原子引用計數&#xff09;和鎖的組合是實現多線程數據共享的常見方式。然而&#xff0c;很多程序員在使用 Arc 和鎖時會遇到性能瓶頸&#xff0c;導致程序運行效率低下。本文將深入剖…

【安裝指南】Centos7 在 Docker 上安裝 RabbitMQ4.0.x

目錄 前置知識:RabbitMQ 的介紹 一、單機安裝 RabbitMQ 4.0.7版本 1.1 在線拉取鏡像 二、延遲插件的安裝 2.1 安裝延遲插件 步驟一:下載延遲插件 步驟二:將延遲插件放到插件目錄 步驟三:啟動延遲插件 步驟四:重啟 RabbitMQ 服務 步驟五:驗收成果 步驟六:手動…

【quantity】5 derive_more庫 2.0 版介紹

derive_more 是一個 Rust 過程宏庫&#xff0c;旨在通過派生宏自動生成常見 trait 的實現&#xff0c;減少樣板代碼。2.0 版本帶來了多項改進和新特性。 主要特性 1. 支持的 Trait 派生 derive_more 2.0 支持派生以下 trait&#xff1a; 基本操作 trait: Display - 格式化顯…

網站備份,網站數據備份的步驟

網站備份&#xff08;尤其是網站數據備份&#xff09;是保障業務連續性、防止數據丟失和應對安全威脅的關鍵措施。以下是系統化的備份步驟和實施建議&#xff0c;涵蓋技術操作、策略規劃及常見問題處理&#xff1a; 一、備份前的準備工作 明確備份范圍 核心數據&#xff1a;…

OpenCV 圖形API(72)圖像與通道拼接函數-----根據指定的方式翻轉圖像(GMat)函數 flip()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 翻轉一個2D矩陣&#xff0c;圍繞垂直軸、水平軸或同時圍繞兩個軸。 該函數以三種不同的方式之一翻轉矩陣&#xff08;行和列的索引是從0開始的&a…

醫生視角下轉錄組學的生物信息學分析

醫生視角下轉錄組學的生物信息學分析 轉錄組學的生物信息學分析是醫生解決臨床與科研問題的有力工具。這里羅列醫學轉錄組學相關的幾個概念&#xff0c;從使用者&#xff08;醫生&#xff09;的角度看待理解相關技術&#xff0c;為后續使用該技術說明臨床和科研問題奠定基礎。…

量子機器學習中的GPU加速實踐:基于CUDA Quantum的混合編程模型探索

引言&#xff1a;量子機器學習的新范式 在量子計算與經典機器學習交叉融合的前沿領域&#xff0c;量子機器學習&#xff08;Quantum Machine Learning, QML&#xff09;正經歷著革命性突破。然而&#xff0c;隨著量子比特規模的增長和算法復雜度的提升&#xff0c;傳統計算架構…

Matplotlib核心課程-2

4.1 數據加載、儲存 4.1.1 從數據文件讀取數據 導入支持庫&#xff1a; import numpy as np from pandas import Series,DataFrame import pandas as pd 從csv文件讀取數據&#xff0c;一般方法&#xff1a; pd.read_csv(../data/ex1.csv,encodinggbk) 從csv文件讀取數據&#…

new和malloc的區別

1 語義層級不同&#xff1a;語言機制 vs. 庫函數 new / new[] (C 關鍵字)malloc / calloc / realloc (C 運行時函數)本質語言級運算符&#xff1b;可被重載庫函數&#xff1b;無法重載作用分配內存 并調用構造函數僅分配原始字節塊&#xff0c;不做初始化&#xff0c;也不調用…

C++11新特性_自動類型推導_auto

在 C11 標準中&#xff0c;auto關鍵字被賦予了全新且強大的功能&#xff0c;它用于自動類型推導&#xff0c;即編譯器能夠根據變量的初始化表達式自動確定其類型。 基本語法 使用auto聲明變量時&#xff0c;只需給出auto關鍵字&#xff0c;后面緊跟變量名&#xff0c;并對其進…

[預備知識]6. 優化理論(二)

優化理論 本章節介紹深度學習中的高級優化技術&#xff0c;包括學習率衰減、梯度裁剪和批量歸一化。這些技術能夠顯著提升模型的訓練效果和穩定性。 學習率衰減&#xff08;Learning Rate Decay&#xff09; 數學原理與可視化 學習率衰減策略的數學表達&#xff1a; 步進式…

【計算機視覺】語義分割:Mask2Former:統一分割框架的技術突破與實戰指南

深度解析Mask2Former&#xff1a;統一分割框架的技術突破與實戰指南 技術架構與創新設計核心設計理念關鍵技術組件 環境配置與安裝指南硬件要求安裝步驟預訓練模型下載 實戰全流程解析1. 數據準備2. 配置文件定制3. 訓練流程4. 推理與可視化 核心技術深度解析1. 掩膜注意力機制…

數字智慧方案5857丨智慧機場解決方案與應用(53頁PPT)(文末有下載方式)

資料解讀&#xff1a;智慧機場解決方案與應用 詳細資料請看本解讀文章的最后內容。 隨著科技的飛速發展&#xff0c;智慧機場的建設已成為現代機場發展的重要方向。智慧機場不僅提升了旅客的出行體驗&#xff0c;還極大地提高了機場的運營效率。本文將詳細解讀沃土數字平臺在…

【C到Java的深度躍遷:從指針到對象,從過程到生態】第五模塊·生態征服篇 —— 第二十章 項目實戰:從C系統到Java架構的蛻變

一、跨語言重構&#xff1a;用Java重寫Redis核心模塊 1.1 Redis的C語言基因解析 Redis 6.0源碼核心結構&#xff1a; // redis.h typedef struct redisObject { unsigned type:4; // 數據類型&#xff08;String/List等&#xff09; unsigned encoding:4; // …

ES6異步編程中Promise與Proxy對象

Promise 對象 Promise對象用于解決Javascript中的地獄回調問題&#xff0c;有效的減少了程序回調的嵌套調用。 創建 如果要創建一個Promise對象&#xff0c;最簡單的方法就是直接new一個。但是&#xff0c;如果深入學習&#xff0c;會發現使用Promise下的靜態方法Promise.re…

UE自動索敵插件Target System Component

https://www.fab.com/zh-cn/listings/9088334d-3bde-4e10-a937-baeb780f880f ? 一個完全用 C 編寫的 UE插件&#xff0c;添加了對簡單相機鎖定/瞄準系統的支持。它最初??在藍圖中開發和測試&#xff0c;然后轉換并重寫為 C 模塊和插件。 特征&#xff1a; 可通過一組可在…