尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

WxJava 微信小店 Solon 插件接入指南:wx-java-store-solon-plugin 配置详解与源码解析

WxJava 微信小店 Solon 插件接入指南:wx-java-store-solon-plugin 配置详解与源码解析 WxJava 微信小店 Solon 插件接入指南wx-java-store-solon-plugin 配置详解与源码解析【免费下载链接】WxJava微信开发 Java SDK 支持包括微信支付开放平台小程序企业微信视频号公众号等的后端开发项目地址: https://gitcode.com/gh_mirrors/wx/WxJava本篇指南以 WxJava 仓库中wx-java-store-solon-pluginSolon 框架下的微信小店开发插件为核心讲解如何在 Solon 应用中通过一条依赖、一份app.properties配置快速接入微信小店 API并配合源码剖析其自动装配、ConfigStorage 存储策略与 HTTP 客户端选择机制。读完本文你将掌握该插件的依赖引入、完整配置项语义、Bean 自动注入方式、典型调用代码以及底层条件装配与默认值逻辑能够在实际项目中直接落地使用。插件定位Solon 生态中的微信小店接入层wx-java-store-solon-plugin位于仓库 solon-plugins/wx-java-store-solon-plugin 目录下是 WxJava 针对 Solon国产轻量级 Java 应用开发框架提供的一站式接入插件。它本身不重复实现微信小店协议而是对核心模块weixin-java-store做框架层封装把WxStoreService、WxStoreConfig两个核心 Bean 以自动装配方式注入 Solon 容器并把配置项以wx.store.*前缀绑定到属性类上开发者只需写配置即可完成初始化无需手写任何装配代码。从 pom.xml 可以看到插件直接依赖com.github.binarywang:weixin-java-store版本与父工程一致当前父工程版本为4.8.6.B同时将jedis、redisson声明为provided作用域——也就是说 Redis 存储依赖是否生效完全由使用方按需引入决定这与下方配置章节的按存储类型选依赖是配套设计。一、快速开始引入依赖在 Solon 应用的pom.xml中引入插件坐标并按需添加 Redis 客户端依赖dependencies dependency groupIdcom.github.binarywang/groupId artifactIdwx-java-store-solon-plugin/artifactId version${version}/version /dependency !-- 配置存储方式为 jedis 则引入 jedis -- dependency groupIdredis.clients/groupId artifactIdjedis/artifactId version${jedis.version}/version /dependency !-- 配置存储方式为 redisson 则引入 redisson -- dependency groupIdorg.redisson/groupId artifactIdredisson/artifactId version${redisson.version}/version /dependency /dependencies三个依赖的职责边界非常清晰wx-java-store-solon-plugin必选提供属性绑定、自动装配与条件化配置类jedis仅在config-storage.typejedis时必需插件侧已用provided声明故不会传递引入redisson仅在config-storage.typeredisson时必需引入时机与 jedis 同理。如果你的应用容器中已经自行管理了JedisPool或RedissonClient实例可以连这两个依赖都不引详见下文从容器复用连接小节。二、添加配置app.properties 全量字段说明插件使用 Solon 的Inject(${wx.store})将wx.store.*前缀下的属性整体绑定到 WxStoreProperties.java一份完整的配置文件如下可直接复制到app.properties# 微信小店配置(必填) ## 微信小店的appId和secret wx.store.app-idappId wx.store.secretsecret # 微信小店配置 选填 ## 设置微信小店消息服务器配置的token wx.store.tokentoken ## 设置微信小店消息服务器配置的EncodingAESKey wx.store.aes-key ## 支持JSON或者XML格式默认JSON wx.store.msg-data-formatJSON ## 是否使用稳定版 Access Token wx.store.use-stable-access-tokenfalse # ConfigStorage 配置选填 ## 配置类型: memory(默认), jedis, redisson, redis_template wx.store.config-storage.typememory ## 相关redis前缀配置 wx.store.config-storage.key-prefixwx:store wx.store.config-storage.redis.host127.0.0.1 wx.store.config-storage.redis.port6379 wx.store.config-storage.redis.password123456 # http 客户端配置选填 ## http客户端类型: http_client / http_components wx.store.config-storage.http-client-typehttp_client wx.store.config-storage.http-proxy-host wx.store.config-storage.http-proxy-port wx.store.config-storage.http-proxy-username wx.store.config-storage.http-proxy-password ## 最大重试次数默认5 次如果小于 0则为 0 wx.store.config-storage.max-retry-times5 ## 重试时间间隔步进默认1000 毫秒如果小于 0则为 1000 wx.store.config-storage.retry-sleep-millis1000下表汇总了所有配置项的含义、默认值与取值范围供快速查阅配置项必填默认值说明wx.store.app-id是无微信小店 AppIdwx.store.secret是无微信小店 Secretwx.store.token否无消息服务器配置 Token用于消息验签wx.store.aes-key否空消息服务器配置 EncodingAESKeywx.store.msg-data-format否JSON消息数据格式JSON或XMLwx.store.use-stable-access-token否false是否使用稳定版 Access Tokenwx.store.config-storage.type否memory存储类型memory、jedis、redisson、redis_templatewx.store.config-storage.key-prefix否whAccess Token 等数据的 Redis key 前缀wx.store.config-storage.redis.host否空Redis 主机不填则从 Solon 容器取连接wx.store.config-storage.redis.port否6379Redis 端口wx.store.config-storage.redis.password否空Redis 密码wx.store.config-storage.redis.timeout否2000Redis 连接超时毫秒wx.store.config-storage.redis.database否0Redis 数据库编号wx.store.config-storage.http-client-type否http_componentsHTTP 客户端实现类型wx.store.config-storage.http-proxy-host否空HTTP 代理主机wx.store.config-storage.http-proxy-port否空HTTP 代理端口wx.store.config-storage.http-proxy-username否空HTTP 代理用户名wx.store.config-storage.http-proxy-password否空HTTP 代理密码wx.store.config-storage.max-retry-times否5最大重试次数小于 0 时强制为 0wx.store.config-storage.retry-sleep-millis否1000重试间隔步进毫秒小于 0 时强制为 1000几点需要特别注意key-prefix 默认值以源码为准README 示例中写的是wx:store但 WxStoreProperties.java 中keyPrefix的字段默认值是wh。如果你的 Redis 中已存在历史前缀数据请显式配置wx.store.config-storage.key-prefix保持一致避免 Token 缓存失效。redis 端口与超时默认值port默认6379、timeout默认2000毫秒、database默认0见 RedisProperties.java。重试参数的兜底校验maxRetryTimes小于 0 时被强制置 0retrySleepMillis小于 0 时被强制置 1000该逻辑在 AbstractWxStoreConfigStorageConfiguration.java 中实现对应BaseWxStoreService#setRetrySleepMillis/#setMaxRetryTimes的能力。消息格式msg-data-format默认JSON源码通过StringUtils.trimToNull处理后写入配置传入空值会被归一为空。三、自动注入的 Bean 类型插件装配完成后Solon 容器中会自动注册以下两个核心 Bean可直接通过Inject使用Bean 类型职责说明com.binarywang.wxjava.store.api.WxStoreService微信小店门面服务聚合店铺、商品、订单、售后等各类子服务是业务调用的入口com.binarywang.wxjava.store.config.WxStoreConfig微信小店配置存储承载 AppId、Secret、Token、AESKey、消息格式、代理、重试等全部配置同时也是 Access Token 的存取器其中WxStoreService的注册带有双重条件仅当容器中不存在用户自定义的WxStoreService且存在WxStoreConfig时才自动创建见 WxStoreServiceAutoConfiguration.java。这意味着如果你需要深度定制例如自研 Token 存储完全可以自行声明同类型 Bean 覆盖默认装配插件不会产生冲突。四、使用样例获取店铺基本信息插件自带的 README 给出了最小可用示例这里展开为一个可直接编译的完整版本import com.binarywang.wxjava.store.api.WxStoreService; import com.binarywang.wxjava.store.bean.shop.ShopInfoResponse; import com.binarywang.wxjava.store.util.JsonUtils; import me.chanjar.weixin.common.error.WxErrorException; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; Component public class DemoService { Inject private WxStoreService wxStoreService; public String getShopInfo() throws WxErrorException { // 获取店铺基本信息 ShopInfoResponse response wxStoreService.getBasicService().getShopInfo(); // 此处为演示如果要返回response的结果建议自己封装一个VO避免直接返回response return JsonUtils.encode(response); } }要点说明WxStoreService按领域拆分出多个子服务getBasicService()即基础信息服务业务上按需取用符合单一职责接口方法统一抛出WxErrorException调用方需要捕获并处理微信侧的全局错误码直接返回 SDK 的 Response 对象会把内部字段暴露给上层生产环境建议自行封装 VO/DTOJsonUtils来自weixin-java-store模块的 util 包负责序列化仅用于演示输出。该插件的测试工程 LoadTest.java 演示了在 Solon 测试环境下加载插件并校验容器装配是否完整可作为集成自测的参考起点。五、源码解析自动装配与条件化存储策略1. 插件装配入口WxStorePluginImplSolon 的Plugin机制会在应用启动阶段执行start()WxStorePluginImpl.java 依次注册了属性类、服务自动配置类以及三种存储配置类context.beanMake(WxStoreProperties.class); context.beanMake(WxStoreServiceAutoConfiguration.class); context.beanMake(WxStoreInMemoryConfigStorageConfiguration.class); context.beanMake(WxStoreInJedisConfigStorageConfiguration.class); context.beanMake(WxStoreInRedissonConfigStorageConfiguration.class);值得留意的是StorageType枚举虽然声明了Memory / Jedis / Redisson / RedisTemplate四种类型见 StorageType.java但当前 Solon 插件内置的存储配置实现只有 memory、jedis、redisson 三种。README 中提到的redis_template需要使用者自行按同模式扩展Spring Boot Starter 版本中有对应实现可参考。2. 条件装配按配置选择存储实现三种存储配置类全部使用 Solon 的Condition注解做按配置项 按类路径双重判断memoryonProperty ${wx.store.configStorage.type:memory} memory未配置时默认走内存实现见 WxStoreInMemoryConfigStorageConfiguration.javajedisonProperty ...type jedis且onClass JedisPool.class见 WxStoreInJedisConfigStorageConfiguration.java没有引入 jedis 依赖时该配置类不会生效redissononProperty ...type redisson且onClass Redisson.class同理受类路径控制见 WxStoreInRedissonConfigStorageConfiguration.java。三个配置类都通过Condition(onMissingBean WxStoreConfig.class)允许用户自定义配置覆盖且wxStoreConfig()方法统一调用父类 AbstractWxStoreConfigStorageConfiguration.java 的config(...)完成属性落库AppId/Secret/Token/AESKey/消息格式/稳定版 Token/代理/重试参数。3. 从容器复用 Redis 连接WxStoreInJedisConfigStorageConfiguration与WxStoreInRedissonConfigStorageConfiguration的构造逻辑遵循同一约定若配置了redis.host则由插件自行创建连接池/客户端否则从 Solon 容器中获取已存在的JedisPool/RedissonClientBean。因此单实例、无密码的简单场景直接配置redis.host即可多租户、集群或已统一管理 Redis 连接的项目可省略 host 配置改为在容器中注册JedisPool或RedissonClient插件会自动复用。Jedis 分支还会把maxActive、maxIdle、maxWaitMillis、minIdle等连接池参数映射到JedisPoolConfig并默认开启testOnBorrow与testWhileIdle探活见 WxStoreInJedisConfigStorageConfiguration.javaRedisson 分支则使用单机模式useSingleServer并指定 NIO 传输模式。4. HTTP 客户端实现的选择WxStoreServiceAutoConfiguration根据config-storage.http-client-type决定服务实现类HttpClientType.HttpClient→WxStoreServiceHttpClientImpl基于 Apache HttpClient其余默认HttpComponents→WxStoreServiceHttpComponentsImpl基于 HttpComponents也是 HttpClientType.java 枚举与属性类中的默认值。两个实现类都位于weixin-java-store模块的api.impl包下接口行为一致仅底层 HTTP 传输实现不同可按项目既有依赖选择。README 注释中写默认 http_client但以当前源码为准默认值是HttpComponents——如需 HttpClient 实现请显式配置。六、常见问题与注意事项Token 缓存失效或数据串前缀更换 Redis 前缀后旧 Token 缓存不再命中属正常现象多环境共用 Redis 时务必为每个环境配置独立key-prefix。Redis 存储不生效请检查是否已引入对应客户端依赖jedis/redisson——插件的provided设计意味着不引依赖时条件装配静默失效且不会报错提示。想覆盖 Bean 但被默认装配抢先插件所有关键 BeanWxStoreConfig、WxStoreService均带onMissingBean条件在 Solon 启动早期自行注册同名 Bean 即可接管。消息接收场景微信小店消息服务器的 Token/AESKey 即wx.store.token与wx.store.aes-key配合msg-data-format指定消息体格式若同时使用稳定版 Access Token将use-stable-access-token置为true。代理与重试内网受限环境需配置http-proxy-*系列参数max-retry-times与retry-sleep-millis用于提升弱网下的请求成功率取值异常负数会被源码自动兜底。总结wx-java-store-solon-plugin把 Solon 的轻量装配能力与 WxJava 的微信小店 SDK 结合做到了引依赖 写配置两步接入属性绑定统一在wx.store.*前缀下存储层与 HTTP 层均通过条件装配实现可插拔核心 Bean 支持用户自定义覆盖。无论你的应用是单机内存存储还是 Redis 集群都能在本文配置表与源码路径的指引下快速完成接入并定位问题。【免费下载链接】WxJava微信开发 Java SDK 支持包括微信支付开放平台小程序企业微信视频号公众号等的后端开发项目地址: https://gitcode.com/gh_mirrors/wx/WxJava创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表