Copy disabled (too large)
Download .txt
Showing preview only (11,652K chars total). Download the full file to get everything.
Repository: binarywang/WxJava
Branch: develop
Commit: 5cc8e9114ff0
Files: 4071
Total size: 10.0 MB
Directory structure:
gitextract_iweq30uq/
├── .circleci/
│ └── config.yml
├── .editorconfig
├── .gitee/
│ └── ISSUE_TEMPLATE.md
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── agents/
│ │ └── my-agent.agent.md
│ ├── copilot-instructions.md
│ ├── stale.yml
│ └── workflows/
│ └── maven-publish.yml
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── demo.md
├── docs/
│ ├── CP_MSG_AUDIT_SDK_SAFE_USAGE.md
│ ├── CommonUploadParam-FormFields-Usage.md
│ ├── HTTPCLIENT_UPGRADE_GUIDE.md
│ ├── MINIAPP_KEFU_SERVICE.md
│ ├── NEW_TRANSFER_API_SUPPORT.md
│ ├── NEW_TRANSFER_API_USAGE.md
│ └── QUARKUS_SUPPORT.md
├── others/
│ ├── .mvn/
│ │ └── wrapper/
│ │ └── maven-wrapper.properties
│ ├── check-dependency-updates.sh
│ ├── check-plugin-updates.sh
│ ├── check-property-updates.sh
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── weixin-java-config/
│ │ └── README.md
│ └── weixin-java-osgi/
│ └── pom.xml
├── pom.xml
├── quality-checks/
│ └── google_checks.xml
├── solon-plugins/
│ ├── pom.xml
│ ├── wx-java-channel-multi-solon-plugin/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── solon/
│ │ │ │ └── wxjava/
│ │ │ │ └── channel/
│ │ │ │ ├── configuration/
│ │ │ │ │ └── services/
│ │ │ │ │ ├── AbstractWxChannelConfiguration.java
│ │ │ │ │ ├── WxChannelInJedisConfiguration.java
│ │ │ │ │ ├── WxChannelInMemoryConfiguration.java
│ │ │ │ │ └── WxChannelInRedissonConfiguration.java
│ │ │ │ ├── enums/
│ │ │ │ │ ├── HttpClientType.java
│ │ │ │ │ └── StorageType.java
│ │ │ │ ├── integration/
│ │ │ │ │ └── WxChannelMultiPluginImpl.java
│ │ │ │ ├── properties/
│ │ │ │ │ ├── WxChannelMultiProperties.java
│ │ │ │ │ ├── WxChannelMultiRedisProperties.java
│ │ │ │ │ └── WxChannelSingleProperties.java
│ │ │ │ └── service/
│ │ │ │ ├── WxChannelMultiServices.java
│ │ │ │ └── WxChannelMultiServicesImpl.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── solon/
│ │ │ └── wx-java-multi-channel-solon-plugin.properties
│ │ └── test/
│ │ ├── java/
│ │ │ └── features/
│ │ │ └── test/
│ │ │ └── LoadTest.java
│ │ └── resources/
│ │ └── app.properties
│ ├── wx-java-channel-solon-plugin/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── solon/
│ │ │ │ └── wxjava/
│ │ │ │ └── channel/
│ │ │ │ ├── config/
│ │ │ │ │ ├── WxChannelServiceAutoConfiguration.java
│ │ │ │ │ └── storage/
│ │ │ │ │ ├── AbstractWxChannelConfigStorageConfiguration.java
│ │ │ │ │ ├── WxChannelInJedisConfigStorageConfiguration.java
│ │ │ │ │ ├── WxChannelInMemoryConfigStorageConfiguration.java
│ │ │ │ │ └── WxChannelInRedissonConfigStorageConfiguration.java
│ │ │ │ ├── enums/
│ │ │ │ │ ├── HttpClientType.java
│ │ │ │ │ └── StorageType.java
│ │ │ │ ├── integration/
│ │ │ │ │ └── WxChannelPluginImpl.java
│ │ │ │ └── properties/
│ │ │ │ ├── RedisProperties.java
│ │ │ │ └── WxChannelProperties.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── solon/
│ │ │ └── wx-java-channel-solon-plugin.properties
│ │ └── test/
│ │ ├── java/
│ │ │ └── features/
│ │ │ └── test/
│ │ │ └── LoadTest.java
│ │ └── resources/
│ │ └── app.yml
│ ├── wx-java-cp-multi-solon-plugin/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── solon/
│ │ │ │ └── wxjava/
│ │ │ │ └── cp_multi/
│ │ │ │ ├── configuration/
│ │ │ │ │ └── services/
│ │ │ │ │ ├── AbstractWxCpConfiguration.java
│ │ │ │ │ ├── WxCpInJedisConfiguration.java
│ │ │ │ │ ├── WxCpInMemoryConfiguration.java
│ │ │ │ │ └── WxCpInRedissonConfiguration.java
│ │ │ │ ├── integration/
│ │ │ │ │ └── WxCpMultiPluginImpl.java
│ │ │ │ ├── properties/
│ │ │ │ │ ├── WxCpMultiProperties.java
│ │ │ │ │ ├── WxCpMultiRedisProperties.java
│ │ │ │ │ └── WxCpSingleProperties.java
│ │ │ │ └── service/
│ │ │ │ ├── WxCpMultiServices.java
│ │ │ │ └── WxCpMultiServicesImpl.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── solon/
│ │ │ └── wx-java-cp-multi-solon-plugin.properties
│ │ └── test/
│ │ ├── java/
│ │ │ └── features/
│ │ │ └── test/
│ │ │ └── LoadTest.java
│ │ └── resources/
│ │ └── app.properties
│ ├── wx-java-cp-solon-plugin/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── solon/
│ │ │ │ └── wxjava/
│ │ │ │ └── cp/
│ │ │ │ ├── config/
│ │ │ │ │ └── WxCpServiceAutoConfiguration.java
│ │ │ │ ├── integration/
│ │ │ │ │ └── WxCpPluginImpl.java
│ │ │ │ ├── properties/
│ │ │ │ │ ├── WxCpProperties.java
│ │ │ │ │ └── WxCpRedisProperties.java
│ │ │ │ └── storage/
│ │ │ │ ├── AbstractWxCpConfigStorageConfiguration.java
│ │ │ │ ├── WxCpInJedisConfigStorageConfiguration.java
│ │ │ │ ├── WxCpInMemoryConfigStorageConfiguration.java
│ │ │ │ └── WxCpInRedissonConfigStorageConfiguration.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── solon/
│ │ │ └── wx-java-cp-solon-plugin.properties
│ │ └── test/
│ │ ├── java/
│ │ │ └── features/
│ │ │ └── test/
│ │ │ └── LoadTest.java
│ │ └── resources/
│ │ └── app.properties
│ ├── wx-java-miniapp-multi-solon-plugin/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── solon/
│ │ │ │ └── wxjava/
│ │ │ │ └── miniapp/
│ │ │ │ ├── configuration/
│ │ │ │ │ └── services/
│ │ │ │ │ ├── AbstractWxMaConfiguration.java
│ │ │ │ │ ├── WxMaInJedisConfiguration.java
│ │ │ │ │ ├── WxMaInMemoryConfiguration.java
│ │ │ │ │ └── WxMaInRedissonConfiguration.java
│ │ │ │ ├── integration/
│ │ │ │ │ └── WxMiniappMultiPluginImpl.java
│ │ │ │ ├── properties/
│ │ │ │ │ ├── WxMaMultiProperties.java
│ │ │ │ │ ├── WxMaMultiRedisProperties.java
│ │ │ │ │ └── WxMaSingleProperties.java
│ │ │ │ └── service/
│ │ │ │ ├── WxMaMultiServices.java
│ │ │ │ └── WxMaMultiServicesImpl.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── solon/
│ │ │ └── wx-java-miniapp-multi-solon-plugin.properties
│ │ └── test/
│ │ ├── java/
│ │ │ └── features/
│ │ │ └── test/
│ │ │ └── LoadTest.java
│ │ └── resources/
│ │ └── app.properties
│ ├── wx-java-miniapp-solon-plugin/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── solon/
│ │ │ │ └── wxjava/
│ │ │ │ └── miniapp/
│ │ │ │ ├── config/
│ │ │ │ │ ├── WxMaServiceAutoConfiguration.java
│ │ │ │ │ └── storage/
│ │ │ │ │ ├── AbstractWxMaConfigStorageConfiguration.java
│ │ │ │ │ ├── WxMaInJedisConfigStorageConfiguration.java
│ │ │ │ │ ├── WxMaInMemoryConfigStorageConfiguration.java
│ │ │ │ │ └── WxMaInRedissonConfigStorageConfiguration.java
│ │ │ │ ├── enums/
│ │ │ │ │ ├── HttpClientType.java
│ │ │ │ │ └── StorageType.java
│ │ │ │ ├── integration/
│ │ │ │ │ └── WxMiniappPluginImpl.java
│ │ │ │ └── properties/
│ │ │ │ ├── RedisProperties.java
│ │ │ │ └── WxMaProperties.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── solon/
│ │ │ └── wx-java-miniapp-solon-plugin.properties
│ │ └── test/
│ │ ├── java/
│ │ │ └── features/
│ │ │ └── test/
│ │ │ └── LoadTest.java
│ │ └── resources/
│ │ └── app.properties
│ ├── wx-java-mp-multi-solon-plugin/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── solon/
│ │ │ │ └── wxjava/
│ │ │ │ └── mp_multi/
│ │ │ │ ├── configuration/
│ │ │ │ │ └── services/
│ │ │ │ │ ├── AbstractWxMpConfiguration.java
│ │ │ │ │ ├── WxMpInJedisConfiguration.java
│ │ │ │ │ ├── WxMpInMemoryConfiguration.java
│ │ │ │ │ └── WxMpInRedissonConfiguration.java
│ │ │ │ ├── integration/
│ │ │ │ │ └── WxMpMultiPluginImpl.java
│ │ │ │ ├── properties/
│ │ │ │ │ ├── WxMpMultiProperties.java
│ │ │ │ │ ├── WxMpMultiRedisProperties.java
│ │ │ │ │ └── WxMpSingleProperties.java
│ │ │ │ └── service/
│ │ │ │ ├── WxMpMultiServices.java
│ │ │ │ └── WxMpMultiServicesImpl.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── solon/
│ │ │ └── wx-java-mp-multi-solon-plugin.properties
│ │ └── test/
│ │ ├── java/
│ │ │ └── features/
│ │ │ └── test/
│ │ │ └── LoadTest.java
│ │ └── resources/
│ │ └── app.properties
│ ├── wx-java-mp-solon-plugin/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── solon/
│ │ │ │ └── wxjava/
│ │ │ │ └── mp/
│ │ │ │ ├── config/
│ │ │ │ │ ├── WxMpServiceAutoConfiguration.java
│ │ │ │ │ └── storage/
│ │ │ │ │ ├── AbstractWxMpConfigStorageConfiguration.java
│ │ │ │ │ ├── WxMpInJedisConfigStorageConfiguration.java
│ │ │ │ │ ├── WxMpInMemoryConfigStorageConfiguration.java
│ │ │ │ │ └── WxMpInRedissonConfigStorageConfiguration.java
│ │ │ │ ├── enums/
│ │ │ │ │ ├── HttpClientType.java
│ │ │ │ │ └── StorageType.java
│ │ │ │ ├── integration/
│ │ │ │ │ └── WxMpPluginImpl.java
│ │ │ │ └── properties/
│ │ │ │ ├── HostConfig.java
│ │ │ │ ├── RedisProperties.java
│ │ │ │ └── WxMpProperties.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── solon/
│ │ │ └── wx-java-mp-solon-plugin.properties
│ │ └── test/
│ │ ├── java/
│ │ │ └── features/
│ │ │ └── test/
│ │ │ └── LoadTest.java
│ │ └── resources/
│ │ └── app.properties
│ ├── wx-java-open-solon-plugin/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── solon/
│ │ │ │ └── wxjava/
│ │ │ │ └── open/
│ │ │ │ ├── config/
│ │ │ │ │ ├── WxOpenServiceAutoConfiguration.java
│ │ │ │ │ └── storage/
│ │ │ │ │ ├── AbstractWxOpenConfigStorageConfiguration.java
│ │ │ │ │ ├── WxOpenInJedisConfigStorageConfiguration.java
│ │ │ │ │ ├── WxOpenInMemoryConfigStorageConfiguration.java
│ │ │ │ │ └── WxOpenInRedissonConfigStorageConfiguration.java
│ │ │ │ ├── integration/
│ │ │ │ │ └── WxOpenPluginImpl.java
│ │ │ │ └── properties/
│ │ │ │ ├── WxOpenProperties.java
│ │ │ │ └── WxOpenRedisProperties.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── solon/
│ │ │ └── wx-java-open-solon-plugin.properties
│ │ └── test/
│ │ ├── java/
│ │ │ └── features/
│ │ │ └── test/
│ │ │ └── LoadTest.java
│ │ └── resources/
│ │ └── app.properties
│ ├── wx-java-pay-solon-plugin/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── solon/
│ │ │ │ └── wxjava/
│ │ │ │ └── pay/
│ │ │ │ ├── config/
│ │ │ │ │ └── WxPayAutoConfiguration.java
│ │ │ │ ├── integration/
│ │ │ │ │ └── WxPayPluginImpl.java
│ │ │ │ └── properties/
│ │ │ │ └── WxPayProperties.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── solon/
│ │ │ └── wx-java-pay-solon-plugin.properties
│ │ └── test/
│ │ ├── java/
│ │ │ └── features/
│ │ │ └── test/
│ │ │ └── LoadTest.java
│ │ └── resources/
│ │ └── app.yml
│ └── wx-java-qidian-solon-plugin/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── solon/
│ │ │ └── wxjava/
│ │ │ └── qidian/
│ │ │ ├── config/
│ │ │ │ ├── WxQidianServiceAutoConfiguration.java
│ │ │ │ └── WxQidianStorageAutoConfiguration.java
│ │ │ ├── enums/
│ │ │ │ ├── HttpClientType.java
│ │ │ │ └── StorageType.java
│ │ │ ├── integration/
│ │ │ │ └── WxQidianPluginImpl.java
│ │ │ └── properties/
│ │ │ ├── HostConfig.java
│ │ │ ├── RedisProperties.java
│ │ │ └── WxQidianProperties.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── solon/
│ │ └── wx-java-qidian-solon-plugin.properties
│ └── test/
│ ├── java/
│ │ └── features/
│ │ └── test/
│ │ └── LoadTest.java
│ └── resources/
│ └── app.yml
├── spring-boot-starters/
│ ├── MULTI_TENANT_MODE_IMPROVEMENT.md
│ ├── pom.xml
│ ├── wx-java-channel-multi-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── channel/
│ │ │ ├── autoconfigure/
│ │ │ │ └── WxChannelMultiAutoConfiguration.java
│ │ │ ├── configuration/
│ │ │ │ ├── WxChannelMultiServiceConfiguration.java
│ │ │ │ └── services/
│ │ │ │ ├── AbstractWxChannelConfiguration.java
│ │ │ │ ├── WxChannelInJedisConfiguration.java
│ │ │ │ ├── WxChannelInMemoryConfiguration.java
│ │ │ │ ├── WxChannelInRedisTemplateConfiguration.java
│ │ │ │ └── WxChannelInRedissonConfiguration.java
│ │ │ ├── enums/
│ │ │ │ ├── HttpClientType.java
│ │ │ │ └── StorageType.java
│ │ │ ├── properties/
│ │ │ │ ├── WxChannelMultiProperties.java
│ │ │ │ ├── WxChannelMultiRedisProperties.java
│ │ │ │ └── WxChannelSingleProperties.java
│ │ │ └── service/
│ │ │ ├── WxChannelMultiServices.java
│ │ │ └── WxChannelMultiServicesImpl.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-channel-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── channel/
│ │ │ ├── config/
│ │ │ │ ├── WxChannelAutoConfiguration.java
│ │ │ │ ├── WxChannelServiceAutoConfiguration.java
│ │ │ │ ├── WxChannelStorageAutoConfiguration.java
│ │ │ │ └── storage/
│ │ │ │ ├── AbstractWxChannelConfigStorageConfiguration.java
│ │ │ │ ├── WxChannelInJedisConfigStorageConfiguration.java
│ │ │ │ ├── WxChannelInMemoryConfigStorageConfiguration.java
│ │ │ │ ├── WxChannelInRedisTemplateConfigStorageConfiguration.java
│ │ │ │ └── WxChannelInRedissonConfigStorageConfiguration.java
│ │ │ ├── enums/
│ │ │ │ ├── HttpClientType.java
│ │ │ │ └── StorageType.java
│ │ │ └── properties/
│ │ │ ├── RedisProperties.java
│ │ │ └── WxChannelProperties.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-cp-multi-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── cp/
│ │ │ ├── autoconfigure/
│ │ │ │ └── WxCpMultiAutoConfiguration.java
│ │ │ ├── configuration/
│ │ │ │ ├── WxCpMultiServicesAutoConfiguration.java
│ │ │ │ └── services/
│ │ │ │ ├── AbstractWxCpConfiguration.java
│ │ │ │ ├── WxCpInJedisConfiguration.java
│ │ │ │ ├── WxCpInMemoryConfiguration.java
│ │ │ │ ├── WxCpInRedisTemplateConfiguration.java
│ │ │ │ └── WxCpInRedissonConfiguration.java
│ │ │ ├── properties/
│ │ │ │ ├── WxCpMultiProperties.java
│ │ │ │ ├── WxCpMultiRedisProperties.java
│ │ │ │ └── WxCpSingleProperties.java
│ │ │ └── service/
│ │ │ ├── WxCpMultiServices.java
│ │ │ └── WxCpMultiServicesImpl.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-cp-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── cp/
│ │ │ ├── config/
│ │ │ │ ├── WxCpAutoConfiguration.java
│ │ │ │ ├── WxCpServiceAutoConfiguration.java
│ │ │ │ └── WxCpStorageAutoConfiguration.java
│ │ │ ├── properties/
│ │ │ │ ├── WxCpProperties.java
│ │ │ │ └── WxCpRedisProperties.java
│ │ │ └── storage/
│ │ │ ├── AbstractWxCpConfigStorageConfiguration.java
│ │ │ ├── WxCpInJedisConfigStorageConfiguration.java
│ │ │ ├── WxCpInMemoryConfigStorageConfiguration.java
│ │ │ ├── WxCpInRedisTemplateConfigStorageConfiguration.java
│ │ │ └── WxCpInRedissonConfigStorageConfiguration.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-cp-tp-multi-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── cp/
│ │ │ ├── autoconfigure/
│ │ │ │ └── WxCpTpMultiAutoConfiguration.java
│ │ │ ├── configuration/
│ │ │ │ ├── WxCpTpMultiServicesAutoConfiguration.java
│ │ │ │ └── services/
│ │ │ │ ├── AbstractWxCpTpConfiguration.java
│ │ │ │ ├── WxCpTpInJedisTpConfiguration.java
│ │ │ │ ├── WxCpTpInMemoryTpConfiguration.java
│ │ │ │ ├── WxCpTpInRedisTemplateTpConfiguration.java
│ │ │ │ └── WxCpTpInRedissonTpConfiguration.java
│ │ │ ├── properties/
│ │ │ │ ├── WxCpTpMultiProperties.java
│ │ │ │ ├── WxCpTpMultiRedisProperties.java
│ │ │ │ └── WxCpTpSingleProperties.java
│ │ │ └── service/
│ │ │ ├── WxCpTpMultiServices.java
│ │ │ └── WxCpTpMultiServicesImpl.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-miniapp-multi-spring-boot-starter/
│ │ ├── MULTI_TENANT_MODE.md
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── miniapp/
│ │ │ ├── autoconfigure/
│ │ │ │ └── WxMaMultiAutoConfiguration.java
│ │ │ ├── configuration/
│ │ │ │ ├── WxMaMultiServiceConfiguration.java
│ │ │ │ └── services/
│ │ │ │ ├── AbstractWxMaConfiguration.java
│ │ │ │ ├── WxMaInJedisConfiguration.java
│ │ │ │ ├── WxMaInMemoryConfiguration.java
│ │ │ │ ├── WxMaInRedisTemplateConfiguration.java
│ │ │ │ └── WxMaInRedissonConfiguration.java
│ │ │ ├── properties/
│ │ │ │ ├── WxMaMultiProperties.java
│ │ │ │ ├── WxMaMultiRedisProperties.java
│ │ │ │ └── WxMaSingleProperties.java
│ │ │ └── service/
│ │ │ ├── WxMaMultiServices.java
│ │ │ ├── WxMaMultiServicesImpl.java
│ │ │ └── WxMaMultiServicesSharedImpl.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-miniapp-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── miniapp/
│ │ │ ├── config/
│ │ │ │ ├── WxMaAutoConfiguration.java
│ │ │ │ ├── WxMaServiceAutoConfiguration.java
│ │ │ │ ├── WxMaStorageAutoConfiguration.java
│ │ │ │ └── storage/
│ │ │ │ ├── AbstractWxMaConfigStorageConfiguration.java
│ │ │ │ ├── WxMaInJedisConfigStorageConfiguration.java
│ │ │ │ ├── WxMaInMemoryConfigStorageConfiguration.java
│ │ │ │ ├── WxMaInRedisTemplateConfigStorageConfiguration.java
│ │ │ │ └── WxMaInRedissonConfigStorageConfiguration.java
│ │ │ ├── enums/
│ │ │ │ ├── HttpClientType.java
│ │ │ │ └── StorageType.java
│ │ │ └── properties/
│ │ │ ├── RedisProperties.java
│ │ │ └── WxMaProperties.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-mp-multi-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── mp/
│ │ │ ├── autoconfigure/
│ │ │ │ └── WxMpMultiAutoConfiguration.java
│ │ │ ├── configuration/
│ │ │ │ ├── WxMpMultiServiceConfiguration.java
│ │ │ │ └── services/
│ │ │ │ ├── AbstractWxMpConfiguration.java
│ │ │ │ ├── WxMpInJedisConfiguration.java
│ │ │ │ ├── WxMpInMemoryConfiguration.java
│ │ │ │ ├── WxMpInRedisTemplateConfiguration.java
│ │ │ │ └── WxMpInRedissonConfiguration.java
│ │ │ ├── properties/
│ │ │ │ ├── WxMpMultiProperties.java
│ │ │ │ ├── WxMpMultiRedisProperties.java
│ │ │ │ └── WxMpSingleProperties.java
│ │ │ └── service/
│ │ │ ├── WxMpMultiServices.java
│ │ │ ├── WxMpMultiServicesImpl.java
│ │ │ └── WxMpMultiServicesSharedImpl.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-mp-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── mp/
│ │ │ ├── config/
│ │ │ │ ├── WxMpAutoConfiguration.java
│ │ │ │ ├── WxMpServiceAutoConfiguration.java
│ │ │ │ ├── WxMpStorageAutoConfiguration.java
│ │ │ │ └── storage/
│ │ │ │ ├── AbstractWxMpConfigStorageConfiguration.java
│ │ │ │ ├── WxMpInJedisConfigStorageConfiguration.java
│ │ │ │ ├── WxMpInMemoryConfigStorageConfiguration.java
│ │ │ │ ├── WxMpInRedisTemplateConfigStorageConfiguration.java
│ │ │ │ └── WxMpInRedissonConfigStorageConfiguration.java
│ │ │ ├── enums/
│ │ │ │ ├── HttpClientType.java
│ │ │ │ └── StorageType.java
│ │ │ └── properties/
│ │ │ ├── HostConfig.java
│ │ │ ├── RedisProperties.java
│ │ │ └── WxMpProperties.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-open-multi-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── open/
│ │ │ ├── autoconfigure/
│ │ │ │ └── WxOpenMultiAutoConfiguration.java
│ │ │ ├── configuration/
│ │ │ │ ├── WxOpenMultiServiceConfiguration.java
│ │ │ │ └── services/
│ │ │ │ ├── AbstractWxOpenConfiguration.java
│ │ │ │ ├── WxOpenInJedisConfiguration.java
│ │ │ │ ├── WxOpenInMemoryConfiguration.java
│ │ │ │ ├── WxOpenInRedisTemplateConfiguration.java
│ │ │ │ └── WxOpenInRedissonConfiguration.java
│ │ │ ├── properties/
│ │ │ │ ├── WxOpenMultiProperties.java
│ │ │ │ ├── WxOpenMultiRedisProperties.java
│ │ │ │ └── WxOpenSingleProperties.java
│ │ │ └── service/
│ │ │ ├── WxOpenMultiServices.java
│ │ │ └── WxOpenMultiServicesImpl.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-open-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── open/
│ │ │ ├── config/
│ │ │ │ ├── WxOpenAutoConfiguration.java
│ │ │ │ ├── WxOpenServiceAutoConfiguration.java
│ │ │ │ ├── WxOpenStorageAutoConfiguration.java
│ │ │ │ └── storage/
│ │ │ │ ├── AbstractWxOpenConfigStorageConfiguration.java
│ │ │ │ ├── WxOpenInJedisConfigStorageConfiguration.java
│ │ │ │ ├── WxOpenInMemoryConfigStorageConfiguration.java
│ │ │ │ ├── WxOpenInRedisTemplateConfigStorageConfiguration.java
│ │ │ │ └── WxOpenInRedissonConfigStorageConfiguration.java
│ │ │ └── properties/
│ │ │ ├── WxOpenProperties.java
│ │ │ └── WxOpenRedisProperties.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── wx-java-pay-multi-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── binarywang/
│ │ │ │ └── spring/
│ │ │ │ └── starter/
│ │ │ │ └── wxjava/
│ │ │ │ └── pay/
│ │ │ │ ├── config/
│ │ │ │ │ └── WxPayMultiAutoConfiguration.java
│ │ │ │ ├── properties/
│ │ │ │ │ ├── WxPayMultiProperties.java
│ │ │ │ │ └── WxPaySingleProperties.java
│ │ │ │ └── service/
│ │ │ │ ├── WxPayMultiServices.java
│ │ │ │ └── WxPayMultiServicesImpl.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── spring.factories
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── binarywang/
│ │ └── spring/
│ │ └── starter/
│ │ └── wxjava/
│ │ └── pay/
│ │ ├── WxPayMultiServicesTest.java
│ │ └── example/
│ │ └── WxPayMultiExample.java
│ ├── wx-java-pay-spring-boot-starter/
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── binarywang/
│ │ │ └── spring/
│ │ │ └── starter/
│ │ │ └── wxjava/
│ │ │ └── pay/
│ │ │ ├── config/
│ │ │ │ └── WxPayAutoConfiguration.java
│ │ │ └── properties/
│ │ │ └── WxPayProperties.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ └── wx-java-qidian-spring-boot-starter/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── binarywang/
│ │ └── spring/
│ │ └── starter/
│ │ └── wxjava/
│ │ └── qidian/
│ │ ├── config/
│ │ │ ├── WxQidianAutoConfiguration.java
│ │ │ ├── WxQidianServiceAutoConfiguration.java
│ │ │ └── WxQidianStorageAutoConfiguration.java
│ │ ├── enums/
│ │ │ ├── HttpClientType.java
│ │ │ └── StorageType.java
│ │ └── properties/
│ │ ├── HostConfig.java
│ │ ├── RedisProperties.java
│ │ └── WxQidianProperties.java
│ └── resources/
│ └── META-INF/
│ ├── spring/
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── spring.factories
├── weixin-graal/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── github/
│ │ └── binarywang/
│ │ └── wx/
│ │ └── graal/
│ │ └── GraalProcessor.java
│ └── resources/
│ └── META-INF/
│ └── services/
│ └── javax.annotation.processing.Processor
├── weixin-java-channel/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── me/
│ │ └── chanjar/
│ │ └── weixin/
│ │ └── channel/
│ │ ├── api/
│ │ │ ├── BaseWxChannelMessageService.java
│ │ │ ├── BaseWxChannelService.java
│ │ │ ├── WxAssistantService.java
│ │ │ ├── WxChannelAddressService.java
│ │ │ ├── WxChannelAfterSaleService.java
│ │ │ ├── WxChannelBasicService.java
│ │ │ ├── WxChannelBrandService.java
│ │ │ ├── WxChannelCategoryService.java
│ │ │ ├── WxChannelCompassFinderService.java
│ │ │ ├── WxChannelCompassShopService.java
│ │ │ ├── WxChannelCouponService.java
│ │ │ ├── WxChannelFreightTemplateService.java
│ │ │ ├── WxChannelFundService.java
│ │ │ ├── WxChannelLiveDashboardService.java
│ │ │ ├── WxChannelOrderService.java
│ │ │ ├── WxChannelProductService.java
│ │ │ ├── WxChannelService.java
│ │ │ ├── WxChannelSharerService.java
│ │ │ ├── WxChannelVipService.java
│ │ │ ├── WxChannelWarehouseService.java
│ │ │ ├── WxFinderLiveService.java
│ │ │ ├── WxLeadComponentService.java
│ │ │ ├── WxLeagueProductService.java
│ │ │ ├── WxLeaguePromoterService.java
│ │ │ ├── WxLeagueSupplierService.java
│ │ │ ├── WxLeagueWindowService.java
│ │ │ ├── WxStoreCooperationService.java
│ │ │ ├── WxStoreHomePageService.java
│ │ │ └── impl/
│ │ │ ├── BaseWxChannelMessageServiceImpl.java
│ │ │ ├── BaseWxChannelServiceImpl.java
│ │ │ ├── WxAssistantServiceImpl.java
│ │ │ ├── WxChannelAddressServiceImpl.java
│ │ │ ├── WxChannelAfterSaleServiceImpl.java
│ │ │ ├── WxChannelBasicServiceImpl.java
│ │ │ ├── WxChannelBrandServiceImpl.java
│ │ │ ├── WxChannelCategoryServiceImpl.java
│ │ │ ├── WxChannelCompassFinderServiceImpl.java
│ │ │ ├── WxChannelCompassShopServiceImpl.java
│ │ │ ├── WxChannelCouponServiceImpl.java
│ │ │ ├── WxChannelFreightTemplateServiceImpl.java
│ │ │ ├── WxChannelFundServiceImpl.java
│ │ │ ├── WxChannelLiveDashboardServiceImpl.java
│ │ │ ├── WxChannelOrderServiceImpl.java
│ │ │ ├── WxChannelProductServiceImpl.java
│ │ │ ├── WxChannelServiceHttpClientImpl.java
│ │ │ ├── WxChannelServiceHttpComponentsImpl.java
│ │ │ ├── WxChannelServiceImpl.java
│ │ │ ├── WxChannelServiceOkHttpImpl.java
│ │ │ ├── WxChannelSharerServiceImpl.java
│ │ │ ├── WxChannelVipServiceImpl.java
│ │ │ ├── WxChannelWarehouseServiceImpl.java
│ │ │ ├── WxFinderLiveServiceImpl.java
│ │ │ ├── WxLeadComponentServiceImpl.java
│ │ │ ├── WxLeagueProductServiceImpl.java
│ │ │ ├── WxLeaguePromoterServiceImpl.java
│ │ │ ├── WxLeagueSupplierServiceImpl.java
│ │ │ ├── WxLeagueWindowServiceImpl.java
│ │ │ ├── WxStoreCooperationServiceImpl.java
│ │ │ └── WxStoreHomePageServiceImpl.java
│ │ ├── bean/
│ │ │ ├── address/
│ │ │ │ ├── AddressAddParam.java
│ │ │ │ ├── AddressCode.java
│ │ │ │ ├── AddressCodeResponse.java
│ │ │ │ ├── AddressDetail.java
│ │ │ │ ├── AddressIdParam.java
│ │ │ │ ├── AddressIdResponse.java
│ │ │ │ ├── AddressInfoResponse.java
│ │ │ │ ├── AddressListParam.java
│ │ │ │ ├── AddressListResponse.java
│ │ │ │ └── OfflineAddressType.java
│ │ │ ├── after/
│ │ │ │ ├── AfterSaleAcceptExchangeReshipParam.java
│ │ │ │ ├── AfterSaleAcceptParam.java
│ │ │ │ ├── AfterSaleDetail.java
│ │ │ │ ├── AfterSaleExchangeDeliveryInfo.java
│ │ │ │ ├── AfterSaleExchangeProductInfo.java
│ │ │ │ ├── AfterSaleIdParam.java
│ │ │ │ ├── AfterSaleInfo.java
│ │ │ │ ├── AfterSaleInfoResponse.java
│ │ │ │ ├── AfterSaleListParam.java
│ │ │ │ ├── AfterSaleListResponse.java
│ │ │ │ ├── AfterSaleMerchantUpdateParam.java
│ │ │ │ ├── AfterSaleProductInfo.java
│ │ │ │ ├── AfterSaleReason.java
│ │ │ │ ├── AfterSaleReasonResponse.java
│ │ │ │ ├── AfterSaleRejectExchangeReshipParam.java
│ │ │ │ ├── AfterSaleRejectParam.java
│ │ │ │ ├── AfterSaleRejectReason.java
│ │ │ │ ├── AfterSaleRejectReasonResponse.java
│ │ │ │ ├── AfterSaleReturnParam.java
│ │ │ │ ├── AfterSaleVirtualNumberInfo.java
│ │ │ │ ├── MerchantUploadInfo.java
│ │ │ │ ├── RefundEvidenceParam.java
│ │ │ │ ├── RefundInfo.java
│ │ │ │ ├── RefundResp.java
│ │ │ │ └── ReturnInfo.java
│ │ │ ├── audit/
│ │ │ │ ├── AuditApplyResponse.java
│ │ │ │ ├── AuditResponse.java
│ │ │ │ ├── AuditResult.java
│ │ │ │ ├── CategoryAuditInfo.java
│ │ │ │ ├── CategoryAuditRequest.java
│ │ │ │ ├── CategoryBrand.java
│ │ │ │ ├── CatsV2.java
│ │ │ │ └── ProductAuditInfo.java
│ │ │ ├── base/
│ │ │ │ ├── AddressInfo.java
│ │ │ │ ├── AttrInfo.java
│ │ │ │ ├── OffsetParam.java
│ │ │ │ ├── PageParam.java
│ │ │ │ ├── StreamPageParam.java
│ │ │ │ ├── TimeRange.java
│ │ │ │ └── WxChannelBaseResponse.java
│ │ │ ├── brand/
│ │ │ │ ├── BasicBrand.java
│ │ │ │ ├── Brand.java
│ │ │ │ ├── BrandApplicationDetail.java
│ │ │ │ ├── BrandApplyListResponse.java
│ │ │ │ ├── BrandGrantDetail.java
│ │ │ │ ├── BrandInfo.java
│ │ │ │ ├── BrandInfoResponse.java
│ │ │ │ ├── BrandListResponse.java
│ │ │ │ ├── BrandParam.java
│ │ │ │ ├── BrandRegisterDetail.java
│ │ │ │ └── BrandSearchParam.java
│ │ │ ├── category/
│ │ │ │ ├── AccountCategoryResponse.java
│ │ │ │ ├── CategoryAndQualificationList.java
│ │ │ │ ├── CategoryDetailResult.java
│ │ │ │ ├── CategoryQualification.java
│ │ │ │ ├── CategoryQualificationResponse.java
│ │ │ │ ├── PassCategoryInfo.java
│ │ │ │ ├── PassCategoryResponse.java
│ │ │ │ ├── QualificationInfo.java
│ │ │ │ ├── RelationCategoryItem.java
│ │ │ │ ├── RelationCategoryRequest.java
│ │ │ │ ├── RelationCategoryResponse.java
│ │ │ │ ├── ShopCategory.java
│ │ │ │ └── ShopCategoryResponse.java
│ │ │ ├── compass/
│ │ │ │ ├── CompassFinderBaseParam.java
│ │ │ │ ├── finder/
│ │ │ │ │ ├── Field.java
│ │ │ │ │ ├── FieldData.java
│ │ │ │ │ ├── Overall.java
│ │ │ │ │ ├── OverallResponse.java
│ │ │ │ │ ├── ProductCompassData.java
│ │ │ │ │ ├── ProductDataParam.java
│ │ │ │ │ ├── ProductDataResponse.java
│ │ │ │ │ ├── ProductInfo.java
│ │ │ │ │ ├── ProductListResponse.java
│ │ │ │ │ ├── SaleProfileData.java
│ │ │ │ │ ├── SaleProfileDataParam.java
│ │ │ │ │ └── SaleProfileDataResponse.java
│ │ │ │ └── shop/
│ │ │ │ ├── CompassFinderIdParam.java
│ │ │ │ ├── FinderAuthListResponse.java
│ │ │ │ ├── FinderGmvData.java
│ │ │ │ ├── FinderGmvItem.java
│ │ │ │ ├── FinderListResponse.java
│ │ │ │ ├── FinderOverallData.java
│ │ │ │ ├── FinderOverallResponse.java
│ │ │ │ ├── FinderProductListItem.java
│ │ │ │ ├── FinderProductListResponse.java
│ │ │ │ ├── FinderProductOverallResponse.java
│ │ │ │ ├── FinderProductSimpleGmvData.java
│ │ │ │ ├── ShopField.java
│ │ │ │ ├── ShopLiveData.java
│ │ │ │ ├── ShopLiveListResponse.java
│ │ │ │ ├── ShopOverall.java
│ │ │ │ ├── ShopOverallResponse.java
│ │ │ │ ├── ShopProductCompassData.java
│ │ │ │ ├── ShopProductDataParam.java
│ │ │ │ ├── ShopProductDataResponse.java
│ │ │ │ ├── ShopProductInfo.java
│ │ │ │ ├── ShopProductListResponse.java
│ │ │ │ ├── ShopSaleProfileData.java
│ │ │ │ ├── ShopSaleProfileDataParam.java
│ │ │ │ └── ShopSaleProfileDataResponse.java
│ │ │ ├── complaint/
│ │ │ │ ├── ComplaintHistory.java
│ │ │ │ ├── ComplaintOrderResponse.java
│ │ │ │ └── ComplaintParam.java
│ │ │ ├── cooperation/
│ │ │ │ ├── CooperationData.java
│ │ │ │ ├── CooperationListResponse.java
│ │ │ │ ├── CooperationQrCode.java
│ │ │ │ ├── CooperationQrCodeResponse.java
│ │ │ │ ├── CooperationSharerParam.java
│ │ │ │ ├── CooperationStatus.java
│ │ │ │ └── CooperationStatusResponse.java
│ │ │ ├── coupon/
│ │ │ │ ├── AutoValidInfo.java
│ │ │ │ ├── CouponDetailInfo.java
│ │ │ │ ├── CouponIdInfo.java
│ │ │ │ ├── CouponIdResponse.java
│ │ │ │ ├── CouponInfo.java
│ │ │ │ ├── CouponInfoResponse.java
│ │ │ │ ├── CouponListParam.java
│ │ │ │ ├── CouponListResponse.java
│ │ │ │ ├── CouponParam.java
│ │ │ │ ├── CouponStatusParam.java
│ │ │ │ ├── DiscountCondition.java
│ │ │ │ ├── DiscountInfo.java
│ │ │ │ ├── ExtInfo.java
│ │ │ │ ├── PromoteInfo.java
│ │ │ │ ├── ReceiveInfo.java
│ │ │ │ ├── StockInfo.java
│ │ │ │ ├── UserCoupon.java
│ │ │ │ ├── UserCouponIdInfo.java
│ │ │ │ ├── UserCouponIdParam.java
│ │ │ │ ├── UserCouponListParam.java
│ │ │ │ ├── UserCouponListResponse.java
│ │ │ │ ├── UserCouponResponse.java
│ │ │ │ ├── UserExtInfo.java
│ │ │ │ └── ValidInfo.java
│ │ │ ├── delivery/
│ │ │ │ ├── DeliveryCompanyInfo.java
│ │ │ │ ├── DeliveryCompanyResponse.java
│ │ │ │ ├── DeliveryInfo.java
│ │ │ │ ├── DeliverySendParam.java
│ │ │ │ ├── FreightProductInfo.java
│ │ │ │ ├── FreshInspectParam.java
│ │ │ │ └── PackageAuditInfo.java
│ │ │ ├── freight/
│ │ │ │ ├── AddressInfoList.java
│ │ │ │ ├── AllConditionFreeDetail.java
│ │ │ │ ├── AllFreightCalcMethod.java
│ │ │ │ ├── ConditionFreeDetail.java
│ │ │ │ ├── FreightCalcMethod.java
│ │ │ │ ├── FreightTemplate.java
│ │ │ │ ├── NotSendArea.java
│ │ │ │ ├── TemplateAddParam.java
│ │ │ │ ├── TemplateIdResponse.java
│ │ │ │ ├── TemplateInfoResponse.java
│ │ │ │ ├── TemplateListParam.java
│ │ │ │ └── TemplateListResponse.java
│ │ │ ├── fund/
│ │ │ │ ├── AccountInfo.java
│ │ │ │ ├── AccountInfoParam.java
│ │ │ │ ├── AccountInfoResponse.java
│ │ │ │ ├── BalanceInfoResponse.java
│ │ │ │ ├── FlowListResponse.java
│ │ │ │ ├── FlowRelatedInfo.java
│ │ │ │ ├── FundsFlow.java
│ │ │ │ ├── FundsFlowResponse.java
│ │ │ │ ├── FundsListParam.java
│ │ │ │ ├── WithdrawDetailResponse.java
│ │ │ │ ├── WithdrawListParam.java
│ │ │ │ ├── WithdrawListResponse.java
│ │ │ │ ├── WithdrawSubmitParam.java
│ │ │ │ ├── WithdrawSubmitResponse.java
│ │ │ │ ├── bank/
│ │ │ │ │ ├── BankCityInfo.java
│ │ │ │ │ ├── BankCityResponse.java
│ │ │ │ │ ├── BankInfo.java
│ │ │ │ │ ├── BankInfoResponse.java
│ │ │ │ │ ├── BankListResponse.java
│ │ │ │ │ ├── BankProvinceInfo.java
│ │ │ │ │ ├── BankProvinceResponse.java
│ │ │ │ │ ├── BankSearchParam.java
│ │ │ │ │ ├── BranchInfo.java
│ │ │ │ │ ├── BranchInfoResponse.java
│ │ │ │ │ └── BranchSearchParam.java
│ │ │ │ └── qrcode/
│ │ │ │ ├── QrCheckResponse.java
│ │ │ │ └── QrCodeResponse.java
│ │ │ ├── home/
│ │ │ │ ├── background/
│ │ │ │ │ ├── BackgroundApplyResponse.java
│ │ │ │ │ ├── BackgroundApplyResult.java
│ │ │ │ │ └── BackgroundGetResponse.java
│ │ │ │ ├── banner/
│ │ │ │ │ ├── BannerApplyDetail.java
│ │ │ │ │ ├── BannerApplyInfo.java
│ │ │ │ │ ├── BannerApplyParam.java
│ │ │ │ │ ├── BannerApplyResponse.java
│ │ │ │ │ ├── BannerGetResponse.java
│ │ │ │ │ ├── BannerInfo.java
│ │ │ │ │ ├── BannerItem.java
│ │ │ │ │ ├── BannerItemDetail.java
│ │ │ │ │ ├── BannerItemFinder.java
│ │ │ │ │ ├── BannerItemOfficialAccount.java
│ │ │ │ │ └── BannerItemProduct.java
│ │ │ │ ├── tree/
│ │ │ │ │ ├── CatTreeNode.java
│ │ │ │ │ ├── LevelTreeInfo.java
│ │ │ │ │ ├── OneLevelTreeNode.java
│ │ │ │ │ ├── TreeAuditResult.java
│ │ │ │ │ ├── TreeAuditResultDetail.java
│ │ │ │ │ ├── TreeProductEditInfo.java
│ │ │ │ │ ├── TreeProductEditParam.java
│ │ │ │ │ ├── TreeProductListInfo.java
│ │ │ │ │ ├── TreeProductListParam.java
│ │ │ │ │ ├── TreeProductListResponse.java
│ │ │ │ │ ├── TreeProductListResult.java
│ │ │ │ │ ├── TreeShowGetResponse.java
│ │ │ │ │ ├── TreeShowInfo.java
│ │ │ │ │ ├── TreeShowParam.java
│ │ │ │ │ └── TreeShowSetResponse.java
│ │ │ │ └── window/
│ │ │ │ ├── WindowProductIndexParam.java
│ │ │ │ ├── WindowProductListParam.java
│ │ │ │ ├── WindowProductSetting.java
│ │ │ │ └── WindowProductSettingResponse.java
│ │ │ ├── image/
│ │ │ │ ├── ChannelImageInfo.java
│ │ │ │ ├── ChannelImageResponse.java
│ │ │ │ ├── QualificationFileId.java
│ │ │ │ ├── QualificationFileResponse.java
│ │ │ │ └── UploadImageResponse.java
│ │ │ ├── lead/
│ │ │ │ └── component/
│ │ │ │ ├── request/
│ │ │ │ │ ├── GetFinderLiveDataListRequest.java
│ │ │ │ │ ├── GetFinderLiveLeadsDataRequest.java
│ │ │ │ │ ├── GetLeadInfoByComponentRequest.java
│ │ │ │ │ ├── GetLeadsComponentIdRequest.java
│ │ │ │ │ ├── GetLeadsComponentPromoteRecordRequest.java
│ │ │ │ │ ├── GetLeadsInfoByRequestIdRequest.java
│ │ │ │ │ └── GetLeadsRequestIdRequest.java
│ │ │ │ └── response/
│ │ │ │ ├── FinderAttrResponse.java
│ │ │ │ ├── GetFinderLiveDataListResponse.java
│ │ │ │ ├── GetFinderLiveLeadsDataResponse.java
│ │ │ │ ├── GetLeadsComponentIdResponse.java
│ │ │ │ ├── GetLeadsComponentPromoteRecordResponse.java
│ │ │ │ ├── GetLeadsRequestIdResponse.java
│ │ │ │ └── LeadInfoResponse.java
│ │ │ ├── league/
│ │ │ │ ├── AddressInfo.java
│ │ │ │ ├── CatInfo.java
│ │ │ │ ├── DescInfo.java
│ │ │ │ ├── ExpressInfo.java
│ │ │ │ ├── SimpleProductInfo.java
│ │ │ │ ├── product/
│ │ │ │ │ ├── BatchAddParam.java
│ │ │ │ │ ├── BatchAddResponse.java
│ │ │ │ │ ├── ProductDeleteParam.java
│ │ │ │ │ ├── ProductDetailParam.java
│ │ │ │ │ ├── ProductDetailResponse.java
│ │ │ │ │ ├── ProductListParam.java
│ │ │ │ │ ├── ProductListResponse.java
│ │ │ │ │ ├── ProductUpdateParam.java
│ │ │ │ │ └── ProductUpdateResponse.java
│ │ │ │ ├── promoter/
│ │ │ │ │ ├── PromoterInfo.java
│ │ │ │ │ ├── PromoterInfoResponse.java
│ │ │ │ │ ├── PromoterListParam.java
│ │ │ │ │ └── PromoterListResponse.java
│ │ │ │ ├── supplier/
│ │ │ │ │ ├── BizBaseInfo.java
│ │ │ │ │ ├── CommissionInfo.java
│ │ │ │ │ ├── CommissionOrderListParam.java
│ │ │ │ │ ├── CommissionOrderListResponse.java
│ │ │ │ │ ├── CommissionOrderResponse.java
│ │ │ │ │ ├── CoopProductDetailParam.java
│ │ │ │ │ ├── CoopProductListParam.java
│ │ │ │ │ ├── CoopProductListResponse.java
│ │ │ │ │ ├── CoopProductResponse.java
│ │ │ │ │ ├── FlowListParam.java
│ │ │ │ │ ├── FundsFlowInfo.java
│ │ │ │ │ ├── ProductInfo.java
│ │ │ │ │ ├── ShopDetailResponse.java
│ │ │ │ │ ├── ShopListResponse.java
│ │ │ │ │ ├── SkuInfo.java
│ │ │ │ │ ├── SupplierBalanceResponse.java
│ │ │ │ │ ├── SupplierFlowDetailResponse.java
│ │ │ │ │ └── SupplierFlowListResponse.java
│ │ │ │ └── window/
│ │ │ │ ├── AuthInfo.java
│ │ │ │ ├── AuthInfoResponse.java
│ │ │ │ ├── AuthStatusResponse.java
│ │ │ │ ├── ProductSearchParam.java
│ │ │ │ ├── WindowProductListResponse.java
│ │ │ │ ├── WindowProductParam.java
│ │ │ │ └── WindowProductResponse.java
│ │ │ ├── limit/
│ │ │ │ ├── LimitSku.java
│ │ │ │ ├── LimitTaskAddResponse.java
│ │ │ │ ├── LimitTaskInfo.java
│ │ │ │ ├── LimitTaskListParam.java
│ │ │ │ ├── LimitTaskListResponse.java
│ │ │ │ └── LimitTaskParam.java
│ │ │ ├── live/
│ │ │ │ └── dashboard/
│ │ │ │ ├── ConversionMetric.java
│ │ │ │ ├── DataNode.java
│ │ │ │ ├── DataNodeList.java
│ │ │ │ ├── DataNodeSecondList.java
│ │ │ │ ├── DataNodeThirdList.java
│ │ │ │ ├── Dimension.java
│ │ │ │ ├── Ended.java
│ │ │ │ ├── EndedIndexItem.java
│ │ │ │ ├── Fields.java
│ │ │ │ ├── ItemConversionMetric.java
│ │ │ │ ├── LiveComparisonIndex.java
│ │ │ │ ├── LiveDashboardData.java
│ │ │ │ ├── LiveDashboardData2.java
│ │ │ │ ├── LiveDashboardData2Portrait.java
│ │ │ │ ├── LiveDashboardData2Source.java
│ │ │ │ ├── LiveDashboardData2Summary.java
│ │ │ │ ├── LiveDataParam.java
│ │ │ │ ├── LiveDataResponse.java
│ │ │ │ ├── LiveDistChannelSourceStats.java
│ │ │ │ ├── LiveDistributionByFlowTypeStat.java
│ │ │ │ ├── LiveDistributionChannel.java
│ │ │ │ ├── LiveDistributionSceneStat.java
│ │ │ │ ├── LiveEcConversionMetric.java
│ │ │ │ ├── LiveEcDataSummary.java
│ │ │ │ ├── LiveEcProfile.java
│ │ │ │ ├── LiveItem.java
│ │ │ │ ├── LiveListParam.java
│ │ │ │ ├── LiveListResponse.java
│ │ │ │ ├── OnAir.java
│ │ │ │ ├── OnAirIndexItem.java
│ │ │ │ ├── Point.java
│ │ │ │ ├── QuarterlyGrowthRate.java
│ │ │ │ ├── Series.java
│ │ │ │ ├── SingleLiveEcSpuDataPageV2.java
│ │ │ │ ├── SpuBaseData.java
│ │ │ │ ├── SpuData.java
│ │ │ │ └── SubLiveDistChannelSourceStats.java
│ │ │ ├── message/
│ │ │ │ ├── SessionMessage.java
│ │ │ │ ├── after/
│ │ │ │ │ ├── AfterSaleMessage.java
│ │ │ │ │ ├── AfterSaleStatusInfo.java
│ │ │ │ │ ├── ComplaintInfo.java
│ │ │ │ │ └── ComplaintMessage.java
│ │ │ │ ├── coupon/
│ │ │ │ │ ├── CouponActionInfo.java
│ │ │ │ │ ├── CouponActionMessage.java
│ │ │ │ │ ├── CouponReceiveMessage.java
│ │ │ │ │ ├── UserCouponActionInfo.java
│ │ │ │ │ ├── UserCouponExpireMessage.java
│ │ │ │ │ └── UserCouponUseMessage.java
│ │ │ │ ├── fund/
│ │ │ │ │ ├── AccountNotifyMessage.java
│ │ │ │ │ ├── BankNotifyInfo.java
│ │ │ │ │ ├── QrNotifyInfo.java
│ │ │ │ │ ├── QrNotifyMessage.java
│ │ │ │ │ ├── WithdrawNotifyInfo.java
│ │ │ │ │ └── WithdrawNotifyMessage.java
│ │ │ │ ├── order/
│ │ │ │ │ ├── OrderCancelInfo.java
│ │ │ │ │ ├── OrderCancelMessage.java
│ │ │ │ │ ├── OrderConfirmInfo.java
│ │ │ │ │ ├── OrderConfirmMessage.java
│ │ │ │ │ ├── OrderDeliveryInfo.java
│ │ │ │ │ ├── OrderDeliveryMessage.java
│ │ │ │ │ ├── OrderExtInfo.java
│ │ │ │ │ ├── OrderExtMessage.java
│ │ │ │ │ ├── OrderIdInfo.java
│ │ │ │ │ ├── OrderIdMessage.java
│ │ │ │ │ ├── OrderPayInfo.java
│ │ │ │ │ ├── OrderPayMessage.java
│ │ │ │ │ ├── OrderSettleInfo.java
│ │ │ │ │ ├── OrderSettleMessage.java
│ │ │ │ │ └── OrderStatusMessage.java
│ │ │ │ ├── product/
│ │ │ │ │ ├── BrandMessage.java
│ │ │ │ │ ├── CategoryAuditMessage.java
│ │ │ │ │ ├── SpuAuditMessage.java
│ │ │ │ │ ├── SpuStatusMessage.java
│ │ │ │ │ └── SpuStockMessage.java
│ │ │ │ ├── sharer/
│ │ │ │ │ └── SharerChangeMessage.java
│ │ │ │ ├── store/
│ │ │ │ │ ├── CloseStoreMessage.java
│ │ │ │ │ └── NicknameUpdateMessage.java
│ │ │ │ ├── supplier/
│ │ │ │ │ ├── SupplierItemInfo.java
│ │ │ │ │ └── SupplierItemMessage.java
│ │ │ │ ├── vip/
│ │ │ │ │ ├── CouponInfo.java
│ │ │ │ │ ├── ExchangeInfo.java
│ │ │ │ │ ├── ExchangeInfoMessage.java
│ │ │ │ │ ├── ProductInfo.java
│ │ │ │ │ ├── UserInfo.java
│ │ │ │ │ └── UserInfoMessage.java
│ │ │ │ └── voucher/
│ │ │ │ ├── VoucherInfo.java
│ │ │ │ └── VoucherMessage.java
│ │ │ ├── order/
│ │ │ │ ├── AfterSaleDetail.java
│ │ │ │ ├── AfterSaleOrderInfo.java
│ │ │ │ ├── ChangeOrderInfo.java
│ │ │ │ ├── ChangeSkuInfo.java
│ │ │ │ ├── DecodeAddressInfo.java
│ │ │ │ ├── DecodeSensitiveInfoResponse.java
│ │ │ │ ├── DeliveryProductInfo.java
│ │ │ │ ├── DeliveryUpdateParam.java
│ │ │ │ ├── DropshipInfo.java
│ │ │ │ ├── FreeGiftInfo.java
│ │ │ │ ├── MainProductInfo.java
│ │ │ │ ├── OrderAddressInfo.java
│ │ │ │ ├── OrderAddressParam.java
│ │ │ │ ├── OrderAgentInfo.java
│ │ │ │ ├── OrderCommissionInfo.java
│ │ │ │ ├── OrderCouponInfo.java
│ │ │ │ ├── OrderCustomInfo.java
│ │ │ │ ├── OrderDeliveryInfo.java
│ │ │ │ ├── OrderDetailInfo.java
│ │ │ │ ├── OrderExtInfo.java
│ │ │ │ ├── OrderGreetingCardInfo.java
│ │ │ │ ├── OrderIdParam.java
│ │ │ │ ├── OrderInfo.java
│ │ │ │ ├── OrderInfoParam.java
│ │ │ │ ├── OrderInfoResponse.java
│ │ │ │ ├── OrderListParam.java
│ │ │ │ ├── OrderListResponse.java
│ │ │ │ ├── OrderPayInfo.java
│ │ │ │ ├── OrderPriceInfo.java
│ │ │ │ ├── OrderPriceParam.java
│ │ │ │ ├── OrderProductExtraService.java
│ │ │ │ ├── OrderProductInfo.java
│ │ │ │ ├── OrderRefundInfo.java
│ │ │ │ ├── OrderRemarkParam.java
│ │ │ │ ├── OrderSearchCondition.java
│ │ │ │ ├── OrderSearchParam.java
│ │ │ │ ├── OrderSettleInfo.java
│ │ │ │ ├── OrderSharerInfo.java
│ │ │ │ ├── OrderSkuDeliverInfo.java
│ │ │ │ ├── OrderSkuShareInfo.java
│ │ │ │ ├── OrderSourceInfo.java
│ │ │ │ ├── QualityInsepctInfo.java
│ │ │ │ ├── RechargeInfo.java
│ │ │ │ ├── TelNumberExtInfo.java
│ │ │ │ ├── VirtualNumberInfo.java
│ │ │ │ └── VirtualTelNumberResponse.java
│ │ │ ├── product/
│ │ │ │ ├── AfterSaleInfo.java
│ │ │ │ ├── DescriptionInfo.java
│ │ │ │ ├── ExpressInfo.java
│ │ │ │ ├── ExtraServiceInfo.java
│ │ │ │ ├── LimitInfo.java
│ │ │ │ ├── ProductQuaInfo.java
│ │ │ │ ├── ProductSaleLimitInfo.java
│ │ │ │ ├── SkuDeliverInfo.java
│ │ │ │ ├── SkuFastInfo.java
│ │ │ │ ├── SkuInfo.java
│ │ │ │ ├── SkuStockBatchList.java
│ │ │ │ ├── SkuStockBatchParam.java
│ │ │ │ ├── SkuStockBatchResponse.java
│ │ │ │ ├── SkuStockInfo.java
│ │ │ │ ├── SkuStockParam.java
│ │ │ │ ├── SkuStockResponse.java
│ │ │ │ ├── SpuCategory.java
│ │ │ │ ├── SpuFastInfo.java
│ │ │ │ ├── SpuGetResponse.java
│ │ │ │ ├── SpuInfo.java
│ │ │ │ ├── SpuListParam.java
│ │ │ │ ├── SpuListResponse.java
│ │ │ │ ├── SpuSimpleInfo.java
│ │ │ │ ├── SpuSizeChart.java
│ │ │ │ ├── SpuSizeChartItem.java
│ │ │ │ ├── SpuStockInfo.java
│ │ │ │ ├── SpuUpdateInfo.java
│ │ │ │ ├── SpuUpdateResponse.java
│ │ │ │ ├── TimingOnSaleInfo.java
│ │ │ │ ├── WarehouseStockInfo.java
│ │ │ │ └── link/
│ │ │ │ ├── ProductH5UrlResponse.java
│ │ │ │ ├── ProductQrCodeResponse.java
│ │ │ │ └── ProductTagLinkResponse.java
│ │ │ ├── sharer/
│ │ │ │ ├── FinderSceneInfo.java
│ │ │ │ ├── SharerBindResponse.java
│ │ │ │ ├── SharerInfo.java
│ │ │ │ ├── SharerInfoResponse.java
│ │ │ │ ├── SharerListParam.java
│ │ │ │ ├── SharerOrder.java
│ │ │ │ ├── SharerOrderParam.java
│ │ │ │ ├── SharerOrderResponse.java
│ │ │ │ ├── SharerSearchParam.java
│ │ │ │ ├── SharerSearchResponse.java
│ │ │ │ ├── SharerUnbindParam.java
│ │ │ │ └── SharerUnbindResponse.java
│ │ │ ├── shop/
│ │ │ │ ├── ShopInfo.java
│ │ │ │ └── ShopInfoResponse.java
│ │ │ ├── token/
│ │ │ │ └── StableTokenParam.java
│ │ │ ├── vip/
│ │ │ │ ├── ScoreInfo.java
│ │ │ │ ├── UserGradeInfo.java
│ │ │ │ ├── UserInfo.java
│ │ │ │ ├── VipGradeParam.java
│ │ │ │ ├── VipInfo.java
│ │ │ │ ├── VipInfoParam.java
│ │ │ │ ├── VipInfoResponse.java
│ │ │ │ ├── VipListParam.java
│ │ │ │ ├── VipListResponse.java
│ │ │ │ ├── VipOpenIdParam.java
│ │ │ │ ├── VipScoreParam.java
│ │ │ │ └── VipScoreResponse.java
│ │ │ ├── warehouse/
│ │ │ │ ├── LocationPriorityResponse.java
│ │ │ │ ├── PriorityLocationParam.java
│ │ │ │ ├── StockGetParam.java
│ │ │ │ ├── UpdateLocationParam.java
│ │ │ │ ├── Warehouse.java
│ │ │ │ ├── WarehouseIdsResponse.java
│ │ │ │ ├── WarehouseLocation.java
│ │ │ │ ├── WarehouseLocationParam.java
│ │ │ │ ├── WarehouseParam.java
│ │ │ │ ├── WarehouseResponse.java
│ │ │ │ ├── WarehouseStockParam.java
│ │ │ │ └── WarehouseStockResponse.java
│ │ │ └── window/
│ │ │ ├── request/
│ │ │ │ ├── AddWindowProductRequest.java
│ │ │ │ ├── GetWindowProductListRequest.java
│ │ │ │ └── WindowProductRequest.java
│ │ │ └── response/
│ │ │ ├── GetWindowProductListResponse.java
│ │ │ └── GetWindowProductResponse.java
│ │ ├── common/
│ │ │ └── ChannelWxError.java
│ │ ├── config/
│ │ │ ├── WxChannelConfig.java
│ │ │ └── impl/
│ │ │ ├── WxChannelDefaultConfigImpl.java
│ │ │ ├── WxChannelRedisConfigImpl.java
│ │ │ └── WxChannelRedissonConfigImpl.java
│ │ ├── constant/
│ │ │ ├── MessageEventConstants.java
│ │ │ └── WxChannelApiUrlConstants.java
│ │ ├── enums/
│ │ │ ├── AccountType.java
│ │ │ ├── AfterSaleStatus.java
│ │ │ ├── AfterSaleType.java
│ │ │ ├── AfterSalesReason.java
│ │ │ ├── BannerType.java
│ │ │ ├── CommissionOrderStatus.java
│ │ │ ├── ComplaintItemType.java
│ │ │ ├── ComplaintStatus.java
│ │ │ ├── CouponType.java
│ │ │ ├── CouponValidType.java
│ │ │ ├── DeliveryType.java
│ │ │ ├── DimensionType.java
│ │ │ ├── EcProfileDataNodeKey.java
│ │ │ ├── FundsType.java
│ │ │ ├── LiveDistributionFlowType.java
│ │ │ ├── LiveDistributionSceneType.java
│ │ │ ├── MessageType.java
│ │ │ ├── OrderScene.java
│ │ │ ├── PackageAuditItemType.java
│ │ │ ├── PromoteType.java
│ │ │ ├── QrCheckStatus.java
│ │ │ ├── RefundReason.java
│ │ │ ├── SaleProfileUserType.java
│ │ │ ├── SendTime.java
│ │ │ ├── ShareScene.java
│ │ │ ├── SharerType.java
│ │ │ ├── SpuEditStatus.java
│ │ │ ├── SpuStatus.java
│ │ │ ├── UserCouponStatus.java
│ │ │ ├── WithdrawStatus.java
│ │ │ ├── WxChannelErrorMsgEnum.java
│ │ │ ├── WxCouponStatus.java
│ │ │ └── WxOrderStatus.java
│ │ ├── executor/
│ │ │ ├── ApacheHttpChannelFileUploadRequestExecutor.java
│ │ │ ├── ApacheHttpChannelMediaDownloadRequestExecutor.java
│ │ │ ├── ChannelFileUploadRequestExecutor.java
│ │ │ ├── ChannelMediaDownloadRequestExecutor.java
│ │ │ ├── HttpComponentsChannelFileUploadRequestExecutor.java
│ │ │ └── HttpComponentsChannelMediaDownloadRequestExecutor.java
│ │ ├── message/
│ │ │ ├── WxChannelMessage.java
│ │ │ ├── WxChannelMessageRouter.java
│ │ │ ├── WxChannelMessageRouterRule.java
│ │ │ └── rule/
│ │ │ ├── HandlerConsumer.java
│ │ │ ├── WxChannelMessageHandler.java
│ │ │ ├── WxChannelMessageInterceptor.java
│ │ │ └── WxChannelMessageMatcher.java
│ │ └── util/
│ │ ├── JsonUtils.java
│ │ ├── ResponseUtils.java
│ │ ├── WxChCryptUtils.java
│ │ └── XmlUtils.java
│ └── test/
│ ├── java/
│ │ └── me/
│ │ └── chanjar/
│ │ └── weixin/
│ │ └── channel/
│ │ ├── api/
│ │ │ └── impl/
│ │ │ ├── WxAssistantServiceImplTest.java
│ │ │ ├── WxChannelAddressServiceImplTest.java
│ │ │ ├── WxChannelAfterSaleServiceImplTest.java
│ │ │ ├── WxChannelBasicServiceImplTest.java
│ │ │ ├── WxChannelBrandServiceImplTest.java
│ │ │ ├── WxChannelCategoryServiceImplTest.java
│ │ │ ├── WxChannelCompassFinderServiceImplTest.java
│ │ │ ├── WxChannelCompassShopServiceImplTest.java
│ │ │ ├── WxChannelCouponServiceImplTest.java
│ │ │ ├── WxChannelFreightTemplateServiceImplTest.java
│ │ │ ├── WxChannelFundServiceImplTest.java
│ │ │ ├── WxChannelLiveDashboardServiceImplTest.java
│ │ │ ├── WxChannelOrderServiceImplTest.java
│ │ │ ├── WxChannelProductServiceImplTest.java
│ │ │ ├── WxChannelSharerServiceImplTest.java
│ │ │ ├── WxChannelVipServiceImplTest.java
│ │ │ ├── WxChannelWarehouseServiceImplTest.java
│ │ │ ├── WxFinderLiveServiceImplTest.java
│ │ │ ├── WxLeadComponentServiceImplTest.java
│ │ │ ├── WxLeagueProductServiceImplTest.java
│ │ │ ├── WxLeaguePromoterServiceImplTest.java
│ │ │ ├── WxLeagueSupplierServiceImplTest.java
│ │ │ ├── WxLeagueWindowServiceImplTest.java
│ │ │ ├── WxStoreCooperationServiceImplTest.java
│ │ │ └── WxStoreHomePageServiceImplTest.java
│ │ ├── message/
│ │ │ ├── WxChannelMessageRouterRuleTest.java
│ │ │ └── WxChannelMessageRouterTest.java
│ │ ├── test/
│ │ │ ├── ApiTestModule.java
│ │ │ └── TestConfig.java
│ │ └── util/
│ │ ├── JsonUtilsTest.java
│ │ └── ResponseUtilsTest.java
│ └── resources/
│ ├── logback-test.xml
│ ├── test-config.sample.xml
│ └── testng.xml
├── weixin-java-cloudbase/
│ └── README.md
├── weixin-java-common/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── me/
│ │ │ └── chanjar/
│ │ │ └── weixin/
│ │ │ └── common/
│ │ │ ├── annotation/
│ │ │ │ └── Required.java
│ │ │ ├── api/
│ │ │ │ ├── WxConsts.java
│ │ │ │ ├── WxErrorExceptionHandler.java
│ │ │ │ ├── WxMessageDuplicateChecker.java
│ │ │ │ ├── WxMessageInMemoryDuplicateChecker.java
│ │ │ │ ├── WxMessageInMemoryDuplicateCheckerSingleton.java
│ │ │ │ └── WxMessageInRedisDuplicateChecker.java
│ │ │ ├── bean/
│ │ │ │ ├── CommonUploadData.java
│ │ │ │ ├── CommonUploadParam.java
│ │ │ │ ├── ToJson.java
│ │ │ │ ├── WxAccessToken.java
│ │ │ │ ├── WxAccessTokenEntity.java
│ │ │ │ ├── WxCardApiSignature.java
│ │ │ │ ├── WxJsapiSignature.java
│ │ │ │ ├── WxNetCheckResult.java
│ │ │ │ ├── WxOAuth2UserInfo.java
│ │ │ │ ├── imgproc/
│ │ │ │ │ ├── WxImgProcAiCropResult.java
│ │ │ │ │ ├── WxImgProcQrCodeResult.java
│ │ │ │ │ └── WxImgProcSuperResolutionResult.java
│ │ │ │ ├── menu/
│ │ │ │ │ ├── WxMenu.java
│ │ │ │ │ ├── WxMenuButton.java
│ │ │ │ │ └── WxMenuRule.java
│ │ │ │ ├── oauth2/
│ │ │ │ │ └── WxOAuth2AccessToken.java
│ │ │ │ ├── ocr/
│ │ │ │ │ ├── WxOcrBankCardResult.java
│ │ │ │ │ ├── WxOcrBizLicenseResult.java
│ │ │ │ │ ├── WxOcrCommResult.java
│ │ │ │ │ ├── WxOcrDrivingLicenseResult.java
│ │ │ │ │ ├── WxOcrDrivingResult.java
│ │ │ │ │ ├── WxOcrIdCardResult.java
│ │ │ │ │ ├── WxOcrImgSize.java
│ │ │ │ │ └── WxOcrPos.java
│ │ │ │ ├── result/
│ │ │ │ │ ├── WxMediaUploadResult.java
│ │ │ │ │ ├── WxMinishopImageUploadCustomizeResult.java
│ │ │ │ │ ├── WxMinishopImageUploadResult.java
│ │ │ │ │ ├── WxMinishopPicFileCustomizeResult.java
│ │ │ │ │ └── WxMinishopPicFileResult.java
│ │ │ │ └── subscribemsg/
│ │ │ │ ├── CategoryData.java
│ │ │ │ ├── PubTemplateKeyword.java
│ │ │ │ ├── PubTemplateTitleListResult.java
│ │ │ │ └── TemplateInfo.java
│ │ │ ├── enums/
│ │ │ │ ├── TicketType.java
│ │ │ │ └── WxType.java
│ │ │ ├── error/
│ │ │ │ ├── WxChannelErrorMsgEnum.java
│ │ │ │ ├── WxCpErrorMsgEnum.java
│ │ │ │ ├── WxError.java
│ │ │ │ ├── WxErrorException.java
│ │ │ │ ├── WxMaErrorMsgEnum.java
│ │ │ │ ├── WxMpErrorMsgEnum.java
│ │ │ │ ├── WxOpenErrorMsgEnum.java
│ │ │ │ └── WxRuntimeException.java
│ │ │ ├── executor/
│ │ │ │ ├── CommonUploadRequestExecutor.java
│ │ │ │ ├── CommonUploadRequestExecutorApacheImpl.java
│ │ │ │ ├── CommonUploadRequestExecutorHttpComponentsImpl.java
│ │ │ │ ├── CommonUploadRequestExecutorJoddHttpImpl.java
│ │ │ │ └── CommonUploadRequestExecutorOkHttpImpl.java
│ │ │ ├── redis/
│ │ │ │ ├── BaseWxRedisOps.java
│ │ │ │ ├── JedisWxRedisOps.java
│ │ │ │ ├── RedisTemplateWxRedisOps.java
│ │ │ │ ├── RedissonWxRedisOps.java
│ │ │ │ └── WxRedisOps.java
│ │ │ ├── requestexecuter/
│ │ │ │ └── ocr/
│ │ │ │ ├── OcrDiscernApacheHttpRequestExecutor.java
│ │ │ │ ├── OcrDiscernHttpComponentsRequestExecutor.java
│ │ │ │ └── OcrDiscernRequestExecutor.java
│ │ │ ├── service/
│ │ │ │ ├── WxImgProcService.java
│ │ │ │ ├── WxOAuth2Service.java
│ │ │ │ ├── WxOAuth2ServiceDecorator.java
│ │ │ │ ├── WxOcrService.java
│ │ │ │ └── WxService.java
│ │ │ ├── session/
│ │ │ │ ├── Constants.java
│ │ │ │ ├── InternalSession.java
│ │ │ │ ├── InternalSessionManager.java
│ │ │ │ ├── LocalStrings.properties
│ │ │ │ ├── StandardSession.java
│ │ │ │ ├── StandardSessionFacade.java
│ │ │ │ ├── StandardSessionManager.java
│ │ │ │ ├── TooManyActiveSessionsException.java
│ │ │ │ ├── WxSession.java
│ │ │ │ └── WxSessionManager.java
│ │ │ └── util/
│ │ │ ├── BeanUtils.java
│ │ │ ├── DataUtils.java
│ │ │ ├── LogExceptionHandler.java
│ │ │ ├── RandomUtils.java
│ │ │ ├── SignUtils.java
│ │ │ ├── XmlUtils.java
│ │ │ ├── crypto/
│ │ │ │ ├── ByteGroup.java
│ │ │ │ ├── PKCS7Encoder.java
│ │ │ │ ├── SHA1.java
│ │ │ │ └── WxCryptUtil.java
│ │ │ ├── fs/
│ │ │ │ └── FileUtils.java
│ │ │ ├── http/
│ │ │ │ ├── BaseMediaDownloadRequestExecutor.java
│ │ │ │ ├── HttpClientType.java
│ │ │ │ ├── HttpResponseProxy.java
│ │ │ │ ├── InputStreamData.java
│ │ │ │ ├── MediaInputStreamUploadRequestExecutor.java
│ │ │ │ ├── MediaUploadRequestExecutor.java
│ │ │ │ ├── MinishopUploadRequestCustomizeExecutor.java
│ │ │ │ ├── MinishopUploadRequestExecutor.java
│ │ │ │ ├── RequestExecutor.java
│ │ │ │ ├── RequestHttp.java
│ │ │ │ ├── ResponseHandler.java
│ │ │ │ ├── SimpleGetRequestExecutor.java
│ │ │ │ ├── SimplePostRequestExecutor.java
│ │ │ │ ├── URIUtil.java
│ │ │ │ ├── WxDnsResolver.java
│ │ │ │ ├── apache/
│ │ │ │ │ ├── ApacheBasicResponseHandler.java
│ │ │ │ │ ├── ApacheHttpClientBuilder.java
│ │ │ │ │ ├── ApacheHttpDnsClientBuilder.java
│ │ │ │ │ ├── ApacheHttpResponseProxy.java
│ │ │ │ │ ├── ApacheMediaDownloadRequestExecutor.java
│ │ │ │ │ ├── ApacheMediaInputStreamUploadRequestExecutor.java
│ │ │ │ │ ├── ApacheMediaUploadRequestExecutor.java
│ │ │ │ │ ├── ApacheMinishopMediaUploadRequestCustomizeExecutor.java
│ │ │ │ │ ├── ApacheMinishopMediaUploadRequestExecutor.java
│ │ │ │ │ ├── ApacheSimpleGetRequestExecutor.java
│ │ │ │ │ ├── ApacheSimplePostRequestExecutor.java
│ │ │ │ │ ├── ByteArrayResponseHandler.java
│ │ │ │ │ ├── DefaultApacheHttpClientBuilder.java
│ │ │ │ │ ├── InputStreamResponseHandler.java
│ │ │ │ │ └── Utf8ResponseHandler.java
│ │ │ │ ├── hc/
│ │ │ │ │ ├── BasicResponseHandler.java
│ │ │ │ │ ├── ByteArrayResponseHandler.java
│ │ │ │ │ ├── DefaultHttpComponentsClientBuilder.java
│ │ │ │ │ ├── HttpComponentsClientBuilder.java
│ │ │ │ │ ├── HttpComponentsMediaDownloadRequestExecutor.java
│ │ │ │ │ ├── HttpComponentsMediaInputStreamUploadRequestExecutor.java
│ │ │ │ │ ├── HttpComponentsMediaUploadRequestExecutor.java
│ │ │ │ │ ├── HttpComponentsMinishopMediaUploadRequestCustomizeExecutor.java
│ │ │ │ │ ├── HttpComponentsMinishopMediaUploadRequestExecutor.java
│ │ │ │ │ ├── HttpComponentsResponseProxy.java
│ │ │ │ │ ├── HttpComponentsSimpleGetRequestExecutor.java
│ │ │ │ │ ├── HttpComponentsSimplePostRequestExecutor.java
│ │ │ │ │ ├── InputStreamResponseHandler.java
│ │ │ │ │ ├── NoopRetryStrategy.java
│ │ │ │ │ └── Utf8ResponseHandler.java
│ │ │ │ ├── jodd/
│ │ │ │ │ ├── JoddHttpMediaDownloadRequestExecutor.java
│ │ │ │ │ ├── JoddHttpMediaInputStreamUploadRequestExecutor.java
│ │ │ │ │ ├── JoddHttpMediaUploadRequestExecutor.java
│ │ │ │ │ ├── JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java
│ │ │ │ │ ├── JoddHttpMinishopMediaUploadRequestExecutor.java
│ │ │ │ │ ├── JoddHttpResponseProxy.java
│ │ │ │ │ ├── JoddHttpSimpleGetRequestExecutor.java
│ │ │ │ │ └── JoddHttpSimplePostRequestExecutor.java
│ │ │ │ └── okhttp/
│ │ │ │ ├── DefaultOkHttpClientBuilder.java
│ │ │ │ ├── OkHttpClientBuilder.java
│ │ │ │ ├── OkHttpDnsClientBuilder.java
│ │ │ │ ├── OkHttpMediaDownloadRequestExecutor.java
│ │ │ │ ├── OkHttpMediaInputStreamUploadRequestExecutor.java
│ │ │ │ ├── OkHttpMediaUploadRequestExecutor.java
│ │ │ │ ├── OkHttpMinishopMediaUploadRequestCustomizeExecutor.java
│ │ │ │ ├── OkHttpMinishopMediaUploadRequestExecutor.java
│ │ │ │ ├── OkHttpProxyInfo.java
│ │ │ │ ├── OkHttpResponseProxy.java
│ │ │ │ ├── OkHttpSimpleGetRequestExecutor.java
│ │ │ │ └── OkHttpSimplePostRequestExecutor.java
│ │ │ ├── json/
│ │ │ │ ├── GsonHelper.java
│ │ │ │ ├── GsonParser.java
│ │ │ │ ├── WxAccessTokenAdapter.java
│ │ │ │ ├── WxBooleanTypeAdapter.java
│ │ │ │ ├── WxDateTypeAdapter.java
│ │ │ │ ├── WxErrorAdapter.java
│ │ │ │ ├── WxGsonBuilder.java
│ │ │ │ ├── WxMediaUploadResultAdapter.java
│ │ │ │ ├── WxMenuGsonAdapter.java
│ │ │ │ └── WxNetCheckResultGsonAdapter.java
│ │ │ ├── locks/
│ │ │ │ ├── JedisDistributedLock.java
│ │ │ │ └── RedisTemplateSimpleDistributedLock.java
│ │ │ ├── res/
│ │ │ │ └── StringManager.java
│ │ │ └── xml/
│ │ │ ├── IntegerArrayConverter.java
│ │ │ ├── LongArrayConverter.java
│ │ │ ├── StringArrayConverter.java
│ │ │ ├── XStreamCDataConverter.java
│ │ │ ├── XStreamCDataListConverter.java
│ │ │ ├── XStreamInitializer.java
│ │ │ ├── XStreamMediaIdConverter.java
│ │ │ └── XStreamReplaceNameConverter.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── native-image/
│ │ └── com.github.binarywang/
│ │ └── weixin-java-common/
│ │ ├── native-image.properties
│ │ └── reflect-config.json
│ └── test/
│ ├── java/
│ │ └── me/
│ │ └── chanjar/
│ │ └── weixin/
│ │ └── common/
│ │ ├── api/
│ │ │ ├── WxMessageInMemoryDuplicateCheckerSingletonTest.java
│ │ │ ├── WxMessageInMemoryDuplicateCheckerTest.java
│ │ │ └── WxMessageInRedisDuplicateCheckerTest.java
│ │ ├── bean/
│ │ │ ├── CommonUploadParamTest.java
│ │ │ ├── WxAccessTokenTest.java
│ │ │ ├── WxMenuTest.java
│ │ │ └── WxNetCheckResultTest.java
│ │ ├── error/
│ │ │ └── WxErrorTest.java
│ │ ├── redis/
│ │ │ ├── CommonWxRedisOpsTest.java
│ │ │ ├── JedisWxRedisOpsTest.java
│ │ │ ├── RedisTemplateWxRedisOpsTest.java
│ │ │ └── RedissonWxRedisOpsTest.java
│ │ ├── session/
│ │ │ └── SessionTest.java
│ │ └── util/
│ │ ├── DataUtilsTest.java
│ │ ├── XmlUtilsTest.java
│ │ ├── crypto/
│ │ │ ├── SHA1Test.java
│ │ │ └── WxCryptUtilTest.java
│ │ ├── fs/
│ │ │ └── FileUtilsTest.java
│ │ ├── http/
│ │ │ ├── HttpResponseProxyTest.java
│ │ │ ├── apache/
│ │ │ │ ├── DefaultApacheHttpClientBuilderTest.java
│ │ │ │ ├── SSLConfigurationTest.java
│ │ │ │ └── SSLIntegrationTest.java
│ │ │ └── okhttp/
│ │ │ └── DefaultOkHttpClientBuilderTest.java
│ │ ├── json/
│ │ │ ├── GsonHelperTest.java
│ │ │ └── GsonParserTest.java
│ │ └── locks/
│ │ ├── RedisTemplateSimpleDistributedLockSerializationTest.java
│ │ └── RedisTemplateSimpleDistributedLockTest.java
│ └── resources/
│ ├── logback-test.xml
│ └── testng.xml
├── weixin-java-cp/
│ ├── APPROVAL_WORKFLOW_GUIDE.md
│ ├── INTELLIGENT_ROBOT.md
│ ├── LICENSE
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ ├── com/
│ │ │ └── tencent/
│ │ │ └── wework/
│ │ │ └── Finance.java
│ │ └── me/
│ │ └── chanjar/
│ │ └── weixin/
│ │ └── cp/
│ │ ├── api/
│ │ │ ├── WxCpAgentService.java
│ │ │ ├── WxCpAgentWorkBenchService.java
│ │ │ ├── WxCpChatService.java
│ │ │ ├── WxCpCorpGroupService.java
│ │ │ ├── WxCpDepartmentService.java
│ │ │ ├── WxCpExportService.java
│ │ │ ├── WxCpExternalContactService.java
│ │ │ ├── WxCpGroupRobotService.java
│ │ │ ├── WxCpHrService.java
│ │ │ ├── WxCpIntelligentRobotService.java
│ │ │ ├── WxCpKfService.java
│ │ │ ├── WxCpLivingService.java
│ │ │ ├── WxCpMediaService.java
│ │ │ ├── WxCpMeetingService.java
│ │ │ ├── WxCpMenuService.java
│ │ │ ├── WxCpMessageService.java
│ │ │ ├── WxCpMsgAuditService.java
│ │ │ ├── WxCpOAuth2Service.java
│ │ │ ├── WxCpOaAgentService.java
│ │ │ ├── WxCpOaCalendarService.java
│ │ │ ├── WxCpOaMailService.java
│ │ │ ├── WxCpOaMeetingRoomService.java
│ │ │ ├── WxCpOaScheduleService.java
│ │ │ ├── WxCpOaService.java
│ │ │ ├── WxCpOaWeDocService.java
│ │ │ ├── WxCpOaWeDriveService.java
│ │ │ ├── WxCpSchoolHealthService.java
│ │ │ ├── WxCpSchoolService.java
│ │ │ ├── WxCpSchoolUserService.java
│ │ │ ├── WxCpService.java
│ │ │ ├── WxCpTagService.java
│ │ │ ├── WxCpTaskCardService.java
│ │ │ ├── WxCpUserService.java
│ │ │ └── impl/
│ │ │ ├── BaseWxCpServiceImpl.java
│ │ │ ├── WxCpAgentServiceImpl.java
│ │ │ ├── WxCpAgentWorkBenchServiceImpl.java
│ │ │ ├── WxCpChatServiceImpl.java
│ │ │ ├── WxCpCorpGroupServiceImpl.java
│ │ │ ├── WxCpDepartmentServiceImpl.java
│ │ │ ├── WxCpExportServiceImpl.java
│ │ │ ├── WxCpExternalContactServiceImpl.java
│ │ │ ├── WxCpGroupRobotServiceImpl.java
│ │ │ ├── WxCpHrServiceImpl.java
│ │ │ ├── WxCpIntelligentRobotServiceImpl.java
│ │ │ ├── WxCpKfServiceImpl.java
│ │ │ ├── WxCpLivingServiceImpl.java
│ │ │ ├── WxCpMediaServiceImpl.java
│ │ │ ├── WxCpMeetingServiceImpl.java
│ │ │ ├── WxCpMenuServiceImpl.java
│ │ │ ├── WxCpMessageServiceImpl.java
│ │ │ ├── WxCpMsgAuditServiceImpl.java
│ │ │ ├── WxCpOAuth2ServiceImpl.java
│ │ │ ├── WxCpOMailServiceImpl.java
│ │ │ ├── WxCpOaAgentServiceImpl.java
│ │ │ ├── WxCpOaCalendarServiceImpl.java
│ │ │ ├── WxCpOaMeetingRoomServiceImpl.java
│ │ │ ├── WxCpOaOaScheduleServiceImpl.java
│ │ │ ├── WxCpOaServiceImpl.java
│ │ │ ├── WxCpOaWeDocServiceImpl.java
│ │ │ ├── WxCpOaWeDriveServiceImpl.java
│ │ │ ├── WxCpSchoolHealthServiceImpl.java
│ │ │ ├── WxCpSchoolServiceImpl.java
│ │ │ ├── WxCpSchoolUserServiceImpl.java
│ │ │ ├── WxCpServiceApacheHttpClientImpl.java
│ │ │ ├── WxCpServiceHttpComponentsImpl.java
│ │ │ ├── WxCpServiceImpl.java
│ │ │ ├── WxCpServiceJoddHttpImpl.java
│ │ │ ├── WxCpServiceOkHttpImpl.java
│ │ │ ├── WxCpServiceOnTpImpl.java
│ │ │ ├── WxCpTagServiceImpl.java
│ │ │ ├── WxCpTaskCardServiceImpl.java
│ │ │ └── WxCpUserServiceImpl.java
│ │ ├── bean/
│ │ │ ├── Gender.java
│ │ │ ├── WxCpAgent.java
│ │ │ ├── WxCpAgentJsapiSignature.java
│ │ │ ├── WxCpAgentWorkBench.java
│ │ │ ├── WxCpBaseResp.java
│ │ │ ├── WxCpChat.java
│ │ │ ├── WxCpDepart.java
│ │ │ ├── WxCpInviteResult.java
│ │ │ ├── WxCpMaJsCode2SessionResult.java
│ │ │ ├── WxCpOauth2UserInfo.java
│ │ │ ├── WxCpOpenUseridToUserid.java
│ │ │ ├── WxCpOpenUseridToUseridResult.java
│ │ │ ├── WxCpProviderToken.java
│ │ │ ├── WxCpTag.java
│ │ │ ├── WxCpTagAddOrRemoveUsersResult.java
│ │ │ ├── WxCpTagGetResult.java
│ │ │ ├── WxCpTaskCardUpdateResult.java
│ │ │ ├── WxCpTpAdmin.java
│ │ │ ├── WxCpTpAppQrcode.java
│ │ │ ├── WxCpTpAuthInfo.java
│ │ │ ├── WxCpTpContactSearch.java
│ │ │ ├── WxCpTpContactSearchResp.java
│ │ │ ├── WxCpTpConvertTmpExternalUserIdResult.java
│ │ │ ├── WxCpTpCorp.java
│ │ │ ├── WxCpTpCorpId2OpenCorpId.java
│ │ │ ├── WxCpTpCustomizedAppDetail.java
│ │ │ ├── WxCpTpDepart.java
│ │ │ ├── WxCpTpOpenKfIdConvertResult.java
│ │ │ ├── WxCpTpPermanentCodeInfo.java
│ │ │ ├── WxCpTpPreauthCode.java
│ │ │ ├── WxCpTpProlongTryResult.java
│ │ │ ├── WxCpTpTag.java
│ │ │ ├── WxCpTpTagAddOrRemoveUsersResult.java
│ │ │ ├── WxCpTpTagGetResult.java
│ │ │ ├── WxCpTpTagIdListConvertResult.java
│ │ │ ├── WxCpTpTemplateList.java
│ │ │ ├── WxCpTpUnionidToExternalUseridResult.java
│ │ │ ├── WxCpTpUserDetail.java
│ │ │ ├── WxCpTpUserInfo.java
│ │ │ ├── WxCpTpXmlPackage.java
│ │ │ ├── WxCpUser.java
│ │ │ ├── WxCpUserDetail.java
│ │ │ ├── WxCpUserExternalContactInfo.java
│ │ │ ├── WxCpUseridToOpenUserid.java
│ │ │ ├── WxCpUseridToOpenUseridResult.java
│ │ │ ├── WxTpCustomizedAuthUrl.java
│ │ │ ├── WxTpLoginInfo.java
│ │ │ ├── article/
│ │ │ │ ├── MpnewsArticle.java
│ │ │ │ └── NewArticle.java
│ │ │ ├── corpgroup/
│ │ │ │ ├── WxCpCorpGroupCorp.java
│ │ │ │ ├── WxCpCorpGroupCorpGetTokenReq.java
│ │ │ │ ├── WxCpCorpGroupCorpListAppShareInfoResp.java
│ │ │ │ ├── WxCpCorpGroupCorpToken.java
│ │ │ │ └── WxCpMaTransferSession.java
│ │ │ ├── export/
│ │ │ │ ├── WxCpExportRequest.java
│ │ │ │ └── WxCpExportResult.java
│ │ │ ├── external/
│ │ │ │ ├── WxCpAddMomentResult.java
│ │ │ │ ├── WxCpAddMomentTask.java
│ │ │ │ ├── WxCpContactWayInfo.java
│ │ │ │ ├── WxCpContactWayList.java
│ │ │ │ ├── WxCpContactWayResult.java
│ │ │ │ ├── WxCpExternalUserIdList.java
│ │ │ │ ├── WxCpGetMomentComments.java
│ │ │ │ ├── WxCpGetMomentCustomerList.java
│ │ │ │ ├── WxCpGetMomentList.java
│ │ │ │ ├── WxCpGetMomentSendResult.java
│ │ │ │ ├── WxCpGetMomentTask.java
│ │ │ │ ├── WxCpGetMomentTaskResult.java
│ │ │ │ ├── WxCpGroupJoinWayInfo.java
│ │ │ │ ├── WxCpGroupJoinWayResult.java
│ │ │ │ ├── WxCpGroupWelcomeTemplateResult.java
│ │ │ │ ├── WxCpMsgTemplate.java
│ │ │ │ ├── WxCpMsgTemplateAddResult.java
│ │ │ │ ├── WxCpNewExternalUserIdList.java
│ │ │ │ ├── WxCpProductAlbumInfo.java
│ │ │ │ ├── WxCpProductAlbumListResult.java
│ │ │ │ ├── WxCpProductAlbumResult.java
│ │ │ │ ├── WxCpUpdateRemarkRequest.java
│ │ │ │ ├── WxCpUserExternalContactList.java
│ │ │ │ ├── WxCpUserExternalGroupChatInfo.java
│ │ │ │ ├── WxCpUserExternalGroupChatList.java
│ │ │ │ ├── WxCpUserExternalGroupChatStatistic.java
│ │ │ │ ├── WxCpUserExternalGroupChatTransferResp.java
│ │ │ │ ├── WxCpUserExternalTagGroupInfo.java
│ │ │ │ ├── WxCpUserExternalTagGroupList.java
│ │ │ │ ├── WxCpUserExternalUnassignList.java
│ │ │ │ ├── WxCpUserExternalUserBehaviorStatistic.java
│ │ │ │ ├── WxCpUserTransferCustomerReq.java
│ │ │ │ ├── WxCpUserTransferCustomerResp.java
│ │ │ │ ├── WxCpUserTransferResultResp.java
│ │ │ │ ├── WxCpUserWithExternalPermission.java
│ │ │ │ ├── WxCpWelcomeMsg.java
│ │ │ │ ├── acquisition/
│ │ │ │ │ ├── WxCpCustomerAcquisitionCreateResult.java
│ │ │ │ │ ├── WxCpCustomerAcquisitionCustomerList.java
│ │ │ │ │ ├── WxCpCustomerAcquisitionInfo.java
│ │ │ │ │ ├── WxCpCustomerAcquisitionList.java
│ │ │ │ │ ├── WxCpCustomerAcquisitionQuota.java
│ │ │ │ │ ├── WxCpCustomerAcquisitionRequest.java
│ │ │ │ │ └── WxCpCustomerAcquisitionStatistic.java
│ │ │ │ ├── contact/
│ │ │ │ │ ├── ExternalContact.java
│ │ │ │ │ ├── FollowedUser.java
│ │ │ │ │ ├── WxCpExternalContactBatchInfo.java
│ │ │ │ │ ├── WxCpExternalContactInfo.java
│ │ │ │ │ ├── WxCpExternalContactListInfo.java
│ │ │ │ │ ├── WxCpGroupMsgListResult.java
│ │ │ │ │ ├── WxCpGroupMsgResult.java
│ │ │ │ │ ├── WxCpGroupMsgSendResult.java
│ │ │ │ │ └── WxCpGroupMsgTaskResult.java
│ │ │ │ ├── interceptrule/
│ │ │ │ │ ├── ApplicableRange.java
│ │ │ │ │ ├── WxCpInterceptRule.java
│ │ │ │ │ ├── WxCpInterceptRuleAddRequest.java
│ │ │ │ │ ├── WxCpInterceptRuleAddResult.java
│ │ │ │ │ ├── WxCpInterceptRuleInfo.java
│ │ │ │ │ └── WxCpInterceptRuleList.java
│ │ │ │ ├── moment/
│ │ │ │ │ ├── CustomerItem.java
│ │ │ │ │ ├── ExternalContactList.java
│ │ │ │ │ ├── MomentInfo.java
│ │ │ │ │ ├── SenderList.java
│ │ │ │ │ └── VisibleRange.java
│ │ │ │ ├── msg/
│ │ │ │ │ ├── Attachment.java
│ │ │ │ │ ├── AttachmentBuilder.java
│ │ │ │ │ ├── File.java
│ │ │ │ │ ├── Image.java
│ │ │ │ │ ├── Link.java
│ │ │ │ │ ├── Location.java
│ │ │ │ │ ├── MiniProgram.java
│ │ │ │ │ ├── TagFilter.java
│ │ │ │ │ ├── TagList.java
│ │ │ │ │ ├── Text.java
│ │ │ │ │ └── Video.java
│ │ │ │ └── product/
│ │ │ │ ├── Attachment.java
│ │ │ │ └── Image.java
│ │ │ ├── hr/
│ │ │ │ ├── WxCpHrEmployeeFieldData.java
│ │ │ │ ├── WxCpHrEmployeeFieldDataResp.java
│ │ │ │ ├── WxCpHrEmployeeFieldInfo.java
│ │ │ │ ├── WxCpHrEmployeeFieldInfoResp.java
│ │ │ │ ├── WxCpHrEmployeeFieldValue.java
│ │ │ │ └── WxCpHrFieldType.java
│ │ │ ├── intelligentrobot/
│ │ │ │ ├── WxCpIntelligentRobot.java
│ │ │ │ ├── WxCpIntelligentRobotChatRequest.java
│ │ │ │ ├── WxCpIntelligentRobotChatResponse.java
│ │ │ │ ├── WxCpIntelligentRobotCreateRequest.java
│ │ │ │ ├── WxCpIntelligentRobotCreateResponse.java
│ │ │ │ ├── WxCpIntelligentRobotSendMessageRequest.java
│ │ │ │ ├── WxCpIntelligentRobotSendMessageResponse.java
│ │ │ │ └── WxCpIntelligentRobotUpdateRequest.java
│ │ │ ├── kf/
│ │ │ │ ├── WxCpKfAccountAdd.java
│ │ │ │ ├── WxCpKfAccountAddResp.java
│ │ │ │ ├── WxCpKfAccountDel.java
│ │ │ │ ├── WxCpKfAccountLink.java
│ │ │ │ ├── WxCpKfAccountLinkResp.java
│ │ │ │ ├── WxCpKfAccountListResp.java
│ │ │ │ ├── WxCpKfAccountUpd.java
│ │ │ │ ├── WxCpKfCustomerBatchGetResp.java
│ │ │ │ ├── WxCpKfGetCorpStatisticRequest.java
│ │ │ │ ├── WxCpKfGetCorpStatisticResp.java
│ │ │ │ ├── WxCpKfGetServicerStatisticRequest.java
│ │ │ │ ├── WxCpKfGetServicerStatisticResp.java
│ │ │ │ ├── WxCpKfMsgListResp.java
│ │ │ │ ├── WxCpKfMsgSendRequest.java
│ │ │ │ ├── WxCpKfMsgSendResp.java
│ │ │ │ ├── WxCpKfServiceStateResp.java
│ │ │ │ ├── WxCpKfServiceStateTransResp.java
│ │ │ │ ├── WxCpKfServiceUpgradeConfigResp.java
│ │ │ │ ├── WxCpKfServicerListResp.java
│ │ │ │ ├── WxCpKfServicerOpResp.java
│ │ │ │ └── msg/
│ │ │ │ ├── WxCpKfBusinessCardMsg.java
│ │ │ │ ├── WxCpKfChannelsMsg.java
│ │ │ │ ├── WxCpKfChannelsShopOrderMsg.java
│ │ │ │ ├── WxCpKfChannelsShopProductMsg.java
│ │ │ │ ├── WxCpKfEventMsg.java
│ │ │ │ ├── WxCpKfLinkMsg.java
│ │ │ │ ├── WxCpKfLocationMsg.java
│ │ │ │ ├── WxCpKfMenuMsg.java
│ │ │ │ ├── WxCpKfMiniProgramMsg.java
│ │ │ │ ├── WxCpKfResourceMsg.java
│ │ │ │ └── WxCpKfTextMsg.java
│ │ │ ├── license/
│ │ │ │ ├── WxCpTpLicenseAccount.java
│ │ │ │ ├── WxCpTpLicenseAccountCount.java
│ │ │ │ ├── WxCpTpLicenseAccountDuration.java
│ │ │ │ ├── WxCpTpLicenseActiveAccount.java
│ │ │ │ ├── WxCpTpLicenseActiveCodeInfo.java
│ │ │ │ ├── WxCpTpLicenseBaseAccount.java
│ │ │ │ ├── WxCpTpLicenseCorpAccount.java
│ │ │ │ ├── WxCpTpLicenseInvalidAccount.java
│ │ │ │ ├── WxCpTpLicenseOrder.java
│ │ │ │ ├── WxCpTpLicenseSimpleOrder.java
│ │ │ │ ├── WxCpTpLicenseTransfer.java
│ │ │ │ ├── account/
│ │ │ │ │ ├── WxCpTpLicenseActiveInfoByUserResp.java
│ │ │ │ │ ├── WxCpTpLicenseBatchActiveResultResp.java
│ │ │ │ │ ├── WxCpTpLicenseBatchCodeInfoResp.java
│ │ │ │ │ ├── WxCpTpLicenseBatchTransferResp.java
│ │ │ │ │ ├── WxCpTpLicenseCodeInfoResp.java
│ │ │ │ │ └── WxCpTpLicenseCorpAccountListResp.java
│ │ │ │ └── order/
│ │ │ │ ├── WxCpTpLicenseCreateOrderResp.java
│ │ │ │ ├── WxCpTpLicenseNewOrderRequest.java
│ │ │ │ ├── WxCpTpLicenseOrderAccountListResp.java
│ │ │ │ ├── WxCpTpLicenseOrderInfoResp.java
│ │ │ │ ├── WxCpTpLicenseOrderListResp.java
│ │ │ │ ├── WxCpTpLicenseRenewOrderJobRequest.java
│ │ │ │ ├── WxCpTpLicenseRenewOrderJobResp.java
│ │ │ │ └── WxCpTpLicenseRenewOrderRequest.java
│ │ │ ├── linkedcorp/
│ │ │ │ ├── WxCpLinkedCorpAgentPerm.java
│ │ │ │ ├── WxCpLinkedCorpDepartment.java
│ │ │ │ └── WxCpLinkedCorpUser.java
│ │ │ ├── living/
│ │ │ │ ├── WxCpLivingCreateRequest.java
│ │ │ │ ├── WxCpLivingInfo.java
│ │ │ │ ├── WxCpLivingModifyRequest.java
│ │ │ │ ├── WxCpLivingResult.java
│ │ │ │ ├── WxCpLivingShareInfo.java
│ │ │ │ └── WxCpWatchStat.java
│ │ │ ├── media/
│ │ │ │ ├── MediaUploadByUrlReq.java
│ │ │ │ └── MediaUploadByUrlResult.java
│ │ │ ├── message/
│ │ │ │ ├── TemplateCardMessage.java
│ │ │ │ ├── WxCpAppChatMessage.java
│ │ │ │ ├── WxCpGroupRobotMessage.java
│ │ │ │ ├── WxCpLinkedCorpMessage.java
│ │ │ │ ├── WxCpLinkedCorpMessageSendResult.java
│ │ │ │ ├── WxCpMessage.java
│ │ │ │ ├── WxCpMessageSendResult.java
│ │ │ │ ├── WxCpMessageSendStatistics.java
│ │ │ │ ├── WxCpSchoolContactMessage.java
│ │ │ │ ├── WxCpSchoolContactMessageSendResult.java
│ │ │ │ ├── WxCpTpXmlMessage.java
│ │ │ │ ├── WxCpXmlApprovalInfo.java
│ │ │ │ ├── WxCpXmlMessage.java
│ │ │ │ ├── WxCpXmlOutEventMessage.java
│ │ │ │ ├── WxCpXmlOutImageMessage.java
│ │ │ │ ├── WxCpXmlOutMessage.java
│ │ │ │ ├── WxCpXmlOutNewsMessage.java
│ │ │ │ ├── WxCpXmlOutTaskCardMessage.java
│ │ │ │ ├── WxCpXmlOutTextMessage.java
│ │ │ │ ├── WxCpXmlOutUpdateBtnMessage.java
│ │ │ │ ├── WxCpXmlOutVideoMessage.java
│ │ │ │ └── WxCpXmlOutVoiceMessage.java
│ │ │ ├── messagebuilder/
│ │ │ │ ├── BaseBuilder.java
│ │ │ │ ├── FileBuilder.java
│ │ │ │ ├── ImageBuilder.java
│ │ │ │ ├── MarkdownMsgBuilder.java
│ │ │ │ ├── MiniProgramNoticeMsgBuilder.java
│ │ │ │ ├── MpnewsBuilder.java
│ │ │ │ ├── NewsBuilder.java
│ │ │ │ ├── TaskCardBuilder.java
│ │ │ │ ├── TemplateCardBuilder.java
│ │ │ │ ├── TextBuilder.java
│ │ │ │ ├── TextCardBuilder.java
│ │ │ │ ├── VideoBuilder.java
│ │ │ │ └── VoiceBuilder.java
│ │ │ ├── msgaudit/
│ │ │ │ ├── WxCpAgreeInfo.java
│ │ │ │ ├── WxCpChatDatas.java
│ │ │ │ ├── WxCpChatModel.java
│ │ │ │ ├── WxCpCheckAgreeRequest.java
│ │ │ │ ├── WxCpFileItem.java
│ │ │ │ └── WxCpGroupChat.java
│ │ │ ├── oa/
│ │ │ │ ├── SummaryInfo.java
│ │ │ │ ├── WxCpApprovalApplier.java
│ │ │ │ ├── WxCpApprovalApplyData.java
│ │ │ │ ├── WxCpApprovalComment.java
│ │ │ │ ├── WxCpApprovalDetailResult.java
│ │ │ │ ├── WxCpApprovalInfo.java
│ │ │ │ ├── WxCpApprovalInfoQueryFilter.java
│ │ │ │ ├── WxCpApprovalRecord.java
│ │ │ │ ├── WxCpApprovalRecordDetail.java
│ │ │ │ ├── WxCpApproverAttr.java
│ │ │ │ ├── WxCpCheckinData.java
│ │ │ │ ├── WxCpCheckinDayData.java
│ │ │ │ ├── WxCpCheckinGroupBase.java
│ │ │ │ ├── WxCpCheckinMonthData.java
│ │ │ │ ├── WxCpCheckinOption.java
│ │ │ │ ├── WxCpCheckinSchedule.java
│ │ │ │ ├── WxCpCorpConfInfo.java
│ │ │ │ ├── WxCpCropCheckinOption.java
│ │ │ │ ├── WxCpDialRecord.java
│ │ │ │ ├── WxCpGetApprovalData.java
│ │ │ │ ├── WxCpOaApplyEventRequest.java
│ │ │ │ ├── WxCpOaApprovalTemplate.java
│ │ │ │ ├── WxCpOaApprovalTemplateResult.java
│ │ │ │ ├── WxCpOaSchedule.java
│ │ │ │ ├── WxCpOperator.java
│ │ │ │ ├── WxCpRecordSpStatus.java
│ │ │ │ ├── WxCpSetCheckinSchedule.java
│ │ │ │ ├── WxCpSpStatus.java
│ │ │ │ ├── WxCpUserVacationQuota.java
│ │ │ │ ├── applydata/
│ │ │ │ │ ├── ApplyDataContent.java
│ │ │ │ │ ├── ContentTitle.java
│ │ │ │ │ └── ContentValue.java
│ │ │ │ ├── calendar/
│ │ │ │ │ └── WxCpOaCalendar.java
│ │ │ │ ├── doc/
│ │ │ │ │ ├── WxCpDocAdminListResult.java
│ │ │ │ │ ├── WxCpDocAdminRequest.java
│ │ │ │ │ ├── WxCpDocAuthInfo.java
│ │ │ │ │ ├── WxCpDocCreateData.java
│ │ │ │ │ ├── WxCpDocCreateRequest.java
│ │ │ │ │ ├── WxCpDocData.java
│ │ │ │ │ ├── WxCpDocGetDataRequest.java
│ │ │ │ │ ├── WxCpDocImageUploadResult.java
│ │ │ │ │ ├── WxCpDocInfo.java
│ │ │ │ │ ├── WxCpDocModifyJoinRuleRequest.java
│ │ │ │ │ ├── WxCpDocModifyMemberRequest.java
│ │ │ │ │ ├── WxCpDocModifyRequest.java
│ │ │ │ │ ├── WxCpDocModifySafetySettingRequest.java
│ │ │ │ │ ├── WxCpDocModifySaftySettingRequest.java
│ │ │ │ │ ├── WxCpDocRenameRequest.java
│ │ │ │ │ ├── WxCpDocShare.java
│ │ │ │ │ ├── WxCpDocShareRequest.java
│ │ │ │ │ ├── WxCpDocSheetBatchUpdateRequest.java
│ │ │ │ │ ├── WxCpDocSheetBatchUpdateResponse.java
│ │ │ │ │ ├── WxCpDocSheetData.java
│ │ │ │ │ ├── WxCpDocSheetGetDataRequest.java
│ │ │ │ │ ├── WxCpDocSheetProperties.java
│ │ │ │ │ ├── WxCpDocSmartSheetAuth.java
│ │ │ │ │ ├── WxCpDocSmartSheetAuthRequest.java
│ │ │ │ │ ├── WxCpDocSmartSheetModifyAuthRequest.java
│ │ │ │ │ ├── WxCpDocSmartSheetRequest.java
│ │ │ │ │ ├── WxCpDocSmartSheetResult.java
│ │ │ │ │ ├── WxCpFormAnswer.java
│ │ │ │ │ ├── WxCpFormAnswerRequest.java
│ │ │ │ │ ├── WxCpFormCreateRequest.java
│ │ │ │ │ ├── WxCpFormCreateResult.java
│ │ │ │ │ ├── WxCpFormInfo.java
│ │ │ │ │ ├── WxCpFormInfoResult.java
│ │ │ │ │ ├── WxCpFormModifyRequest.java
│ │ │ │ │ ├── WxCpFormStatistic.java
│ │ │ │ │ ├── WxCpFormStatisticRequest.java
│ │ │ │ │ └── WxCpFormStatisticResult.java
│ │ │ │ ├── mail/
│ │ │ │ │ ├── WxCpMailCommonSendRequest.java
│ │ │ │ │ ├── WxCpMailMeetingSendRequest.java
│ │ │ │ │ └── WxCpMailScheduleSendRequest.java
│ │ │ │ ├── meeting/
│ │ │ │ │ ├── WxCpMeeting.java
│ │ │ │ │ ├── WxCpMeetingUpdateResult.java
│ │ │ │ │ └── WxCpUserMeetingIdResult.java
│ │ │ │ ├── meetingroom/
│ │ │ │ │ ├── WxCpOaMeetingRoom.java
│ │ │ │ │ ├── WxCpOaMeetingRoomBookByMeetingRequest.java
│ │ │ │ │ ├── WxCpOaMeetingRoomBookByScheduleRequest.java
│ │ │ │ │ ├── WxCpOaMeetingRoomBookRequest.java
│ │ │ │ │ ├── WxCpOaMeetingRoomBookResult.java
│ │ │ │ │ ├── WxCpOaMeetingRoomBookingInfoByBookingIdRequest.java
│ │ │ │ │ ├── WxCpOaMeetingRoomBookingInfoByBookingIdResult.java
│ │ │ │ │ ├── WxCpOaMeetingRoomBookingInfoRequest.java
│ │ │ │ │ ├── WxCpOaMeetingRoomBookingInfoResult.java
│ │ │ │ │ └── WxCpOaMeetingRoomCancelBookRequest.java
│ │ │ │ ├── selfagent/
│ │ │ │ │ └── WxCpOpenApprovalData.java
│ │ │ │ ├── templatedata/
│ │ │ │ │ ├── TemplateConfig.java
│ │ │ │ │ ├── TemplateContent.java
│ │ │ │ │ ├── TemplateControls.java
│ │ │ │ │ ├── TemplateDateRange.java
│ │ │ │ │ ├── TemplateLocation.java
│ │ │ │ │ ├── TemplateOptions.java
│ │ │ │ │ ├── TemplateProperty.java
│ │ │ │ │ ├── TemplateTips.java
│ │ │ │ │ ├── TemplateTipsContent.java
│ │ │ │ │ ├── TemplateTipsSubText.java
│ │ │ │ │ ├── TemplateTipsSubTextContent.java
│ │ │ │ │ ├── TemplateTipsSubTextContentLink.java
│ │ │ │ │ ├── TemplateTipsSubTextContentPlainText.java
│ │ │ │ │ ├── TemplateTipsText.java
│ │ │ │ │ ├── TemplateTitle.java
│ │ │ │ │ ├── TemplateVacationItem.java
│ │ │ │ │ └── control/
│ │ │ │ │ ├── TemplateAttendance.java
│ │ │ │ │ ├── TemplateContact.java
│ │ │ │ │ ├── TemplateDate.java
│ │ │ │ │ ├── TemplateSelector.java
│ │ │ │ │ ├── TemplateTable.java
│ │ │ │ │ └── TemplateVacation.java
│ │ │ │ └── wedrive/
│ │ │ │ ├── WxCpFileAclAddRequest.java
│ │ │ │ ├── WxCpFileAclDelRequest.java
│ │ │ │ ├── WxCpFileCreate.java
│ │ │ │ ├── WxCpFileDeleteRequest.java
│ │ │ │ ├── WxCpFileDownload.java
│ │ │ │ ├── WxCpFileInfo.java
│ │ │ │ ├── WxCpFileList.java
│ │ │ │ ├── WxCpFileListRequest.java
│ │ │ │ ├── WxCpFileMove.java
│ │ │ │ ├── WxCpFileMoveRequest.java
│ │ │ │ ├── WxCpFileRename.java
│ │ │ │ ├── WxCpFileShare.java
│ │ │ │ ├── WxCpFileUpload.java
│ │ │ │ ├── WxCpFileUploadRequest.java
│ │ │ │ ├── WxCpSpaceAclAddRequest.java
│ │ │ │ ├── WxCpSpaceAclDelRequest.java
│ │ │ │ ├── WxCpSpaceCreateData.java
│ │ │ │ ├── WxCpSpaceCreateRequest.java
│ │ │ │ ├── WxCpSpaceInfo.java
│ │ │ │ ├── WxCpSpaceRenameRequest.java
│ │ │ │ ├── WxCpSpaceSettingRequest.java
│ │ │ │ └── WxCpSpaceShare.java
│ │ │ ├── order/
│ │ │ │ ├── WxCpTpOrderDetails.java
│ │ │ │ └── WxCpTpOrderListGetResult.java
│ │ │ ├── outxmlbuilder/
│ │ │ │ ├── BaseBuilder.java
│ │ │ │ ├── EventBuilder.java
│ │ │ │ ├── ImageBuilder.java
│ │ │ │ ├── NewsBuilder.java
│ │ │ │ ├── TaskCardBuilder.java
│ │ │ │ ├── TextBuilder.java
│ │ │ │ ├── UpdateButtonBuilder.java
│ │ │ │ ├── VideoBuilder.java
│ │ │ │ └── VoiceBuilder.java
│ │ │ ├── school/
│ │ │ │ ├── WxCpCustomizeHealthInfo.java
│ │ │ │ ├── WxCpPaymentResult.java
│ │ │ │ ├── WxCpResultList.java
│ │ │ │ ├── WxCpSchoolLivingInfo.java
│ │ │ │ ├── WxCpSchoolUnwatchStat.java
│ │ │ │ ├── WxCpSchoolWatchStat.java
│ │ │ │ ├── WxCpTrade.java
│ │ │ │ ├── health/
│ │ │ │ │ ├── WxCpGetHealthReportStat.java
│ │ │ │ │ ├── WxCpGetReportAnswer.java
│ │ │ │ │ ├── WxCpGetReportJobIds.java
│ │ │ │ │ └── WxCpGetReportJobInfo.java
│ │ │ │ └── user/
│ │ │ │ ├── WxCpAllowScope.java
│ │ │ │ ├── WxCpBatchCreateParentRequest.java
│ │ │ │ ├── WxCpBatchCreateStudentRequest.java
│ │ │ │ ├── WxCpBatchDeleteStudentRequest.java
│ │ │ │ ├── WxCpBatchResultList.java
│ │ │ │ ├── WxCpBatchUpdateParentRequest.java
│ │ │ │ ├── WxCpBatchUpdateStudentRequest.java
│ │ │ │ ├── WxCpCreateDepartment.java
│ │ │ │ ├── WxCpCreateDepartmentRequest.java
│ │ │ │ ├── WxCpCreateParentRequest.java
│ │ │ │ ├── WxCpDepartmentList.java
│ │ │ │ ├── WxCpExternalContact.java
│ │ │ │ ├── WxCpListParentResult.java
│ │ │ │ ├── WxCpSetUpgradeInfo.java
│ │ │ │ ├── WxCpSubscribeQrCode.java
│ │ │ │ ├── WxCpUpdateDepartmentRequest.java
│ │ │ │ ├── WxCpUpdateParentRequest.java
│ │ │ │ ├── WxCpUserListResult.java
│ │ │ │ └── WxCpUserResult.java
│ │ │ ├── taskcard/
│ │ │ │ └── TaskCardButton.java
│ │ │ ├── templatecard/
│ │ │ │ ├── ActionMenuItem.java
│ │ │ │ ├── CheckboxOption.java
│ │ │ │ ├── HorizontalContent.java
│ │ │ │ ├── MultipleSelect.java
│ │ │ │ ├── QuoteArea.java
│ │ │ │ ├── TemplateCardButton.java
│ │ │ │ ├── TemplateCardButtonSelection.java
│ │ │ │ ├── TemplateCardButtonSelectionOption.java
│ │ │ │ ├── TemplateCardImageTextArea.java
│ │ │ │ ├── TemplateCardJump.java
│ │ │ │ └── VerticalContent.java
│ │ │ ├── user/
│ │ │ │ └── WxCpDeptUserResult.java
│ │ │ └── workbench/
│ │ │ ├── WorkBenchKeyData.java
│ │ │ ├── WorkBenchList.java
│ │ │ └── WxCpSecondVerificationInfo.java
│ │ ├── config/
│ │ │ ├── WxCpConfigStorage.java
│ │ │ ├── WxCpCorpGroupConfigStorage.java
│ │ │ ├── WxCpTpConfigStorage.java
│ │ │ └── impl/
│ │ │ ├── AbstractWxCpInRedisConfigImpl.java
│ │ │ ├── AbstractWxCpTpInRedisConfigImpl.java
│ │ │ ├── WxCpCorpGroupDefaultConfigImpl.java
│ │ │ ├── WxCpCorpGroupRedissonConfigImpl.java
│ │ │ ├── WxCpDefaultConfigImpl.java
│ │ │ ├── WxCpJedisConfigImpl.java
│ │ │ ├── WxCpRedisConfigImpl.java
│ │ │ ├── WxCpRedisTemplateConfigImpl.java
│ │ │ ├── WxCpRedissonConfigImpl.java
│ │ │ ├── WxCpTpDefaultConfigImpl.java
│ │ │ ├── WxCpTpJedisConfigImpl.java
│ │ │ ├── WxCpTpRedisTemplateConfigImpl.java
│ │ │ └── WxCpTpRedissonConfigImpl.java
│ │ ├── constant/
│ │ │ ├── WxCpApiPathConsts.java
│ │ │ ├── WxCpConsts.java
│ │ │ └── WxCpTpConsts.java
│ │ ├── corpgroup/
│ │ │ └── service/
│ │ │ ├── WxCpCgService.java
│ │ │ ├── WxCpLinkedCorpService.java
│ │ │ └── impl/
│ │ │ ├── BaseWxCpCgServiceImpl.java
│ │ │ ├── WxCpCgServiceApacheHttpClientImpl.java
│ │ │ ├── WxCpCgServiceHttpComponentsImpl.java
│ │ │ └── WxCpLinkedCorpServiceImpl.java
│ │ ├── message/
│ │ │ ├── WxCpMessageHandler.java
│ │ │ ├── WxCpMessageInterceptor.java
│ │ │ ├── WxCpMessageMatcher.java
│ │ │ ├── WxCpMessageRouter.java
│ │ │ └── WxCpMessageRouterRule.java
│ │ ├── tp/
│ │ │ ├── message/
│ │ │ │ ├── WxCpTpMessageHandler.java
│ │ │ │ ├── WxCpTpMessageInterceptor.java
│ │ │ │ ├── WxCpTpMessageMatcher.java
│ │ │ │ ├── WxCpTpMessageRouter.java
│ │ │ │ └── WxCpTpMessageRouterRule.java
│ │ │ └── service/
│ │ │ ├── WxCpTpContactService.java
│ │ │ ├── WxCpTpCustomizedService.java
│ │ │ ├── WxCpTpDepartmentService.java
│ │ │ ├── WxCpTpEditionService.java
│ │ │ ├── WxCpTpIdConvertService.java
│ │ │ ├── WxCpTpLicenseService.java
│ │ │ ├── WxCpTpMediaService.java
│ │ │ ├── WxCpTpOAService.java
│ │ │ ├── WxCpTpOAuth2Service.java
│ │ │ ├── WxCpTpOrderService.java
│ │ │ ├── WxCpTpService.java
│ │ │ ├── WxCpTpTagService.java
│ │ │ ├── WxCpTpUserService.java
│ │ │ └── impl/
│ │ │ ├── BaseWxCpTpServiceImpl.java
│ │ │ ├── WxCpTpContactServiceImpl.java
│ │ │ ├── WxCpTpCustomizedServiceImpl.java
│ │ │ ├── WxCpTpDepartmentServiceImpl.java
│ │ │ ├── WxCpTpEditionServiceImpl.java
│ │ │ ├── WxCpTpIdConvertServiceImpl.java
│ │ │ ├── WxCpTpLicenseServiceImpl.java
│ │ │ ├── WxCpTpMediaServiceImpl.java
│ │ │ ├── WxCpTpOAServiceImpl.java
│ │ │ ├── WxCpTpOAuth2ServiceImpl.java
│ │ │ ├── WxCpTpOrderServiceImpl.java
│ │ │ ├── WxCpTpServiceApacheHttpClientImpl.java
│ │ │ ├── WxCpTpServiceHttpComponentsImpl.java
│ │ │ ├── WxCpTpServiceImpl.java
│ │ │ ├── WxCpTpServiceJoddHttpImpl.java
│ │ │ ├── WxCpTpServiceOkHttpImpl.java
│ │ │ ├── WxCpTpTagServiceImpl.java
│ │ │ └── WxCpTpUserServiceImpl.java
│ │ └── util/
│ │ ├── crypto/
│ │ │ ├── WxCpCryptUtil.java
│ │ │ └── WxCpTpCryptUtil.java
│ │ ├── json/
│ │ │ ├── StatisticListAdapter.java
│ │ │ ├── WxCpChatGsonAdapter.java
│ │ │ ├── WxCpConclusionAdapter.java
│ │ │ ├── WxCpDepartGsonAdapter.java
│ │ │ ├── WxCpGsonBuilder.java
│ │ │ ├── WxCpMenuGsonAdapter.java
│ │ │ ├── WxCpTagGsonAdapter.java
│ │ │ └── WxCpUserGsonAdapter.java
│ │ └── xml/
│ │ └── XStreamTransformer.java
│ └── test/
│ ├── java/
│ │ └── me/
│ │ └── chanjar/
│ │ └── weixin/
│ │ └── cp/
│ │ ├── api/
│ │ │ ├── ApiTestModule.java
│ │ │ ├── ApiTestModuleWithMockServer.java
│ │ │ ├── TestConstants.java
│ │ │ ├── WxCpBaseAPITest.java
│ │ │ ├── WxCpBusyRetryTest.java
│ │ │ ├── WxCpExternalContactTest.java
│ │ │ ├── WxCpLivingTest.java
│ │ │ ├── WxCpMessageRouterTest.java
│ │ │ ├── WxCpMsgAuditTest.java
│ │ │ ├── WxCpOaAgentTest.java
│ │ │ ├── WxCpOaWeDriveServiceTest.java
│ │ │ ├── WxCpSchoolHealthTest.java
│ │ │ ├── WxCpSchoolTest.java
│ │ │ ├── WxCpSchoolUserTest.java
│ │ │ ├── WxCpTpMessageRouterTest.java
│ │ │ └── impl/
│ │ │ ├── BaseWxCpServiceImplTest.java
│ │ │ ├── WxCpAgentServiceImplTest.java
│ │ │ ├── WxCpAgentWorkBenchImplTest.java
│ │ │ ├── WxCpChatServiceImplTest.java
│ │ │ ├── WxCpCorpGroupServiceImplTest.java
│ │ │ ├── WxCpDepartmentServiceImplTest.java
│ │ │ ├── WxCpExternalContactServiceImplTest.java
│ │ │ ├── WxCpGroupRobotServiceImplTest.java
│ │ │ ├── WxCpHrServiceImplTest.java
│ │ │ ├── WxCpIntelligentRobotServiceImplTest.java
│ │ │ ├── WxCpKfServiceImplTest.java
│ │ │ ├── WxCpMediaServiceImplTest.java
│ │ │ ├── WxCpMeetingServiceImplTest.java
│ │ │ ├── WxCpMenuServiceImplTest.java
│ │ │ ├── WxCpMessageServiceImplTest.java
│ │ │ ├── WxCpOAuth2ServiceImplTest.java
│ │ │ ├── WxCpOaCalendarServiceImplTest.java
│ │ │ ├── WxCpOaMeetingRoomServiceImplTest.java
│ │ │ ├── WxCpOaScheduleServiceImplTest.java
│ │ │ ├── WxCpOaServiceImplTest.java
│ │ │ ├── WxCpOaWeDocServiceImplTest.java
│ │ │ ├── WxCpSchoolUserServiceImplTest.java
│ │ │ ├── WxCpServiceGetMsgAuditAccessTokenTest.java
│ │ │ ├── WxCpTagServiceImplTest.java
│ │ │ ├── WxCpTaskCardServiceImplTest.java
│ │ │ └── WxCpUserServiceImplTest.java
│ │ ├── bean/
│ │ │ ├── WxCpAgentTest.java
│ │ │ ├── WxCpTpXmlPackageTest.java
│ │ │ ├── external/
│ │ │ │ ├── WxCpUpdateRemarkRequestTest.java
│ │ │ │ ├── WxCpUserExternalContactInfoTest.java
│ │ │ │ └── contact/
│ │ │ │ └── WxCpGroupMsgResultTest.java
│ │ │ ├── message/
│ │ │ │ ├── TemplateCardMessageTest.java
│ │ │ │ ├── WxCpLinkedCorpMessageTest.java
│ │ │ │ ├── WxCpMessageTest.java
│ │ │ │ ├── WxCpSchoolContactMessageTest.java
│ │ │ │ ├── WxCpTpXmlMessageTest.java
│ │ │ │ ├── WxCpXmlMessageTest.java
│ │ │ │ ├── WxCpXmlOutImageMessageTest.java
│ │ │ │ ├── WxCpXmlOutNewsMessageTest.java
│ │ │ │ ├── WxCpXmlOutTaskCardMessageTest.java
│ │ │ │ ├── WxCpXmlOutTextMessageTest.java
│ │ │ │ ├── WxCpXmlOutVideoMessageTest.java
│ │ │ │ └── WxCpXmlOutVoiceMessageTest.java
│ │ │ └── oa/
│ │ │ ├── WxCpOaApplyEventRequestTest.java
│ │ │ ├── WxCpOaApprovalTemplateResultTest.java
│ │ │ ├── calendar/
│ │ │ │ └── WxCpOaCalendarTest.java
│ │ │ └── doc/
│ │ │ └── WxCpOaWeDocJsonTest.java
│ │ ├── config/
│ │ │ └── impl/
│ │ │ ├── DemoToStringFix.java
│ │ │ ├── WxCpRedisConfigImplTest.java
│ │ │ └── WxCpTpDefaultConfigImplTest.java
│ │ ├── corpgroup/
│ │ │ └── service/
│ │ │ └── impl/
│ │ │ ├── WxCpCgServiceApacheHttpClientImplTest.java
│ │ │ └── WxCpLinkedCorpServiceImplTest.java
│ │ ├── demo/
│ │ │ ├── WxCpApprovalWorkflowDemo.java
│ │ │ ├── WxCpDemoInMemoryConfigStorage.java
│ │ │ ├── WxCpDemoServer.java
│ │ │ ├── WxCpEndpointServlet.java
│ │ │ └── WxCpOAuth2Servlet.java
│ │ ├── tp/
│ │ │ └── service/
│ │ │ └── impl/
│ │ │ ├── BaseWxCpTpServiceImplTest.java
│ │ │ ├── WxCpTpCustomizedServiceImplTest.java
│ │ │ ├── WxCpTpEditionServiceImplTest.java
│ │ │ ├── WxCpTpLicenseServiceImplTest.java
│ │ │ ├── WxCpTpOrderServiceImplTest.java
│ │ │ ├── WxCpTpServiceApacheHttpClientImplTest.java
│ │ │ ├── WxCpTpTagServiceImplTest.java
│ │ │ └── WxCpTpUserServiceImplTest.java
│ │ └── util/
│ │ ├── crypto/
│ │ │ └── WxCpCryptUtilTest.java
│ │ └── json/
│ │ ├── WxCpUserGsonAdapterForPrivatizedVersionTest.java
│ │ └── WxCpUserGsonAdapterTest.java
│ └── resources/
│ ├── logback-test.xml
│ ├── mm.amr
│ ├── moco/
│ │ └── message.json
│ ├── test-config.sample.xml
│ └── testng.xml
├── weixin-java-miniapp/
│ ├── api-signature-readme.md
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── cn/
│ │ └── binarywang/
│ │ └── wx/
│ │ └── miniapp/
│ │ ├── api/
│ │ │ ├── WxMaAnalysisService.java
│ │ │ ├── WxMaCloudService.java
│ │ │ ├── WxMaCodeService.java
│ │ │ ├── WxMaComplaintService.java
│ │ │ ├── WxMaCustomserviceWorkService.java
│ │ │ ├── WxMaDeviceSubscribeService.java
│ │ │ ├── WxMaEmployeeRelationService.java
│ │ │ ├── WxMaExpressDeliveryReturnService.java
│ │ │ ├── WxMaExpressService.java
│ │ │ ├── WxMaFaceService.java
│ │ │ ├── WxMaImmediateDeliveryService.java
│ │ │ ├── WxMaInternetService.java
│ │ │ ├── WxMaIntracityService.java
│ │ │ ├── WxMaJsapiService.java
│ │ │ ├── WxMaKefuService.java
│ │ │ ├── WxMaLinkService.java
│ │ │ ├── WxMaLiveGoodsService.java
│ │ │ ├── WxMaLiveMemberService.java
│ │ │ ├── WxMaLiveService.java
│ │ │ ├── WxMaMarketingService.java
│ │ │ ├── WxMaMediaService.java
│ │ │ ├── WxMaMsgService.java
│ │ │ ├── WxMaOpenApiService.java
│ │ │ ├── WxMaOrderManagementService.java
│ │ │ ├── WxMaOrderShippingService.java
│ │ │ ├── WxMaPluginService.java
│ │ │ ├── WxMaProductOrderService.java
│ │ │ ├── WxMaProductService.java
│ │ │ ├── WxMaPromotionService.java
│ │ │ ├── WxMaQrcodeService.java
│ │ │ ├── WxMaReimburseInvoiceService.java
│ │ │ ├── WxMaRunService.java
│ │ │ ├── WxMaSchemeService.java
│ │ │ ├── WxMaSecurityService.java
│ │ │ ├── WxMaService.java
│ │ │ ├── WxMaSettingService.java
│ │ │ ├── WxMaShareService.java
│ │ │ ├── WxMaShopAccountService.java
│ │ │ ├── WxMaShopAfterSaleService.java
│ │ │ ├── WxMaShopAuditService.java
│ │ │ ├── WxMaShopCatService.java
│ │ │ ├── WxMaShopCouponService.java
│ │ │ ├── WxMaShopDeliveryService.java
│ │ │ ├── WxMaShopImgService.java
│ │ │ ├── WxMaShopOrderService.java
│ │ │ ├── WxMaShopPayService.java
│ │ │ ├── WxMaShopRegisterService.java
│ │ │ ├── WxMaShopSharerService.java
│ │ │ ├── WxMaShopSpuService.java
│ │ │ ├── WxMaSubscribeService.java
│ │ │ ├── WxMaUserService.java
│ │ │ ├── WxMaVodService.java
│ │ │ ├── WxMaXPayService.java
│ │ │ └── impl/
│ │ │ ├── BaseWxMaServiceImpl.java
│ │ │ ├── WxMaAnalysisServiceImpl.java
│ │ │ ├── WxMaCloudServiceImpl.java
│ │ │ ├── WxMaCodeServiceImpl.java
│ │ │ ├── WxMaComplaintServiceImpl.java
│ │ │ ├── WxMaCustomserviceWorkServiceImpl.java
│ │ │ ├── WxMaDeviceSubscribeServiceImpl.java
│ │ │ ├── WxMaEmployeeRelationServiceImpl.java
│ │ │ ├── WxMaExpressDeliveryReturnServiceImpl.java
│ │ │ ├── WxMaExpressServiceImpl.java
│ │ │ ├── WxMaFaceServiceImpl.java
│ │ │ ├── WxMaImgProcServiceImpl.java
│ │ │ ├── WxMaImmediateDeliveryServiceImpl.java
│ │ │ ├── WxMaInternetServiceImpl.java
│ │ │ ├── WxMaIntracityServiceImpl.java
│ │ │ ├── WxMaJsapiServiceImpl.java
│ │ │ ├── WxMaKefuServiceImpl.java
│ │ │ ├── WxMaLinkServiceImpl.java
│ │ │ ├── WxMaLiveGoodsServiceImpl.java
│ │ │ ├── WxMaLiveMemberServiceImpl.java
│ │ │ ├── WxMaLiveServiceImpl.java
│ │ │ ├── WxMaMarketingServiceImpl.java
│ │ │ ├── WxMaMediaServiceImpl.java
│ │ │ ├── WxMaMsgServiceImpl.java
│ │ │ ├── WxMaOcrServiceImpl.java
│ │ │ ├── WxMaOpenApiServiceImpl.java
│ │ │ ├── WxMaOrderManagementServiceImpl.java
│ │ │ ├── WxMaOrderShippingServiceImpl.java
│ │ │ ├── WxMaPluginServiceImpl.java
│ │ │ ├── WxMaProductOrderServiceImpl.java
│ │ │ ├── WxMaProductServiceImpl.java
│ │ │ ├── WxMaPromotionServiceImpl.java
│ │ │ ├── WxMaQrcodeServiceImpl.java
│ │ │ ├── WxMaReimburseInvoiceServiceImpl.java
│ │ │ ├── WxMaRunServiceImpl.java
│ │ │ ├── WxMaSchemeServiceImpl.java
│ │ │ ├── WxMaSecurityServiceImpl.java
│ │ │ ├── WxMaServiceHttpClientImpl.java
│ │ │ ├── WxMaServiceHttpComponentsImpl.java
│ │ │ ├── WxMaServiceImpl.java
│ │ │ ├── WxMaServiceJoddHttpImpl.java
│ │ │ ├── WxMaServiceOkHttpImpl.java
│ │ │ ├── WxMaSettingServiceImpl.java
│ │ │ ├── WxMaShareServiceImpl.java
│ │ │ ├── WxMaShopAccountServiceImpl.java
│ │ │ ├── WxMaShopAfterSaleServiceImpl.java
│ │ │ ├── WxMaShopAuditServiceImpl.java
│ │ │ ├── WxMaShopCatServiceImpl.java
│ │ │ ├── WxMaShopCouponServiceImpl.java
│ │ │ ├── WxMaShopDeliveryServiceImpl.java
│ │ │ ├── WxMaShopImgServiceImpl.java
│ │ │ ├── WxMaShopOrderServiceImpl.java
│ │ │ ├── WxMaShopPayServiceImpl.java
│ │ │ ├── WxMaShopRegisterServiceImpl.java
│ │ │ ├── WxMaShopSharerServiceImpl.java
│ │ │ ├── WxMaShopSpuServiceImpl.java
│ │ │ ├── WxMaSubscribeServiceImpl.java
│ │ │ ├── WxMaUserServiceImpl.java
│ │ │ ├── WxMaVodServiceImpl.java
│ │ │ └── WxMaXPayServiceImpl.java
│ │ ├── bean/
│ │ │ ├── AbstractWxMaQrcodeWrapper.java
│ │ │ ├── Watermark.java
│ │ │ ├── WxMaApiResponse.java
│ │ │ ├── WxMaAuditMediaUploadResult.java
│ │ │ ├── WxMaBaseResponse.java
│ │ │ ├── WxMaCode2VerifyInfoResult.java
│ │ │ ├── WxMaCodeLineColor.java
│ │ │ ├── WxMaDomainAction.java
│ │ │ ├── WxMaGroupEnterInfo.java
│ │ │ ├── WxMaJscode2SessionResult.java
│ │ │ ├── WxMaKefuMessage.java
│ │ │ ├── WxMaMediaAsyncCheckResult.java
│ │ │ ├── WxMaMessage.java
│ │ │ ├── WxMaPhoneNumberInfo.java
│ │ │ ├── WxMaPluginListResult.java
│ │ │ ├── WxMaQrcode.java
│ │ │ ├── WxMaRunStepInfo.java
│ │ │ ├── WxMaShareInfo.java
│ │ │ ├── WxMaStableAccessTokenRequest.java
│ │ │ ├── WxMaSubscribeMessage.java
│ │ │ ├── WxMaSubscribeMsgEvent.java
│ │ │ ├── WxMaTemplateData.java
│ │ │ ├── WxMaUniformMessage.java
│ │ │ ├── WxMaUpdatableMsg.java
│ │ │ ├── WxMaUploadAuthMaterialResult.java
│ │ │ ├── WxMaUserInfo.java
│ │ │ ├── WxaCode.java
│ │ │ ├── WxaCodeUnlimit.java
│ │ │ ├── analysis/
│ │ │ │ ├── WxMaRetainInfo.java
│ │ │ │ ├── WxMaSummaryTrend.java
│ │ │ │ ├── WxMaUserPortrait.java
│ │ │ │ ├── WxMaVisitDistribution.java
│ │ │ │ ├── WxMaVisitPage.java
│ │ │ │ ├── WxMaVisitTrend.java
│ │ │ │ └── package-info.java
│ │ │ ├── cloud/
│ │ │ │ ├── WxCloudBatchDeleteFileResult.java
│ │ │ │ ├── WxCloudBatchDownloadFileResult.java
│ │ │ │ ├── WxCloudCloudDatabaseMigrateQueryInfoResult.java
│ │ │ │ ├── WxCloudDatabaseCollectionGetResult.java
│ │ │ │ ├── WxCloudDatabaseCreateIndexRequest.java
│ │ │ │ ├── WxCloudDatabaseQueryResult.java
│ │ │ │ ├── WxCloudDatabaseUpdateResult.java
│ │ │ │ ├── WxCloudGetQcloudTokenResult.java
│ │ │ │ ├── WxCloudSendSmsV2Result.java
│ │ │ │ ├── WxCloudUploadFileResult.java
│ │ │ │ └── request/
│ │ │ │ └── WxCloudSendSmsV2Request.java
│ │ │ ├── code/
│ │ │ │ ├── WxMaCodeAuditStatus.java
│ │ │ │ ├── WxMaCodeCommitRequest.java
│ │ │ │ ├── WxMaCodeExtConfig.java
│ │ │ │ ├── WxMaCodeSubmitAuditItem.java
│ │ │ │ ├── WxMaCodeSubmitAuditPreviewInfo.java
│ │ │ │ ├── WxMaCodeSubmitAuditRequest.java
│ │ │ │ ├── WxMaCodeSubmitAuditUgcDeclare.java
│ │ │ │ ├── WxMaCodeVersionDistribution.java
│ │ │ │ ├── WxMaCodeVersionInfo.java
│ │ │ │ └── package-info.java
│ │ │ ├── complaint/
│ │ │ │ ├── WxMaComplaintDetailRequest.java
│ │ │ │ ├── WxMaComplaintDetailResult.java
│ │ │ │ ├── WxMaComplaintNotifyUrlRequest.java
│ │ │ │ ├── WxMaComplaintNotifyUrlResult.java
│ │ │ │ ├── WxMaComplaintRequest.java
│ │ │ │ ├── WxMaComplaintResult.java
│ │ │ │ ├── WxMaCompleteRequest.java
│ │ │ │ ├── WxMaNegotiationHistoryRequest.java
│ │ │ │ ├── WxMaNegotiationHistoryResult.java
│ │ │ │ └── WxMaResponseRequest.java
│ │ │ ├── customservice/
│ │ │ │ └── WxMaCustomserviceResult.java
│ │ │ ├── delivery/
│ │ │ │ ├── AbnormalConfirmRequest.java
│ │ │ │ ├── AbnormalConfirmResponse.java
│ │ │ │ ├── AddOrderRequest.java
│ │ │ │ ├── AddOrderResponse.java
│ │ │ │ ├── BindAccountResponse.java
│ │ │ │ ├── CancelOrderRequest.java
│ │ │ │ ├── CancelOrderResponse.java
│ │ │ │ ├── FollowWaybillRequest.java
│ │ │ │ ├── FollowWaybillResponse.java
│ │ │ │ ├── GetDeliveryListResponse.java
│ │ │ │ ├── GetOrderRequest.java
│ │ │ │ ├── GetOrderResponse.java
│ │ │ │ ├── MockUpdateOrderRequest.java
│ │ │ │ ├── MockUpdateOrderResponse.java
│ │ │ │ ├── QueryFollowTraceRequest.java
│ │ │ │ ├── QueryFollowTraceResponse.java
│ │ │ │ ├── QueryWaybillTraceRequest.java
│ │ │ │ ├── QueryWaybillTraceResponse.java
│ │ │ │ ├── TraceWaybillRequest.java
│ │ │ │ ├── TraceWaybillResponse.java
│ │ │ │ ├── UpdateWaybillGoodsRequest.java
│ │ │ │ ├── WaybillGoodsInfo.java
│ │ │ │ └── base/
│ │ │ │ ├── WxMaDeliveryBaseRequest.java
│ │ │ │ └── WxMaDeliveryBaseResponse.java
│ │ │ ├── device/
│ │ │ │ ├── WxMaCreateIotGroupIdRequest.java
│ │ │ │ ├── WxMaDeviceSubscribeMessageRequest.java
│ │ │ │ ├── WxMaDeviceTicketRequest.java
│ │ │ │ ├── WxMaGetIotGroupInfoRequest.java
│ │ │ │ ├── WxMaIotGroupDeviceInfoResponse.java
│ │ │ │ └── WxMaIotGroupDeviceRequest.java
│ │ │ ├── employee/
│ │ │ │ ├── WxMaSendEmployeeMsgRequest.java
│ │ │ │ └── WxMaUnbindEmployeeRequest.java
│ │ │ ├── express/
│ │ │ │ ├── WxMaExpressAccount.java
│ │ │ │ ├── WxMaExpressDelivery.java
│ │ │ │ ├── WxMaExpressPath.java
│ │ │ │ ├── WxMaExpressPrinter.java
│ │ │ │ ├── request/
│ │ │ │ │ ├── WxMaExpressAddOrderRequest.java
│ │ │ │ │ ├── WxMaExpressBindAccountRequest.java
│ │ │ │ │ ├── WxMaExpressDeliveryReturnAddRequest.java
│ │ │ │ │ ├── WxMaExpressGetOrderRequest.java
│ │ │ │ │ ├── WxMaExpressOrderCargo.java
│ │ │ │ │ ├── WxMaExpressOrderCargoDetail.java
│ │ │ │ │ ├── WxMaExpressOrderInsured.java
│ │ │ │ │ ├── WxMaExpressOrderPerson.java
│ │ │ │ │ ├── WxMaExpressOrderShop.java
│ │ │ │ │ ├── WxMaExpressOrderShopDetail.java
│ │ │ │ │ ├── WxMaExpressPrinterUpdateRequest.java
│ │ │ │ │ ├── WxMaExpressReturnOrder.java
│ │ │ │ │ └── WxMaExpressTestUpdateOrderRequest.java
│ │ │ │ └── result/
│ │ │ │ ├── WxMaExpressInfoResult.java
│ │ │ │ ├── WxMaExpressOrderInfoResult.java
│ │ │ │ └── WxMaExpressReturnInfoResult.java
│ │ │ ├── face/
│ │ │ │ ├── WxMaFaceGetVerifyIdRequest.java
│ │ │ │ ├── WxMaFaceGetVerifyIdResponse.java
│ │ │ │ ├── WxMaFaceQueryVerifyInfoRequest.java
│ │ │ │ └── WxMaFaceQueryVerifyInfoResponse.java
│ │ │ ├── internet/
│ │ │ │ ├── WxMaInternetResponse.java
│ │ │ │ └── WxMaInternetUserKeyInfo.java
│ │ │ ├── intractiy/
│ │ │ │ ├── BasicWxMaOrder.java
│ │ │ │ ├── BasicWxMaStoreChargeRefundRequest.java
│ │ │ │ ├── PayMode.java
│ │ │ │ ├── WxMaAddOrderRequest.java
│ │ │ │ ├── WxMaAddOrderResponse.java
│ │ │ │ ├── WxMaCancelOrderResponse.java
│ │ │ │ ├── WxMaGetPayModeResponse.java
│ │ │ │ ├── WxMaOrder.java
│ │ │ │ ├── WxMaPreAddOrderRequest.java
│ │ │ │ ├── WxMaPreAddOrderResponse.java
│ │ │ │ ├── WxMaQueryFlowRequest.java
│ │ │ │ ├── WxMaStore.java
│ │ │ │ ├── WxMaStoreBalance.java
│ │ │ │ ├── WxMaStoreChargeRequest.java
│ │ │ │ ├── WxMaStoreFlowResponse.java
│ │ │ │ ├── WxMaStoreRefundRequest.java
│ │ │ │ └── WxMaTransCity.java
│ │ │ ├── invoice/
│ │ │ │ └── reimburse/
│ │ │ │ ├── InvoiceBatchRequest.java
│ │ │ │ ├── InvoiceCommodityInfo.java
│ │ │ │ ├── InvoiceInfoRequest.java
│ │ │ │ ├── InvoiceInfoResponse.java
│ │ │ │ ├── InvoiceUserInfo.java
│ │ │ │ ├── UpdateInvoiceStatusRequest.java
│ │ │ │ └── UpdateStatusBatchRequest.java
│ │ │ ├── kefu/
│ │ │ │ ├── WxMaKfInfo.java
│ │ │ │ ├── WxMaKfList.java
│ │ │ │ ├── WxMaKfSession.java
│ │ │ │ ├── WxMaKfSessionList.java
│ │ │ │ └── request/
│ │ │ │ ├── WxMaKfAccountRequest.java
│ │ │ │ └── WxMaKfSessionRequest.java
│ │ │ ├── live/
│ │ │ │ ├── WxMaAssistantResult.java
│ │ │ │ ├── WxMaCreateRoomResult.java
│ │ │ │ ├── WxMaLiveAssistantInfo.java
│ │ │ │ ├── WxMaLiveGoodInfo.java
│ │ │ │ ├── WxMaLiveResult.java
│ │ │ │ ├── WxMaLiveRoomInfo.java
│ │ │ │ └── WxMaLiveSharedCode.java
│ │ │ ├── marketing/
│ │ │ │ └── WxMaUserAction.java
│ │ │ ├── openapi/
│ │ │ │ ├── WxMiniGetApiQuotaResult.java
│ │ │ │ └── WxMiniGetRidInfoResult.java
│ │ │ ├── order/
│ │ │ │ ├── WxMaOrderManagementGetOrderDetailPath.java
│ │ │ │ └── WxMaOrderManagementResult.java
│ │ │ ├── product/
│ │ │ │ ├── MinishopShopCat.java
│ │ │ │ ├── WxMiniAfterSaleDetail.java
│ │ │ │ ├── WxMiniAfterSaleOrder.java
│ │ │ │ ├── WxMiniBatchGetAfterSaleOrderResponse.java
│ │ │ │ ├── WxMiniGetAfterSaleOrderResponse.java
│ │ │ │ ├── WxMiniOrderAfterSaleDetail.java
│ │ │ │ ├── WxMiniOrderDeliveryRequest.java
│ │ │ │ ├── WxMinishopAddGoodsSkuData.java
│ │ │ │ ├── WxMinishopAddGoodsSpuData.java
│ │ │ │ ├── WxMinishopAddressInfo.java
│ │ │ │ ├── WxMinishopDeliveryCompany.java
│ │ │ │ ├── WxMinishopDeliveryInfo.java
│ │ │ │ ├── WxMinishopGetBrandResponse.java
│ │ │ │ ├── WxMinishopGetCategoryResponse.java
│ │ │ │ ├── WxMinishopGetFrightTemplateResponse.java
│ │ │ │ ├── WxMinishopGoodsSkuAttr.java
│ │ │ │ ├── WxMinishopOrderDetail.java
│ │ │ │ ├── WxMinishopOrderDetailResponse.java
│ │ │ │ ├── WxMinishopOrderListResponse.java
│ │ │ │ ├── WxMinishopOrderResult.java
│ │ │ │ ├── WxMinishopPayInfo.java
│ │ │ │ ├── WxMinishopPriceInfo.java
│ │ │ │ ├── WxMinishopProductInfo.java
│ │ │ │ ├── WxMinishopResult.java
│ │ │ │ ├── WxMinishopSku.java
│ │ │ │ ├── WxMinishopSkuListResponse.java
│ │ │ │ ├── WxMinishopSpu.java
│ │ │ │ ├── WxMinishopSpuGet.java
│ │ │ │ ├── WxMinishopSpuGetResponse.java
│ │ │ │ ├── WxMinishopSpuListResponse.java
│ │ │ │ └── WxMinishopUpdateGoodsSkuData.java
│ │ │ ├── promoter/
│ │ │ │ ├── request/
│ │ │ │ │ ├── WxMaPromoterUpdateRoleRequest.java
│ │ │ │ │ ├── WxMaPromotionAddPromoterRequest.java
│ │ │ │ │ ├── WxMaPromotionAddRoleRequest.java
│ │ │ │ │ ├── WxMaPromotionGetInvitationMaterialRequest.java
│ │ │ │ │ ├── WxMaPromotionGetMsgClickDataRequest.java
│ │ │ │ │ ├── WxMaPromotionGetMsgRequest.java
│ │ │ │ │ ├── WxMaPromotionGetOrderRequest.java
│ │ │ │ │ ├── WxMaPromotionGetPromoterRequest.java
│ │ │ │ │ ├── WxMaPromotionGetRelationRequest.java
│ │ │ │ │ ├── WxMaPromotionGetRoleRequest.java
│ │ │ │ │ ├── WxMaPromotionGetShareMaterialRequest.java
│ │ │ │ │ ├── WxMaPromotionSendMsgRequest.java
│ │ │ │ │ ├── WxMaPromotionSingleSendMsgRequest.java
│ │ │ │ │ └── WxMaPromotionUpdatePromoterRequest.java
│ │ │ │ └── response/
│ │ │ │ ├── WxMaPromotionAddPromoterResponse.java
│ │ │ │ ├── WxMaPromotionAddRoleResponse.java
│ │ │ │ ├── WxMaPromotionGetInvitationMaterialResponse.java
│ │ │ │ ├── WxMaPromotionGetMsgClickDataResponse.java
│ │ │ │ ├── WxMaPromotionGetMsgResponse.java
│ │ │ │ ├── WxMaPromotionGetOrderResponse.java
│ │ │ │ ├── WxMaPromotionGetPromoterResponse.java
│ │ │ │ ├── WxMaPromotionGetRelationResponse.java
│ │ │ │ ├── WxMaPromotionGetRoleResponse.java
│ │ │ │ ├── WxMaPromotionGetShareMaterialResponse.java
│ │ │ │ ├── WxMaPromotionSendMsgResponse.java
│ │ │ │ ├── WxMaPromotionSingleSendMsgResponse.java
│ │ │ │ ├── WxMaPromotionUpdatePromoterResponse.java
│ │ │ │ └── WxMaPromotionUpdateRoleResponse.java
│ │ │ ├── safety/
│ │ │ │ ├── request/
│ │ │ │ │ └── WxMaUserSafetyRiskRankRequest.java
│ │ │ │ └── response/
│ │ │ │ └── WxMaUserSafetyRiskRankResponse.java
│ │ │ ├── scheme/
│ │ │ │ ├── WxMaGenerateNfcSchemeRequest.java
│ │ │ │ └── WxMaGenerateSchemeRequest.java
│ │ │ ├── security/
│ │ │ │ ├── WxMaMediaSecCheckCheckRequest.java
│ │ │ │ ├── WxMaMsgSecCheckCheckRequest.java
│ │ │ │ └── WxMaMsgSecCheckCheckResponse.java
│ │ │ ├── shop/
│ │ │ │ ├── WxMaPromotionInfo.java
│ │ │ │ ├── WxMaShopAccountGetBrandListItem.java
│ │ │ │ ├── WxMaShopAccountGetCategoryListItem.java
│ │ │ │ ├── WxMaShopAccountGetInfo.java
│ │ │ │ ├── WxMaShopAddOrderResult.java
│ │ │ │ ├── WxMaShopAddSpuResult.java
│ │ │ │ ├── WxMaShopAddressInfo.java
│ │ │ │ ├── WxMaShopCatGetDetail.java
│ │ │ │ ├── WxMaShopCouponInfo.java
│ │ │ │ ├── WxMaShopDeliveryDetail.java
│ │ │ │ ├── WxMaShopDeliveryItem.java
│ │ │ │ ├── WxMaShopGetSpuResult.java
│ │ │ │ ├── WxMaShopOrderDetail.java
│ │ │ │ ├── WxMaShopOrderInfo.java
│ │ │ │ ├── WxMaShopOrderResult.java
│ │ │ │ ├── WxMaShopPayInfo.java
│ │ │ │ ├── WxMaShopPriceInfo.java
│ │ │ │ ├── WxMaShopProductInfo.java
│ │ │ │ ├── WxMaShopPromotionInfo.java
│ │ │ │ ├── WxMaShopSkuAttribute.java
│ │ │ │ ├── WxMaShopSkuInfo.java
│ │ │ │ ├── WxMaShopSkuResult.java
│ │ │ │ ├── WxMaShopSkuWithoutAuditInfo.java
│ │ │ │ ├── WxMaShopSpuAudit.java
│ │ │ │ ├── WxMaShopSpuDescInfo.java
│ │ │ │ ├── WxMaShopSpuInfo.java
│ │ │ │ ├── WxMaShopSpuWithoutAuditInfo.java
│ │ │ │ ├── request/
│ │ │ │ │ ├── WxMaOrderShippingIsTradeManagedRequest.java
│ │ │ │ │ ├── WxMaShopAcceptReturnRequest.java
│ │ │ │ │ ├── WxMaShopAccountUpdateInfoRequest.java
│ │ │ │ │ ├── WxMaShopAfterSaleAddRequest.java
│ │ │ │ │ ├── WxMaShopAfterSaleGetRequest.java
│ │ │ │ │ ├── WxMaShopAfterSaleListRequest.java
│ │ │ │ │ ├── WxMaShopAfterSaleUpdateRequest.java
│ │ │ │ │ ├── WxMaShopAfterSaleUploadReturnInfoRequest.java
│ │ │ │ │ ├── WxMaShopAuditBrandRequest.java
│ │ │ │ │ ├── WxMaShopAuditCategoryRequest.java
│ │ │ │ │ ├── WxMaShopDeliveryRecieveRequest.java
│ │ │ │ │ ├── WxMaShopDeliverySendRequest.java
│ │ │ │ │ ├── WxMaShopEcAfterSaleGetRequest.java
│ │ │ │ │ ├── WxMaShopEcAfterSaleUpdateRequest.java
│ │ │ │ │ ├── WxMaShopOrderPayRequest.java
│ │ │ │ │ ├── WxMaShopPayCreateOrderRequest.java
│ │ │ │ │ ├── WxMaShopPayOrderRefundRequest.java
│ │ │ │ │ ├── WxMaShopRegisterApplySceneRequest.java
│ │ │ │ │ ├── WxMaShopRegisterFinishAccessInfoRequest.java
│ │ │ │ │ ├── WxMaShopSpuPageRequest.java
│ │ │ │ │ ├── WxMaShopUploadCerficatesRequest.java
│ │ │ │ │ └── shipping/
│ │ │ │ │ ├── ContactBean.java
│ │ │ │ │ ├── OrderKeyBean.java
│ │ │ │ │ ├── PayerBean.java
│ │ │ │ │ ├── ShippingListBean.java
│ │ │ │ │ ├── WxMaOrderCombinedShippingInfoUploadRequest.java
│ │ │ │ │ ├── WxMaOrderShippingInfoGetListRequest.java
│ │ │ │ │ ├── WxMaOrderShippingInfoGetRequest.java
│ │ │ │ │ ├── WxMaOrderShippingInfoNotifyConfirmRequest.java
│ │ │ │ │ └── WxMaOrderShippingInfoUploadRequest.java
│ │ │ │ └── response/
│ │ │ │ ├── WxMaOrderShippingITMCCompletedResult.java
│ │ │ │ ├── WxMaOrderShippingInfoBaseResponse.java
│ │ │ │ ├── WxMaOrderShippingInfoGetListResponse.java
│ │ │ │ ├── WxMaOrderShippingInfoGetResponse.java
│ │ │ │ ├── WxMaOrderShippingIsTradeManagedResponse.java
│ │ │ │ ├── WxMaShopAccountGetBrandListResponse.java
│ │ │ │ ├── WxMaShopAccountGetCategoryListResponse.java
│ │ │ │ ├── WxMaShopAccountGetInfoResponse.java
│ │ │ │ ├── WxMaShopAddOrderResponse.java
│ │ │ │ ├── WxMaShopAddSpuResponse.java
│ │ │ │ ├── WxMaShopAfterSaleAddResponse.java
│ │ │ │ ├── WxMaShopAfterSaleGetResponse.java
│ │ │ │ ├── WxMaShopAfterSaleListResponse.java
│ │ │ │ ├── WxMaShopAuditBrandResponse.java
│ │ │ │ ├── WxMaShopAuditCategoryResponse.java
│ │ │ │ ├── WxMaShopAuditResultResponse.java
│ │ │ │ ├── WxMaShopBaseResponse.java
│ │ │ │ ├── WxMaShopCatGetResponse.java
│ │ │ │ ├── WxMaShopCouponListResponse.java
│ │ │ │ ├── WxMaShopCouponResponse.java
│ │ │ │ ├── WxMaShopDeliveryGetCompanyListResponse.java
│ │ │ │ ├── WxMaShopEcAfterSaleGetResponse.java
│ │ │ │ ├── WxMaShopGetOrderListResponse.java
│ │ │ │ ├── WxMaShopGetOrderResponse.java
│ │ │
================================================
FILE CONTENTS
================================================
================================================
FILE: .circleci/config.yml
================================================
version: 2.1
jobs:
build:
docker:
- image: cimg/openjdk:11.0
steps:
- checkout
- run:
name: Build
command: mvn -B -DskipTests clean package -Dcheckstyle.skip=true
================================================
FILE: .editorconfig
================================================
# EditorConfig: http://editorconfig.org/
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
================================================
FILE: .gitee/ISSUE_TEMPLATE.md
================================================
强烈建议大家到 `github` 相关页面提交问题,方便统一查询管理,具体页面地址:https://github.com/binarywang/WxJava/issues
当然如果必须在这里提问,请务必按以下格式填写,谢谢配合~
# 提问前,请确保阅读过项目首页说明以及wiki开发文档相关内容,尤其是常见问题部分。完成内容后,请务必移除包括本句在内的无用内容,以免影响阅读,谢谢合作~
# 另外如果确认属于bug,而且已明确如何修复,请参考贡献指南直接提交PR,省的浪费时间在这里描述问题,非常感谢配合
### 简要描述
__简单概括描述下你所遇到的问题。__
### 模块版本情况
* `WxJava` 模块名:
* `WxJava` 版本号:
### 详细描述
__尽量详细描述。请不要使用截图,尽量使用文字描述,代码直接贴上来,日志则请附在后面所示区域。__
### 日志
__将日志放在 [`Pastebin`](https://paste.ubuntu.com/) 或者其他地方,并将其url地址贴在这里__
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: [binarywang]
custom: https://github.com/Wechat-Group/WxJava/blob/master/images/qrcodes/wepay.jpg?raw=true
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug报告
about: 本项目仅对最新版本进行维护,使用老版本出现问题的盆友,请先升级到最新版本,升级完后如果发现bug依然存在,请继续填写此issue。
title: ''
labels: ''
assignees: ''
---
# 提问前,请确保阅读过项目首页说明以及wiki开发文档相关内容,尤其是常见问题部分。完成内容后,请务必移除包括本句在内的无用内容,以免影响阅读,否则直接关闭,谢谢合作~
## 另外如果确认属于bug,而且已明确如何修复,请参考贡献指南直接提交PR,省的浪费时间在这里描述问题,非常感谢配合
### 简要描述
__请简单概括描述下你所遇到的问题。__
### 模块版本情况
* WxJava 模块名:
* WxJava 版本号:(旧版本不予支持,谢谢配合)
### 详细描述
__尽量详细描述。请不要使用截图,尽量使用文字描述,代码直接贴上来,日志则请附在后面所示区域。__
### 日志
__如果日志不多,直接使用md代码引用格式贴在此处,否则如果太长,请将日志放在 [pastebin](https://paste.ubuntu.com/) 或者其他地方,然后将其url地址贴在这里__
```
日志请写于此处
```
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: 请求添加新功能
about: 如果有什么新功能需要添加,请告诉我们
title: ''
labels: ''
assignees: ''
---
# 提问前,请确保阅读过项目首页说明以及wiki开发文档相关内容,完成内容后,请务必移除包括本句在内的无用内容,以免影响他人阅读,否则直接关闭,谢谢合作~
### 简要描述
### 官方文档地址
__请提供所需功能对应的微信官方文档地址以便进行确认。__
================================================
FILE: .github/agents/my-agent.agent.md
================================================
---
# Fill in the fields below to create a basic custom agent for your repository.
# The Copilot CLI can be used for local testing: https://gh.io/customagents/cli
# To make this agent available, merge this file into the default repository branch.
# For format details, see: https://gh.io/customagents/config
name: 全部用中文
description: 需要用中文,包括PR标题和分析总结过程
---
# My Agent
- 1、请使用中文输出思考过程和总结,包括PR标题,提交commit信息也要使用中文;
- 2、生成代码时需要提供必要的单元测试代码;
- 3、新增加的代码如果标记作者信息,请注意不要把作者名设为binarywang或者其他无关人员,要改为 GitHub Copilot。
================================================
FILE: .github/copilot-instructions.md
================================================
# Copilot Instruction
请始终使用中文生成 Pull Request 的标题、描述和提交信息
# WxJava - 微信 Java SDK 开发说明
WxJava 是一个支持多种微信平台的完整 Java SDK,包含公众号、小程序、微信支付、企业微信、开放平台、视频号、企点等多种功能模块。
**请始终优先参考本说明,只有在遇到与此内容不一致的意外信息时,才退而使用搜索或 bash 命令。**
## 高效开发指南
### 前置条件与环境准备
- **Java 要求**:JDK 8+(项目最低目标为 Java 8)
- **Maven**:推荐 Maven 3.6+(已验证 Maven 3.9.11)
- **IDE**:推荐使用 IntelliJ IDEA(项目针对 IDEA 优化)
### 引导、构建与校验
克隆仓库后按顺序执行以下命令:
```bash
# 1. 基础编译(请勿中断 - 约需 4-5 分钟)
mvn clean compile -DskipTests=true --no-transfer-progress
# 超时时间:建议设置 8 分钟以上。实际时间:约 4 分钟
# 2. 完整打包(请勿中断 - 约需 2-3 分钟)
mvn clean package -DskipTests=true --no-transfer-progress
# 超时时间:建议设置 5 分钟以上。实际时间:约 2 分钟
# 3. 代码质量校验(请勿中断 - 约需 45-60 秒)
mvn checkstyle:check --no-transfer-progress
# 超时时间:建议设置 3 分钟以上。实际时间:约 50 秒
```
重要时间说明:
- 绝对不要中断任意 Maven 构建命令
- 编译阶段耗时最长(约 4 分钟),原因是项目包含 34 个模块
- 后续构建会更快,因为存在增量编译
- 始终使用 `--no-transfer-progress` 以减少日志噪音
### 测试结构
- **测试框架**:TestNG(非 JUnit)
- **测试文件**:共有 298 个测试文件
- **默认行为**:pom.xml 中默认禁用测试(`<skip>true</skip>`)
- **测试配置**:测试需要通过 test-config.xml 提供真实的微信 API 凭据
- **注意**:没有真实微信 API 凭据请不要尝试运行测试,测试将会失败
## 项目结构与导航
### 核心 SDK 模块(主要开发区)
- `weixin-java-common/` - 通用工具与基础类(最重要)
- `weixin-java-mp/` - 公众号 SDK
- `weixin-java-pay/` - 微信支付 SDK
- `weixin-java-miniapp/` - 小程序 SDK
- `weixin-java-cp/` - 企业微信 SDK
- `weixin-java-open/` - 开放平台 SDK
- `weixin-java-channel/` - 视频号 / Channel SDK
- `weixin-java-qidian/` - 企点 SDK
### 框架集成模块
- `spring-boot-starters/` - Spring Boot 自动配置 starter
- `solon-plugins/` - Solon 框架插件
- `weixin-graal/` - GraalVM 本地镜像支持
### 配置与质量控制
- `quality-checks/google_checks.xml` - Checkstyle 配置
- `.editorconfig` - 代码格式规则(2 个空格等于 1 个制表)
- `pom.xml` - 根级 Maven 配置
## 开发工作流
### 修改代码的流程
1. 修改前务必先构建以建立干净基线:
```bash
mvn clean compile --no-transfer-progress
```
2. 遵循代码风格(由 checkstyle 强制):
- 缩进使用 2 个空格(不要用制表符)
- 遵循 Google Java 风格指南
- 在 IDE 中安装 EditorConfig 插件
3. 增量验证修改:
```bash
# 每次修改后运行:
mvn compile --no-transfer-progress
mvn checkstyle:check --no-transfer-progress
```
### 提交修改前的必须校验
请务必按顺序完成以下校验步骤:
1. 代码风格校验:
```bash
mvn checkstyle:check --no-transfer-progress
# 必须通过 - 约需 50 秒
```
2. 完整清理构建:
```bash
mvn clean package -DskipTests=true --no-transfer-progress
# 必须成功 - 约需 2 分钟
```
3. 文档:为公共方法和类补充或更新 javadoc
4. 贡献规范:遵循 `CONTRIBUTING.md`,Pull Request 必须以 `develop` 分支为目标
## 模块依赖与构建顺序
### 核心模块依赖(构建顺序)
1. `weixin-graal`(GraalVM 支持)
2. `weixin-java-common`(所有模块的基础)
3. 核心 SDK 模块(mp、pay、miniapp、cp、open、channel、qidian)
4. 框架集成(spring-boot-starters、solon-plugins)
### 主要关系模式
- 所有 SDK 模块都依赖于 `weixin-java-common`
- Spring Boot starters 依赖对应的 SDK 模块
- Solon 插件遵循与 Spring Boot starters 相同的依赖模式
- 每个模块都有单账号与多账号配置支持
## 常见任务与命令
### 验证指定模块
```bash
# 构建单个模块(将 'weixin-java-mp' 替换为目标模块):
cd weixin-java-mp
mvn clean compile --no-transfer-progress
```
### 检查依赖
```bash
# 分析依赖树:
mvn dependency:tree --no-transfer-progress
# 检查依赖更新:
./others/check-dependency-updates.sh
```
### 发布与发布准备
```bash
# 版本检查:
mvn versions:display-property-updates --no-transfer-progress
# 部署(需要凭据):
mvn clean deploy -P release --no-transfer-progress
```
## 重要文件与位置
### 配置文件
- `pom.xml` - 根级 Maven 配置与依赖管理
- `quality-checks/google_checks.xml` - Checkstyle 规则
- `.editorconfig` - IDE 格式化配置
- `.github/workflows/maven-publish.yml` - CI/CD 工作流
### 文档
- `README.md` - 项目概览与使用说明(中文)
- `CONTRIBUTING.md` - 贡献指南
- `demo.md` - 示例项目与演示链接
- 每个模块均有单独的文档与示例
### 测试资源
- `*/src/test/resources/test-config.sample.xml` - 测试配置模板
- 测试运行需要真实的微信 API 凭据
## SDK 使用模式
### Maven 依赖示例
```xml
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId> <!-- 或其他模块 -->
<version>4.7.0</version>
</dependency>
```
### 常见开发区域
- **API 客户端实现**:位于 `*/service/impl/` 目录
- **模型类**:位于 `*/bean/` 目录
- **配置**:位于 `*/config/` 目录
- **工具类**:位于 `weixin-java-common` 的 `*/util/` 目录
## 故障排查
### 构建问题
- **OutOfMemoryError**:增加 Maven 内存:`export MAVEN_OPTS="-Xmx2g"`
- **编译失败**:通常为依赖问题 - 先执行 `mvn clean`
- **Checkstyle 失败**:检查 IDE 的 `.editorconfig` 设置
### 常见陷阱
- **测试默认跳过**:这是正常现象 — 测试需要微信 API 凭据
- **多模块变更**:总是在仓库根目录构建,而不是单独模块
- **分支目标**:Pull Request 必须以 `develop` 分支为目标,而不是 `master` 或 `release`
## 性能说明
- **首次构建**:由于依赖下载,耗时 4-5 分钟
- **增量构建**:通常更快(约 30-60 秒)
- **Checkstyle**:运行迅速(约 50 秒),应当经常运行
- **IDE 性能**:项目使用 Lombok,请确保启用注解处理
注意:本项目为 SDK 库项目,而非可运行应用。修改应以 API 功能为主,不要改动应用级行为。
================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
================================================
FILE: .github/workflows/maven-publish.yml
================================================
name: Publish to Maven Central
on:
push:
branches:
- develop
permissions:
contents: write
concurrency:
group: maven-publish-${{ github.ref }}
cancel-in-progress: true
jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Detect and tag release version from commit message
id: version_detect
run: |
COMMIT_MSG=$(git log -1 --pretty=%B)
VERSION=""
TAG=""
IS_RELEASE="false"
if [[ "$COMMIT_MSG" =~ ^:bookmark:\ 发布\ ([0-9]+\.[0-9]+\.[0-9]+)\.B\ 测试版本 ]]; then
BASE_VER="${BASH_REMATCH[1]}"
VERSION="${BASE_VER}.B"
TAG="v${BASE_VER}"
IS_RELEASE="true"
echo "Matched test release commit: VERSION=$VERSION, TAG=$TAG"
# 检查并打tag
if git tag | grep -q "^$TAG$"; then
echo "Tag $TAG already exists."
else
git config user.name "Binary Wang"
git config user.email "a@binarywang.com"
git tag -a "$TAG" -m "Release $TAG"
git push origin "$TAG"
echo "Tag $TAG created and pushed."
fi
elif [[ "$COMMIT_MSG" =~ ^:bookmark:\ 发布\ ([0-9]+\.[0-9]+\.[0-9]+)\ 正式版本 ]]; then
VERSION="${BASH_REMATCH[1]}"
TAG="v${VERSION}"
IS_RELEASE="true"
echo "Matched formal release commit: VERSION=$VERSION, TAG=$TAG"
# 检查并打tag
if git tag | grep -q "^$TAG$"; then
echo "Tag $TAG already exists."
else
git config user.name "Binary Wang"
git config user.email "a@binarywang.com"
git tag -a "$TAG" -m "Release $TAG"
git push origin "$TAG"
echo "Tag $TAG created and pushed."
fi
fi
echo "is_release=$IS_RELEASE" >> $GITHUB_OUTPUT
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '8'
distribution: 'temurin'
server-id: central
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: MAVEN_GPG_PASSPHRASE
cache: maven
- name: Verify GPG keys
run: |
echo "Available GPG Keys:"
gpg --list-secret-keys --keyid-format LONG
- name: Generate and set version
id: set_version
run: |
if [[ "${{ steps.version_detect.outputs.is_release }}" == "true" ]]; then
VERSION="${{ steps.version_detect.outputs.version }}"
else
git describe --tags 2>/dev/null || echo "no tag"
TIMESTAMP=$(date +'%Y%m%d.%H%M%S')
GIT_DESCRIBE=$(git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "0.0.1")
VERSION="${GIT_DESCRIBE}-${TIMESTAMP}"
fi
echo "Final version: $VERSION"
echo "VERSION=$VERSION" >> $GITHUB_ENV
mvn versions:set -DnewVersion=$VERSION --no-transfer-progress
env:
TZ: Asia/Shanghai
- name: Publish to Maven Central
run: |
mvn clean deploy -P release \
-Dmaven.test.skip=true \
-Dgpg.args="--batch --yes --pinentry-mode loopback" \
--no-transfer-progress
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
================================================
FILE: .gitignore
================================================
.bash
.history
*.class
test-output
# Package Files #
*.jar
*.war
*.ear
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
target
bin
.project
.classpath
.settings
sw-pom.xml
*.iml
test-config.xml
.idea
/.gradle/
/gradle/
*.bat
/gradlew
**/build/
._*
.DS_Store
.AppleDouble
.LSOverride
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.vscode
.VolumeIcon.icns
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
/.sonar/
sonar-project.properties
!/.mvn/wrapper/maven-wrapper.jar
*.versionsBackup
# STS
.factorypath
*.zip
================================================
FILE: .travis.yml
================================================
language: java
jdk:
- openjdk8
script: "mvn clean package -DskipTests=true -Dcheckstyle.skip=true"
branches:
only:
- develop
cache:
directories:
- '$HOME/.m2/repository'
notifications:
email:
- a@binarywang.com
================================================
FILE: CONTRIBUTING.md
================================================
# 代码贡献指南
1. 首先非常欢迎和感谢对本项目发起 `Pull Request` 的热心小伙伴们。
1. **特别提示:请务必在 `develop` 分支提交 `PR`,`release` 分支目前仅是正式版的代码,即发布正式版本后才会从 `develop` 分支进行合并。**
1. 本项目代码风格为使用2个空格代表一个Tab,因此在提交代码时请注意一下,否则很容易在IDE格式化代码后与原代码产生大量diff,这样会给其他人阅读代码带来极大的困扰。
1. 为了便于设置,本项目引入`editorconfig`支持,请使用Eclipse的同学在贡献代码前安装相关插件,而`IntelliJ IDEA`新版本自带支持,如果没有可自行安装插件。
1. **提交代码前,请检查代码是否已经格式化,并且保证新增加或者修改的方法都有完整的参数说明,而public方法必须拥有相应的单元测试并通过测试。**
1. 本项目可以采用两种方式接受代码贡献:
- 第一种就是基于[Git Flow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)开发流程,因此在发起Pull Request的时候请选择develop分支,详细步骤参考后文,推荐使用此种方式贡献代码。
- (***暂停此种方式,请使用第一种***)另外一种贡献代码的方式就是加入SDK Developers开发组,前提是对自己的代码足够自信就可以申请加入,加入之后可以随时直接提交代码,但要注意对所做的修改或新增的代码进行单元测试,保证提交代码没有明显问题。
### PR方式贡献代码步骤
* 在 GitHub 上 `fork` 到自己的仓库,如 `my_user/WxJava`,然后 `clone` 到本地,并设置用户信息。
```bash
$ git clone git@github.com:{your-github-username}/WxJava.git
$ cd WxJava
$ git config user.name "yourname"
$ git config user.email "your email"
```
* 修改代码后提交,并推送到自己的仓库。
```bash
$ #do some change on the content
$ git commit -am "Fix issue #1: change something"
$ git push
```
* 在 `GitHub` 或 `Gitee` 网站上提交 `Pull Request`。
* 定期使用项目仓库内容更新自己仓库内容。
```bash
$ git remote add upstream https://github.com/binarywang/WxJava
$ git fetch upstream
$ git checkout develop
$ git rebase upstream/develop
$ git push -f origin develop
```
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of this License; and
You must cause any modified files to carry prominent notices stating that You changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
================================================
FILE: README.md
================================================
## WxJava - 微信开发 Java SDK
[](https://github.com/binarywang/WxJava)
[](https://gitee.com/binary/weixin-java-tools)
[](https://gitcode.com/binary/WxJava)
[](https://github.com/binarywang/WxJava/releases)
[](https://central.sonatype.com/artifact/com.github.binarywang/wx-java/versions)
[](https://circleci.com/gh/binarywang/WxJava/tree/develop)
[](https://www.jetbrains.com/?from=WxJava-weixin-java-tools)
[](https://opensource.org/licenses/Apache-2.0)
<div align="center">
<a href="https://hellogithub.com/repository/6de6147050c94db4aedfd7098d19f8d8" target="_blank">
<img src="https://api.hellogithub.com/v1/widgets/recommend.svg?rid=6de6147050c94db4aedfd7098d19f8d8&claim_uid=mwKh0tILBfjlezR" alt="Featured|HelloGitHub" width="250" height="54" />
</a>
<a href="https://trendshift.io/repositories/12152" target="_blank">
<img src="https://trendshift.io/api/badge/repositories/12152" alt="binarywang%2FWxJava | 趋势转变" width="250" height="55" />
</a>
</div>
### 微信 `Java` 开发工具包,支持包括微信支付、开放平台、公众号、企业微信、视频号、小程序等微信功能模块的后端开发。
### 特别赞助
<div align="center">
<table cellspacing="0" cellpadding="0" width="500">
<tr>
<td align="center" colspan="3">
<a href="http://www.ccflow.org/?from=wxjava" target="_blank">
<img height="120" src="https://ccfast.cc/AD/ccflow2.png" alt="ccflow">
</a>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<a href="https://www.jeequan.com/product/jeepay.html" target="_blank">
<img height="120" src="https://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/wxjava_jeepay.png" alt="计全支付Jeepay,开源支付系统">
</a>
</td>
<td align="center">
<a href="https://www.mall4j.com/cn/?statId=9" target="_blank">
<img height="120" src="https://img.mall4j.com/mall.png" alt="Mall4j">
</a>
</td>
</tr>
<tr>
<td align="center">
<a href="http://mp.weixin.qq.com/mp/homepage?__biz=MzI3MzAwMzk4OA==&hid=1&sn=f31af3bf562b116b061c9ab4edf70b61&scene=18#wechat_redirect" target="_blank">
<img height="120" src="https://gitee.com/binary/weixin-java-tools/raw/develop/images/qrcodes/mp.png" alt="mp qrcode">
</a>
</td>
<td align="center" style="font-size: 18px; font-weight: bold; vertical-align: middle;">
赞助商招募中
</td>
<td align="center">
<a href="https://github.crmeb.net/u/wxjava" target="_blank">
<img height="120" src="https://crmebjavamer.oss-cn-beijing.aliyuncs.com/crmebimage/image/2026/01/30/0a71b2b3535d42b187fff977c33faa30mh9gipgeja.png" alt="ad">
</a>
</td>
</tr>
</table>
</div>
### 目录索引
- [快速开始(3分钟)](#快速开始3分钟)
- [我该选哪个模块?](#我该选哪个模块)
- [Maven 引用方式](#maven-引用方式)
- [最小示例](#最小示例)
- [重要信息](#重要信息)
- [其他说明](#其他说明)
- [版本说明](#版本说明)
- [应用案例](#应用案例)
- [特别赞助](#特别赞助)
- [贡献者列表](#贡献者列表)
### 快速开始(3分钟)
1. 根据业务场景选择模块(见下方“我该选哪个模块?”)
2. 引入 Maven 依赖并选择对应模块
3. 参考最小示例完成初始化并调用 API
### 我该选哪个模块?
| 业务场景 | 模块 | artifactId |
|---|---|---|
| 微信公众号开发 | MP | `weixin-java-mp` |
| 微信小程序开发 | MiniApp | `weixin-java-miniapp` |
| 微信支付 | Pay | `weixin-java-pay` |
| 企业微信 | CP | `weixin-java-cp` |
| 微信开放平台(第三方平台) | Open | `weixin-java-open` |
| 视频号 / 微信小店 | Channel | `weixin-java-channel` |
> 移动端(iOS/Android)微信登录、分享等能力仍需集成微信官方客户端 SDK;本项目为服务端 SDK。
### 重要信息
1. [`WxJava` 荣获 `GitCode` 2024年度十大开源社区奖项](https://mp.weixin.qq.com/s/wM_UlMsDm3IZ1CPPDvcvQw)。
2. 项目合作洽谈请联系微信`binary0000`(在微信里自行搜索并添加好友,请注明来意,如有关于SDK问题需讨论请参考下文入群讨论,不要加此微信)。
3. **2026-01-03 发布 [【4.8.0正式版】](https://mp.weixin.qq.com/s/mJoFtGc25pXCn3uZRh6Q-w)**!
5. 贡献源码可以参考视频:[【贡献源码全过程(上集)】](https://mp.weixin.qq.com/s/3xUZSATWwHR_gZZm207h7Q)、[【贡献源码全过程(下集)】](https://mp.weixin.qq.com/s/nyzJwVVoYSJ4hSbwyvTx9A) ,友情提供:[程序员小山与Bug](https://space.bilibili.com/473631007)
6. 新手重要提示:本项目仅是一个SDK开发工具包,未提供Web实现,建议使用 `maven` 或 `gradle` 引用本项目即可使用本SDK提供的各种功能,详情可参考 **[【Demo项目】](demo.md)** 或本项目中的部分单元测试代码;
7. 微信开发新手请务必阅读【开发文档】([Gitee Wiki](https://gitee.com/binary/weixin-java-tools/wikis/Home) 或者 [Github Wiki](https://github.com/binarywang/WxJava/wiki))的常见问题部分,可以少走很多弯路,节省不少时间。
8. 技术交流群:想获得QQ群/微信群/钉钉企业群等信息的同学,请使用微信扫描上面的微信公众号二维码关注 `WxJava` 后点击相关菜单即可获取加入方式,同时也可以在微信中搜索 `weixin-java-tools` 或 `WxJava` 后选择正确的公众号进行关注,该公众号会及时通知SDK相关更新信息,并不定期分享微信Java开发相关技术知识;
9. 钉钉技术交流群:`32206329`(技术交流2群), `30294972`(技术交流1群,目前已满),`35724728`(通知群,实时通知Github项目变更记录)。
10. 微信开发新手或者Java开发新手在群内提问或新开Issue提问前,请先阅读[【提问的智慧】](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md),并确保已查阅过 [【开发文档Wiki】](https://github.com/binarywang/WxJava/wiki) ,避免浪费大家的宝贵时间;
11. 寻求帮助时需贴代码或大长串异常信息的,请利用 http://paste.ubuntu.com
--------------------------------
### 其他说明
1. **阅读源码的同学请注意,本SDK为简化代码编译时加入了`lombok`支持,如果不了解`lombok`的话,请先学习下相关知识,比如可以阅读[此文章](https://mp.weixin.qq.com/s/cUc-bUcprycADfNepnSwZQ);**
2. 如有新功能需求,发现BUG,或者由于微信官方接口调整导致的代码问题,可以直接在[【Issues】](https://github.com/binarywang/WxJava/issues)页提出issue,便于讨论追踪问题;
3. 如果需要贡献代码,请务必在提交PR之前先仔细阅读[【代码贡献指南】](CONTRIBUTING.md),谢谢理解配合;
4. 目前本`SDK`最新版本要求的`JDK`最低版本是`8`,使用`7`的同学可以使用`WxJava` `3.8.0`及以前版本,而还在使用`JDK`6的用户请参考[【此项目】]( https://github.com/binarywang/weixin-java-tools-for-jdk6) ,而其他更早的JDK版本则需要自己改造实现。
5. [本项目在开源中国的页面](https://www.oschina.net/p/weixin-java-tools-new),欢迎大家积极留言评分 🙂
6. SDK开发文档请查阅 [【开发文档Wiki】](https://github.com/binarywang/WxJava/wiki),部分文档可能未能及时更新,如有发现,可以及时上报或者自行修改。
7. **如果本开发工具包对您有所帮助,欢迎对我们的努力进行肯定,可以直接前往[【托管于码云的项目首页】](http://gitee.com/binary/weixin-java-tools),在页尾部分找到“捐助”按钮进行打赏,多多益善 😄。非常感谢各位打赏和捐助的同学!**
8. 各个模块的Javadoc可以在线查看:[weixin-java-miniapp](http://binary.ac.cn/weixin-java-miniapp-javadoc/)、[weixin-java-pay](http://binary.ac.cn/weixin-java-pay-javadoc/)、[weixin-java-mp](http://binary.ac.cn/weixin-java-mp-javadoc/)、[weixin-java-common](http://binary.ac.cn/weixin-java-common-javadoc/)、[weixin-java-cp](http://binary.ac.cn/weixin-java-cp-javadoc/)、[weixin-java-open](http://binary.ac.cn/weixin-java-open-javadoc/)
9. 本SDK项目在以下代码托管网站同步更新:
* 码云:https://gitee.com/binary/weixin-java-tools
* GitHub:https://github.com/binarywang/WxJava
---------------------------------
### Maven 引用方式
注意:最新版本(包括测试版)为 [](https://central.sonatype.com/artifact/com.github.binarywang/wx-java/versions),以下为最新正式版。
```xml
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>(不同模块参考下文)</artifactId>
<version>4.8.0</version>
</dependency>
```
- 微信小程序:`weixin-java-miniapp`
- 微信支付:`weixin-java-pay`
- 微信开放平台:`weixin-java-open`
- 微信公众号:`weixin-java-mp`
- 企业微信:`weixin-java-cp`
- 微信视频号/微信小店:`weixin-java-channel`
**注意**:
- **移动应用开发**:如果你的移动应用(iOS/Android App)需要接入微信登录、分享等功能:
- 微信登录(网页授权):使用 `weixin-java-open` 模块,在服务端处理 OAuth 授权
- 微信支付:使用 `weixin-java-pay` 模块
- 客户端集成:需使用微信官方提供的移动端SDK(iOS/Android),本项目为服务端SDK
- **微信开放平台**(`weixin-java-open`)主要用于第三方平台,代公众号或小程序进行开发和管理
---------------------------------
### 最小示例
<details>
<summary>公众号(MP)示例:获取 AccessToken</summary>
```java
WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
config.setAppId("your-app-id");
config.setSecret("your-secret");
WxMpService wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(config);
String accessToken = wxMpService.getAccessToken();
System.out.println(accessToken);
```
</details>
<details>
<summary>小程序(MiniApp)示例:code2Session</summary>
```java
WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
config.setAppid("your-app-id");
config.setSecret("your-secret");
WxMaService wxMaService = new WxMaServiceImpl();
wxMaService.setWxMaConfig(config);
WxMaJscode2SessionResult result = wxMaService.getUserService().getSessionInfo("js-code");
System.out.println(result.getOpenid());
```
</details>
---------------------------------
### 版本说明
<details>
<summary>点此展开查看</summary>
1. 本项目定为大约每半年左右发布一次正式版,遇到重大问题需修复会及时提交新版本,欢迎大家随时提交 `Pull Request`;
2. 每次代码更新都会自动构建出新版本方便及时尝鲜,版本号格式为 `x.x.x-时间戳`;
3. 发布正式版时,`develop` 分支代码合并进入 `release` 分支),版本号格式为 `X.X.0`(如`2.1.0`,`2.2.0`等);
4. 每隔一段时间后,会发布测试版本(如`3.6.8.B`,即尾号不为0,并添加B,以区别于正式版),代码仅存在于 `develop` 分支中;
5. 目前最新版本号为 [](http://mvnrepository.com/artifact/com.github.binarywang/wx-java) ,也可以通过访问以下链接分别查看各个模块最新的版本:
[【微信支付】](https://central.sonatype.com/artifact/com.github.binarywang/weixin-java-pay/versions) 、[【小程序】](https://central.sonatype.com/artifact/com.github.binarywang/weixin-java-miniapp/versions) 、[【公众号】](https://central.sonatype.com/artifact/com.github.binarywang/weixin-java-mp/versions) 、[【企业微信】](https://central.sonatype.com/artifact/com.github.binarywang/weixin-java-cp/versions)、[【开放平台】](https://central.sonatype.com/artifact/com.github.binarywang/weixin-java-open/versions)、[【视频号】](https://central.sonatype.com/artifact/com.github.binarywang/weixin-java-channel/versions)
</details>
----------------------------------
### 应用案例
完整案例登记列表,请[【访问这里】](https://github.com/binarywang/WxJava/issues/729)查看,欢迎登记更多的案例。
<details>
<summary>以下为节选的部分案例, 点此展开查看</summary>
#### 开源项目:
- 基于微信公众号的签到、抽奖、发送弹幕程序:https://github.com/workcheng/weiya
- Jeepay 支付系统:https://gitee.com/jeequan/jeepay
- 微同商城:https://gitee.com/fuyang_lipengjun/platform
- 微信点餐系统:https://github.com/sqmax/springboot-project
- 专注批量推送的小而美的工具:https://github.com/rememberber/WePush
- yshop意象商城系统:https://gitee.com/guchengwuyue/yshopmall
- wx-manage(微信公众号管理项目):https://github.com/niefy/wx-manage
- 基于若依开发的微信公众号管理系统:https://gitee.com/joolun/JooLun-wx
- SAAS微信小程序电商:https://gitee.com/wei-it/weiit-saas
- mall4j 电商商城系统:https://gitee.com/gz-yami/mall4j
#### 小程序:
- (京东)友家铺子,友家铺子店长版,京粉精选
- [喵星人贴吧助手(扫码关注)](http://p98ahz3tg.bkt.clouddn.com/miniappqrcode.jpg)
- 树懒揽书+
- 广廉快线,鹏城巴士等
- 当燃挑战、sportlight轻灵运动
- 360考试宝典
- 民医台
- 来一团商家版
- 史必达(史丹利)
- 嘀嗒云印
- 维沃吼吼
- 王朝社区(比亚迪新能源社区)
- 极吼吼手机上门回收换新
- 未来信封
- 5G惠享
- 生菜wordpress转小程序
- 丽日购
#### 公众号:
- 中国电信上海网厅(sh_189)
- E答平台
- 宁夏生鲜365
- 通服货滴
- 神龙养车
- 沃音乐商务智能
- 光环云社群
- 手机排队
- [全民约跑健身便利店](http://www.oneminsport.com/)
- 民医台
- YshopMall
- 好行景区直通车以及全国40多个公众号
- 我奥篮球公众号
- 未来信封官微
- 银川智云问诊
- 5G惠享
#### 企业微信:
- HTC企业微信
- 掌上史丹利
- 药店益
#### 其他:
- 高善人力资源
- 小猪餐餐
- 餐饮系统
- 微信公众号管理系统:http://demo.joolun.com
- 锐捷网络:Saleslink
</details>
----------------------------------
### 贡献者列表
特别感谢参与贡献的所有同学,所有贡献者列表请在[此处](https://github.com/binarywang/WxJava/graphs/contributors)查看,欢迎大家继续踊跃贡献代码!
<a href="https://github.com/binarywang/WxJava/graphs/contributors">
<img src="https://contrib.rocks/image?repo=binarywang/WxJava" />
</a>
### GitHub Stargazers over time
[](https://star-history.com/#binarywang/WxJava&Date)
================================================
FILE: demo.md
================================================
## `Demo` 项目
### 说明
1. 在码云和 `GitHub` 上均可访问,会尽量保持同步,请根据自己情况选用。
1. 一般来说,`Github`上的版本应该是最新的,但也有可能没及时同步,此种情况下请以 `Github` 上的版本为准,有问题也请在 `Github` 对应项目 `Issues` 页面提问)。
1. 欢迎提供更多的 demo 实现。
### `Spring Boot Starter` 实现
- 微信支付:[点击查看使用方法](https://github.com/Wechat-Group/WxJava/tree/master/spring-boot-starters/wx-java-pay-spring-boot-starter)
- [使用该 `starter` 实现的微信支付`Demo`](https://github.com/binarywang/wx-java-pay-demo)
- 微信公众号:[点击查看使用方法](https://github.com/Wechat-Group/WxJava/tree/master/spring-boot-starters/wx-java-mp-spring-boot-starter)
- [使用该 `starter` 实现的公众号 `Demo`](https://github.com/binarywang/wx-java-mp-demo)
- 微信小程序:[点击查看使用方法](https://github.com/Wechat-Group/WxJava/tree/master/spring-boot-starters/wx-java-miniapp-spring-boot-starter)
- [使用该 `starter` 实现的小程序 `Demo`](https://github.com/binarywang/wx-java-miniapp-demo)
### Demo 列表
1. 微信支付 Demo:[GitHub](http://github.com/binarywang/weixin-java-pay-demo)、[码云](http://gitee.com/binary/weixin-java-pay-demo)
1. 企业号/企业微信 Demo:[GitHub](http://github.com/binarywang/weixin-java-cp-demo)、[码云](http://gitee.com/binary/weixin-java-cp-demo)
1. 微信小程序 Demo:[GitHub](http://github.com/binarywang/weixin-java-miniapp-demo)、[码云](http://gitee.com/binary/weixin-java-miniapp-demo)
1. 开放平台 Demo:[GitHub](http://github.com/Wechat-Group/weixin-java-open-demo)、[码云](http://gitee.com/binary/weixin-java-open-demo)
1. 微信公众号 Demo:
- 使用 `Spring MVC` 实现的公众号 Demo:[GitHub](http://github.com/binarywang/weixin-java-mp-demo-springmvc)、[码云](https://gitee.com/binary/weixin-java-mp-demo)
- 使用 `Spring Boot` 实现的公众号 Demo(支持多公众号):[GitHub](http://github.com/binarywang/weixin-java-mp-demo)、[码云](http://gitee.com/binary/weixin-java-mp-demo-springboot)
- 含公众号和部分微信支付代码的 Demo:[GitHub](http://github.com/Wechat-Group/weixin-java-demo-springmvc)、[码云](http://gitee.com/binary/weixin-java-tools-springmvc)
================================================
FILE: docs/CP_MSG_AUDIT_SDK_SAFE_USAGE.md
================================================
# 企业微信会话存档SDK安全使用指南
## 问题背景
在使用企业微信会话存档功能时,部分开发者遇到了JVM崩溃的问题。典型错误信息如下:
```
SIGSEGV (0xb) at pc=0x00007fcd50460d93
Problematic frame:
C [libWeWorkFinanceSdk_Java.so+0x260d93] WeWorkFinanceSdk::TryRefresh(std::string const&, std::string const&, int)+0x23
```
## 问题原因
旧版API设计存在以下问题:
1. **SDK生命周期管理混乱**
- `getChatDatas()` 方法会返回SDK实例给调用方
- 开发者需要手动调用 `Finance.DestroySdk()` 来销毁SDK
- 但SDK在框架内部有7200秒的缓存机制
2. **手动销毁导致缓存失效**
- 当开发者手动销毁SDK后,框架缓存中的SDK引用变为无效
- 后续调用(如 `getMediaFile()`)仍然使用已销毁的SDK
- 底层C++库访问无效指针,导致SIGSEGV错误
3. **多线程并发问题**
- 在多线程环境下,一个线程销毁SDK后
- 其他线程仍在使用该SDK,导致崩溃
## 解决方案
从 **4.8.0** 版本开始,WxJava提供了新的安全API,完全由框架管理SDK生命周期。
### 新API列表
| 旧API(已废弃) | 新API(推荐使用) | 说明 |
|----------------|------------------|------|
| `getChatDatas()` | `getChatRecords()` | 拉取聊天记录,不暴露SDK |
| `getDecryptData(sdk, ...)` | `getDecryptChatData(...)` | 解密聊天数据,无需传入SDK |
| `getChatPlainText(sdk, ...)` | `getChatRecordPlainText(...)` | 获取明文数据,无需传入SDK |
| `getMediaFile(sdk, ...)` | `downloadMediaFile(...)` | 下载媒体文件,无需传入SDK |
### 使用示例
#### 错误用法(旧API,已废弃)
```java
// ❌ 不推荐:容易导致JVM崩溃
WxCpMsgAuditService msgAuditService = wxCpService.getMsgAuditService();
// 拉取聊天记录
WxCpChatDatas chatDatas = msgAuditService.getChatDatas(seq, 1000L, null, null, 1000L);
for (WxCpChatDatas.WxCpChatData chatData : chatDatas.getChatData()) {
// 解密数据
WxCpChatModel model = msgAuditService.getDecryptData(chatDatas.getSdk(), chatData, 2);
// 下载媒体文件
if ("image".equals(model.getMsgType())) {
String sdkFileId = model.getImage().getSdkFileId();
msgAuditService.getMediaFile(chatDatas.getSdk(), sdkFileId, null, null, 1000L, targetPath);
}
}
// ❌ 危险操作:手动销毁SDK可能导致后续调用崩溃
Finance.DestroySdk(chatDatas.getSdk());
```
#### 正确用法(新API,推荐)
```java
// ✅ 推荐:SDK生命周期由框架自动管理,安全可靠
WxCpMsgAuditService msgAuditService = wxCpService.getMsgAuditService();
// 拉取聊天记录(不返回SDK)
List<WxCpChatDatas.WxCpChatData> chatRecords =
msgAuditService.getChatRecords(seq, 1000L, null, null, 1000L);
for (WxCpChatDatas.WxCpChatData chatData : chatRecords) {
// 解密数据(无需传入SDK)
WxCpChatModel model = msgAuditService.getDecryptChatData(chatData, 2);
// 下载媒体文件(无需传入SDK)
if ("image".equals(model.getMsgType())) {
String sdkFileId = model.getImage().getSdkFileId();
msgAuditService.downloadMediaFile(sdkFileId, null, null, 1000L, targetPath);
}
}
// ✅ 无需手动销毁SDK,框架会自动管理
```
### 完整示例:拉取并处理会话存档
```java
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.api.WxCpMsgAuditService;
import me.chanjar.weixin.cp.bean.msgaudit.WxCpChatDatas;
import me.chanjar.weixin.cp.bean.msgaudit.WxCpChatModel;
import me.chanjar.weixin.cp.constant.WxCpConsts;
import java.util.List;
public class MsgAuditExample {
private final WxCpService wxCpService;
public void processMessages(long seq) throws Exception {
WxCpMsgAuditService msgAuditService = wxCpService.getMsgAuditService();
// 拉取聊天记录
List<WxCpChatDatas.WxCpChatData> chatRecords =
msgAuditService.getChatRecords(seq, 1000L, null, null, 1000L);
for (WxCpChatDatas.WxCpChatData chatData : chatRecords) {
seq = chatData.getSeq();
// 获取明文数据
String plainText = msgAuditService.getChatRecordPlainText(chatData, 2);
WxCpChatModel model = WxCpChatModel.fromJson(plainText);
// 处理不同类型的消息
switch (model.getMsgType()) {
case WxCpConsts.MsgAuditMediaType.TEXT:
processTextMessage(model);
break;
case WxCpConsts.MsgAuditMediaType.IMAGE:
processImageMessage(model, msgAuditService);
break;
case WxCpConsts.MsgAuditMediaType.FILE:
processFileMessage(model, msgAuditService);
break;
default:
// 处理其他类型消息
break;
}
}
}
private void processTextMessage(WxCpChatModel model) {
String content = model.getText().getContent();
System.out.println("文本消息:" + content);
}
private void processImageMessage(WxCpChatModel model, WxCpMsgAuditService msgAuditService)
throws Exception {
String sdkFileId = model.getImage().getSdkFileId();
String md5Sum = model.getImage().getMd5Sum();
String targetPath = "/path/to/save/" + md5Sum + ".jpg";
// 下载图片(无需传入SDK)
msgAuditService.downloadMediaFile(sdkFileId, null, null, 1000L, targetPath);
System.out.println("图片已保存:" + targetPath);
}
private void processFileMessage(WxCpChatModel model, WxCpMsgAuditService msgAuditService)
throws Exception {
String sdkFileId = model.getFile().getSdkFileId();
String fileName = model.getFile().getFileName();
String targetPath = "/path/to/save/" + fileName;
// 下载文件(无需传入SDK)
msgAuditService.downloadMediaFile(sdkFileId, null, null, 1000L, targetPath);
System.out.println("文件已保存:" + targetPath);
}
}
```
### 使用Lambda处理媒体文件流
新API同样支持使用Lambda表达式处理媒体文件的数据流:
```java
msgAuditService.downloadMediaFile(sdkFileId, null, null, 1000L, data -> {
try {
// 处理每个数据分片(大文件会分片传输)
// 例如:上传到云存储、写入数据库等
uploadToCloud(data);
} catch (Exception e) {
e.printStackTrace();
}
});
```
## 技术实现原理
### 引用计数机制
新API在内部实现了SDK引用计数机制:
1. **获取SDK时**:引用计数 +1
2. **使用完成后**:引用计数 -1
3. **计数归零时**:SDK被自动释放
```java
// 框架内部实现(简化版)
public void downloadMediaFile(String sdkFileId, ...) {
long sdk = initSdk(); // 获取或初始化SDK
configStorage.incrementMsgAuditSdkRefCount(sdk); // 引用计数 +1
try {
// 执行实际操作
getMediaFile(sdk, sdkFileId, ...);
} finally {
// 确保引用计数一定会减少
configStorage.decrementMsgAuditSdkRefCount(sdk); // 引用计数 -1
}
}
```
### SDK缓存机制
SDK初始化后会缓存7200秒(企业微信官方文档规定),避免频繁初始化:
- **首次调用**:初始化新的SDK
- **7200秒内**:复用缓存的SDK
- **超过7200秒**:重新初始化SDK
新API的引用计数机制与缓存机制完美配合,确保SDK不会被提前销毁。
## 迁移指南
### 第一步:使用新API替换旧API
查找代码中的旧API调用:
```java
// 查找模式
getChatDatas(
getDecryptData(.*sdk
getChatPlainText(.*sdk
getMediaFile(.*sdk
Finance.DestroySdk(
```
替换为对应的新API(参考前面的对照表)。
### 第二步:移除手动SDK管理代码
删除所有 `Finance.DestroySdk()` 调用,SDK生命周期由框架自动管理。
### 第三步:测试验证
1. 在测试环境验证新API功能正常
2. 观察日志,确认没有SDK相关的错误
3. 进行压力测试,验证多线程环境下的稳定性
## 常见问题
### Q1: 旧代码会立即停止工作吗?
**A:** 不会。旧API被标记为 `@Deprecated`,但仍然可用,只是不推荐继续使用。建议尽快迁移到新API以避免潜在问题。
### Q2: 如何知道SDK是否被正确释放?
**A:** 框架会自动管理SDK生命周期,开发者无需关心。如果需要调试,可以查看配置存储中的引用计数。
### Q3: 多线程环境下新API安全吗?
**A:** 是的。新API使用了引用计数机制,配合 `synchronized` 关键字,确保多线程环境下的安全性。
### Q4: 性能会受影响吗?
**A:** 不会。新API在实现上增加了引用计数的开销,但这是轻量级的操作(原子操作),对性能影响可以忽略不计。SDK缓存机制保持不变。
### Q5: 可以同时使用新旧API吗?
**A:** 技术上可以,但强烈不推荐。混用可能导致SDK生命周期管理混乱,建议统一使用新API。
## 相关链接
- [企业微信会话存档官方文档](https://developer.work.weixin.qq.com/document/path/91360)
- [WxJava GitHub 仓库](https://github.com/binarywang/WxJava)
- [问题反馈](https://github.com/binarywang/WxJava/issues)
## 版本要求
- **最低版本**: 4.8.0
- **推荐版本**: 最新版本
## 反馈与支持
如果在使用过程中遇到问题,请:
1. 查看本文档的常见问题部分
2. 在 GitHub 上提交 Issue
3. 加入微信群获取社区支持
---
**最后更新时间**: 2026-01-14
================================================
FILE: docs/CommonUploadParam-FormFields-Usage.md
================================================
# CommonUploadParam 额外表单字段功能使用示例
## 背景
微信公众号在上传永久视频素材时,需要在POST请求中同时提交文件和一个名为`description`的表单字段,该字段包含视频的描述信息(JSON格式)。
根据微信公众号文档:
> 在上传视频素材时需要POST另一个表单,id为description,包含素材的描述信息,内容格式为JSON,格式如下:
> ```json
> {
> "title": "VIDEO_TITLE",
> "introduction": "INTRODUCTION"
> }
> ```
## 解决方案
`CommonUploadParam` 类已经扩展支持额外的表单字段,可以在上传文件的同时提交其他表单数据。
## 使用示例
### 1. 基本用法 - 上传永久视频素材
```java
import me.chanjar.weixin.common.bean.CommonUploadParam;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import me.chanjar.weixin.mp.api.WxMpService;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class VideoMaterialUploadExample {
public void uploadVideoMaterial(WxMpService wxMpService) throws Exception {
// 准备视频文件
File videoFile = new File("/path/to/video.mp4");
// 创建上传参数
CommonUploadParam uploadParam = CommonUploadParam.fromFile("media", videoFile);
// 准备视频描述信息(JSON格式)
Map<String, String> description = new HashMap<>();
description.put("title", "我的视频标题");
description.put("introduction", "这是一个精彩的视频介绍");
String descriptionJson = WxGsonBuilder.create().toJson(description);
// 添加description表单字段
uploadParam.addFormField("description", descriptionJson);
// 调用微信API上传
String url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=video";
String response = wxMpService.upload(url, uploadParam);
System.out.println("上传成功:" + response);
}
}
```
### 2. 链式调用风格
```java
import me.chanjar.weixin.common.bean.CommonUploadParam;
import com.google.gson.JsonObject;
public class ChainStyleExample {
public void uploadWithChainStyle(WxMpService wxMpService) throws Exception {
File videoFile = new File("/path/to/video.mp4");
// 准备描述信息
JsonObject description = new JsonObject();
description.addProperty("title", "视频标题");
description.addProperty("introduction", "视频介绍");
// 使用链式调用
String response = wxMpService.upload(
"https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=video",
CommonUploadParam.fromFile("media", videoFile)
.addFormField("description", description.toString())
);
System.out.println("上传成功:" + response);
}
}
```
### 3. 多个额外表单字段
```java
import me.chanjar.weixin.common.bean.CommonUploadParam;
public class MultipleFormFieldsExample {
public void uploadWithMultipleFields(WxMpService wxMpService) throws Exception {
File file = new File("/path/to/file.jpg");
// 可以添加多个表单字段
CommonUploadParam uploadParam = CommonUploadParam.fromFile("media", file)
.addFormField("field1", "value1")
.addFormField("field2", "value2")
.addFormField("field3", "value3");
String response = wxMpService.upload("https://api.weixin.qq.com/some/upload/url", uploadParam);
System.out.println("上传成功:" + response);
}
}
```
### 4. 从字节数组上传并添加表单字段
```java
import me.chanjar.weixin.common.bean.CommonUploadParam;
public class ByteArrayUploadExample {
public void uploadFromBytes(WxMpService wxMpService) throws Exception {
// 从字节数组创建上传参数
byte[] fileBytes = getFileBytes();
CommonUploadParam uploadParam = CommonUploadParam
.fromBytes("media", "video.mp4", fileBytes)
.addFormField("description", "{\"title\":\"标题\",\"introduction\":\"介绍\"}");
String response = wxMpService.upload(
"https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=video",
uploadParam
);
System.out.println("上传成功:" + response);
}
private byte[] getFileBytes() {
// 获取文件字节数组的逻辑
return new byte[0];
}
}
```
## API 说明
### CommonUploadParam 类
#### 构造方法
- `fromFile(String name, File file)` - 从文件创建上传参数
- `fromBytes(String name, String fileName, byte[] bytes)` - 从字节数组创建上传参数
#### 方法
- `addFormField(String fieldName, String fieldValue)` - 添加额外的表单字段,返回当前对象支持链式调用
- `getFormFields()` - 获取所有额外的表单字段(Map类型)
- `setFormFields(Map<String, String> formFields)` - 设置额外的表单字段
#### 属性
- `name` - 文件对应的接口参数名称(如:media)
- `data` - 上传数据(CommonUploadData对象)
- `formFields` - 额外的表单字段(可选,Map<String, String>类型)
## 注意事项
1. **表单字段是可选的**:如果不需要额外的表单字段,可以不调用`addFormField`方法
2. **JSON格式**:对于需要JSON格式的表单字段(如description),需要先将对象转换为JSON字符串
3. **编码**:表单字段值会使用UTF-8编码
4. **所有HTTP客户端支持**:该功能在所有HTTP客户端实现中都得到支持(OkHttp、Apache HttpClient、HttpComponents、JoddHttp)
## 兼容性
- 对于通过 `fromFile`、`fromBytes` 等工厂方法创建 `CommonUploadParam` 的代码,本功能在行为层面是向后兼容的,现有代码无需修改即可继续工作。
- 如果之前直接使用构造函数(例如 `new CommonUploadParam(name, data)`)创建对象,由于新增了 `formFields` 字段,构造函数签名可能发生变化,升级后需要改为使用上述工厂方法或根据新构造函数签名调整代码。
================================================
FILE: docs/HTTPCLIENT_UPGRADE_GUIDE.md
================================================
# HttpClient 升级指南
## 概述
从 WxJava 4.7.x 版本开始,项目开始支持并推荐使用 **Apache HttpClient 5.x**(HttpComponents Client 5),同时保持对 HttpClient 4.x 的向后兼容。
## 为什么升级?
1. **Apache HttpClient 5.x 是最新稳定版本**:提供更好的性能和更多的功能
2. **HttpClient 4.x 已经进入维护模式**:不再积极开发新功能
3. **更好的安全性**:HttpClient 5.x 包含最新的安全更新和改进
4. **向前兼容**:为未来的开发做好准备
## 支持的 HTTP 客户端
| HTTP 客户端 | 版本 | 配置值 | 状态 | 说明 |
|------------|------|--------|------|------|
| Apache HttpClient 5.x | 5.5 | `HttpComponents` | ⭐ 推荐 | 最新稳定版本 |
| Apache HttpClient 4.x | 4.5.13 | `HttpClient` | ✅ 支持 | 向后兼容 |
| OkHttp | 4.12.0 | `OkHttp` | ✅ 支持 | 需自行添加依赖 |
| Jodd-http | 6.3.0 | `JoddHttp` | ✅ 支持 | 需自行添加依赖 |
## 模块支持情况
| 模块 | HttpClient 5.x 支持 | 默认客户端 |
|------|-------------------|-----------|
| weixin-java-mp(公众号) | ✅ 是 | HttpComponents (5.x) |
| weixin-java-cp(企业微信) | ⚠️ 视集成方式而定 | 参考对应 starter 配置 |
| weixin-java-channel(视频号) | ✅ 是 | HttpComponents (5.x) |
| weixin-java-qidian(企点) | ✅ 是 | HttpComponents (5.x) |
| weixin-java-miniapp(小程序) | ✅ 是 | HttpComponents (5.x) |
| weixin-java-pay(支付) | ✅ 是 | HttpComponents (5.x) |
| weixin-java-open(开放平台) | ✅ 是 | HttpComponents (5.x) |
**注意**:
- **weixin-java-cp 模块**的支持情况取决于具体使用的 Starter 版本,请参考对应模块文档。
## 对现有项目的影响
### 对新项目
- **无需任何修改**,直接使用最新版本即可
- 支持 HttpClient 5.x 的模块会自动使用 HttpComponents (5.x)
### 对现有项目
- **向后兼容**:不需要修改任何代码
- 如果希望继续使用 HttpClient 4.x,只需在配置中显式指定,pay 模块会自动包含 httpclient4 依赖(因为某些接口必须使用 httpclient4)
其他模块(mp、miniapp、cp、open、channel、qidian)如果需要使用 httpclient4,必须显式在项目中添加 httpclient4 依赖
## 迁移步骤
### 1. 更新 WxJava 版本
在 `pom.xml` 中更新版本:
```xml
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>最新版本</version> <!-- 请参考 Maven Central 或项目 README 获取最新版本号 -->
</dependency>
```
### 2. 检查配置(可选)
#### Spring Boot 项目
在 `application.properties` 或 `application.yml` 中:
```properties
# 使用 HttpClient 5.x(推荐,无需配置,已经是默认值)
wx.mp.config-storage.http-client-type=HttpComponents
# 或者继续使用 HttpClient 4.x
wx.mp.config-storage.http-client-type=HttpClient
```
#### 纯 Java 项目
```java
// 使用 HttpClient 5.x(推荐)
WxMpService wxMpService = new WxMpServiceHttpComponentsImpl();
// 或者继续使用 HttpClient 4.x
WxMpService wxMpService = new WxMpServiceHttpClientImpl();
```
### 3. 测试应用
升级后,建议进行全面测试以确保一切正常工作。
## 常见问题
### Q: 升级后会不会破坏现有代码?
A: 不会。项目保持完全向后兼容,HttpClient 4.x 的所有实现都保持不变。
### Q: 我需要修改代码吗?
A: 大多数情况下不需要。如果希望继续使用 HttpClient 4.x,只需在配置中指定 `http-client-type=HttpClient` ,并引入 HttpClient 4.x 依赖即可。
### Q: 我可以在同一个项目中同时使用两个版本吗?
A: 可以。不同的模块可以配置使用不同的 HTTP 客户端。例如,MP 模块使用 HttpClient 5.x,pay 模块部分接口仍使用 HttpClient 4.x,但也可以按需配置为 HttpClient 5.x。
### Q: 如何排除不需要的依赖?
A: 如果只想使用一个版本,可以在 `pom.xml` 中排除另一个:
```xml
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>最新版本</version>
<exclusions>
<!-- 排除 HttpClient 4.x -->
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
</exclusion>
</exclusions>
</dependency>
```
## 配置参考
### Spring Boot 完整配置示例
```properties
# 公众号配置
wx.mp.app-id=your_app_id
wx.mp.secret=your_secret
wx.mp.token=your_token
wx.mp.aes-key=your_aes_key
# HTTP 客户端配置
wx.mp.config-storage.http-client-type=HttpComponents # HttpComponents, HttpClient, OkHttp, JoddHttp
# HTTP 代理配置(可选)
wx.mp.config-storage.http-proxy-host=proxy.example.com
wx.mp.config-storage.http-proxy-port=8080
wx.mp.config-storage.http-proxy-username=proxy_user
wx.mp.config-storage.http-proxy-password=proxy_pass
# 超时配置(可选)
wx.mp.config-storage.connection-timeout=5000
wx.mp.config-storage.so-timeout=5000
wx.mp.config-storage.connection-request-timeout=5000
```
## 技术细节
### HttpClient 4.x 与 5.x 的主要区别
1. **包名变更**:
- HttpClient 4.x: `org.apache.http.*`
- HttpClient 5.x: `org.apache.hc.client5.*`, `org.apache.hc.core5.*`
2. **API 改进**:
- HttpClient 5.x 提供更现代的 API 设计
- 更好的异步支持
- 改进的连接池管理
3. **性能优化**:
- HttpClient 5.x 包含多项性能优化
- 更好的资源管理
### 项目中的实现
WxJava 项目通过策略模式支持多种 HTTP 客户端:
```
weixin-java-common/
├── util/http/
│ ├── apache/ # HttpClient 4.x 实现
│ ├── hc/ # HttpClient 5.x (HttpComponents) 实现
│ ├── okhttp/ # OkHttp 实现
│ └── jodd/ # Jodd-http 实现
```
每个模块都有对应的 Service 实现类:
- `*ServiceHttpClientImpl` - 使用 HttpClient 4.x
- `*ServiceHttpComponentsImpl` - 使用 HttpClient 5.x
- `*ServiceOkHttpImpl` - 使用 OkHttp
- `*ServiceJoddHttpImpl` - 使用 Jodd-http
## 反馈与支持
如果在升级过程中遇到问题,请:
1. 查看 [项目 Wiki](https://github.com/binarywang/WxJava/wiki)
2. 在 [GitHub Issues](https://github.com/binarywang/WxJava/issues) 中搜索或提交问题
3. 加入技术交流群(见 README.md)
## 总结
- ✅ **推荐使用 HttpClient 5.x**:性能更好,功能更强
- ✅ **向后兼容**:可以继续使用 HttpClient 4.x
- ✅ **灵活配置**:支持多种 HTTP 客户端,按需选择
- ✅ **平滑迁移**:无需修改代码,仅需配置,若不使用 HttpClient 5.x ,引入其他依赖即可
================================================
FILE: docs/MINIAPP_KEFU_SERVICE.md
================================================
# WeChat Mini Program Customer Service Management
This document describes the new customer service management functionality added to the WxJava Mini Program SDK.
## Overview
Previously, the mini program module only had:
- `WxMaCustomserviceWorkService` - For binding mini programs to enterprise WeChat customer service
- `WxMaMsgService.sendKefuMsg()` - For sending customer service messages
The new `WxMaKefuService` adds comprehensive customer service management capabilities:
## Features
### Customer Service Account Management
- `kfList()` - Get list of customer service accounts
- `kfAccountAdd()` - Add new customer service account
- `kfAccountUpdate()` - Update customer service account
- `kfAccountDel()` - Delete customer service account
### Session Management
- `kfSessionCreate()` - Create customer service session
- `kfSessionClose()` - Close customer service session
- `kfSessionGet()` - Get customer session status
- `kfSessionList()` - Get customer service session list
## Usage Example
```java
// Get the customer service management service
WxMaKefuService kefuService = wxMaService.getKefuService();
// Add a new customer service account
WxMaKfAccountRequest request = WxMaKfAccountRequest.builder()
.kfAccount("service001@example")
.kfNick("Customer Service 001")
.kfPwd("password123")
.build();
boolean result = kefuService.kfAccountAdd(request);
// Create a session between user and customer service
boolean sessionResult = kefuService.kfSessionCreate("user_openid", "service001@example");
// Get customer service list
WxMaKfList kfList = kefuService.kfList();
```
## Bean Classes
### Request Objects
- `WxMaKfAccountRequest` - For customer service account operations
- `WxMaKfSessionRequest` - For session operations
### Response Objects
- `WxMaKfInfo` - Customer service account information
- `WxMaKfList` - List of customer service accounts
- `WxMaKfSession` - Session information
- `WxMaKfSessionList` - List of sessions
## API Endpoints
The service uses the following WeChat Mini Program API endpoints:
- `https://api.weixin.qq.com/cgi-bin/customservice/getkflist` - Get customer service list
- `https://api.weixin.qq.com/customservice/kfaccount/add` - Add customer service account
- `https://api.weixin.qq.com/customservice/kfaccount/update` - Update customer service account
- `https://api.weixin.qq.com/customservice/kfaccount/del` - Delete customer service account
- `https://api.weixin.qq.com/customservice/kfsession/create` - Create session
- `https://api.weixin.qq.com/customservice/kfsession/close` - Close session
- `https://api.weixin.qq.com/customservice/kfsession/getsession` - Get session
- `https://api.weixin.qq.com/customservice/kfsession/getsessionlist` - Get session list
## Integration
The service is automatically available through the main `WxMaService` interface:
```java
WxMaKefuService kefuService = wxMaService.getKefuService();
```
This fills the gap mentioned in the original issue and provides full customer service management capabilities for WeChat Mini Programs.
================================================
FILE: docs/NEW_TRANSFER_API_SUPPORT.md
================================================
# 微信支付新版商户转账API支持
## 问题解答
**问题**: 新开通的商户号只能使用最新版本的商户转账接口,WxJava是否支持?
**答案**: **WxJava 已经完整支持新版商户转账API!** 从2025年1月15日开始生效的新版转账API已在WxJava中实现。
## 新版转账API特性
### 1. API接口对比
| 特性 | 传统转账API | 新版转账API (2025.1.15+) |
|------|-------------|-------------------------|
| **服务类** | `MerchantTransferService` | `TransferService` |
| **API路径** | `/v3/transfer/batches` | `/v3/fund-app/mch-transfer/transfer-bills` |
| **转账方式** | 批量转账 | 单笔转账 |
| **场景支持** | 基础场景 | 丰富场景(如佣金报酬等) |
| **撤销功能** | ❌ 不支持 | ✅ 支持 |
| **授权模式** | 仅需确认模式 | ✅ 支持免确认授权模式 |
| **适用范围** | 所有商户 | **新开通商户必须使用** |
### 2. 新版API功能列表
✅ **发起转账** - `transferBills()`
✅ **查询转账** - `getBillsByOutBillNo()` / `getBillsByTransferBillNo()`
✅ **撤销转账** - `transformBillsCancel()`
✅ **回调通知** - `parseTransferBillsNotifyResult()`
✅ **RSA加密** - 自动处理用户姓名加密
✅ **场景支持** - 支持多种转账场景ID
✅ **授权模式** - 支持免确认收款授权模式
### 3. 收款授权模式支持
**新增功能:免确认收款授权模式**
- **需确认收款授权模式**(默认):用户需要手动确认才能收款
- **免确认收款授权模式**:用户授权后,收款无需确认,转账直接到账
#### 使用方法
```java
// 免确认授权模式 - 提升用户体验
TransferBillsRequest request = TransferBillsRequest.newBuilder()
.receiptAuthorizationMode(WxPayConstants.ReceiptAuthorizationMode.NO_CONFIRM_RECEIPT_AUTHORIZATION)
// 其他参数...
.build();
// 需确认授权模式(默认)
TransferBillsRequest request2 = TransferBillsRequest.newBuilder()
.receiptAuthorizationMode(WxPayConstants.ReceiptAuthorizationMode.CONFIRM_RECEIPT_AUTHORIZATION)
// 其他参数...
.build();
```
## 快速开始
### 1. 获取服务实例
```java
// 获取WxPayService实例
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(config);
// 获取新版转账服务 - 这就是新开通商户需要使用的服务!
TransferService transferService = wxPayService.getTransferService();
```
### 2. 发起转账(新版API)
```java
// 构建转账请求
TransferBillsRequest request = TransferBillsRequest.newBuilder()
.appid("your_appid") // 应用ID
.outBillNo("T" + System.currentTimeMillis()) // 商户转账单号
.transferSceneId("1005") // 转账场景ID(佣金报酬)
.openid("user_openid") // 用户openid
.userName("张三") // 收款用户姓名(可选,自动加密)
.transferAmount(100) // 转账金额(分)
.transferRemark("佣金报酬") // 转账备注
.build();
// 发起转账
TransferBillsResult result = transferService.transferBills(request);
System.out.println("转账成功,微信转账单号:" + result.getTransferBillNo());
```
### 3. 查询转账结果
```java
// 通过商户单号查询
TransferBillsGetResult result = transferService.getBillsByOutBillNo("T1642567890123");
// 通过微信转账单号查询
TransferBillsGetResult result2 = transferService.getBillsByTransferBillNo("wx_transfer_bill_no");
System.out.println("转账状态:" + result.getState());
```
### 4. 撤销转账(新功能)
```java
// 撤销转账
TransferBillsCancelResult cancelResult = transferService.transformBillsCancel("T1642567890123");
System.out.println("撤销状态:" + cancelResult.getState());
```
## 重要说明
### 转账场景ID (transfer_scene_id)
- **1005**: 佣金报酬(常用场景)
- 其他场景需要在微信商户平台申请
### 转账状态说明
- **ACCEPTED**: 转账已受理
- **PROCESSING**: 转账处理中
- **SUCCESS**: 转账成功
- **FAIL**: 转账失败
- **CANCELLED**: 转账撤销完成
### 新开通商户使用建议
1. **优先使用** `TransferService` (新版API)
2. **不要使用** `MerchantTransferService` (可能不支持)
3. **必须设置** 转账场景ID (`transfer_scene_id`)
4. **建议开启** 回调通知以实时获取转账结果
## 完整示例代码
详细的使用示例请参考:
- 📄 [NEW_TRANSFER_API_USAGE.md](./NEW_TRANSFER_API_USAGE.md) - 详细使用指南
- 💻 [NewTransferApiExample.java](./weixin-java-pay/src/main/java/com/github/binarywang/wxpay/example/NewTransferApiExample.java) - 完整代码示例
## 常见问题
**Q: 我是新开通的商户,应该使用哪个服务?**
A: 使用 `TransferService`,这是专为新版API设计的服务。
**Q: 新版API和旧版API有什么区别?**
A: 新版API使用单笔转账模式,支持更丰富的转账场景,并且支持撤销功能。
**Q: 如何设置转账场景ID?**
A: 在商户平台申请相应场景,常用的佣金报酬场景ID是"1005"。
**Q: 用户姓名需要加密吗?**
A: WxJava会自动处理RSA加密,您只需要传入明文姓名即可。
## 版本要求
- WxJava 版本:4.7.0+
- 支持时间:2025年1月15日+
- 适用商户:所有商户(新开通商户强制使用)
通过以上说明,新开通的微信支付商户可以放心使用WxJava进行商户转账操作!
================================================
FILE: docs/NEW_TRANSFER_API_USAGE.md
================================================
# 微信支付新版商户转账API使用指南
## 概述
从2025年1月15日开始,微信支付推出了新版的商户转账API。新开通的商户号只能使用最新版本的商户转账接口。WxJava 已经完整支持新版转账API。
## API对比
### 传统转账API (仍然支持)
- **服务类**: `MerchantTransferService`
- **API前缀**: `/v3/transfer/batches`
- **特点**: 支持批量转账,一次可以转账给多个用户
### 新版转账API (2025.1.15+)
- **服务类**: `TransferService`
- **API前缀**: `/v3/fund-app/mch-transfer/transfer-bills`
- **特点**: 单笔转账,支持更丰富的转账场景
## 收款授权模式功能
### 授权模式说明
微信支付转账支持两种收款授权模式:
#### 1. 需确认收款授权模式(默认)
- **常量**: `WxPayConstants.ReceiptAuthorizationMode.CONFIRM_RECEIPT_AUTHORIZATION`
- **特点**: 用户收到转账后需要手动点击确认才能到账
- **适用场景**: 一般的转账场景
- **用户体验**: 安全性高,但需要额外操作
#### 2. 免确认收款授权模式
- **常量**: `WxPayConstants.ReceiptAuthorizationMode.NO_CONFIRM_RECEIPT_AUTHORIZATION`
- **特点**: 用户事先授权后,转账直接到账,无需确认
- **适用场景**: 高频转账场景,如佣金发放、返现等
- **用户体验**: 体验流畅,无需额外操作
- **前提条件**: 需要用户事先进行授权
### 使用示例
#### 免确认授权模式转账
```java
TransferBillsRequest request = TransferBillsRequest.newBuilder()
.appid("your_appid")
.outBillNo("NO_CONFIRM_" + System.currentTimeMillis())
.transferSceneId("1005") // 佣金报酬场景
.openid("user_openid")
.transferAmount(200) // 2元
.transferRemark("免确认收款转账")
.receiptAuthorizationMode(WxPayConstants.ReceiptAuthorizationMode.NO_CONFIRM_RECEIPT_AUTHORIZATION)
.userRecvPerception("Y")
.build();
try {
TransferBillsResult result = transferService.transferBills(request);
System.out.println("转账成功,直接到账:" + result.getTransferBillNo());
} catch (WxPayException e) {
if ("USER_NOT_AUTHORIZED".equals(e.getErrCode())) {
System.err.println("用户未授权免确认收款,请先引导用户进行授权");
}
}
```
#### 需确认授权模式转账(默认)
```java
TransferBillsRequest request = TransferBillsRequest.newBuilder()
.appid("your_appid")
.outBillNo("CONFIRM_" + System.currentTimeMillis())
.transferSceneId("1005")
.openid("user_openid")
.transferAmount(150) // 1.5元
.transferRemark("需确认收款转账")
// .receiptAuthorizationMode(...) // 不设置时使用默认的确认模式
.userRecvPerception("Y")
.build();
TransferBillsResult result = transferService.transferBills(request);
System.out.println("转账发起成功,等待用户确认:" + result.getPackageInfo());
```
### 错误处理
使用免确认授权模式时,需要处理以下可能的错误:
```java
try {
TransferBillsResult result = transferService.transferBills(request);
} catch (WxPayException e) {
switch (e.getErrCode()) {
case "USER_NOT_AUTHORIZED":
// 用户未授权免确认收款
System.err.println("请先引导用户进行免确认收款授权");
// 可以引导用户到授权页面
break;
case "AUTHORIZATION_EXPIRED":
// 授权已过期
System.err.println("用户授权已过期,请重新授权");
break;
default:
System.err.println("转账失败:" + e.getMessage());
}
}
```
### 使用建议
1. **高频转账场景**推荐使用免确认模式,提升用户体验
2. **首次使用**需引导用户进行授权
3. **处理异常**妥善处理授权相关异常,提供友好的错误提示
4. **场景选择**根据业务场景选择合适的授权模式
## 使用新版转账API
### 1. 获取服务实例
```java
// 获取WxPayService实例
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(config);
// 获取新版转账服务
TransferService transferService = wxPayService.getTransferService();
```
### 2. 发起转账
```java
// 构建转账请求
TransferBillsRequest request = TransferBillsRequest.newBuilder()
.appid("your_appid") // 应用ID
.outBillNo("T" + System.currentTimeMillis()) // 商户转账单号
.transferSceneId("1005") // 转账场景ID(佣金报酬)
.openid("user_openid") // 用户openid
.userName("张三") // 收款用户姓名(可选,需要加密)
.transferAmount(100) // 转账金额(分)
.transferRemark("佣金报酬") // 转账备注
.notifyUrl("https://your-domain.com/notify") // 回调地址(可选)
.userRecvPerception("Y") // 用户收款感知(可选)
.build();
try {
TransferBillsResult result = transferService.transferBills(request);
System.out.println("转账成功,微信转账单号:" + result.getTransferBillNo());
System.out.println("状态:" + result.getState());
} catch (WxPayException e) {
System.err.println("转账失败:" + e.getMessage());
}
```
### 3. 查询转账结果
```java
// 通过商户单号查询
String outBillNo = "T1642567890123";
TransferBillsGetResult result = transferService.getBillsByOutBillNo(outBillNo);
// 通过微信转账单号查询
String transferBillNo = "1000000000000000000000000001";
TransferBillsGetResult result2 = transferService.getBillsByTransferBillNo(transferBillNo);
System.out.println("转账状态:" + result.getState());
System.out.println("转账金额:" + result.getTransferAmount());
```
### 4. 撤销转账
```java
// 撤销转账(仅在特定状态下可撤销)
String outBillNo = "T1642567890123";
TransferBillsCancelResult cancelResult = transferService.transformBillsCancel(outBillNo);
System.out.println("撤销结果:" + cancelResult.getState());
```
### 5. 处理回调通知
```java
// 在回调接口中处理通知
@PostMapping("/transfer/notify")
public String handleTransferNotify(HttpServletRequest request) throws Exception {
String notifyData = StreamUtils.copyToString(request.getInputStream(), StandardCharsets.UTF_8);
// 构建签名头
SignatureHeader header = new SignatureHeader();
header.setTimeStamp(request.getHeader("Wechatpay-Timestamp"));
header.setNonce(request.getHeader("Wechatpay-Nonce"));
header.setSignature(request.getHeader("Wechatpay-Signature"));
header.setSerial(request.getHeader("Wechatpay-Serial"));
try {
TransferBillsNotifyResult notifyResult = transferService.parseTransferBillsNotifyResult(notifyData, header);
// 处理业务逻辑
String outBillNo = notifyResult.getOutBillNo();
String state = notifyResult.getState();
System.out.println("转账单号:" + outBillNo + ",状态:" + state);
return "SUCCESS";
} catch (WxPayException e) {
System.err.println("验签失败:" + e.getMessage());
return "FAIL";
}
}
```
## 重要参数说明
### 转账场景ID (transfer_scene_id)
- **1005**: 佣金报酬(常用)
- 其他场景ID需要在商户平台申请
### 转账状态
- **PROCESSING**: 转账中
- **SUCCESS**: 转账成功
- **FAILED**: 转账失败
- **REFUNDED**: 已退款
### 用户收款感知 (user_recv_perception)
- **Y**: 用户会收到微信转账通知
- **N**: 用户不会收到微信转账通知
## 新旧API对比总结
| 特性 | 传统API (MerchantTransferService) | 新版API (TransferService) |
|------|----------------------------------|---------------------------|
| 发起方式 | 批量转账 | 单笔转账 |
| API路径 | `/v3/transfer/batches` | `/v3/fund-app/mch-transfer/transfer-bills` |
| 场景支持 | 基础转账场景 | 丰富的转账场景 |
| 回调通知 | 支持 | 支持 |
| 撤销功能 | 不支持 | 支持 |
| 适用商户 | 所有商户 | 新开通商户必须使用 |
## 注意事项
1. **新开通的商户号**: 必须使用新版API (`TransferService`)
2. **转账场景ID**: 需要在商户平台申请相应的转账场景
3. **用户姓名加密**: 如果传入用户姓名,会自动进行RSA加密
4. **回调验签**: 建议开启回调验签以确保安全性
5. **错误处理**: 妥善处理各种异常情况
通过以上指南,您可以轻松使用WxJava的新版商户转账API功能。
================================================
FILE: docs/QUARKUS_SUPPORT.md
================================================
# WxJava Quarkus/GraalVM Native Image Support
## 概述
从 4.7.8.B 版本开始,WxJava 提供了对 Quarkus 和 GraalVM Native Image 的支持。这允许您将使用 WxJava 的应用程序编译为原生可执行文件,从而获得更快的启动速度和更低的内存占用。
## 问题背景
在之前的版本中,使用 Quarkus 构建 Native Image 时会遇到以下错误:
```
Error: Unsupported features in 3 methods
Detailed message:
Error: Detected an instance of Random/SplittableRandom class in the image heap.
Instances created during image generation have cached seed values and don't behave as expected.
The culprit object has been instantiated by the 'org.apache.http.impl.auth.NTLMEngineImpl' class initializer
```
## 解决方案
为了解决这个问题,WxJava 进行了以下改进:
### 1. Random 实例的延迟初始化
所有 `java.util.Random` 实例都已改为延迟初始化,避免在类加载时创建:
- `RandomUtils` - 使用双重检查锁定模式延迟初始化
- `SignUtils` - 使用双重检查锁定模式延迟初始化
- `WxCryptUtil` - 使用双重检查锁定模式延迟初始化
### 2. Native Image 配置
在 `weixin-java-common` 模块中添加了 GraalVM Native Image 配置文件:
- `META-INF/native-image/com.github.binarywang/weixin-java-common/native-image.properties`
- 配置 Apache HttpClient 相关类在运行时初始化,避免在构建时创建 SecureRandom 实例
- `META-INF/native-image/com.github.binarywang/weixin-java-common/reflect-config.json`
- 配置反射访问的类和方法
## 使用方式
### Quarkus 项目配置
在您的 Quarkus 项目中使用 WxJava,只需正常引入依赖即可:
```xml
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId> <!-- 或其他模块 -->
<version>4.7.8.B</version>
</dependency>
```
### 构建 Native Image
使用 Quarkus 构建原生可执行文件:
```bash
./mvnw package -Pnative
```
或使用容器构建:
```bash
./mvnw package -Pnative -Dquarkus.native.container-build=true
```
### GraalVM Native Image
如果直接使用 GraalVM Native Image 工具:
```bash
native-image --no-fallback \
-H:+ReportExceptionStackTraces \
-jar your-application.jar
```
WxJava 的配置文件会自动被 Native Image 工具识别和应用。
## 测试验证
建议在构建 Native Image 后进行以下测试:
1. 验证应用程序可以正常启动
2. 验证微信 API 调用功能正常
3. 验证随机字符串生成功能正常
4. 验证加密/解密功能正常
## 已知限制
- 本配置主要针对 Quarkus 3.x 和 GraalVM 22.x+ 版本进行测试
- 如果使用其他 Native Image 构建工具(如 Spring Native),可能需要额外配置
- 部分反射使用可能需要根据实际使用的 WxJava 功能进行调整
## 问题反馈
如果在使用 Quarkus/GraalVM Native Image 时遇到问题,请通过以下方式反馈:
1. 在 [GitHub Issues](https://github.com/binarywang/WxJava/issues) 提交问题
2. 提供详细的错误信息和 Native Image 构建日志
3. 说明使用的 Quarkus 版本和 GraalVM 版本
## 参考资料
- [Quarkus 官方文档](https://quarkus.io/)
- [GraalVM Native Image 文档](https://www.graalvm.org/latest/reference-manual/native-image/)
- [Quarkus Tips for Writing Native Applications](https://quarkus.io/guides/writing-native-applications-tips)
## 贡献
欢迎提交 PR 完善 Quarkus/GraalVM 支持!如果您发现了新的兼容性问题或有改进建议,请参考 [代码贡献指南](CONTRIBUTING.md)。
================================================
FILE: others/.mvn/wrapper/maven-wrapper.properties
================================================
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.2/apache-maven-3.5.2-bin.zip
================================================
FILE: others/check-dependency-updates.sh
================================================
#!/usr/bin/env bash
./mvnw org.codehaus.mojo:versions-maven-plugin:display-dependency-updates
================================================
FILE: others/check-plugin-updates.sh
================================================
#!/usr/bin/env bash
./mvnw org.codehaus.mojo:versions-maven-plugin:display-plugin-updates
================================================
FILE: others/check-property-updates.sh
================================================
#!/usr/bin/env bash
./mvnw org.codehaus.mojo:versions-maven-plugin:display-property-updates
================================================
FILE: others/mvnw
================================================
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
#
# Look for the Apple JDKs first to preserve the existing behaviour, and then look
# for the new JDKs provided by Oracle.
#
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
#
# Oracle JDKs
#
export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
#
# Apple JDKs
#
export JAVA_HOME=`/usr/libexec/java_home`
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Migwn, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
# TODO classpath?
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
local basedir=$(pwd)
local wdir=$(pwd)
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
wdir=$(cd "$wdir/.."; pwd)
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
# avoid using MAVEN_CMD_LINE_ARGS below since that would loose parameter escaping in $@
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
================================================
FILE: others/mvnw.cmd
================================================
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
set MAVEN_CMD_LINE_ARGS=%MAVEN_CONFIG% %*
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR=""%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar""
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
# avoid using MAVEN_CMD_LINE_ARGS below since that would loose parameter escaping in %*
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%
================================================
FILE: others/weixin-java-config/README.md
================================================
# weixin-java-config
1.目录说明:多配置文件目录
2.项目多配置集锦
```yml
wechat:
pay: #微信服务商支付
configs:
- appId: wxe97b2x9c2b3d #spAppId
mchId: 16486610 #服务商商户
subAppId: wx118cexxe3c07679 #子appId
subMchId: 16496705 #子商户
apiV3Key: Dc1DBwSc094jAKDGR5aqqb7PTHr #apiV3密钥
privateKeyPath: classpath:cert/apiclient_key.pem #服务商证书文件,apiclient_key.pem证书文件的绝对路径或者以classpath:开头的类路径(可以配置绝对路径)
privateCertPath: classpath:cert/apiclient_cert.pem #apiclient_cert.pem证书文件的绝对路径或者以classpath:开头的类路径
miniapp: #小程序
configs:
- appid: wx118ce3xxc76ccg
secret: 8a132a276ee2f8fb58b1ed8f2
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
cp: #企业微信
corpId: wwa3be8efd2addfgj
appConfigs:
- agentId: 10001 #客户联系
secret: T5fTj1n-sBAT4rKNW5c9IYNfPdXZ8-oGol5tX
token: 2bSNqTcLtFYBUa1u2
aesKey: AXazu2Xyw44SNY1x8go2phn9p9B2O9oiEfqPN
- agentId: 10003 #会话内容存档
secret: xIpum7Yt4NMXcyxdzcQ2l_46BG4QIQDR57MhA
token:
aesKey:
- agentId: 3010011 #打卡
secret: 3i2Mhfusifaw_-04bMYI8OoKGxPe9mDALbUxV
token:
aesKey:
- agentId: 19998 #通讯录同步
secret: rNyDae0Pg-3d-wqTd_ozMSJfF0DEjTCz3b_pr
token: xUke8yZciAZqImGZ
aesKey: EUTVyArqJcfnpFiudxjRpuOexNqBoPbwrNG3R
- agentId: 20000 #微盘
secret: D-TVMvUji7PZZdjhZOSgiy2MTuBd0OCdvI_zi
token:
aesKey:
```
3.主要代码
###### 1)微信服务商支付
```java
@Data
@ConfigurationProperties(prefix = "wechat.pay")
public class WxPayProperties {
private List<Config> configs;
@Getter
@Setter
public static class Config {
private String appId;
private String mchId;
private String subAppId;
private String subMchId;
private String apiV3Key;
private String privateKeyPath;
private String privateCertPath;
}
}
```
```java
@Configuration
@EnableConfigurationProperties(WxPayProperties.class)
@AllArgsConstructor
public class WxPayConfiguration {
private WxPayProperties properties;
@Bean
public WxPayService wxPayService() {
// 多配置
WxPayService wxPayService = new WxPayServiceImpl();
Map<String, WxPayConfig> payConfigs = this.properties.getConfigs().stream().map(config -> {
WxPayConfig payConfig = new WxPayConfig();
payConfig.setAppId(StringUtils.trimToNull(config.getAppId()));
payConfig.setMchId(StringUtils.trimToNull(config.getMchId()));
payConfig.setSubAppId(StringUtils.trimToNull(config.getSubAppId()));
payConfig.setSubMchId(StringUtils.trimToNull(config.getSubMchId()));
payConfig.setApiV3Key(StringUtils.trimToNull(config.getApiV3Key()));
payConfig.setPrivateKeyPath(StringUtils.trimToNull(config.getPrivateKeyPath()));
payConfig.setPrivateCertPath(StringUtils.trimToNull(config.getPrivateCertPath()));
// 可以指定是否使用沙箱环境
payConfig.setUseSandboxEnv(false);
return payConfig;
}).collect(Collectors.toMap(config -> config.getSubMchId(), a -> a));
wxPayService.setMultiConfig(payConfigs);
return wxPayService;
}
}
```
###### 2)微信小程序
```java
@Setter
@Getter
@ConfigurationProperties(prefix = "wechat.miniapp")
public class WxMaProperties {
private List<Config> configs;
@Data
public static class Config {
/**
* 设置微信小程序的appid
*/
private String appid;
/**
* 设置微信小程序的Secret
*/
private String secret;
/**
* 设置微信小程序消息服务器配置的token
*/
private String token;
/**
* 设置微信小程序消息服务器配置的EncodingAESKey
*/
private String aesKey;
/**
* 消息格式,XML或者JSON
*/
private String msgDataFormat;
}
}
```
```java
@Configuration
@EnableConfigurationProperties(WxMaProperties.class)
public class WxMaConfiguration {
private WxMaProperties properties;
private static Map<String, WxMaService> maServices;
private static final Map<String, WxMaMessageRouter> routers = Maps.newHashMap();
@Autowired
public WxMaConfiguration(WxMaProperties properties) {
this.properties = properties;
}
public static WxMaService getMaService(String appId) {
WxMaService wxService = maServices.get(appId);
Optional.ofNullable(wxService).orElseThrow(() -> new RuntimeException("没有配置appId"));
return wxService;
}
public static WxMaMessageRouter getRouter(String appId) {
return routers.get(appId);
}
@PostConstruct
public void init() {
List<WxMaProperties.Config> configs = this.properties.getConfigs();
if (configs == null) {
return;
}
maServices = configs.stream().map(a -> {
// 多配置
WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
config.setAppid(a.getAppid());
config.setSecret(a.getSecret());
config.setToken(a.getToken());
config.setAesKey(a.getAesKey());
config.setMsgDataFormat(a.getMsgDataFormat());
WxMaService service = new WxMaServiceImpl();
service.setWxMaConfig(config);
routers.put(a.getAppid(), this.newRouter(service));
return service;
}).collect(Collectors.toMap(s -> s.getWxMaConfig().getAppid(), a -> a));
}
private WxMaMessageRouter newRouter(WxMaService service) {
final WxMaMessageRouter router = new WxMaMessageRouter(service);
router
.rule().handler(logHandler).next()
.rule().async(false).content("订阅消息").handler(subscribeMsgHandler).end()
.rule().async(false).content("文本").handler(textHandler).end()
.rule().async(false).content("图片").handler(picHandler).end()
.rule().async(false).content("二维码").handler(qrcodeHandler).end();
return router;
}
private final WxMaMessageHandler subscribeMsgHandler = (wxMessage, context, service, sessionManager) -> {
service.getMsgService().sendSubscribeMsg(WxMaSubscribeMessage.builder()
.templateId("此处更换为自己的模板id")
.data(Lists.newArrayList(
new WxMaSubscribeMessage.MsgData("keyword1", "339208499")))
.toUser(wxMessage.getFromUser())
.build());
return null;
};
private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> {
log.info("收到logHandler消息:" + wxMessage.toString());
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson())
.toUser(wxMessage.getFromUser()).build());
return null;
};
private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) -> {
log.info("收到textHandler消息:" + wxMessage.toString());
service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息")
.toUser(wxMessage.getFromUser()).build());
return null;
};
private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> {
log.info("收到picHandler消息:" + wxMessage.toString());
try {
WxMediaUploadResult uploadResult = service.getMediaService()
.uploadMedia("image", "png",
ClassLoader.getSystemResourceAsStream("tmp.png"));
service.getMsgService().sendKefuMsg(
WxMaKefuMessage
.newImageBuilder()
.mediaId(uploadResult.getMediaId())
.toUser(wxMessage.getFromUser())
.build());
} catch (WxErrorException e) {
e.printStackTrace();
}
return null;
};
private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> {
log.info("收到qrcodeHandler消息:" + wxMessage.toString());
try {
final File file = service.getQrcodeService().createQrcode("123", 430);
WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file);
service.getMsgService().sendKefuMsg(
WxMaKefuMessage
.newImageBuilder()
.mediaId(uploadResult.getMediaId())
.toUser(wxMessage.getFromUser())
.build());
} catch (WxErrorException e) {
e.printStackTrace();
}
return null;
};
}
```
###### 3)企业微信
```java
@Getter
@Setter
@ConfigurationProperties(prefix = "wechat.cp")
public class WxCpProperties {
/**
* 设置企业微信的corpId
*/
private String corpId;
private List<AppConfig> appConfigs;
@Getter
@Setter
public static class AppConfig {
/**
* 设置企业微信应用的AgentId
*/
private Integer agentId;
/**
* 设置企业微信应用的Secret
*/
private String secret;
/**
* 设置企业微信应用的token
*/
private String token;
/**
* 设置企业微信应用的EncodingAESKey
*/
private String aesKey;
}
}
```
```java
@Configuration
@EnableConfigurationProperties(WxCpProperties.class)
public class WxCpConfiguration {
private LogHandler logHandler;
private NullHandler nullHandler;
private LocationHandler locationHandler;
private MenuHandler menuHandler;
private MsgHandler msgHandler;
private UnsubscribeHandler unsubscribeHandler;
private SubscribeHandler subscribeHandler;
private WxCpProperties properties;
private static Map<Integer, WxCpMessageRouter> routers = Maps.newHashMap();
private static Map<Integer, WxCpService> cpServices = Maps.newHashMap();
@Autowired
public WxCpConfiguration(LogHandler logHandler, NullHandler nullHandler, LocationHandler locationHandler,
MenuHandler menuHandler, MsgHandler msgHandler, UnsubscribeHandler unsubscribeHandler,
SubscribeHandler subscribeHandler, WxCpProperties properties) {
this.logHandler = logHandler;
this.nullHandler = nullHandler;
this.locationHandler = locationHandler;
this.menuHandler = menuHandler;
this.msgHandler = msgHandler;
this.unsubscribeHandler = unsubscribeHandler;
this.subscribeHandler = subscribeHandler;
this.properties = properties;
}
public static Map<Integer, WxCpMessageRouter> getRouters() {
return routers;
}
public static WxCpService getCpService(Integer agentId) {
WxCpService cpService = cpServices.get(agentId);
Optional.ofNullable(cpService).orElseThrow(() -> new RuntimeException("cpService不能为空"));
return cpService;
}
@PostConstruct
public void initServices() {
cpServices = this.properties.getAppConfigs().stream().map(a -> {
val configStorage = new WxCpDefaultConfigImpl();
configStorage.setCorpId(this.properties.getCorpId());
configStorage.setAgentId(a.getAgentId());
configStorage.setCorpSecret(a.getSecret());
configStorage.setToken(a.getToken());
configStorage.setAesKey(a.getAesKey());
val service = new WxCpServiceImpl();
service.setWxCpConfigStorage(configStorage);
routers.put(a.getAgentId(), this.newRouter(service));
return service;
}).collect(Collectors.toMap(service -> service.getWxCpConfigStorage().getAgentId(), a -> a));
}
private WxCpMessageRouter newRouter(WxCpService wxCpService) {
final val newRouter = new WxCpMessageRouter(wxCpService);
// 记录所有事件的日志 (异步执行)
newRouter.rule().handler(this.logHandler).next();
// 自定义菜单事件
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.MenuButtonType.CLICK).handler(this.menuHandler).end();
// 点击菜单链接事件(这里使用了一个空的处理器,可以根据自己需要进行扩展)
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.MenuButtonType.VIEW).handler(this.nullHandler).end();
// 关注事件
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.SUBSCRIBE).handler(this.subscribeHandler)
.end();
// 取消关注事件
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.UNSUBSCRIBE)
.handler(this.unsubscribeHandler).end();
// 上报地理位置事件
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.LOCATION).handler(this.locationHandler)
.end();
// 接收地理位置消息
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.LOCATION)
.handler(this.locationHandler).end();
// 扫码事件(这里使用了一个空的处理器,可以根据自己需要进行扩展)
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.SCAN).handler(this.nullHandler).end();
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxCpConsts.EventType.CHANGE_CONTACT).handler(new ContactChangeHandler()).end();
newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxCpConsts.EventType.ENTER_AGENT).handler(new EnterAgentHandler()).end();
// 默认
newRouter.rule().async(false).handler(this.msgHandler).end();
return newRouter;
}
}
```
4.其他请移步wiki:[GitHub wiki](https://github.com/Wechat-Group/WxJava/wiki)
================================================
FILE: others/weixin-java-osgi/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java</artifactId>
<version>4.6.0</version>
</parent>
<artifactId>weixin-java-osgi</artifactId>
<packaging>bundle</packaging>
<name>WxJava - OSGI</name>
<description>微信Java开发SDK OSGI模块</description>
<dependencies>
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.xmlpull</artifactId>
<version>1.1.3.1_2</version>
</dependency>
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.xpp3</artifactId>
<version>1.1.4c_7</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.21</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>xmlpull</groupId>
<artifactId>xmlpull</artifactId>
</exclusion>
<exclusion>
<groupId>xpp3</groupId>
<artifactId>xpp3_min</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>${httpclient.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-common</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-cp</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.2.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Embed-Dependency>
weixin-java-common;inline=true
,weixin-java-cp;inline=true
,weixin-java-mp;inline=true
,httpcore;inline=true
,httpclient;inline=true
,httpmime;inline=true
,xstream;inline=true
</Embed-Dependency>
<Export-Package>me.chanjar.weixin.*</Export-Package>
<Import-Package>
!org.apache.commons.logging
,com.bea.xml.stream;resolution:=optional
,com.ctc.wstx.stax;resolution:=optional
,javax.xml.namespace;resolution:=optional
,javax.xml.stream;resolution:=optional,
,net.sf.cglib.proxy;resolution:=optional
,nu.xom;resolution:=optional
,org.codehaus.jettison;version="[1.2,2)";resolution:=optional
,org.codehaus.jettison.mapped;version="[1.2,2)";resolution:=optional
,org.dom4j;resolution:=optional
,org.dom4j.io;resolution:=optional
,org.dom4j.tree;resolution:=op
tional,org.jdom;resolution:=optional
,org.jdom.input;resolution:=optional
,org.jdom2;resolution:=optional
,org.jdom2.input;resolution:=optional
,org.joda.time;version="[1.6,2)";resolution:=optional
,org.joda.time.format;version="[1.6,2)";resolution:=optional
,org.kxml2.io;resolution:=optional
,org.w3c.dom;resolution:=optional
,*
</Import-Package>
</instructions>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.dependencymanager.annotation</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: pom.xml
================================================
<?xml version="1.0"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java</artifactId>
<version>4.8.2.B</version>
<packaging>pom</packaging>
<name>WxJava - Weixin/Wechat Java SDK</name>
<description>微信开发Java SDK</description>
<url>https://github.com/Wechat-Group/WxJava</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Daniel Qian</name>
<email>chanjarster@gmail.com</email>
<url>https://github.com/chanjarster</url>
</developer>
<developer>
<name>Binary Wang</name>
<email>binarywang@gmail.com</email>
<url>https://github.com/binarywang</url>
</developer>
<developer>
<name>gaigeshen</name>
<email>gaigeshen@qq.com</email>
<url>https://github.com/gaigeshen</url>
</developer>
<developer>
<name>Liu Mingbo</name>
<email>liumingbo2008@gmail.com</email>
<url>https://github.com/FirenzesEagle</url>
</developer>
<developer>
<name>kakotor</name>
<email>kakotor@gmail.com</email>
<url>https://github.com/kakotor</url>
</developer>
<developer>
<name>xiong</name>
<email>zhaoxiong.tan@gmail.com</email>
<url>https://github.com/ZhaoxiongTan</url>
</developer>
<developer>
<name>LiuJunGuang</name>
<email>aimilin@yeah.net</email>
<url>https://github.com/aimilin6688</url>
</developer>
<developer>
<name>Eric.Tsai</name>
<email>xiaodong.cai.ks@gmail.com</email>
<url>https://github.com/iwareserictsai</url>
</developer>
<developer>
<name>withinthefog</name>
<email>withinthefog@gmail.com</email>
<url>https://github.com/withinthefog</url>
</developer>
<developer>
<name>Keung</name>
<email>dongfuqiang1988@163.com</email>
<url>https://github.com/johnnytung</url>
</developer>
<developer>
<name>Jonk</name>
<email>aimilin@yeah.net</email>
<url>https://github.com/aimilin6688</url>
</developer>
<developer>
<name>ecoolper</name>
<email>crskyp@gmail.com</email>
<url>https://github.com/crskyp</url>
</developer>
<developer>
<name>007</name>
<email>007gzs@gmail.com</email>
<url>https://github.com/007gzs</url>
</developer>
<developer>
<name>Howard Liu</name>
<email>liuxinghao1988@gmail.com</email>
<url>https://github.com/howardliu-cn</url>
</developer>
<developer>
<name>huangxiaoming</name>
<email>huangxm129@163.com</email>
<url>https://github.com/huangxm129</url>
</developer>
<developer>
<name>xiaohe</name>
<email>xiaohe@53jy.net</email>
<url>https://github.com/xiaohe-53</url>
</developer>
<developer>
<name>Wang_Wong</name>
<email>wangkaikate@163.com</email>
<url>https://github.com/0katekate0</url>
</developer>
<developer>
<name>Bincent</name>
<email>hongbin.hsu@qq.com</email>
<url>https://gitee.com/bincent</url>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/Wechat-Group/WxJava.git</connection>
<developerConnection>scm:git:git@github.com:Wechat-Group/WxJava.git</developerConnection>
<url>https://github.com/Wechat-Group/WxJava</url>
</scm>
<modules>
<module>weixin-graal</module>
<module>weixin-java-common</module>
<module>weixin-java-cp</module>
<module>weixin-java-mp</module>
<module>weixin-java-pay</module>
<module>weixin-java-miniapp</module>
<module>weixin-java-open</module>
<module>weixin-java-qidian</module>
<module>weixin-java-channel</module>
<module>spring-boot-starters</module>
<module>solon-plugins</module>
<!--module>weixin-java-osgi</module-->
</modules>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<httpclient.version>4.5.13</httpclient.version>
<httpclient5.version>5.5.2</httpclient5.version>
<jetty.version>9.4.57.v20241219</jetty.version> <!-- 这个不能用10以上的版本,不支持jdk8-->
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>qrcode-utils</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>org.jodd</groupId>
<artifactId>jodd-http</artifactId>
<version>6.3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
<scope>provided</scope>
</dependency>
<!-- HttpClient 5.x - 默认依赖(推荐使用) -->
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>${httpclient5.version}</version>
</dependency>
<!-- HttpClient 4.x - 默认依赖(为了保持向后兼容) -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.18.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.21</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.3.1-jre</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.13.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson</groupId>
<artifactId>jackson-bom</artifactId>
<version>2.18.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 测试所用依赖 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.2.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.5.1</version>
<!-- 这个不能用7.6以上的版本,不支持jdk8-->
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>guice</artifactId>
<groupId>com.google.inject</groupId>
</exclusion>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.11.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-guava</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.dreamhead</groupId>
<artifactId>moco-runner</artifactId>
<version>1.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.jedis-lock</groupId>
<artifactId>jedis-lock</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.23.3</version>
<optional>true</optional>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.jodd</groupId>
<artifactId>jodd-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.reactivestreams</groupId>
<artifactId>reactive-streams</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.3.3.RELEASE</version>
<optional>true</optional>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk18on</artifactId>
<version>1.80</version>
</dependency>
</dependencies>
</dependencyManagement>
<profiles>
<profile>
<id>doclint-java8-disable</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<javadoc.opts>-Xdoclint:none</javadoc.opts>
</properties>
</profile>
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<additionalparam>${javadoc.opts}</additionalparam>
<charset>UTF-8</charset>
<locale>zh_CN</locale>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>native-image</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
</profiles>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>0.7.0</version>
<extensions>true</extensions>
<configuration>
<deploymentName>Release WxJava:${project.version}</deploymentName>
<publishingServerId>central</publishingServerId>
<autoPublish>true</autoPublish>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
<useReleaseProfile>false</useReleaseProfile>
<releaseProfiles>release</releaseProfiles>
<goals>deploy</goals>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
<configuration>
<skip>true</skip>
<configLocation>quality-checks/google_checks.xml</configLocation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
</configuration>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.0</version> <!-- 建议使用最新版本 -->
<executions>
<execution>
<id>attach-sources</id>
<!-- 绑定到 verify 阶段,在 install 之前执行 -->
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal> <!-- 使用 jar-no-fork 效率更高 -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: quality-checks/google_checks.xml
================================================
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://checkstyle.sourceforge.net/dtds/configuration_1_3.dtd">
<module name="Checker">
<property name="charset" value="UTF-8"/>
<property name="severity" value="warning"/>
<property name="fileExtensions" value="java, properties, xml"/>
<module name="FileTabCharacter">
<property name="eachLine" value="true"/>
</module>
<module name="TreeWalker">
<module name="OuterTypeFilename"/>
<module name="IllegalTokenText">
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
<property name="format" value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
<property name="message" value="考虑使用特殊的转义字符,而非八进制值或者Unicode转义值。"/>
</module>
<module name="AvoidEscapedUnicodeCharacters">
<property name="allowEscapesForControlCharacters" value="true"/>
<property name="allowByTailComment" value="true"/>
<property name="allowNonPrintableEscapes" value="true"/>
</module>
<module name="LineLength">
<property name="max" value="120"/>
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
</module>
<module name="OneTopLevelClass"/>
<module name="NoLineWrap"/>
<module name="EmptyBlock">
<property name="option" value="TEXT"/>
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
</module>
<module name="NeedBraces"/>
<module name="LeftCurly">
<property name="maxLineLength" value="120"/>
</module>
<module name="RightCurly">
<property name="id" value="RightCurlySame"/>
<property name="tokens"
value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_DO"/>
</module>
<module name="RightCurly">
<property name="id" value="RightCurlyAlone"/>
<property name="option" value="alone"/>
<property name="tokens"
value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT, INSTANCE_INIT"/>
</module>
<module name="WhitespaceAround">
<property name="allowEmptyConstructors" value="true"/>
<property name="allowEmptyMethods" value="true"/>
<property name="allowEmptyTypes" value="true"/>
<property name="allowEmptyLoops" value="true"/>
<message key="ws.notFollowed"
value="WhitespaceAround: ''{0}''后面没有空格。Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
<message key="ws.notPreceded"
value="WhitespaceAround: ''{0}''前面没有加空格。"/>
</module>
<module name="OneStatementPerLine"/>
<module name="MultipleVariableDeclarations"/>
<module name="ArrayTypeStyle"/>
<module name="MissingSwitchDefault"/>
<module name="FallThrough"/>
<module name="UpperEll"/>
<module name="ModifierOrder"/>
<module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" value="true"/>
</module>
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
<message key="name.invalidPattern"
value="包名 ''{0}'' 必须匹配模式:''{1}''。"/>
</module>
<module name="TypeName">
<message key="name.invalidPattern"
value="类型名 ''{0}'' 必须匹配模式:''{1}''。"/>
</module>
<module name="MemberName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
<message key="name.invalidPattern"
value="Member name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="ParameterName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="参数名''{0}'' 必须匹配模式:''{1}''。"/>
</module>
<module name="LocalVariableName">
<property name="tokens" value="VARIABLE_DEF"/>
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="本地变量名 ''{0}'' 必须匹配模式:''{1}''。"/>
</module>
<module name="ClassTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="类的类型名 ''{0}'' 必须匹配模式:''{1}''。"/>
</module>
<module name="MethodTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="方法类型名 ''{0}'' 必须匹配模式:''{1}''。"/>
</module>
<module name="InterfaceTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Interface type name ''{0}'' 必须匹配模式:''{1}''。"/>
</module>
<module name="NoFinalizer"/>
<module name="GenericWhitespace">
<message key="ws.followed"
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
<message key="ws.preceded"
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
<message key="ws.illegalFollow"
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
<message key="ws.notPreceded"
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
</module>
<module name="AbbreviationAsWordInName">
<property name="ignoreFinal" value="false"/>
<property name="allowedAbbreviationLength" value="1"/>
</module>
<module name="OverloadMethodsDeclarationOrder"/>
<module name="VariableDeclarationUsageDistance"/>
<module name="MethodParamPad"/>
<module name="ParenPad"/>
<module name="OperatorWrap">
<property name="option" value="NL"/>
<property name="tokens"
value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR "/>
</module>
<module name="AnnotationLocation">
<property name="id" value="AnnotationLocationMostCases"/>
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
</module>
<module name="AnnotationLocation">
<property name="id" value="AnnotationLocationVariables"/>
<property name="tokens" value="VARIABLE_DEF"/>
<property name="allowSamelineMultipleAnnotations" value="true"/>
</module>
<module name="NonEmptyAtclauseDescription"/>
<module name="SummaryJavadoc">
<property name="forbiddenSummaryFragments"
value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
</module>
<module name="JavadocParagraph"/>
<module name="AtclauseOrder">
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
<property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
</module>
<module name="JavadocMethod">
<property name="scope" value="public"/>
<property name="allowMissingParamTags" value="true"/>
<property name="allowMissingThrowsTags" value="true"/>
<property name="allowMissingReturnTag" value="true"/>
<property name="minLineCount" value="2"/>
<property name="allowedAnnotations" value="Override, Test"/>
<property name="allowThrowsTagsForSubclasses" value="true"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
<message key="name.invalidPattern"
value="方法名 ''{0}'' 必须匹配模式:''{1}''."/>
</module>
<module name="SingleLineJavadoc">
<property name="ignoreInlineTags" value="false"/>
</module>
<module name="EmptyCatchBlock">
<property name="exceptionVariableName" value="expected"/>
</module>
</module>
</module>
================================================
FILE: solon-plugins/pom.xml
================================================
<?xml version="1.0"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java</artifactId>
<version>4.8.2.B</version>
</parent>
<packaging>pom</packaging>
<artifactId>wx-java-solon-plugins</artifactId>
<name>WxJava - Solon Plugins</name>
<description>WxJava 各个模块的 Solon Plugin</description>
<properties>
<solon.version>3.2.0</solon.version>
</properties>
<modules>
<module>wx-java-miniapp-multi-solon-plugin</module>
<module>wx-java-miniapp-solon-plugin</module>
<module>wx-java-mp-multi-solon-plugin</module>
<module>wx-java-mp-solon-plugin</module>
<module>wx-java-pay-solon-plugin</module>
<module>wx-java-open-solon-plugin</module>
<module>wx-java-qidian-solon-plugin</module>
<module>wx-java-cp-multi-solon-plugin</module>
<module>wx-java-cp-solon-plugin</module>
<module>wx-java-channel-solon-plugin</module>
<module>wx-java-channel-multi-solon-plugin</module>
</modules>
<dependencies>
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon</artifactId>
<version>${solon.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-test</artifactId>
<version>${solon.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/README.md
================================================
# wx-java-channel-multi-solon-plugin
## 快速开始
1. 引入依赖
```xml
<dependencies>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java-channel-multi-solon-plugin</artifactId>
<version>${version}</version>
</dependency>
<!-- 配置存储方式为jedis 则引入jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<!-- 配置存储方式为redisson 则引入redisson -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>${redisson.version}</version>
</dependency>
</dependencies>
```
2. 添加配置(app.properties)
```properties
# 视频号配置
## 应用 1 配置(必填)
wx.channel.apps.tenantId1.app-id=@appId
wx.channel.apps.tenantId1.secret=@secret
## 选填
wx.channel.apps.tenantId1.use-stable-access-token=false
wx.channel.apps.tenantId1.token=
wx.channel.apps.tenantId1.aes-key=
## 应用 2 配置(必填)
wx.channel.apps.tenantId2.app-id=@appId
wx.channel.apps.tenantId2.secret=@secret
## 选填
wx.channel.apps.tenantId2.use-stable-access-token=false
wx.channel.apps.tenantId2.token=
wx.channel.apps.tenantId2.aes-key=
# ConfigStorage 配置(选填)
## 配置类型: memory(默认), jedis, redisson, redis_template
wx.channel.config-storage.type=memory
## 相关redis前缀配置: wx:channel:multi(默认)
wx.channel.config-storage.key-prefix=wx:channel:multi
wx.channel.config-storage.redis.host=127.0.0.1
wx.channel.config-storage.redis.port=6379
wx.channel.config-storage.redis.password=123456
# http 客户端配置(选填)
## # http客户端类型: http_client(默认)
wx.channel.config-storage.http-client-type=http_client
wx.channel.config-storage.http-proxy-host=
wx.channel.config-storage.http-proxy-port=
wx.channel.config-storage.http-proxy-username=
wx.channel.config-storage.http-proxy-password=
## 最大重试次数,默认:5 次,如果小于 0,则为 0
wx.channel.config-storage.max-retry-times=5
## 重试时间间隔步进,默认:1000 毫秒,如果小于 0,则为 1000
wx.channel.config-storage.retry-sleep-millis=1000
```
3. 自动注入的类型:`WxChannelMultiServices`
4. 使用样例
```java
import com.binarywang.solon.wxjava.channel.service.WxChannelMultiServices;
import me.chanjar.weixin.channel.api.WxChannelService;
import me.chanjar.weixin.channel.api.WxFinderLiveService;
import me.chanjar.weixin.channel.bean.lead.component.response.FinderAttrResponse;
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 WxChannelMultiServices wxChannelMultiServices;
public void test() throws WxErrorException {
// 应用 1 的 WxChannelService
WxChannelService wxChannelService1 = wxChannelMultiServices.getWxChannelService("tenantId1");
WxFinderLiveService finderLiveService = wxChannelService1.getFinderLiveService();
FinderAttrResponse response1 = finderLiveService.getFinderAttrByAppid();
// todo ...
// 应用 2 的 WxChannelService
WxChannelService wxChannelService2 = wxChannelMultiServices.getWxChannelService("tenantId2");
WxFinderLiveService finderLiveService2 = wxChannelService2.getFinderLiveService();
FinderAttrResponse response2 = finderLiveService2.getFinderAttrByAppid();
// todo ...
// 应用 3 的 WxChannelService
WxChannelService wxChannelService3 = wxChannelMultiServices.getWxChannelService("tenantId3");
// 判断是否为空
if (wxChannelService3 == null) {
// todo wxChannelService3 为空,请先配置 tenantId3 微信视频号应用参数
return;
}
WxFinderLiveService finderLiveService3 = wxChannelService3.getFinderLiveService();
FinderAttrResponse response3 = finderLiveService3.getFinderAttrByAppid();
// todo ...
}
}
```
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>wx-java-solon-plugins</artifactId>
<groupId>com.github.binarywang</groupId>
<version>4.8.2.B</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>wx-java-channel-multi-solon-plugin</artifactId>
<name>WxJava - Solon Plugin for Channel::支持多账号配置</name>
<description>微信视频号开发的 Solon Plugin::支持多账号配置</description>
<dependencies>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-channel</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jodd</groupId>
<artifactId>jodd-http</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/AbstractWxChannelConfiguration.java
================================================
package com.binarywang.solon.wxjava.channel.configuration.services;
import com.binarywang.solon.wxjava.channel.enums.HttpClientType;
import com.binarywang.solon.wxjava.channel.properties.WxChannelMultiProperties;
import com.binarywang.solon.wxjava.channel.properties.WxChannelSingleProperties;
import com.binarywang.solon.wxjava.channel.service.WxChannelMultiServices;
import com.binarywang.solon.wxjava.channel.service.WxChannelMultiServicesImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.channel.api.WxChannelService;
import me.chanjar.weixin.channel.api.impl.WxChannelServiceHttpComponentsImpl;
import me.chanjar.weixin.channel.api.impl.WxChannelServiceHttpClientImpl;
import me.chanjar.weixin.channel.api.impl.WxChannelServiceImpl;
import me.chanjar.weixin.channel.config.WxChannelConfig;
import me.chanjar.weixin.channel.config.impl.WxChannelDefaultConfigImpl;
import org.apache.commons.lang3.StringUtils;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* WxChannelConfigStorage 抽象配置类
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a> 2024/9/13
* @author noear
*/
@RequiredArgsConstructor
@Slf4j
public abstract class AbstractWxChannelConfiguration {
protected WxChannelMultiServices wxChannelMultiServices(WxChannelMultiProperties wxChannelMultiProperties) {
Map<String, WxChannelSingleProperties> appsMap = wxChannelMultiProperties.getApps();
if (appsMap == null || appsMap.isEmpty()) {
log.warn("微信视频号应用参数未配置,通过 WxChannelMultiServices#getWxChannelService(\"tenantId\")获取实例将返回空");
return new WxChannelMultiServicesImpl();
}
/**
* 校验 appId 是否唯一,避免使用 redis 缓存 token、ticket 时错乱。
*
* 查看 {@link me.chanjar.weixin.channel.config.impl.WxChannelRedisConfigImpl#setAppid(String)}
*/
Collection<WxChannelSingleProperties> apps = appsMap.values();
if (apps.size() > 1) {
// 校验 appId 是否唯一
boolean multi = apps.stream()
// 没有 appId,如果不判断是否为空,这里会报 NPE 异常
.collect(Collectors.groupingBy(c -> c.getAppId() == null ? 0 : c.getAppId(), Collectors.counting()))
.entrySet().stream().anyMatch(e -> e.getValue() > 1);
if (multi) {
throw new RuntimeException("请确保微信视频号配置 appId 的唯一性");
}
}
WxChannelMultiServicesImpl services = new WxChannelMultiServicesImpl();
Set<Map.Entry<String, WxChannelSingleProperties>> entries = appsMap.entrySet();
for (Map.Entry<String, WxChannelSingleProperties> entry : entries) {
String tenantId = entry.getKey();
WxChannelSingleProperties wxChannelSingleProperties = entry.getValue();
WxChannelDefaultConfigImpl storage = this.wxChannelConfigStorage(wxChannelMultiProperties);
this.configApp(storage, wxChannelSingleProperties);
this.configHttp(storage, wxChannelMultiProperties.getConfigStorage());
WxChannelService wxChannelService = this.wxChannelService(storage, wxChannelMultiProperties);
services.addWxChannelService(tenantId, wxChannelService);
}
return services;
}
/**
* 配置 WxChannelDefaultConfigImpl
*
* @param wxChannelMultiProperties 参数
* @return WxChannelDefaultConfigImpl
*/
protected abstract WxChannelDefaultConfigImpl wxChannelConfigStorage(WxChannelMultiProperties wxChannelMultiProperties);
public WxChannelService wxChannelService(WxChannelConfig wxChannelConfig, WxChannelMultiProperties wxChannelMultiProperties) {
WxChannelMultiProperties.ConfigStorage storage = wxChannelMultiProperties.getConfigStorage();
HttpClientType httpClientType = storage.getHttpClientType();
WxChannelService wxChannelService;
switch (httpClientType) {
// case OK_HTTP:
// wxChannelService = new WxChannelServiceOkHttpImpl(false, false);
// break;
case HTTP_CLIENT:
wxChannelService = new WxChannelServiceHttpClientImpl();
break;
case HTTP_COMPONENTS:
wxChannelService = new WxChannelServiceHttpComponentsImpl();
break;
default:
wxChannelService = new WxChannelServiceImpl();
break;
}
wxChannelService.setConfig(wxChannelConfig);
int maxRetryTimes = storage.getMaxRetryTimes();
if (maxRetryTimes < 0) {
maxRetryTimes = 0;
}
int retrySleepMillis = storage.getRetrySleepMillis();
if (retrySleepMillis < 0) {
retrySleepMillis = 1000;
}
wxChannelService.setRetrySleepMillis(retrySleepMillis);
wxChannelService.setMaxRetryTimes(maxRetryTimes);
return wxChannelService;
}
private void configApp(WxChannelDefaultConfigImpl config, WxChannelSingleProperties wxChannelSingleProperties) {
String appId = wxChannelSingleProperties.getAppId();
String appSecret = wxChannelSingleProperties.getSecret();
String token = wxChannelSingleProperties.getToken();
String aesKey = wxChannelSingleProperties.getAesKey();
boolean useStableAccessToken = wxChannelSingleProperties.isUseStableAccessToken();
config.setAppid(appId);
config.setSecret(appSecret);
if (StringUtils.isNotBlank(token)) {
config.setToken(token);
}
if (StringUtils.isNotBlank(aesKey)) {
config.setAesKey(aesKey);
}
config.setStableAccessToken(useStableAccessToken);
}
private void configHttp(WxChannelDefaultConfigImpl config, WxChannelMultiProperties.ConfigStorage storage) {
String httpProxyHost = storage.getHttpProxyHost();
Integer httpProxyPort = storage.getHttpProxyPort();
String httpProxyUsername = storage.getHttpProxyUsername();
String httpProxyPassword = storage.getHttpProxyPassword();
if (StringUtils.isNotBlank(httpProxyHost)) {
config.setHttpProxyHost(httpProxyHost);
if (httpProxyPort != null) {
config.setHttpProxyPort(httpProxyPort);
}
if (StringUtils.isNotBlank(httpProxyUsername)) {
config.setHttpProxyUsername(httpProxyUsername);
}
if (StringUtils.isNotBlank(httpProxyPassword)) {
config.setHttpProxyPassword(httpProxyPassword);
}
}
}
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/WxChannelInJedisConfiguration.java
================================================
package com.binarywang.solon.wxjava.channel.configuration.services;
import com.binarywang.solon.wxjava.channel.properties.WxChannelMultiProperties;
import com.binarywang.solon.wxjava.channel.properties.WxChannelMultiRedisProperties;
import com.binarywang.solon.wxjava.channel.service.WxChannelMultiServices;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.channel.config.impl.WxChannelDefaultConfigImpl;
import me.chanjar.weixin.channel.config.impl.WxChannelRedisConfigImpl;
import me.chanjar.weixin.common.redis.JedisWxRedisOps;
import org.apache.commons.lang3.StringUtils;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.core.AppContext;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* 自动装配基于 jedis 策略配置
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a> 2024/9/13
* @author noear
*/
@Configuration
@Condition(
onProperty = "${"+WxChannelMultiProperties.PREFIX + ".configStorage.type} = jedis",
onClass = JedisPool.class
)
@RequiredArgsConstructor
public class WxChannelInJedisConfiguration extends AbstractWxChannelConfiguration {
private final WxChannelMultiProperties wxChannelMultiProperties;
private final AppContext applicationContext;
@Bean
public WxChannelMultiServices wxChannelMultiServices() {
return this.wxChannelMultiServices(wxChannelMultiProperties);
}
@Override
protected WxChannelDefaultConfigImpl wxChannelConfigStorage(WxChannelMultiProperties wxChannelMultiProperties) {
return this.configRedis(wxChannelMultiProperties);
}
private WxChannelDefaultConfigImpl configRedis(WxChannelMultiProperties wxChannelMultiProperties) {
WxChannelMultiRedisProperties wxChannelMultiRedisProperties = wxChannelMultiProperties.getConfigStorage().getRedis();
JedisPool jedisPool;
if (wxChannelMultiRedisProperties != null && StringUtils.isNotEmpty(wxChannelMultiRedisProperties.getHost())) {
jedisPool = getJedisPool(wxChannelMultiProperties);
} else {
jedisPool = applicationContext.getBean(JedisPool.class);
}
return new WxChannelRedisConfigImpl(new JedisWxRedisOps(jedisPool), wxChannelMultiProperties.getConfigStorage().getKeyPrefix());
}
private JedisPool getJedisPool(WxChannelMultiProperties wxChannelMultiProperties) {
WxChannelMultiProperties.ConfigStorage storage = wxChannelMultiProperties.getConfigStorage();
WxChannelMultiRedisProperties redis = storage.getRedis();
JedisPoolConfig config = new JedisPoolConfig();
if (redis.getMaxActive() != null) {
config.setMaxTotal(redis.getMaxActive());
}
if (redis.getMaxIdle() != null) {
config.setMaxIdle(redis.getMaxIdle());
}
if (redis.getMaxWaitMillis() != null) {
config.setMaxWaitMillis(redis.getMaxWaitMillis());
}
if (redis.getMinIdle() != null) {
config.setMinIdle(redis.getMinIdle());
}
config.setTestOnBorrow(true);
config.setTestWhileIdle(true);
return new JedisPool(config, redis.getHost(), redis.getPort(), redis.getTimeout(), redis.getPassword(), redis.getDatabase());
}
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/WxChannelInMemoryConfiguration.java
================================================
package com.binarywang.solon.wxjava.channel.configuration.services;
import com.binarywang.solon.wxjava.channel.properties.WxChannelMultiProperties;
import com.binarywang.solon.wxjava.channel.service.WxChannelMultiServices;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.channel.config.impl.WxChannelDefaultConfigImpl;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
import redis.clients.jedis.JedisPool;
/**
* 自动装配基于内存策略配置
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a> 2024/9/13
* @author noear
*/
@Configuration
@Condition(
onProperty = "${"+WxChannelMultiProperties.PREFIX + ".configStorage.type} = memory",
onClass = JedisPool.class
)
@RequiredArgsConstructor
public class WxChannelInMemoryConfiguration extends AbstractWxChannelConfiguration {
private final WxChannelMultiProperties wxChannelMultiProperties;
@Bean
public WxChannelMultiServices wxChannelMultiServices() {
return this.wxChannelMultiServices(wxChannelMultiProperties);
}
@Override
protected WxChannelDefaultConfigImpl wxChannelConfigStorage(WxChannelMultiProperties wxChannelMultiProperties) {
return this.configInMemory();
}
private WxChannelDefaultConfigImpl configInMemory() {
return new WxChannelDefaultConfigImpl();
}
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/WxChannelInRedissonConfiguration.java
================================================
package com.binarywang.solon.wxjava.channel.configuration.services;
import com.binarywang.solon.wxjava.channel.properties.WxChannelMultiProperties;
import com.binarywang.solon.wxjava.channel.properties.WxChannelMultiRedisProperties;
import com.binarywang.solon.wxjava.channel.service.WxChannelMultiServices;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.channel.config.impl.WxChannelDefaultConfigImpl;
import me.chanjar.weixin.channel.config.impl.WxChannelRedissonConfigImpl;
import org.apache.commons.lang3.StringUtils;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.core.AppContext;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.TransportMode;
/**
* 自动装配基于 redisson 策略配置
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a> 2024/9/13
* @author noear
*/
@Configuration
@Condition(
onProperty = "${"+WxChannelMultiProperties.PREFIX + ".configStorage.type} = redisson",
onClass = Redisson.class
)
@RequiredArgsConstructor
public class WxChannelInRedissonConfiguration extends AbstractWxChannelConfiguration {
private final WxChannelMultiProperties wxChannelMultiProperties;
private final AppContext applicationContext;
@Bean
public WxChannelMultiServices wxChannelMultiServices() {
return this.wxChannelMultiServices(wxChannelMultiProperties);
}
@Override
protected WxChannelDefaultConfigImpl wxChannelConfigStorage(WxChannelMultiProperties wxChannelMultiProperties) {
return this.configRedisson(wxChannelMultiProperties);
}
private WxChannelDefaultConfigImpl configRedisson(WxChannelMultiProperties wxChannelMultiProperties) {
WxChannelMultiRedisProperties redisProperties = wxChannelMultiProperties.getConfigStorage().getRedis();
RedissonClient redissonClient;
if (redisProperties != null && StringUtils.isNotEmpty(redisProperties.getHost())) {
redissonClient = getRedissonClient(wxChannelMultiProperties);
} else {
redissonClient = applicationContext.getBean(RedissonClient.class);
}
return new WxChannelRedissonConfigImpl(redissonClient, wxChannelMultiProperties.getConfigStorage().getKeyPrefix());
}
private RedissonClient getRedissonClient(WxChannelMultiProperties wxChannelMultiProperties) {
WxChannelMultiProperties.ConfigStorage storage = wxChannelMultiProperties.getConfigStorage();
WxChannelMultiRedisProperties redis = storage.getRedis();
Config config = new Config();
config.useSingleServer().setAddress("redis://" + redis.getHost() + ":" + redis.getPort()).setDatabase(redis.getDatabase()).setPassword(redis.getPassword());
config.setTransportMode(TransportMode.NIO);
return Redisson.create(config);
}
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/HttpClientType.java
================================================
package com.binarywang.solon.wxjava.channel.enums;
/**
* httpclient类型
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a>
* @date 2024/9/13
*/
public enum HttpClientType {
/**
* HttpClient
*/
HTTP_CLIENT,
/**
* HttpComponents
*/
HTTP_COMPONENTS
// WxChannelServiceOkHttpImpl 实现经测试无法正常完成业务固暂不支持OK_HTTP方式
// /**
// * OkHttp.
// */
// OK_HTTP,
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/StorageType.java
================================================
package com.binarywang.solon.wxjava.channel.enums;
/**
* storage类型
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a>
* @date 2024/9/13
*/
public enum StorageType {
/**
* 内存
*/
MEMORY,
/**
* redis(JedisClient)
*/
JEDIS,
/**
* redis(Redisson)
*/
REDISSON,
/**
* redis(RedisTemplate)
*/
REDIS_TEMPLATE
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/integration/WxChannelMultiPluginImpl.java
================================================
package com.binarywang.solon.wxjava.channel.integration;
import com.binarywang.solon.wxjava.channel.configuration.services.WxChannelInJedisConfiguration;
import com.binarywang.solon.wxjava.channel.configuration.services.WxChannelInMemoryConfiguration;
import com.binarywang.solon.wxjava.channel.configuration.services.WxChannelInRedissonConfiguration;
import com.binarywang.solon.wxjava.channel.properties.WxChannelMultiProperties;
import org.noear.solon.core.AppContext;
import org.noear.solon.core.Plugin;
/**
* 微信视频号自动注册
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a> 2024/9/13
* @author noear 2024/10/9 created
*/
public class WxChannelMultiPluginImpl implements Plugin {
@Override
public void start(AppContext context) throws Throwable {
context.beanMake(WxChannelMultiProperties.class);
context.beanMake(WxChannelInJedisConfiguration.class);
context.beanMake(WxChannelInMemoryConfiguration.class);
context.beanMake(WxChannelInRedissonConfiguration.class);
}
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelMultiProperties.java
================================================
package com.binarywang.solon.wxjava.channel.properties;
import com.binarywang.solon.wxjava.channel.enums.HttpClientType;
import com.binarywang.solon.wxjava.channel.enums.StorageType;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
* 微信多视频号接入相关配置属性
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a>
* @date 2024/9/13
*/
@Data
@NoArgsConstructor
@Configuration
@Inject("${" + WxChannelMultiProperties.PREFIX +"}")
public class WxChannelMultiProperties implements Serializable {
private static final long serialVersionUID = - 8361973118805546037L;
public static final String PREFIX = "wx.channel";
private Map<String, WxChannelSingleProperties> apps = new HashMap<>();
/**
* 存储策略
*/
private final ConfigStorage configStorage = new ConfigStorage();
@Data
@NoArgsConstructor
public static class ConfigStorage implements Serializable {
private static final long serialVersionUID = - 5152619132544179942L;
/**
* 存储类型.
*/
private StorageType type = StorageType.MEMORY;
/**
* 指定key前缀.
*/
private String keyPrefix = "wx:channel:multi";
/**
* redis连接配置.
*/
private final WxChannelMultiRedisProperties redis = new WxChannelMultiRedisProperties();
/**
* http客户端类型.
*/
private HttpClientType httpClientType = HttpClientType.HTTP_COMPONENTS;
/**
* http代理主机.
*/
private String httpProxyHost;
/**
* http代理端口.
*/
private Integer httpProxyPort;
/**
* http代理用户名.
*/
private String httpProxyUsername;
/**
* http代理密码.
*/
private String httpProxyPassword;
/**
* http 请求最大重试次数
*
* <p>{@link me.chanjar.weixin.channel.api.WxChannelService#setMaxRetryTimes(int)}</p>
* <p>{@link me.chanjar.weixin.channel.api.impl.BaseWxChannelServiceImpl#setMaxRetryTimes(int)}</p>
*/
private int maxRetryTimes = 5;
/**
* http 请求重试间隔
*
* <p>{@link me.chanjar.weixin.channel.api.WxChannelService#setRetrySleepMillis(int)}</p>
* <p>{@link me.chanjar.weixin.channel.api.impl.BaseWxChannelServiceImpl#setRetrySleepMillis(int)}</p>
*/
private int retrySleepMillis = 1000;
}
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelMultiRedisProperties.java
================================================
package com.binarywang.solon.wxjava.channel.properties;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* Redis配置
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a>
* @date 2024/9/13
*/
@Data
@NoArgsConstructor
public class WxChannelMultiRedisProperties implements Serializable {
private static final long serialVersionUID = 9061055444734277357L;
/**
* 主机地址.
*/
private String host = "127.0.0.1";
/**
* 端口号.
*/
private int port = 6379;
/**
* 密码.
*/
private String password;
/**
* 超时.
*/
private int timeout = 2000;
/**
* 数据库.
*/
private int database = 0;
/**
* 最大活动连接数
*/
private Integer maxActive;
/**
* 最大空闲连接数
*/
private Integer maxIdle;
/**
* 最小空闲连接数
*/
private Integer minIdle;
/**
* 最大等待时间
*/
private Integer maxWaitMillis;
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelSingleProperties.java
================================================
package com.binarywang.solon.wxjava.channel.properties;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 微信视频号相关配置属性
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a>
* @date 2024/9/13
*/
@Data
@NoArgsConstructor
public class WxChannelSingleProperties implements Serializable {
private static final long serialVersionUID = 5306630351265124825L;
/**
* 设置微信视频号的 appid.
*/
private String appId;
/**
* 设置微信视频号的 secret.
*/
private String secret;
/**
* 设置微信视频号的 token.
*/
private String token;
/**
* 设置微信视频号的 EncodingAESKey.
*/
private String aesKey;
/**
* 是否使用稳定版 Access Token
*/
private boolean useStableAccessToken = false;
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/service/WxChannelMultiServices.java
================================================
package com.binarywang.solon.wxjava.channel.service;
import me.chanjar.weixin.channel.api.WxChannelService;
/**
* 视频号 {@link WxChannelService} 所有实例存放类.
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a>
* @date 2024/9/13
*/
public interface WxChannelMultiServices {
/**
* 通过租户 Id 获取 WxChannelService
*
* @param tenantId 租户 Id
* @return WxChannelService
*/
WxChannelService getWxChannelService(String tenantId);
/**
* 根据租户 Id,从列表中移除一个 WxChannelService 实例
*
* @param tenantId 租户 Id
*/
void removeWxChannelService(String tenantId);
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/service/WxChannelMultiServicesImpl.java
================================================
package com.binarywang.solon.wxjava.channel.service;
import me.chanjar.weixin.channel.api.WxChannelService;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 视频号 {@link WxChannelMultiServices} 实现
*
* @author <a href="https://github.com/Winnie-by996">Winnie</a>
* @date 2024/9/13
*/
public class WxChannelMultiServicesImpl implements WxChannelMultiServices {
private final Map<String, WxChannelService> services = new ConcurrentHashMap<>();
@Override
public WxChannelService getWxChannelService(String tenantId) {
return this.services.get(tenantId);
}
/**
* 根据租户 Id,添加一个 WxChannelService 到列表
*
* @param tenantId 租户 Id
* @param wxChannelService WxChannelService 实例
*/
public void addWxChannelService(String tenantId, WxChannelService wxChannelService) {
this.services.put(tenantId, wxChannelService);
}
@Override
public void removeWxChannelService(String tenantId) {
this.services.remove(tenantId);
}
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/resources/META-INF/solon/wx-java-multi-channel-solon-plugin.properties
================================================
solon.plugin=com.binarywang.solon.wxjava.channel.integration.WxChannelMultiPluginImpl
solon.plugin.priority=10
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/test/java/features/test/LoadTest.java
================================================
package features.test;
import org.junit.jupiter.api.Test;
import org.noear.solon.test.SolonTest;
/**
* @author noear 2024/9/4 created
*/
@SolonTest
public class LoadTest {
@Test
public void load(){
}
}
================================================
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/test/resources/app.properties
================================================
# 视频号配置
## 应用 1 配置(必填)
wx.channel.apps.tenantId1.app-id=appId
wx.channel.apps.tenantId1.secret=secret
## 选填
wx.channel.apps.tenantId1.use-stable-access-token=false
wx.channel.apps.tenantId1.token=
wx.channel.apps.tenantId1.aes-key=
## 应用 2 配置(必填)
wx.channel.apps.tenantId2.app-id=@appId
wx.channel.apps.tenantId2.secret=@secret
## 选填
wx.channel.apps.tenantId2.use-stable-access-token=false
wx.channel.apps.tenantId2.token=
wx.channel.apps.tenantId2.aes-key=
# ConfigStorage 配置(选填)
## 配置类型: memory(默认), jedis, redisson, redis_template
wx.channel.config-storage.type=memory
## 相关redis前缀配置: wx:channel:multi(默认)
wx.channel.config-storage.key-prefix=wx:channel:multi
wx.channel.config-storage.redis.host=127.0.0.1
wx.channel.config-storage.redis.port=6379
wx.channel.config-storage.redis.password=123456
# http 客户端配置(选填)
## # http客户端类型: http_client(默认)
wx.channel.config-storage.http-client-type=http_client
wx.channel.config-storage.http-proxy-host=
wx.channel.config-storage.http-proxy-port=
wx.channel.config-storage.http-proxy-username=
wx.channel.config-storage.http-proxy-password=
## 最大重试次数,默认:5 次,如果小于 0,则为 0
wx.channel.config-storage.max-retry-times=5
## 重试时间间隔步进,默认:1000 毫秒,如果小于 0,则为 1000
wx.channel.config-storage.retry-sleep-millis=1000
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/README.md
================================================
# wx-java-channel-solon-plugin
## 快速开始
1. 引入依赖
```xml
<dependencies>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java-channel-solon-plugin</artifactId>
<version>${version}</version>
</dependency>
<!-- 配置存储方式为jedis 则引入jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<!-- 配置存储方式为redisson 则引入redisson -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>${redisson.version}</version>
</dependency>
</dependencies>
```
2. 添加配置(app.properties)
```properties
# 视频号配置(必填)
## 视频号小店的appId和secret
wx.channel.app-id=@appId
wx.channel.secret=@secret
# 视频号配置 选填
## 设置视频号小店消息服务器配置的token
wx.channel.token=@token
## 设置视频号小店消息服务器配置的EncodingAESKey
wx.channel.aes-key=
## 支持JSON或者XML格式,默认JSON
wx.channel.msg-data-format=JSON
## 是否使用稳定版 Access Token
wx.channel.use-stable-access-token=false
# ConfigStorage 配置(选填)
## 配置类型: memory(默认), jedis, redisson, redis_template
wx.channel.config-storage.type=memory
## 相关redis前缀配置: wx:channel(默认)
wx.channel.config-storage.key-prefix=wx:channel
wx.channel.config-storage.redis.host=127.0.0.1
wx.channel.config-storage.redis.port=6379
wx.channel.config-storage.redis.password=123456
# http 客户端配置(选填)
## # http客户端类型: http_client(默认)
wx.channel.config-storage.http-client-type=http_client
wx.channel.config-storage.http-proxy-host=
wx.channel.config-storage.http-proxy-port=
wx.channel.config-storage.http-proxy-username=
wx.channel.config-storage.http-proxy-password=
## 最大重试次数,默认:5 次,如果小于 0,则为 0
wx.channel.config-storage.max-retry-times=5
## 重试时间间隔步进,默认:1000 毫秒,如果小于 0,则为 1000
wx.channel.config-storage.retry-sleep-millis=1000
```
3. 自动注入的类型
- `WxChannelService`
- `WxChannelConfig`
4. 使用样例
```java
import me.chanjar.weixin.channel.api.WxChannelService;
import me.chanjar.weixin.channel.bean.shop.ShopInfoResponse;
import me.chanjar.weixin.channel.util.JsonUtils;
import me.chanjar.weixin.common.error.WxErrorException;
import org.noear.solon.annotation.Inject;
@Component
public class DemoService {
@Inject
private WxChannelService wxChannelService;
public String getShopInfo() throws WxErrorException {
// 获取店铺基本信息
ShopInfoResponse response = wxChannelService.getBasicService().getShopInfo();
// 此处为演示,如果要返回response的结果,建议自己封装一个VO,避免直接返回response
return JsonUtils.encode(response);
}
}
```
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>wx-java-solon-plugins</artifactId>
<groupId>com.github.binarywang</groupId>
<version>4.8.2.B</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>wx-java-channel-solon-plugin</artifactId>
<name>WxJava - Solon Plugin for Channel</name>
<description>微信视频号开发的 Solon Plugin</description>
<dependencies>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-channel</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/WxChannelServiceAutoConfiguration.java
================================================
package com.binarywang.solon.wxjava.channel.config;
import com.binarywang.solon.wxjava.channel.properties.WxChannelProperties;
import lombok.AllArgsConstructor;
import me.chanjar.weixin.channel.api.WxChannelService;
import me.chanjar.weixin.channel.api.impl.WxChannelServiceImpl;
import me.chanjar.weixin.channel.config.WxChannelConfig;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
/**
* 微信小程序平台相关服务自动注册
*
* @author <a href="https://github.com/lixize">Zeyes</a>
*/
@Configuration
@AllArgsConstructor
public class WxChannelServiceAutoConfiguration {
private final WxChannelProperties properties;
/**
* Channel Service
*
* @return Channel Service
*/
@Bean
@Condition(onMissingBean=WxChannelService.class, onBean = WxChannelConfig.class)
public WxChannelService wxChannelService(WxChannelConfig wxChannelConfig) {
WxChannelService wxChannelService = new WxChannelServiceImpl();
wxChannelService.setConfig(wxChannelConfig);
return wxChannelService;
}
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/AbstractWxChannelConfigStorageConfiguration.java
================================================
package com.binarywang.solon.wxjava.channel.config.storage;
import com.binarywang.solon.wxjava.channel.properties.WxChannelProperties;
import me.chanjar.weixin.channel.config.impl.WxChannelDefaultConfigImpl;
import org.apache.commons.lang3.StringUtils;
/**
* @author <a href="https://github.com/lixize">Zeyes</a>
*/
public abstract class AbstractWxChannelConfigStorageConfiguration {
protected WxChannelDefaultConfigImpl config(WxChannelDefaultConfigImpl config, WxChannelProperties properties) {
config.setAppid(StringUtils.trimToNull(properties.getAppid()));
config.setSecret(StringUtils.trimToNull(properties.getSecret()));
config.setToken(StringUtils.trimToNull(properties.getToken()));
config.setAesKey(StringUtils.trimToNull(properties.getAesKey()));
config.setMsgDataFormat(StringUtils.trimToNull(properties.getMsgDataFormat()));
config.setStableAccessToken(properties.isUseStableAccessToken());
WxChannelProperties.ConfigStorage configStorageProperties = properties.getConfigStorage();
config.setHttpProxyHost(configStorageProperties.getHttpProxyHost());
config.setHttpProxyUsername(configStorageProperties.getHttpProxyUsername());
config.setHttpProxyPassword(configStorageProperties.getHttpProxyPassword());
if (configStorageProperties.getHttpProxyPort() != null) {
config.setHttpProxyPort(configStorageProperties.getHttpProxyPort());
}
int maxRetryTimes = configStorageProperties.getMaxRetryTimes();
if (configStorageProperties.getMaxRetryTimes() < 0) {
maxRetryTimes = 0;
}
int retrySleepMillis = configStorageProperties.getRetrySleepMillis();
if (retrySleepMillis < 0) {
retrySleepMillis = 1000;
}
config.setRetrySleepMillis(retrySleepMillis);
config.setMaxRetryTimes(maxRetryTimes);
return config;
}
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/WxChannelInJedisConfigStorageConfiguration.java
================================================
package com.binarywang.solon.wxjava.channel.config.storage;
import com.binarywang.solon.wxjava.channel.properties.RedisProperties;
import com.binarywang.solon.wxjava.channel.properties.WxChannelProperties;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.channel.config.WxChannelConfig;
import me.chanjar.weixin.channel.config.impl.WxChannelRedisConfigImpl;
import me.chanjar.weixin.common.redis.JedisWxRedisOps;
import me.chanjar.weixin.common.redis.WxRedisOps;
import org.apache.commons.lang3.StringUtils;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.core.AppContext;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @author <a href="https://github.com/lixize">Zeyes</a>
* @author noear
*/
@Configuration
@Condition(
onProperty = "${"+WxChannelProperties.PREFIX + ".configStorage.type} = jedis",
onClass = JedisPool.class
)
@RequiredArgsConstructor
public class WxChannelInJedisConfigStorageConfiguration extends AbstractWxChannelConfigStorageConfiguration {
private final WxChannelProperties properties;
private final AppContext applicationContext;
@Bean
@Condition(onMissingBean=WxChannelConfig.class)
public WxChannelConfig wxChannelConfig() {
WxChannelRedisConfigImpl config = getWxChannelRedisConfig();
return this.config(config, properties);
}
private WxChannelRedisConfigImpl getWxChannelRedisConfig() {
RedisProperties redisProperties = properties.getConfigStorage().getRedis();
JedisPool jedisPool;
if (redisProperties != null && StringUtils.isNotEmpty(redisProperties.getHost())) {
jedisPool = getJedisPool();
} else {
jedisPool = applicationContext.getBean(JedisPool.class);
}
WxRedisOps redisOps = new JedisWxRedisOps(jedisPool);
return new WxChannelRedisConfigImpl(redisOps, properties.getConfigStorage().getKeyPrefix());
}
private JedisPool getJedisPool() {
WxChannelProperties.ConfigStorage storage = properties.getConfigStorage();
RedisProperties redis = storage.getRedis();
JedisPoolConfig config = new JedisPoolConfig();
if (redis.getMaxActive() != null) {
config.setMaxTotal(redis.getMaxActive());
}
if (redis.getMaxIdle() != null) {
config.setMaxIdle(redis.getMaxIdle());
}
if (redis.getMaxWaitMillis() != null) {
config.setMaxWaitMillis(redis.getMaxWaitMillis());
}
if (redis.getMinIdle() != null) {
config.setMinIdle(redis.getMinIdle());
}
config.setTestOnBorrow(true);
config.setTestWhileIdle(true);
return new JedisPool(config, redis.getHost(), redis.getPort(), redis.getTimeout(), redis.getPassword(), redis.getDatabase());
}
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/WxChannelInMemoryConfigStorageConfiguration.java
================================================
package com.binarywang.solon.wxjava.channel.config.storage;
import com.binarywang.solon.wxjava.channel.properties.WxChannelProperties;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.channel.config.WxChannelConfig;
import me.chanjar.weixin.channel.config.impl.WxChannelDefaultConfigImpl;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
/**
* @author <a href="https://github.com/lixize">Zeyes</a>
*/
@Configuration
@Condition(
onProperty = "${"+WxChannelProperties.PREFIX + ".configStorage.type:memory} = memory"
)
@RequiredArgsConstructor
public class WxChannelInMemoryConfigStorageConfiguration extends AbstractWxChannelConfigStorageConfiguration {
private final WxChannelProperties properties;
@Bean
@Condition(onMissingBean = WxChannelProperties.class)
public WxChannelConfig wxChannelConfig() {
WxChannelDefaultConfigImpl config = new WxChannelDefaultConfigImpl();
return this.config(config, properties);
}
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/WxChannelInRedissonConfigStorageConfiguration.java
================================================
package com.binarywang.solon.wxjava.channel.config.storage;
import com.binarywang.solon.wxjava.channel.properties.RedisProperties;
import com.binarywang.solon.wxjava.channel.properties.WxChannelProperties;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.channel.config.WxChannelConfig;
import me.chanjar.weixin.channel.config.impl.WxChannelRedissonConfigImpl;
import org.apache.commons.lang3.StringUtils;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.core.AppContext;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.TransportMode;
/**
* @author <a href="https://github.com/lixize">Zeyes</a>
*/
@Configuration
@Condition(
onProperty = "${"+WxChannelProperties.PREFIX + ".configStorage.type} = redisson",
onClass = Redisson.class
)
@RequiredArgsConstructor
public class WxChannelInRedissonConfigStorageConfiguration extends AbstractWxChannelConfigStorageConfiguration {
private final WxChannelProperties properties;
private final AppContext applicationContext;
@Bean
@Condition(onMissingBean=WxChannelConfig.class)
public WxChannelConfig wxChannelConfig() {
WxChannelRedissonConfigImpl config = getWxChannelRedissonConfig();
return this.config(config, properties);
}
private WxChannelRedissonConfigImpl getWxChannelRedissonConfig() {
RedisProperties redisProperties = properties.getConfigStorage().getRedis();
RedissonClient redissonClient;
if (redisProperties != null && StringUtils.isNotEmpty(redisProperties.getHost())) {
redissonClient = getRedissonClient();
} else {
redissonClient = applicationContext.getBean(RedissonClient.class);
}
return new WxChannelRedissonConfigImpl(redissonClient, properties.getConfigStorage().getKeyPrefix());
}
private RedissonClient getRedissonClient() {
WxChannelProperties.ConfigStorage storage = properties.getConfigStorage();
RedisProperties redis = storage.getRedis();
Config config = new Config();
config.useSingleServer()
.setAddress("redis://" + redis.getHost() + ":" + redis.getPort())
.setDatabase(redis.getDatabase())
.setPassword(redis.getPassword());
config.setTransportMode(TransportMode.NIO);
return Redisson.create(config);
}
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/HttpClientType.java
================================================
package com.binarywang.solon.wxjava.channel.enums;
/**
* httpclient类型
*
* @author <a href="https://github.com/lixize">Zeyes</a>
*/
public enum HttpClientType {
/**
* HttpClient.
*/
HttpClient,
/**
* HttpComponents.
*/
HttpComponents,
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/StorageType.java
================================================
package com.binarywang.solon.wxjava.channel.enums;
/**
* storage类型
*
* @author <a href="https://github.com/lixize">Zeyes</a>
*/
public enum StorageType {
/**
* 内存
*/
Memory,
/**
* redis(JedisClient)
*/
Jedis,
/**
* redis(Redisson)
*/
Redisson,
/**
* redis(RedisTemplate)
*/
RedisTemplate
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/integration/WxChannelPluginImpl.java
================================================
package com.binarywang.solon.wxjava.channel.integration;
import com.binarywang.solon.wxjava.channel.config.WxChannelServiceAutoConfiguration;
import com.binarywang.solon.wxjava.channel.config.storage.WxChannelInJedisConfigStorageConfiguration;
import com.binarywang.solon.wxjava.channel.config.storage.WxChannelInMemoryConfigStorageConfiguration;
import com.binarywang.solon.wxjava.channel.config.storage.WxChannelInRedissonConfigStorageConfiguration;
import com.binarywang.solon.wxjava.channel.properties.WxChannelProperties;
import org.noear.solon.core.AppContext;
import org.noear.solon.core.Plugin;
/**
* @author noear 2024/9/2 created
*/
public class WxChannelPluginImpl implements Plugin {
@Override
public void start(AppContext context) throws Throwable {
context.beanMake(WxChannelProperties.class);
context.beanMake(WxChannelServiceAutoConfiguration.class);
context.beanMake(WxChannelInMemoryConfigStorageConfiguration.class);
context.beanMake(WxChannelInJedisConfigStorageConfiguration.class);
context.beanMake(WxChannelInRedissonConfigStorageConfiguration.class);
}
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/RedisProperties.java
================================================
package com.binarywang.solon.wxjava.channel.properties;
import lombok.Data;
/**
* redis 配置
*
* @author <a href="https://github.com/lixize">Zeyes</a>
*/
@Data
public class RedisProperties {
/**
* 主机地址,不填则从solon容器内获取JedisPool
*/
private String host;
/**
* 端口号
*/
private int port = 6379;
/**
* 密码
*/
private String password;
/**
* 超时
*/
private int timeout = 2000;
/**
* 数据库
*/
private int database = 0;
private Integer maxActive;
private Integer maxIdle;
private Integer maxWaitMillis;
private Integer minIdle;
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelProperties.java
================================================
package com.binarywang.solon.wxjava.channel.properties;
import com.binarywang.solon.wxjava.channel.enums.HttpClientType;
import com.binarywang.solon.wxjava.channel.enums.StorageType;
import lombok.Data;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject;
/**
* 属性配置类
*
* @author <a href="https://github.com/lixize">Zeyes</a>
*/
@Data
@Configuration
@Inject("${" + WxChannelProperties.PREFIX +"}")
public class WxChannelProperties {
public static final String PREFIX = "wx.channel";
/**
* 设置视频号小店的appid
*/
private String appid;
/**
* 设置视频号小店的Secret
*/
private String secret;
/**
* 设置视频号小店消息服务器配置的token.
*/
private String token;
/**
* 设置视频号小店消息服务器配置的EncodingAESKey
*/
private String aesKey;
/**
* 消息格式,XML或者JSON
*/
private String msgDataFormat = "JSON";
/**
* 是否使用稳定版 Access Token
*/
private boolean useStableAccessToken = false;
/**
* 存储策略
*/
private final ConfigStorage configStorage = new ConfigStorage();
@Data
public static class ConfigStorage {
/**
* 存储类型
*/
private StorageType type = StorageType.Memory;
/**
* 指定key前缀
*/
private String keyPrefix = "wh";
/**
* redis连接配置
*/
private final RedisProperties redis = new RedisProperties();
/**
* http客户端类型
*/
private HttpClientType httpClientType = HttpClientType.HttpComponents;
/**
* http代理主机
*/
private String httpProxyHost;
/**
* http代理端口
*/
private Integer httpProxyPort;
/**
* http代理用户名
*/
private String httpProxyUsername;
/**
* http代理密码
*/
private String httpProxyPassword;
/**
* http 请求重试间隔
* <pre>
* {@link me.chanjar.weixin.channel.api.BaseWxChannelService#setRetrySleepMillis(int)}
* </pre>
*/
private int retrySleepMillis = 1000;
/**
* http 请求最大重试次数
* <pre>
* {@link me.chanjar.weixin.channel.api.BaseWxChannelService#setMaxRetryTimes(int)}
* </pre>
*/
private int maxRetryTimes = 5;
}
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/resources/META-INF/solon/wx-java-channel-solon-plugin.properties
================================================
solon.plugin=com.binarywang.solon.wxjava.channel.integration.WxChannelPluginImpl
solon.plugin.priority=10
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/test/java/features/test/LoadTest.java
================================================
package features.test;
import org.junit.jupiter.api.Test;
import org.noear.solon.test.SolonTest;
/**
* @author noear 2024/9/4 created
*/
@SolonTest
public class LoadTest {
@Test
public void load(){
}
}
================================================
FILE: solon-plugins/wx-java-channel-solon-plugin/src/test/resources/app.yml
================================================
================================================
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/README.md
================================================
# wx-java-cp-multi-solon-plugin
企业微信多账号配置
- 实现多 WxCpService 初始化。
- 未实现 WxCpTpService 初始化,需要的小伙伴可以参考多 WxCpService 配置的实现。
- 未实现 WxCpCgService 初始化,需要的小伙伴可以参考多 WxCpService 配置的实现。
## 快速开始
1. 引入依赖
```xml
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java-cp-multi-solon-plugin</artifactId>
<version>${version}</version>
</dependency>
```
2. 添加配置(app.properties)
```properties
# 应用 1 配置
wx.cp.corps.tenantId1.corp-id = @corp-id
wx.cp.corps.tenantId1.corp-secret = @corp-secret
## 选填
wx.cp.corps.tenantId1.agent-id = @agent-id
wx.cp.corps.tenantId1.token = @token
wx.cp.corps.tenantId1.aes-key = @aes-key
wx.cp.corps.tenantId1.msg-audit-priKey = @msg-audit-priKey
wx.cp.corps.tenantId1.msg-audit-lib-path = @msg-audit-lib-path
# 应用 2 配置
wx.cp.corps.tenantId2.corp-id = @corp-id
wx.cp.corps.tenantId2.corp-secret = @corp-secret
## 选填
wx.cp.corps.tenantId2.agent-id = @agent-id
wx.cp.corps.tenantId2.token = @token
wx.cp.corps.tenantId2.aes-key = @aes-key
wx.cp.corps.tenantId2.msg-audit-priKey = @msg-audit-priKey
wx.cp.corps.tenantId2.msg-audit-lib-path = @msg-audit-lib-path
# 公共配置
## ConfigStorage 配置(选填)
wx.cp.config-storage.type=memory # 配置类型: memory(默认), jedis, redisson, redistemplate
## http 客户端配置(选填)
## # http客户端类型: http_client(默认), ok_http, jodd_http
wx.cp.config-storage.http-client-type=http_client
wx.cp.config-storage.http-proxy-host=
wx.cp.config-storage.http-proxy-port=
wx.cp.config-storage.http-proxy-username=
wx.cp.config-storage.http-proxy-password=
## 最大重试次数,默认:5 次,如果小于 0,则为 0
wx.cp.config-storage.max-retry-times=5
## 重试时间间隔步进,默认:1000 毫秒,如果小于 0,则为 1000
wx.cp.config-storage.retry-sleep-millis=1000
```
3. 支持自动注入的类型: `WxCpMultiServices`
4. 使用样例
```java
import com.binarywang.solon.wxjava.cp_multi.service.WxCpMultiServices;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.api.WxCpUserService;
import org.noear.solon.annotation.Component;
import org.noear.solon.annotation.Inject;
@Component
public class DemoService {
@Inject
private WxCpMultiServices wxCpMultiServices;
public void test() {
// 应用 1 的 WxCpService
WxCpService wxCpService1 = wxCpMultiServices.getWxCpService("tenantId1");
WxCpUserService userService1 = wxCpService1.getUserService();
userService1.getUserId("xxx");
// todo ...
// 应用 2 的 WxCpService
WxCpService wxCpService2 = wxCpMultiServices.getWxCpService("tenantId2");
WxCpUserService userService2 = wxCpService2.getUserService();
userService2.getUserId("xxx");
// todo ...
// 应用 3 的 WxCpService
WxCpService wxCpService3 = wxCpMultiServices.getWxCpService("tenantId3");
// 判断是否为空
if (wxCpService3 == null) {
// todo wxCpService3 为空,请先配置 tenantId3 企业微信应用参数
return;
}
WxCpUserService userService3 = wxCpService3.getUserService();
userService3.getUserId("xxx");
// todo ...
}
}
```
================================================
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>wx-java-solon-plugins</artifactId>
<groupId>com.github.binarywang</groupId>
<version>4.8.2.B</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>wx-java-cp-multi-solon-plugin</artifactId>
<name>WxJava - Solon Plugin for WxCp::支持多账号配置</name>
<description>微信企业号开发的 Solon Plugin::支持多账号配置</description>
<dependencies>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-cp</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/AbstractWxCpConfiguration.java
================================================
package com.binarywang.solon.wxjava.cp_multi.configuration.services;
import com.binarywang.solon.wxjava.cp_multi.properties.WxCpMultiProperties;
import com.binarywang.solon.wxjava.cp_multi.properties.WxCpSingleProperties;
import com.binarywang.solon.wxjava.cp_multi.service.WxCpMultiServices;
import com.binarywang.solon.wxjava.cp_multi.service.WxCpMultiServicesImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.api.impl.*;
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
import org.apache.commons.lang3.StringUtils;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* WxCpConfigStorage 抽象配置类
*
* @author yl
* created on 2023/10/16
*/
@RequiredArgsConstructor
@Slf4j
public abstract class AbstractWxCpConfiguration {
protected WxCpMultiServices wxCpMultiServices(WxCpMultiProperties wxCpMultiProperties) {
Map<String, WxCpSingleProperties> corps = wxCpMultiProperties.getCorps();
if (corps == null || corps.isEmpty()) {
log.warn("企业微信应用参数未配置,通过 WxCpMultiServices#getWxCpService(\"tenantId\")获取实例将返回空");
return new WxCpMultiServicesImpl();
}
/**
* 校验同一个企业下,agentId 是否唯一,避免使用 redis 缓存 token、ticket 时错乱。
*
* 查看 {@link me.chanjar.weixin.cp.config.impl.AbstractWxCpInRedisConfigImpl#setAgentId(Integer)}
*/
Collection<WxCpSingleProperties> corpList = corps.values();
if (corpList.size() > 1) {
// 先按 corpId 分组统计
Map<String, List<WxCpSingleProperties>> corpsMap = corpList.stream()
.collect(Collectors.groupingBy(WxCpSingleProperties::getCorpId));
Set<Map.Entry<String, List<WxCpSingleProperties>>> entries = corpsMap.entrySet();
for (Map.Entry<String, List<WxCpSingleProperties>> entry : entries) {
String corpId = entry.getKey();
// 校验每个企业下,agentId 是否唯一
boolean multi = entry.getValue().stream()
// 通讯录没有 agentId,如果不判断是否为空,这里会报 NPE 异常
.collect(Collectors.groupingBy(c -> c.getAgentId() == null ? 0 : c.getAgentId(), Collectors.counting()))
.entrySet().stream().anyMatch(e -> e.getValue() > 1);
if (multi) {
throw new RuntimeException("请确保企业微信配置唯一性[" + corpId + "]");
}
}
}
WxCpMultiServicesImpl services = new WxCpMultiServicesImpl();
Set<Map.Entry<String, WxCpSingleProperties>> entries = corps.entrySet();
for (Map.Entry<String, WxCpSingleProperties> entry : entries) {
String tenantId = entry.getKey();
WxCpSingleProperties wxCpSingleProperties = entry.getValue();
WxCpDefaultConfigImpl storage = this.wxCpConfigStorage(wxCpMultiProperties);
this.configCorp(storage, wxCpSingleProperties);
this.configHttp(storage, wxCpMultiProperties.getConfigStorage());
WxCpService wxCpService = this.wxCpService(storage, wxCpMultiProperties.getConfigStorage());
services.addWxCpService(tenantId, wxCpService);
}
return services;
}
/**
* 配置 WxCpDefaultConfigImpl
*
* @param wxCpMultiProperties 参数
* @return WxCpDefaultConfigImpl
*/
protected abstract WxCpDefaultConfigImpl wxCpConfigStorage(WxCpMultiProperties wxCpMultiProperties);
private WxCpService wxCpService(WxCpConfigStorage wxCpConfigStorage, WxCpMultiProperties.ConfigStorage storage) {
WxCpMultiProperties.HttpClientType httpClientType = storage.getHttpClientType();
WxCpService wxCpService;
switch (httpClientType) {
case OK_HTTP:
wxCpService = new WxCpServiceOkHttpImpl();
break;
case JODD_HTTP:
wxCpService = new WxCpServiceJoddHttpImpl();
break;
case HTTP_CLIENT:
wxCpService = new WxCpServiceApacheHttpClientImpl();
break;
case HTTP_COMPONENTS:
wxCpService = new WxCpServiceHttpComponentsImpl();
break;
default:
wxCpService = new WxCpServiceImpl();
break;
}
wxCpService.setWxCpConfigStorage(wxCpConfigStorage);
int maxRetryTimes = storage.getMaxRetryTimes();
if (maxRetryTimes < 0) {
maxRetryTimes = 0;
}
int retrySleepMillis = storage.getRetrySleepMillis();
if (retrySleepMillis < 0) {
retrySleepMillis = 1000;
}
wxCpService.setRetrySleepMillis(retrySleepMillis);
wxCpService.setMaxRetryTimes(maxRetryTimes);
return wxCpService;
}
private void configCorp(WxCpDefaultConfigImpl config, WxCpSingleProperties wxCpSingleProperties) {
String corpId = wxCpSingleProperties.getCorpId();
String corpSecret = wxCpSingleProperties.getCorpSecret();
Integer agentId = wxCpSingleProperties.getAgentId();
String token = wxCpSingleProperties.getToken();
String aesKey = wxCpSingleProperties.getAesKey();
// 企业微信,私钥,会话存档路径
String msgAuditPriKey = wxCpSingleProperties.getMsgAuditPriKey();
String msgAuditLibPath = wxCpSingleProperties.getMsgAuditLibPath();
config.setCorpId(corpId);
config.setCorpSecret(corpSecret);
config.setAgentId(agentId);
if (StringUtils.isNotBlank(token)) {
config.setToken(token);
}
if (StringUtils.isNotBlank(aesKey)) {
config.setAesKey(aesKey);
}
if (StringUtils.isNotBlank(msgAuditPriKey)) {
config.setMsgAuditPriKey(msgAuditPriKey);
}
if (StringUtils.isNotBlank(msgAuditLibPath)) {
config.setMsgAuditLibPath(msgAuditLibPath);
}
}
private void configHttp(WxCpDefaultConfigImpl config, WxCpMultiProperties.ConfigStorage storage) {
String httpProxyHost = storage.getHttpProxyHost();
Integer httpProxyPort = storage.getHttpProxyPort();
String httpProxyUsername = storage.getHttpProxyUsername();
String httpProxyPassword = storage.getHttpProxyPassword();
if (StringUtils.isNotBlank(httpProxyHost)) {
config.setHttpProxyHost(httpProxyHost);
if (httpProxyPort != null) {
config.setHttpProxyPort(httpProxyPort);
}
if (StringUtils.isNotBlank(httpProxyUsername)) {
config.setHttpProxyUsername(httpProxyUsername);
}
if (StringUtils.isNotBlank(httpProxyPassword)) {
config.setHttpProxyPassword(httpProxyPassword);
}
}
}
}
================================================
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/WxCpInJedisConfiguration.java
================================================
package com.binarywang.solon.wxjava.cp_multi.configuration.services;
import com.binarywang.solon.wxjava.cp_multi.properties.WxCpMultiProperties;
import com.binarywang.solon.wxjava.cp_multi.properties.WxCpMultiRedisProperties;
import com.binarywang.solon.wxjava.cp_multi.service.WxCpMultiServices;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
import me.chanjar.weixin.cp.config.impl.WxCpJedisConfigImpl;
import org.apache.commons.lang3.StringUtils;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.core.AppContext;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* 自动装配基于 jedis 策略配置
*
* @author yl
* created on 2023/10/16
*/
@Configuration
@Condition(
onProperty = "${"+WxCpMultiProperties.PREFIX + ".configStorage.type} = jedis",
onClass = JedisPool.class
)
@RequiredArgsConstructor
public class WxCpInJedisConfiguration extends AbstractWxCpConfiguration {
private final WxCpMultiProperties wxCpMultiProperties;
private final AppContext applicationContext;
@Bean
public WxCpMultiServices wxCpMultiServices() {
return this.wxCpMultiServices(wxCpMultiProperties);
}
@Override
protected WxCpDefaultConfigImpl wxCpConfigStorage(WxCpMultiProperties wxCpMultiProperties) {
return this.configRedis(wxCpMultiProperties);
}
private WxCpDefaultConfigImpl configRedis(WxCpMultiProperties wxCpMultiProperties) {
WxCpMultiRedisProperties wxCpMultiRedisProperties = wxCpMultiProperties.getConfigStorage().getRedis();
JedisPool jedisPool;
if (wxCpMultiRedisProperties != null && StringUtils.isNotEmpty(wxCpMultiRedisProperties.getHost())) {
jedisPool = getJedisPool(wxCpMultiProperties);
} else {
jedisPool = applicationContext.getBean(JedisPool.class);
}
return new WxCpJedisConfigImpl(jedisPool, wxCpMultiProperties.getConfigStorage().getKeyPrefix());
}
private JedisPool getJedisPool(WxCpMultiProperties wxCpMultiProperties) {
WxCpMultiProperties.ConfigStorage storage = wxCpMultiProperties.getConfigStorage();
WxCpMultiRedisProperties redis = storage.getRedis();
JedisPoolConfig config = new JedisPoolConfig();
if (redis.getMaxActive() != null) {
config.setMaxTotal(redis.getMaxActive());
}
if (redis.getMaxIdle() != null) {
config.setMaxIdle(redis.getMaxIdle());
}
if (redis.getMaxWaitMillis() != null) {
config.setMaxWaitMillis(redis.getMaxWaitMillis());
}
if (redis.getMinIdle() != null) {
config.setMinIdle(redis.getMinIdle());
}
config.setTestOnBorrow(true);
config.setTestWhileIdle(true);
return new JedisPool(config, redis.getHost(), redis.getPort(),
redis.getTimeout(), redis.getPassword(), redis.getDatabase());
}
}
================================================
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/WxCpInMemoryConfiguration.java
================================================
package com.binarywang.solon.wxjava.cp_multi.configuration.services;
import com.binarywang.solon.wxjava.cp_multi.properties.WxCpMultiProperties;
import com.binarywang.solon.wxjava.cp_multi.service.WxCpMultiServices;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
/**
* 自动装配基于内存策略配置
*
* @author yl
* created on 2023/10/16
*/
@Configuration
@Condition(
onProperty = "${"+WxCpMultiProperties.PREFIX + ".configStorage.type:memory} = memory"
)
@RequiredArgsConstructor
public class WxCpInMemoryConfiguration extends AbstractWxCpConfiguration {
private final WxCpMultiProperties wxCpMultiProperties;
@Bean
public WxCpMultiServices wxCpMultiServices() {
return this.wxCpMultiServices(wxCpMultiProperties);
}
@Override
protected WxCpDefaultConfigImpl wxCpConfigStorage(WxCpMultiProperties wxCpMultiProperties) {
return this.configInMemory();
}
private WxCpDefaultConfigImpl configInMemory() {
return new WxCpDefaultConfigImpl();
}
}
================================================
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/WxCpInRedissonConfiguration.java
================================================
package com.binarywang.solon.wxjava.cp_multi.configuration.services;
import com.binarywang.solon.wxjava.cp_multi.properties.WxCpMultiProperties;
import com.binarywang.solon.wxjava.cp_multi.properties.WxCpMultiRedisProperties;
import com.binarywang.solon.wxjava.cp_multi.service.WxCpMultiServices;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
import me.chanjar.weixin.cp.config.impl.WxCpRedissonConfigImpl;
import org.apache.commons.lang3.StringUtils;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.core.AppContext;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.TransportMode;
/**
* 自动装配基于 redisson 策略配置
*
* @author yl
* created on 2023/10/16
*/
@Configuration
@Condition(
onProperty = "${"+WxCpMultiProperties.PREFIX + ".configStorage.type} = redisson",
onClass = Redisson.class
)
@RequiredArgsConstructor
public class WxCpInRedissonConfiguration extends AbstractWxCpConfiguration {
private final WxCpMultiProperties wxCpMultiProperties;
private final AppContext applicationContext;
@Bean
public WxCpMultiServices wxCpMultiServices() {
return this.wxCpMultiServices(wxCpMultiProperties);
}
@Override
protected WxCpDefaultConfigImpl wxCpConfigStorage(WxCpMultiProperties wxCpMultiProperties) {
return this.configRedisson(wxCpMultiProperties);
}
private WxCpDefaultConfigImpl configRedisson(WxCpMultiProperties wxCpMultiProperties) {
WxCpMultiRedisProperties redisProperties = wxCpMultiProperties.getConfigStorage().getRedis();
RedissonClient redissonClient;
if (redisProperties != null && StringUtils.isNotEmpty(redisProperties.getHost())) {
redissonClient = getRedissonClient(wxCpMultiProperties);
} else {
redissonClient =
Showing preview only (334K chars total). Download the full file or copy to clipboard to get everything.
gitextract_iweq30uq/ ├── .circleci/ │ └── config.yml ├── .editorconfig ├── .gitee/ │ └── ISSUE_TEMPLATE.md ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── agents/ │ │ └── my-agent.agent.md │ ├── copilot-instructions.md │ ├── stale.yml │ └── workflows/ │ └── maven-publish.yml ├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── demo.md ├── docs/ │ ├── CP_MSG_AUDIT_SDK_SAFE_USAGE.md │ ├── CommonUploadParam-FormFields-Usage.md │ ├── HTTPCLIENT_UPGRADE_GUIDE.md │ ├── MINIAPP_KEFU_SERVICE.md │ ├── NEW_TRANSFER_API_SUPPORT.md │ ├── NEW_TRANSFER_API_USAGE.md │ └── QUARKUS_SUPPORT.md ├── others/ │ ├── .mvn/ │ │ └── wrapper/ │ │ └── maven-wrapper.properties │ ├── check-dependency-updates.sh │ ├── check-plugin-updates.sh │ ├── check-property-updates.sh │ ├── mvnw │ ├── mvnw.cmd │ ├── weixin-java-config/ │ │ └── README.md │ └── weixin-java-osgi/ │ └── pom.xml ├── pom.xml ├── quality-checks/ │ └── google_checks.xml ├── solon-plugins/ │ ├── pom.xml │ ├── wx-java-channel-multi-solon-plugin/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── solon/ │ │ │ │ └── wxjava/ │ │ │ │ └── channel/ │ │ │ │ ├── configuration/ │ │ │ │ │ └── services/ │ │ │ │ │ ├── AbstractWxChannelConfiguration.java │ │ │ │ │ ├── WxChannelInJedisConfiguration.java │ │ │ │ │ ├── WxChannelInMemoryConfiguration.java │ │ │ │ │ └── WxChannelInRedissonConfiguration.java │ │ │ │ ├── enums/ │ │ │ │ │ ├── HttpClientType.java │ │ │ │ │ └── StorageType.java │ │ │ │ ├── integration/ │ │ │ │ │ └── WxChannelMultiPluginImpl.java │ │ │ │ ├── properties/ │ │ │ │ │ ├── WxChannelMultiProperties.java │ │ │ │ │ ├── WxChannelMultiRedisProperties.java │ │ │ │ │ └── WxChannelSingleProperties.java │ │ │ │ └── service/ │ │ │ │ ├── WxChannelMultiServices.java │ │ │ │ └── WxChannelMultiServicesImpl.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── solon/ │ │ │ └── wx-java-multi-channel-solon-plugin.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── features/ │ │ │ └── test/ │ │ │ └── LoadTest.java │ │ └── resources/ │ │ └── app.properties │ ├── wx-java-channel-solon-plugin/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── solon/ │ │ │ │ └── wxjava/ │ │ │ │ └── channel/ │ │ │ │ ├── config/ │ │ │ │ │ ├── WxChannelServiceAutoConfiguration.java │ │ │ │ │ └── storage/ │ │ │ │ │ ├── AbstractWxChannelConfigStorageConfiguration.java │ │ │ │ │ ├── WxChannelInJedisConfigStorageConfiguration.java │ │ │ │ │ ├── WxChannelInMemoryConfigStorageConfiguration.java │ │ │ │ │ └── WxChannelInRedissonConfigStorageConfiguration.java │ │ │ │ ├── enums/ │ │ │ │ │ ├── HttpClientType.java │ │ │ │ │ └── StorageType.java │ │ │ │ ├── integration/ │ │ │ │ │ └── WxChannelPluginImpl.java │ │ │ │ └── properties/ │ │ │ │ ├── RedisProperties.java │ │ │ │ └── WxChannelProperties.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── solon/ │ │ │ └── wx-java-channel-solon-plugin.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── features/ │ │ │ └── test/ │ │ │ └── LoadTest.java │ │ └── resources/ │ │ └── app.yml │ ├── wx-java-cp-multi-solon-plugin/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── solon/ │ │ │ │ └── wxjava/ │ │ │ │ └── cp_multi/ │ │ │ │ ├── configuration/ │ │ │ │ │ └── services/ │ │ │ │ │ ├── AbstractWxCpConfiguration.java │ │ │ │ │ ├── WxCpInJedisConfiguration.java │ │ │ │ │ ├── WxCpInMemoryConfiguration.java │ │ │ │ │ └── WxCpInRedissonConfiguration.java │ │ │ │ ├── integration/ │ │ │ │ │ └── WxCpMultiPluginImpl.java │ │ │ │ ├── properties/ │ │ │ │ │ ├── WxCpMultiProperties.java │ │ │ │ │ ├── WxCpMultiRedisProperties.java │ │ │ │ │ └── WxCpSingleProperties.java │ │ │ │ └── service/ │ │ │ │ ├── WxCpMultiServices.java │ │ │ │ └── WxCpMultiServicesImpl.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── solon/ │ │ │ └── wx-java-cp-multi-solon-plugin.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── features/ │ │ │ └── test/ │ │ │ └── LoadTest.java │ │ └── resources/ │ │ └── app.properties │ ├── wx-java-cp-solon-plugin/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── solon/ │ │ │ │ └── wxjava/ │ │ │ │ └── cp/ │ │ │ │ ├── config/ │ │ │ │ │ └── WxCpServiceAutoConfiguration.java │ │ │ │ ├── integration/ │ │ │ │ │ └── WxCpPluginImpl.java │ │ │ │ ├── properties/ │ │ │ │ │ ├── WxCpProperties.java │ │ │ │ │ └── WxCpRedisProperties.java │ │ │ │ └── storage/ │ │ │ │ ├── AbstractWxCpConfigStorageConfiguration.java │ │ │ │ ├── WxCpInJedisConfigStorageConfiguration.java │ │ │ │ ├── WxCpInMemoryConfigStorageConfiguration.java │ │ │ │ └── WxCpInRedissonConfigStorageConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── solon/ │ │ │ └── wx-java-cp-solon-plugin.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── features/ │ │ │ └── test/ │ │ │ └── LoadTest.java │ │ └── resources/ │ │ └── app.properties │ ├── wx-java-miniapp-multi-solon-plugin/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── solon/ │ │ │ │ └── wxjava/ │ │ │ │ └── miniapp/ │ │ │ │ ├── configuration/ │ │ │ │ │ └── services/ │ │ │ │ │ ├── AbstractWxMaConfiguration.java │ │ │ │ │ ├── WxMaInJedisConfiguration.java │ │ │ │ │ ├── WxMaInMemoryConfiguration.java │ │ │ │ │ └── WxMaInRedissonConfiguration.java │ │ │ │ ├── integration/ │ │ │ │ │ └── WxMiniappMultiPluginImpl.java │ │ │ │ ├── properties/ │ │ │ │ │ ├── WxMaMultiProperties.java │ │ │ │ │ ├── WxMaMultiRedisProperties.java │ │ │ │ │ └── WxMaSingleProperties.java │ │ │ │ └── service/ │ │ │ │ ├── WxMaMultiServices.java │ │ │ │ └── WxMaMultiServicesImpl.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── solon/ │ │ │ └── wx-java-miniapp-multi-solon-plugin.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── features/ │ │ │ └── test/ │ │ │ └── LoadTest.java │ │ └── resources/ │ │ └── app.properties │ ├── wx-java-miniapp-solon-plugin/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── solon/ │ │ │ │ └── wxjava/ │ │ │ │ └── miniapp/ │ │ │ │ ├── config/ │ │ │ │ │ ├── WxMaServiceAutoConfiguration.java │ │ │ │ │ └── storage/ │ │ │ │ │ ├── AbstractWxMaConfigStorageConfiguration.java │ │ │ │ │ ├── WxMaInJedisConfigStorageConfiguration.java │ │ │ │ │ ├── WxMaInMemoryConfigStorageConfiguration.java │ │ │ │ │ └── WxMaInRedissonConfigStorageConfiguration.java │ │ │ │ ├── enums/ │ │ │ │ │ ├── HttpClientType.java │ │ │ │ │ └── StorageType.java │ │ │ │ ├── integration/ │ │ │ │ │ └── WxMiniappPluginImpl.java │ │ │ │ └── properties/ │ │ │ │ ├── RedisProperties.java │ │ │ │ └── WxMaProperties.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── solon/ │ │ │ └── wx-java-miniapp-solon-plugin.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── features/ │ │ │ └── test/ │ │ │ └── LoadTest.java │ │ └── resources/ │ │ └── app.properties │ ├── wx-java-mp-multi-solon-plugin/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── solon/ │ │ │ │ └── wxjava/ │ │ │ │ └── mp_multi/ │ │ │ │ ├── configuration/ │ │ │ │ │ └── services/ │ │ │ │ │ ├── AbstractWxMpConfiguration.java │ │ │ │ │ ├── WxMpInJedisConfiguration.java │ │ │ │ │ ├── WxMpInMemoryConfiguration.java │ │ │ │ │ └── WxMpInRedissonConfiguration.java │ │ │ │ ├── integration/ │ │ │ │ │ └── WxMpMultiPluginImpl.java │ │ │ │ ├── properties/ │ │ │ │ │ ├── WxMpMultiProperties.java │ │ │ │ │ ├── WxMpMultiRedisProperties.java │ │ │ │ │ └── WxMpSingleProperties.java │ │ │ │ └── service/ │ │ │ │ ├── WxMpMultiServices.java │ │ │ │ └── WxMpMultiServicesImpl.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── solon/ │ │ │ └── wx-java-mp-multi-solon-plugin.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── features/ │ │ │ └── test/ │ │ │ └── LoadTest.java │ │ └── resources/ │ │ └── app.properties │ ├── wx-java-mp-solon-plugin/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── solon/ │ │ │ │ └── wxjava/ │ │ │ │ └── mp/ │ │ │ │ ├── config/ │ │ │ │ │ ├── WxMpServiceAutoConfiguration.java │ │ │ │ │ └── storage/ │ │ │ │ │ ├── AbstractWxMpConfigStorageConfiguration.java │ │ │ │ │ ├── WxMpInJedisConfigStorageConfiguration.java │ │ │ │ │ ├── WxMpInMemoryConfigStorageConfiguration.java │ │ │ │ │ └── WxMpInRedissonConfigStorageConfiguration.java │ │ │ │ ├── enums/ │ │ │ │ │ ├── HttpClientType.java │ │ │ │ │ └── StorageType.java │ │ │ │ ├── integration/ │ │ │ │ │ └── WxMpPluginImpl.java │ │ │ │ └── properties/ │ │ │ │ ├── HostConfig.java │ │ │ │ ├── RedisProperties.java │ │ │ │ └── WxMpProperties.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── solon/ │ │ │ └── wx-java-mp-solon-plugin.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── features/ │ │ │ └── test/ │ │ │ └── LoadTest.java │ │ └── resources/ │ │ └── app.properties │ ├── wx-java-open-solon-plugin/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── solon/ │ │ │ │ └── wxjava/ │ │ │ │ └── open/ │ │ │ │ ├── config/ │ │ │ │ │ ├── WxOpenServiceAutoConfiguration.java │ │ │ │ │ └── storage/ │ │ │ │ │ ├── AbstractWxOpenConfigStorageConfiguration.java │ │ │ │ │ ├── WxOpenInJedisConfigStorageConfiguration.java │ │ │ │ │ ├── WxOpenInMemoryConfigStorageConfiguration.java │ │ │ │ │ └── WxOpenInRedissonConfigStorageConfiguration.java │ │ │ │ ├── integration/ │ │ │ │ │ └── WxOpenPluginImpl.java │ │ │ │ └── properties/ │ │ │ │ ├── WxOpenProperties.java │ │ │ │ └── WxOpenRedisProperties.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── solon/ │ │ │ └── wx-java-open-solon-plugin.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── features/ │ │ │ └── test/ │ │ │ └── LoadTest.java │ │ └── resources/ │ │ └── app.properties │ ├── wx-java-pay-solon-plugin/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── solon/ │ │ │ │ └── wxjava/ │ │ │ │ └── pay/ │ │ │ │ ├── config/ │ │ │ │ │ └── WxPayAutoConfiguration.java │ │ │ │ ├── integration/ │ │ │ │ │ └── WxPayPluginImpl.java │ │ │ │ └── properties/ │ │ │ │ └── WxPayProperties.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── solon/ │ │ │ └── wx-java-pay-solon-plugin.properties │ │ └── test/ │ │ ├── java/ │ │ │ └── features/ │ │ │ └── test/ │ │ │ └── LoadTest.java │ │ └── resources/ │ │ └── app.yml │ └── wx-java-qidian-solon-plugin/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── solon/ │ │ │ └── wxjava/ │ │ │ └── qidian/ │ │ │ ├── config/ │ │ │ │ ├── WxQidianServiceAutoConfiguration.java │ │ │ │ └── WxQidianStorageAutoConfiguration.java │ │ │ ├── enums/ │ │ │ │ ├── HttpClientType.java │ │ │ │ └── StorageType.java │ │ │ ├── integration/ │ │ │ │ └── WxQidianPluginImpl.java │ │ │ └── properties/ │ │ │ ├── HostConfig.java │ │ │ ├── RedisProperties.java │ │ │ └── WxQidianProperties.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── solon/ │ │ └── wx-java-qidian-solon-plugin.properties │ └── test/ │ ├── java/ │ │ └── features/ │ │ └── test/ │ │ └── LoadTest.java │ └── resources/ │ └── app.yml ├── spring-boot-starters/ │ ├── MULTI_TENANT_MODE_IMPROVEMENT.md │ ├── pom.xml │ ├── wx-java-channel-multi-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── channel/ │ │ │ ├── autoconfigure/ │ │ │ │ └── WxChannelMultiAutoConfiguration.java │ │ │ ├── configuration/ │ │ │ │ ├── WxChannelMultiServiceConfiguration.java │ │ │ │ └── services/ │ │ │ │ ├── AbstractWxChannelConfiguration.java │ │ │ │ ├── WxChannelInJedisConfiguration.java │ │ │ │ ├── WxChannelInMemoryConfiguration.java │ │ │ │ ├── WxChannelInRedisTemplateConfiguration.java │ │ │ │ └── WxChannelInRedissonConfiguration.java │ │ │ ├── enums/ │ │ │ │ ├── HttpClientType.java │ │ │ │ └── StorageType.java │ │ │ ├── properties/ │ │ │ │ ├── WxChannelMultiProperties.java │ │ │ │ ├── WxChannelMultiRedisProperties.java │ │ │ │ └── WxChannelSingleProperties.java │ │ │ └── service/ │ │ │ ├── WxChannelMultiServices.java │ │ │ └── WxChannelMultiServicesImpl.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-channel-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── channel/ │ │ │ ├── config/ │ │ │ │ ├── WxChannelAutoConfiguration.java │ │ │ │ ├── WxChannelServiceAutoConfiguration.java │ │ │ │ ├── WxChannelStorageAutoConfiguration.java │ │ │ │ └── storage/ │ │ │ │ ├── AbstractWxChannelConfigStorageConfiguration.java │ │ │ │ ├── WxChannelInJedisConfigStorageConfiguration.java │ │ │ │ ├── WxChannelInMemoryConfigStorageConfiguration.java │ │ │ │ ├── WxChannelInRedisTemplateConfigStorageConfiguration.java │ │ │ │ └── WxChannelInRedissonConfigStorageConfiguration.java │ │ │ ├── enums/ │ │ │ │ ├── HttpClientType.java │ │ │ │ └── StorageType.java │ │ │ └── properties/ │ │ │ ├── RedisProperties.java │ │ │ └── WxChannelProperties.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-cp-multi-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── cp/ │ │ │ ├── autoconfigure/ │ │ │ │ └── WxCpMultiAutoConfiguration.java │ │ │ ├── configuration/ │ │ │ │ ├── WxCpMultiServicesAutoConfiguration.java │ │ │ │ └── services/ │ │ │ │ ├── AbstractWxCpConfiguration.java │ │ │ │ ├── WxCpInJedisConfiguration.java │ │ │ │ ├── WxCpInMemoryConfiguration.java │ │ │ │ ├── WxCpInRedisTemplateConfiguration.java │ │ │ │ └── WxCpInRedissonConfiguration.java │ │ │ ├── properties/ │ │ │ │ ├── WxCpMultiProperties.java │ │ │ │ ├── WxCpMultiRedisProperties.java │ │ │ │ └── WxCpSingleProperties.java │ │ │ └── service/ │ │ │ ├── WxCpMultiServices.java │ │ │ └── WxCpMultiServicesImpl.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-cp-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── cp/ │ │ │ ├── config/ │ │ │ │ ├── WxCpAutoConfiguration.java │ │ │ │ ├── WxCpServiceAutoConfiguration.java │ │ │ │ └── WxCpStorageAutoConfiguration.java │ │ │ ├── properties/ │ │ │ │ ├── WxCpProperties.java │ │ │ │ └── WxCpRedisProperties.java │ │ │ └── storage/ │ │ │ ├── AbstractWxCpConfigStorageConfiguration.java │ │ │ ├── WxCpInJedisConfigStorageConfiguration.java │ │ │ ├── WxCpInMemoryConfigStorageConfiguration.java │ │ │ ├── WxCpInRedisTemplateConfigStorageConfiguration.java │ │ │ └── WxCpInRedissonConfigStorageConfiguration.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-cp-tp-multi-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── cp/ │ │ │ ├── autoconfigure/ │ │ │ │ └── WxCpTpMultiAutoConfiguration.java │ │ │ ├── configuration/ │ │ │ │ ├── WxCpTpMultiServicesAutoConfiguration.java │ │ │ │ └── services/ │ │ │ │ ├── AbstractWxCpTpConfiguration.java │ │ │ │ ├── WxCpTpInJedisTpConfiguration.java │ │ │ │ ├── WxCpTpInMemoryTpConfiguration.java │ │ │ │ ├── WxCpTpInRedisTemplateTpConfiguration.java │ │ │ │ └── WxCpTpInRedissonTpConfiguration.java │ │ │ ├── properties/ │ │ │ │ ├── WxCpTpMultiProperties.java │ │ │ │ ├── WxCpTpMultiRedisProperties.java │ │ │ │ └── WxCpTpSingleProperties.java │ │ │ └── service/ │ │ │ ├── WxCpTpMultiServices.java │ │ │ └── WxCpTpMultiServicesImpl.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-miniapp-multi-spring-boot-starter/ │ │ ├── MULTI_TENANT_MODE.md │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── miniapp/ │ │ │ ├── autoconfigure/ │ │ │ │ └── WxMaMultiAutoConfiguration.java │ │ │ ├── configuration/ │ │ │ │ ├── WxMaMultiServiceConfiguration.java │ │ │ │ └── services/ │ │ │ │ ├── AbstractWxMaConfiguration.java │ │ │ │ ├── WxMaInJedisConfiguration.java │ │ │ │ ├── WxMaInMemoryConfiguration.java │ │ │ │ ├── WxMaInRedisTemplateConfiguration.java │ │ │ │ └── WxMaInRedissonConfiguration.java │ │ │ ├── properties/ │ │ │ │ ├── WxMaMultiProperties.java │ │ │ │ ├── WxMaMultiRedisProperties.java │ │ │ │ └── WxMaSingleProperties.java │ │ │ └── service/ │ │ │ ├── WxMaMultiServices.java │ │ │ ├── WxMaMultiServicesImpl.java │ │ │ └── WxMaMultiServicesSharedImpl.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-miniapp-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── miniapp/ │ │ │ ├── config/ │ │ │ │ ├── WxMaAutoConfiguration.java │ │ │ │ ├── WxMaServiceAutoConfiguration.java │ │ │ │ ├── WxMaStorageAutoConfiguration.java │ │ │ │ └── storage/ │ │ │ │ ├── AbstractWxMaConfigStorageConfiguration.java │ │ │ │ ├── WxMaInJedisConfigStorageConfiguration.java │ │ │ │ ├── WxMaInMemoryConfigStorageConfiguration.java │ │ │ │ ├── WxMaInRedisTemplateConfigStorageConfiguration.java │ │ │ │ └── WxMaInRedissonConfigStorageConfiguration.java │ │ │ ├── enums/ │ │ │ │ ├── HttpClientType.java │ │ │ │ └── StorageType.java │ │ │ └── properties/ │ │ │ ├── RedisProperties.java │ │ │ └── WxMaProperties.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-mp-multi-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── mp/ │ │ │ ├── autoconfigure/ │ │ │ │ └── WxMpMultiAutoConfiguration.java │ │ │ ├── configuration/ │ │ │ │ ├── WxMpMultiServiceConfiguration.java │ │ │ │ └── services/ │ │ │ │ ├── AbstractWxMpConfiguration.java │ │ │ │ ├── WxMpInJedisConfiguration.java │ │ │ │ ├── WxMpInMemoryConfiguration.java │ │ │ │ ├── WxMpInRedisTemplateConfiguration.java │ │ │ │ └── WxMpInRedissonConfiguration.java │ │ │ ├── properties/ │ │ │ │ ├── WxMpMultiProperties.java │ │ │ │ ├── WxMpMultiRedisProperties.java │ │ │ │ └── WxMpSingleProperties.java │ │ │ └── service/ │ │ │ ├── WxMpMultiServices.java │ │ │ ├── WxMpMultiServicesImpl.java │ │ │ └── WxMpMultiServicesSharedImpl.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-mp-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── mp/ │ │ │ ├── config/ │ │ │ │ ├── WxMpAutoConfiguration.java │ │ │ │ ├── WxMpServiceAutoConfiguration.java │ │ │ │ ├── WxMpStorageAutoConfiguration.java │ │ │ │ └── storage/ │ │ │ │ ├── AbstractWxMpConfigStorageConfiguration.java │ │ │ │ ├── WxMpInJedisConfigStorageConfiguration.java │ │ │ │ ├── WxMpInMemoryConfigStorageConfiguration.java │ │ │ │ ├── WxMpInRedisTemplateConfigStorageConfiguration.java │ │ │ │ └── WxMpInRedissonConfigStorageConfiguration.java │ │ │ ├── enums/ │ │ │ │ ├── HttpClientType.java │ │ │ │ └── StorageType.java │ │ │ └── properties/ │ │ │ ├── HostConfig.java │ │ │ ├── RedisProperties.java │ │ │ └── WxMpProperties.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-open-multi-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── open/ │ │ │ ├── autoconfigure/ │ │ │ │ └── WxOpenMultiAutoConfiguration.java │ │ │ ├── configuration/ │ │ │ │ ├── WxOpenMultiServiceConfiguration.java │ │ │ │ └── services/ │ │ │ │ ├── AbstractWxOpenConfiguration.java │ │ │ │ ├── WxOpenInJedisConfiguration.java │ │ │ │ ├── WxOpenInMemoryConfiguration.java │ │ │ │ ├── WxOpenInRedisTemplateConfiguration.java │ │ │ │ └── WxOpenInRedissonConfiguration.java │ │ │ ├── properties/ │ │ │ │ ├── WxOpenMultiProperties.java │ │ │ │ ├── WxOpenMultiRedisProperties.java │ │ │ │ └── WxOpenSingleProperties.java │ │ │ └── service/ │ │ │ ├── WxOpenMultiServices.java │ │ │ └── WxOpenMultiServicesImpl.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-open-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── open/ │ │ │ ├── config/ │ │ │ │ ├── WxOpenAutoConfiguration.java │ │ │ │ ├── WxOpenServiceAutoConfiguration.java │ │ │ │ ├── WxOpenStorageAutoConfiguration.java │ │ │ │ └── storage/ │ │ │ │ ├── AbstractWxOpenConfigStorageConfiguration.java │ │ │ │ ├── WxOpenInJedisConfigStorageConfiguration.java │ │ │ │ ├── WxOpenInMemoryConfigStorageConfiguration.java │ │ │ │ ├── WxOpenInRedisTemplateConfigStorageConfiguration.java │ │ │ │ └── WxOpenInRedissonConfigStorageConfiguration.java │ │ │ └── properties/ │ │ │ ├── WxOpenProperties.java │ │ │ └── WxOpenRedisProperties.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── wx-java-pay-multi-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── binarywang/ │ │ │ │ └── spring/ │ │ │ │ └── starter/ │ │ │ │ └── wxjava/ │ │ │ │ └── pay/ │ │ │ │ ├── config/ │ │ │ │ │ └── WxPayMultiAutoConfiguration.java │ │ │ │ ├── properties/ │ │ │ │ │ ├── WxPayMultiProperties.java │ │ │ │ │ └── WxPaySingleProperties.java │ │ │ │ └── service/ │ │ │ │ ├── WxPayMultiServices.java │ │ │ │ └── WxPayMultiServicesImpl.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── spring.factories │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── binarywang/ │ │ └── spring/ │ │ └── starter/ │ │ └── wxjava/ │ │ └── pay/ │ │ ├── WxPayMultiServicesTest.java │ │ └── example/ │ │ └── WxPayMultiExample.java │ ├── wx-java-pay-spring-boot-starter/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── binarywang/ │ │ │ └── spring/ │ │ │ └── starter/ │ │ │ └── wxjava/ │ │ │ └── pay/ │ │ │ ├── config/ │ │ │ │ └── WxPayAutoConfiguration.java │ │ │ └── properties/ │ │ │ └── WxPayProperties.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ └── wx-java-qidian-spring-boot-starter/ │ ├── README.md │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── binarywang/ │ │ └── spring/ │ │ └── starter/ │ │ └── wxjava/ │ │ └── qidian/ │ │ ├── config/ │ │ │ ├── WxQidianAutoConfiguration.java │ │ │ ├── WxQidianServiceAutoConfiguration.java │ │ │ └── WxQidianStorageAutoConfiguration.java │ │ ├── enums/ │ │ │ ├── HttpClientType.java │ │ │ └── StorageType.java │ │ └── properties/ │ │ ├── HostConfig.java │ │ ├── RedisProperties.java │ │ └── WxQidianProperties.java │ └── resources/ │ └── META-INF/ │ ├── spring/ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ └── spring.factories ├── weixin-graal/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── github/ │ │ └── binarywang/ │ │ └── wx/ │ │ └── graal/ │ │ └── GraalProcessor.java │ └── resources/ │ └── META-INF/ │ └── services/ │ └── javax.annotation.processing.Processor ├── weixin-java-channel/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── me/ │ │ └── chanjar/ │ │ └── weixin/ │ │ └── channel/ │ │ ├── api/ │ │ │ ├── BaseWxChannelMessageService.java │ │ │ ├── BaseWxChannelService.java │ │ │ ├── WxAssistantService.java │ │ │ ├── WxChannelAddressService.java │ │ │ ├── WxChannelAfterSaleService.java │ │ │ ├── WxChannelBasicService.java │ │ │ ├── WxChannelBrandService.java │ │ │ ├── WxChannelCategoryService.java │ │ │ ├── WxChannelCompassFinderService.java │ │ │ ├── WxChannelCompassShopService.java │ │ │ ├── WxChannelCouponService.java │ │ │ ├── WxChannelFreightTemplateService.java │ │ │ ├── WxChannelFundService.java │ │ │ ├── WxChannelLiveDashboardService.java │ │ │ ├── WxChannelOrderService.java │ │ │ ├── WxChannelProductService.java │ │ │ ├── WxChannelService.java │ │ │ ├── WxChannelSharerService.java │ │ │ ├── WxChannelVipService.java │ │ │ ├── WxChannelWarehouseService.java │ │ │ ├── WxFinderLiveService.java │ │ │ ├── WxLeadComponentService.java │ │ │ ├── WxLeagueProductService.java │ │ │ ├── WxLeaguePromoterService.java │ │ │ ├── WxLeagueSupplierService.java │ │ │ ├── WxLeagueWindowService.java │ │ │ ├── WxStoreCooperationService.java │ │ │ ├── WxStoreHomePageService.java │ │ │ └── impl/ │ │ │ ├── BaseWxChannelMessageServiceImpl.java │ │ │ ├── BaseWxChannelServiceImpl.java │ │ │ ├── WxAssistantServiceImpl.java │ │ │ ├── WxChannelAddressServiceImpl.java │ │ │ ├── WxChannelAfterSaleServiceImpl.java │ │ │ ├── WxChannelBasicServiceImpl.java │ │ │ ├── WxChannelBrandServiceImpl.java │ │ │ ├── WxChannelCategoryServiceImpl.java │ │ │ ├── WxChannelCompassFinderServiceImpl.java │ │ │ ├── WxChannelCompassShopServiceImpl.java │ │ │ ├── WxChannelCouponServiceImpl.java │ │ │ ├── WxChannelFreightTemplateServiceImpl.java │ │ │ ├── WxChannelFundServiceImpl.java │ │ │ ├── WxChannelLiveDashboardServiceImpl.java │ │ │ ├── WxChannelOrderServiceImpl.java │ │ │ ├── WxChannelProductServiceImpl.java │ │ │ ├── WxChannelServiceHttpClientImpl.java │ │ │ ├── WxChannelServiceHttpComponentsImpl.java │ │ │ ├── WxChannelServiceImpl.java │ │ │ ├── WxChannelServiceOkHttpImpl.java │ │ │ ├── WxChannelSharerServiceImpl.java │ │ │ ├── WxChannelVipServiceImpl.java │ │ │ ├── WxChannelWarehouseServiceImpl.java │ │ │ ├── WxFinderLiveServiceImpl.java │ │ │ ├── WxLeadComponentServiceImpl.java │ │ │ ├── WxLeagueProductServiceImpl.java │ │ │ ├── WxLeaguePromoterServiceImpl.java │ │ │ ├── WxLeagueSupplierServiceImpl.java │ │ │ ├── WxLeagueWindowServiceImpl.java │ │ │ ├── WxStoreCooperationServiceImpl.java │ │ │ └── WxStoreHomePageServiceImpl.java │ │ ├── bean/ │ │ │ ├── address/ │ │ │ │ ├── AddressAddParam.java │ │ │ │ ├── AddressCode.java │ │ │ │ ├── AddressCodeResponse.java │ │ │ │ ├── AddressDetail.java │ │ │ │ ├── AddressIdParam.java │ │ │ │ ├── AddressIdResponse.java │ │ │ │ ├── AddressInfoResponse.java │ │ │ │ ├── AddressListParam.java │ │ │ │ ├── AddressListResponse.java │ │ │ │ └── OfflineAddressType.java │ │ │ ├── after/ │ │ │ │ ├── AfterSaleAcceptExchangeReshipParam.java │ │ │ │ ├── AfterSaleAcceptParam.java │ │ │ │ ├── AfterSaleDetail.java │ │ │ │ ├── AfterSaleExchangeDeliveryInfo.java │ │ │ │ ├── AfterSaleExchangeProductInfo.java │ │ │ │ ├── AfterSaleIdParam.java │ │ │ │ ├── AfterSaleInfo.java │ │ │ │ ├── AfterSaleInfoResponse.java │ │ │ │ ├── AfterSaleListParam.java │ │ │ │ ├── AfterSaleListResponse.java │ │ │ │ ├── AfterSaleMerchantUpdateParam.java │ │ │ │ ├── AfterSaleProductInfo.java │ │ │ │ ├── AfterSaleReason.java │ │ │ │ ├── AfterSaleReasonResponse.java │ │ │ │ ├── AfterSaleRejectExchangeReshipParam.java │ │ │ │ ├── AfterSaleRejectParam.java │ │ │ │ ├── AfterSaleRejectReason.java │ │ │ │ ├── AfterSaleRejectReasonResponse.java │ │ │ │ ├── AfterSaleReturnParam.java │ │ │ │ ├── AfterSaleVirtualNumberInfo.java │ │ │ │ ├── MerchantUploadInfo.java │ │ │ │ ├── RefundEvidenceParam.java │ │ │ │ ├── RefundInfo.java │ │ │ │ ├── RefundResp.java │ │ │ │ └── ReturnInfo.java │ │ │ ├── audit/ │ │ │ │ ├── AuditApplyResponse.java │ │ │ │ ├── AuditResponse.java │ │ │ │ ├── AuditResult.java │ │ │ │ ├── CategoryAuditInfo.java │ │ │ │ ├── CategoryAuditRequest.java │ │ │ │ ├── CategoryBrand.java │ │ │ │ ├── CatsV2.java │ │ │ │ └── ProductAuditInfo.java │ │ │ ├── base/ │ │ │ │ ├── AddressInfo.java │ │ │ │ ├── AttrInfo.java │ │ │ │ ├── OffsetParam.java │ │ │ │ ├── PageParam.java │ │ │ │ ├── StreamPageParam.java │ │ │ │ ├── TimeRange.java │ │ │ │ └── WxChannelBaseResponse.java │ │ │ ├── brand/ │ │ │ │ ├── BasicBrand.java │ │ │ │ ├── Brand.java │ │ │ │ ├── BrandApplicationDetail.java │ │ │ │ ├── BrandApplyListResponse.java │ │ │ │ ├── BrandGrantDetail.java │ │ │ │ ├── BrandInfo.java │ │ │ │ ├── BrandInfoResponse.java │ │ │ │ ├── BrandListResponse.java │ │ │ │ ├── BrandParam.java │ │ │ │ ├── BrandRegisterDetail.java │ │ │ │ └── BrandSearchParam.java │ │ │ ├── category/ │ │ │ │ ├── AccountCategoryResponse.java │ │ │ │ ├── CategoryAndQualificationList.java │ │ │ │ ├── CategoryDetailResult.java │ │ │ │ ├── CategoryQualification.java │ │ │ │ ├── CategoryQualificationResponse.java │ │ │ │ ├── PassCategoryInfo.java │ │ │ │ ├── PassCategoryResponse.java │ │ │ │ ├── QualificationInfo.java │ │ │ │ ├── RelationCategoryItem.java │ │ │ │ ├── RelationCategoryRequest.java │ │ │ │ ├── RelationCategoryResponse.java │ │ │ │ ├── ShopCategory.java │ │ │ │ └── ShopCategoryResponse.java │ │ │ ├── compass/ │ │ │ │ ├── CompassFinderBaseParam.java │ │ │ │ ├── finder/ │ │ │ │ │ ├── Field.java │ │ │ │ │ ├── FieldData.java │ │ │ │ │ ├── Overall.java │ │ │ │ │ ├── OverallResponse.java │ │ │ │ │ ├── ProductCompassData.java │ │ │ │ │ ├── ProductDataParam.java │ │ │ │ │ ├── ProductDataResponse.java │ │ │ │ │ ├── ProductInfo.java │ │ │ │ │ ├── ProductListResponse.java │ │ │ │ │ ├── SaleProfileData.java │ │ │ │ │ ├── SaleProfileDataParam.java │ │ │ │ │ └── SaleProfileDataResponse.java │ │ │ │ └── shop/ │ │ │ │ ├── CompassFinderIdParam.java │ │ │ │ ├── FinderAuthListResponse.java │ │ │ │ ├── FinderGmvData.java │ │ │ │ ├── FinderGmvItem.java │ │ │ │ ├── FinderListResponse.java │ │ │ │ ├── FinderOverallData.java │ │ │ │ ├── FinderOverallResponse.java │ │ │ │ ├── FinderProductListItem.java │ │ │ │ ├── FinderProductListResponse.java │ │ │ │ ├── FinderProductOverallResponse.java │ │ │ │ ├── FinderProductSimpleGmvData.java │ │ │ │ ├── ShopField.java │ │ │ │ ├── ShopLiveData.java │ │ │ │ ├── ShopLiveListResponse.java │ │ │ │ ├── ShopOverall.java │ │ │ │ ├── ShopOverallResponse.java │ │ │ │ ├── ShopProductCompassData.java │ │ │ │ ├── ShopProductDataParam.java │ │ │ │ ├── ShopProductDataResponse.java │ │ │ │ ├── ShopProductInfo.java │ │ │ │ ├── ShopProductListResponse.java │ │ │ │ ├── ShopSaleProfileData.java │ │ │ │ ├── ShopSaleProfileDataParam.java │ │ │ │ └── ShopSaleProfileDataResponse.java │ │ │ ├── complaint/ │ │ │ │ ├── ComplaintHistory.java │ │ │ │ ├── ComplaintOrderResponse.java │ │ │ │ └── ComplaintParam.java │ │ │ ├── cooperation/ │ │ │ │ ├── CooperationData.java │ │ │ │ ├── CooperationListResponse.java │ │ │ │ ├── CooperationQrCode.java │ │ │ │ ├── CooperationQrCodeResponse.java │ │ │ │ ├── CooperationSharerParam.java │ │ │ │ ├── CooperationStatus.java │ │ │ │ └── CooperationStatusResponse.java │ │ │ ├── coupon/ │ │ │ │ ├── AutoValidInfo.java │ │ │ │ ├── CouponDetailInfo.java │ │ │ │ ├── CouponIdInfo.java │ │ │ │ ├── CouponIdResponse.java │ │ │ │ ├── CouponInfo.java │ │ │ │ ├── CouponInfoResponse.java │ │ │ │ ├── CouponListParam.java │ │ │ │ ├── CouponListResponse.java │ │ │ │ ├── CouponParam.java │ │ │ │ ├── CouponStatusParam.java │ │ │ │ ├── DiscountCondition.java │ │ │ │ ├── DiscountInfo.java │ │ │ │ ├── ExtInfo.java │ │ │ │ ├── PromoteInfo.java │ │ │ │ ├── ReceiveInfo.java │ │ │ │ ├── StockInfo.java │ │ │ │ ├── UserCoupon.java │ │ │ │ ├── UserCouponIdInfo.java │ │ │ │ ├── UserCouponIdParam.java │ │ │ │ ├── UserCouponListParam.java │ │ │ │ ├── UserCouponListResponse.java │ │ │ │ ├── UserCouponResponse.java │ │ │ │ ├── UserExtInfo.java │ │ │ │ └── ValidInfo.java │ │ │ ├── delivery/ │ │ │ │ ├── DeliveryCompanyInfo.java │ │ │ │ ├── DeliveryCompanyResponse.java │ │ │ │ ├── DeliveryInfo.java │ │ │ │ ├── DeliverySendParam.java │ │ │ │ ├── FreightProductInfo.java │ │ │ │ ├── FreshInspectParam.java │ │ │ │ └── PackageAuditInfo.java │ │ │ ├── freight/ │ │ │ │ ├── AddressInfoList.java │ │ │ │ ├── AllConditionFreeDetail.java │ │ │ │ ├── AllFreightCalcMethod.java │ │ │ │ ├── ConditionFreeDetail.java │ │ │ │ ├── FreightCalcMethod.java │ │ │ │ ├── FreightTemplate.java │ │ │ │ ├── NotSendArea.java │ │ │ │ ├── TemplateAddParam.java │ │ │ │ ├── TemplateIdResponse.java │ │ │ │ ├── TemplateInfoResponse.java │ │ │ │ ├── TemplateListParam.java │ │ │ │ └── TemplateListResponse.java │ │ │ ├── fund/ │ │ │ │ ├── AccountInfo.java │ │ │ │ ├── AccountInfoParam.java │ │ │ │ ├── AccountInfoResponse.java │ │ │ │ ├── BalanceInfoResponse.java │ │ │ │ ├── FlowListResponse.java │ │ │ │ ├── FlowRelatedInfo.java │ │ │ │ ├── FundsFlow.java │ │ │ │ ├── FundsFlowResponse.java │ │ │ │ ├── FundsListParam.java │ │ │ │ ├── WithdrawDetailResponse.java │ │ │ │ ├── WithdrawListParam.java │ │ │ │ ├── WithdrawListResponse.java │ │ │ │ ├── WithdrawSubmitParam.java │ │ │ │ ├── WithdrawSubmitResponse.java │ │ │ │ ├── bank/ │ │ │ │ │ ├── BankCityInfo.java │ │ │ │ │ ├── BankCityResponse.java │ │ │ │ │ ├── BankInfo.java │ │ │ │ │ ├── BankInfoResponse.java │ │ │ │ │ ├── BankListResponse.java │ │ │ │ │ ├── BankProvinceInfo.java │ │ │ │ │ ├── BankProvinceResponse.java │ │ │ │ │ ├── BankSearchParam.java │ │ │ │ │ ├── BranchInfo.java │ │ │ │ │ ├── BranchInfoResponse.java │ │ │ │ │ └── BranchSearchParam.java │ │ │ │ └── qrcode/ │ │ │ │ ├── QrCheckResponse.java │ │ │ │ └── QrCodeResponse.java │ │ │ ├── home/ │ │ │ │ ├── background/ │ │ │ │ │ ├── BackgroundApplyResponse.java │ │ │ │ │ ├── BackgroundApplyResult.java │ │ │ │ │ └── BackgroundGetResponse.java │ │ │ │ ├── banner/ │ │ │ │ │ ├── BannerApplyDetail.java │ │ │ │ │ ├── BannerApplyInfo.java │ │ │ │ │ ├── BannerApplyParam.java │ │ │ │ │ ├── BannerApplyResponse.java │ │ │ │ │ ├── BannerGetResponse.java │ │ │ │ │ ├── BannerInfo.java │ │ │ │ │ ├── BannerItem.java │ │ │ │ │ ├── BannerItemDetail.java │ │ │ │ │ ├── BannerItemFinder.java │ │ │ │ │ ├── BannerItemOfficialAccount.java │ │ │ │ │ └── BannerItemProduct.java │ │ │ │ ├── tree/ │ │ │ │ │ ├── CatTreeNode.java │ │ │ │ │ ├── LevelTreeInfo.java │ │ │ │ │ ├── OneLevelTreeNode.java │ │ │ │ │ ├── TreeAuditResult.java │ │ │ │ │ ├── TreeAuditResultDetail.java │ │ │ │ │ ├── TreeProductEditInfo.java │ │ │ │ │ ├── TreeProductEditParam.java │ │ │ │ │ ├── TreeProductListInfo.java │ │ │ │ │ ├── TreeProductListParam.java │ │ │ │ │ ├── TreeProductListResponse.java │ │ │ │ │ ├── TreeProductListResult.java │ │ │ │ │ ├── TreeShowGetResponse.java │ │ │ │ │ ├── TreeShowInfo.java │ │ │ │ │ ├── TreeShowParam.java │ │ │ │ │ └── TreeShowSetResponse.java │ │ │ │ └── window/ │ │ │ │ ├── WindowProductIndexParam.java │ │ │ │ ├── WindowProductListParam.java │ │ │ │ ├── WindowProductSetting.java │ │ │ │ └── WindowProductSettingResponse.java │ │ │ ├── image/ │ │ │ │ ├── ChannelImageInfo.java │ │ │ │ ├── ChannelImageResponse.java │ │ │ │ ├── QualificationFileId.java │ │ │ │ ├── QualificationFileResponse.java │ │ │ │ └── UploadImageResponse.java │ │ │ ├── lead/ │ │ │ │ └── component/ │ │ │ │ ├── request/ │ │ │ │ │ ├── GetFinderLiveDataListRequest.java │ │ │ │ │ ├── GetFinderLiveLeadsDataRequest.java │ │ │ │ │ ├── GetLeadInfoByComponentRequest.java │ │ │ │ │ ├── GetLeadsComponentIdRequest.java │ │ │ │ │ ├── GetLeadsComponentPromoteRecordRequest.java │ │ │ │ │ ├── GetLeadsInfoByRequestIdRequest.java │ │ │ │ │ └── GetLeadsRequestIdRequest.java │ │ │ │ └── response/ │ │ │ │ ├── FinderAttrResponse.java │ │ │ │ ├── GetFinderLiveDataListResponse.java │ │ │ │ ├── GetFinderLiveLeadsDataResponse.java │ │ │ │ ├── GetLeadsComponentIdResponse.java │ │ │ │ ├── GetLeadsComponentPromoteRecordResponse.java │ │ │ │ ├── GetLeadsRequestIdResponse.java │ │ │ │ └── LeadInfoResponse.java │ │ │ ├── league/ │ │ │ │ ├── AddressInfo.java │ │ │ │ ├── CatInfo.java │ │ │ │ ├── DescInfo.java │ │ │ │ ├── ExpressInfo.java │ │ │ │ ├── SimpleProductInfo.java │ │ │ │ ├── product/ │ │ │ │ │ ├── BatchAddParam.java │ │ │ │ │ ├── BatchAddResponse.java │ │ │ │ │ ├── ProductDeleteParam.java │ │ │ │ │ ├── ProductDetailParam.java │ │ │ │ │ ├── ProductDetailResponse.java │ │ │ │ │ ├── ProductListParam.java │ │ │ │ │ ├── ProductListResponse.java │ │ │ │ │ ├── ProductUpdateParam.java │ │ │ │ │ └── ProductUpdateResponse.java │ │ │ │ ├── promoter/ │ │ │ │ │ ├── PromoterInfo.java │ │ │ │ │ ├── PromoterInfoResponse.java │ │ │ │ │ ├── PromoterListParam.java │ │ │ │ │ └── PromoterListResponse.java │ │ │ │ ├── supplier/ │ │ │ │ │ ├── BizBaseInfo.java │ │ │ │ │ ├── CommissionInfo.java │ │ │ │ │ ├── CommissionOrderListParam.java │ │ │ │ │ ├── CommissionOrderListResponse.java │ │ │ │ │ ├── CommissionOrderResponse.java │ │ │ │ │ ├── CoopProductDetailParam.java │ │ │ │ │ ├── CoopProductListParam.java │ │ │ │ │ ├── CoopProductListResponse.java │ │ │ │ │ ├── CoopProductResponse.java │ │ │ │ │ ├── FlowListParam.java │ │ │ │ │ ├── FundsFlowInfo.java │ │ │ │ │ ├── ProductInfo.java │ │ │ │ │ ├── ShopDetailResponse.java │ │ │ │ │ ├── ShopListResponse.java │ │ │ │ │ ├── SkuInfo.java │ │ │ │ │ ├── SupplierBalanceResponse.java │ │ │ │ │ ├── SupplierFlowDetailResponse.java │ │ │ │ │ └── SupplierFlowListResponse.java │ │ │ │ └── window/ │ │ │ │ ├── AuthInfo.java │ │ │ │ ├── AuthInfoResponse.java │ │ │ │ ├── AuthStatusResponse.java │ │ │ │ ├── ProductSearchParam.java │ │ │ │ ├── WindowProductListResponse.java │ │ │ │ ├── WindowProductParam.java │ │ │ │ └── WindowProductResponse.java │ │ │ ├── limit/ │ │ │ │ ├── LimitSku.java │ │ │ │ ├── LimitTaskAddResponse.java │ │ │ │ ├── LimitTaskInfo.java │ │ │ │ ├── LimitTaskListParam.java │ │ │ │ ├── LimitTaskListResponse.java │ │ │ │ └── LimitTaskParam.java │ │ │ ├── live/ │ │ │ │ └── dashboard/ │ │ │ │ ├── ConversionMetric.java │ │ │ │ ├── DataNode.java │ │ │ │ ├── DataNodeList.java │ │ │ │ ├── DataNodeSecondList.java │ │ │ │ ├── DataNodeThirdList.java │ │ │ │ ├── Dimension.java │ │ │ │ ├── Ended.java │ │ │ │ ├── EndedIndexItem.java │ │ │ │ ├── Fields.java │ │ │ │ ├── ItemConversionMetric.java │ │ │ │ ├── LiveComparisonIndex.java │ │ │ │ ├── LiveDashboardData.java │ │ │ │ ├── LiveDashboardData2.java │ │ │ │ ├── LiveDashboardData2Portrait.java │ │ │ │ ├── LiveDashboardData2Source.java │ │ │ │ ├── LiveDashboardData2Summary.java │ │ │ │ ├── LiveDataParam.java │ │ │ │ ├── LiveDataResponse.java │ │ │ │ ├── LiveDistChannelSourceStats.java │ │ │ │ ├── LiveDistributionByFlowTypeStat.java │ │ │ │ ├── LiveDistributionChannel.java │ │ │ │ ├── LiveDistributionSceneStat.java │ │ │ │ ├── LiveEcConversionMetric.java │ │ │ │ ├── LiveEcDataSummary.java │ │ │ │ ├── LiveEcProfile.java │ │ │ │ ├── LiveItem.java │ │ │ │ ├── LiveListParam.java │ │ │ │ ├── LiveListResponse.java │ │ │ │ ├── OnAir.java │ │ │ │ ├── OnAirIndexItem.java │ │ │ │ ├── Point.java │ │ │ │ ├── QuarterlyGrowthRate.java │ │ │ │ ├── Series.java │ │ │ │ ├── SingleLiveEcSpuDataPageV2.java │ │ │ │ ├── SpuBaseData.java │ │ │ │ ├── SpuData.java │ │ │ │ └── SubLiveDistChannelSourceStats.java │ │ │ ├── message/ │ │ │ │ ├── SessionMessage.java │ │ │ │ ├── after/ │ │ │ │ │ ├── AfterSaleMessage.java │ │ │ │ │ ├── AfterSaleStatusInfo.java │ │ │ │ │ ├── ComplaintInfo.java │ │ │ │ │ └── ComplaintMessage.java │ │ │ │ ├── coupon/ │ │ │ │ │ ├── CouponActionInfo.java │ │ │ │ │ ├── CouponActionMessage.java │ │ │ │ │ ├── CouponReceiveMessage.java │ │ │ │ │ ├── UserCouponActionInfo.java │ │ │ │ │ ├── UserCouponExpireMessage.java │ │ │ │ │ └── UserCouponUseMessage.java │ │ │ │ ├── fund/ │ │ │ │ │ ├── AccountNotifyMessage.java │ │ │ │ │ ├── BankNotifyInfo.java │ │ │ │ │ ├── QrNotifyInfo.java │ │ │ │ │ ├── QrNotifyMessage.java │ │ │ │ │ ├── WithdrawNotifyInfo.java │ │ │ │ │ └── WithdrawNotifyMessage.java │ │ │ │ ├── order/ │ │ │ │ │ ├── OrderCancelInfo.java │ │ │ │ │ ├── OrderCancelMessage.java │ │ │ │ │ ├── OrderConfirmInfo.java │ │ │ │ │ ├── OrderConfirmMessage.java │ │ │ │ │ ├── OrderDeliveryInfo.java │ │ │ │ │ ├── OrderDeliveryMessage.java │ │ │ │ │ ├── OrderExtInfo.java │ │ │ │ │ ├── OrderExtMessage.java │ │ │ │ │ ├── OrderIdInfo.java │ │ │ │ │ ├── OrderIdMessage.java │ │ │ │ │ ├── OrderPayInfo.java │ │ │ │ │ ├── OrderPayMessage.java │ │ │ │ │ ├── OrderSettleInfo.java │ │ │ │ │ ├── OrderSettleMessage.java │ │ │ │ │ └── OrderStatusMessage.java │ │ │ │ ├── product/ │ │ │ │ │ ├── BrandMessage.java │ │ │ │ │ ├── CategoryAuditMessage.java │ │ │ │ │ ├── SpuAuditMessage.java │ │ │ │ │ ├── SpuStatusMessage.java │ │ │ │ │ └── SpuStockMessage.java │ │ │ │ ├── sharer/ │ │ │ │ │ └── SharerChangeMessage.java │ │ │ │ ├── store/ │ │ │ │ │ ├── CloseStoreMessage.java │ │ │ │ │ └── NicknameUpdateMessage.java │ │ │ │ ├── supplier/ │ │ │ │ │ ├── SupplierItemInfo.java │ │ │ │ │ └── SupplierItemMessage.java │ │ │ │ ├── vip/ │ │ │ │ │ ├── CouponInfo.java │ │ │ │ │ ├── ExchangeInfo.java │ │ │ │ │ ├── ExchangeInfoMessage.java │ │ │ │ │ ├── ProductInfo.java │ │ │ │ │ ├── UserInfo.java │ │ │ │ │ └── UserInfoMessage.java │ │ │ │ └── voucher/ │ │ │ │ ├── VoucherInfo.java │ │ │ │ └── VoucherMessage.java │ │ │ ├── order/ │ │ │ │ ├── AfterSaleDetail.java │ │ │ │ ├── AfterSaleOrderInfo.java │ │ │ │ ├── ChangeOrderInfo.java │ │ │ │ ├── ChangeSkuInfo.java │ │ │ │ ├── DecodeAddressInfo.java │ │ │ │ ├── DecodeSensitiveInfoResponse.java │ │ │ │ ├── DeliveryProductInfo.java │ │ │ │ ├── DeliveryUpdateParam.java │ │ │ │ ├── DropshipInfo.java │ │ │ │ ├── FreeGiftInfo.java │ │ │ │ ├── MainProductInfo.java │ │ │ │ ├── OrderAddressInfo.java │ │ │ │ ├── OrderAddressParam.java │ │ │ │ ├── OrderAgentInfo.java │ │ │ │ ├── OrderCommissionInfo.java │ │ │ │ ├── OrderCouponInfo.java │ │ │ │ ├── OrderCustomInfo.java │ │ │ │ ├── OrderDeliveryInfo.java │ │ │ │ ├── OrderDetailInfo.java │ │ │ │ ├── OrderExtInfo.java │ │ │ │ ├── OrderGreetingCardInfo.java │ │ │ │ ├── OrderIdParam.java │ │ │ │ ├── OrderInfo.java │ │ │ │ ├── OrderInfoParam.java │ │ │ │ ├── OrderInfoResponse.java │ │ │ │ ├── OrderListParam.java │ │ │ │ ├── OrderListResponse.java │ │ │ │ ├── OrderPayInfo.java │ │ │ │ ├── OrderPriceInfo.java │ │ │ │ ├── OrderPriceParam.java │ │ │ │ ├── OrderProductExtraService.java │ │ │ │ ├── OrderProductInfo.java │ │ │ │ ├── OrderRefundInfo.java │ │ │ │ ├── OrderRemarkParam.java │ │ │ │ ├── OrderSearchCondition.java │ │ │ │ ├── OrderSearchParam.java │ │ │ │ ├── OrderSettleInfo.java │ │ │ │ ├── OrderSharerInfo.java │ │ │ │ ├── OrderSkuDeliverInfo.java │ │ │ │ ├── OrderSkuShareInfo.java │ │ │ │ ├── OrderSourceInfo.java │ │ │ │ ├── QualityInsepctInfo.java │ │ │ │ ├── RechargeInfo.java │ │ │ │ ├── TelNumberExtInfo.java │ │ │ │ ├── VirtualNumberInfo.java │ │ │ │ └── VirtualTelNumberResponse.java │ │ │ ├── product/ │ │ │ │ ├── AfterSaleInfo.java │ │ │ │ ├── DescriptionInfo.java │ │ │ │ ├── ExpressInfo.java │ │ │ │ ├── ExtraServiceInfo.java │ │ │ │ ├── LimitInfo.java │ │ │ │ ├── ProductQuaInfo.java │ │ │ │ ├── ProductSaleLimitInfo.java │ │ │ │ ├── SkuDeliverInfo.java │ │ │ │ ├── SkuFastInfo.java │ │ │ │ ├── SkuInfo.java │ │ │ │ ├── SkuStockBatchList.java │ │ │ │ ├── SkuStockBatchParam.java │ │ │ │ ├── SkuStockBatchResponse.java │ │ │ │ ├── SkuStockInfo.java │ │ │ │ ├── SkuStockParam.java │ │ │ │ ├── SkuStockResponse.java │ │ │ │ ├── SpuCategory.java │ │ │ │ ├── SpuFastInfo.java │ │ │ │ ├── SpuGetResponse.java │ │ │ │ ├── SpuInfo.java │ │ │ │ ├── SpuListParam.java │ │ │ │ ├── SpuListResponse.java │ │ │ │ ├── SpuSimpleInfo.java │ │ │ │ ├── SpuSizeChart.java │ │ │ │ ├── SpuSizeChartItem.java │ │ │ │ ├── SpuStockInfo.java │ │ │ │ ├── SpuUpdateInfo.java │ │ │ │ ├── SpuUpdateResponse.java │ │ │ │ ├── TimingOnSaleInfo.java │ │ │ │ ├── WarehouseStockInfo.java │ │ │ │ └── link/ │ │ │ │ ├── ProductH5UrlResponse.java │ │ │ │ ├── ProductQrCodeResponse.java │ │ │ │ └── ProductTagLinkResponse.java │ │ │ ├── sharer/ │ │ │ │ ├── FinderSceneInfo.java │ │ │ │ ├── SharerBindResponse.java │ │ │ │ ├── SharerInfo.java │ │ │ │ ├── SharerInfoResponse.java │ │ │ │ ├── SharerListParam.java │ │ │ │ ├── SharerOrder.java │ │ │ │ ├── SharerOrderParam.java │ │ │ │ ├── SharerOrderResponse.java │ │ │ │ ├── SharerSearchParam.java │ │ │ │ ├── SharerSearchResponse.java │ │ │ │ ├── SharerUnbindParam.java │ │ │ │ └── SharerUnbindResponse.java │ │ │ ├── shop/ │ │ │ │ ├── ShopInfo.java │ │ │ │ └── ShopInfoResponse.java │ │ │ ├── token/ │ │ │ │ └── StableTokenParam.java │ │ │ ├── vip/ │ │ │ │ ├── ScoreInfo.java │ │ │ │ ├── UserGradeInfo.java │ │ │ │ ├── UserInfo.java │ │ │ │ ├── VipGradeParam.java │ │ │ │ ├── VipInfo.java │ │ │ │ ├── VipInfoParam.java │ │ │ │ ├── VipInfoResponse.java │ │ │ │ ├── VipListParam.java │ │ │ │ ├── VipListResponse.java │ │ │ │ ├── VipOpenIdParam.java │ │ │ │ ├── VipScoreParam.java │ │ │ │ └── VipScoreResponse.java │ │ │ ├── warehouse/ │ │ │ │ ├── LocationPriorityResponse.java │ │ │ │ ├── PriorityLocationParam.java │ │ │ │ ├── StockGetParam.java │ │ │ │ ├── UpdateLocationParam.java │ │ │ │ ├── Warehouse.java │ │ │ │ ├── WarehouseIdsResponse.java │ │ │ │ ├── WarehouseLocation.java │ │ │ │ ├── WarehouseLocationParam.java │ │ │ │ ├── WarehouseParam.java │ │ │ │ ├── WarehouseResponse.java │ │ │ │ ├── WarehouseStockParam.java │ │ │ │ └── WarehouseStockResponse.java │ │ │ └── window/ │ │ │ ├── request/ │ │ │ │ ├── AddWindowProductRequest.java │ │ │ │ ├── GetWindowProductListRequest.java │ │ │ │ └── WindowProductRequest.java │ │ │ └── response/ │ │ │ ├── GetWindowProductListResponse.java │ │ │ └── GetWindowProductResponse.java │ │ ├── common/ │ │ │ └── ChannelWxError.java │ │ ├── config/ │ │ │ ├── WxChannelConfig.java │ │ │ └── impl/ │ │ │ ├── WxChannelDefaultConfigImpl.java │ │ │ ├── WxChannelRedisConfigImpl.java │ │ │ └── WxChannelRedissonConfigImpl.java │ │ ├── constant/ │ │ │ ├── MessageEventConstants.java │ │ │ └── WxChannelApiUrlConstants.java │ │ ├── enums/ │ │ │ ├── AccountType.java │ │ │ ├── AfterSaleStatus.java │ │ │ ├── AfterSaleType.java │ │ │ ├── AfterSalesReason.java │ │ │ ├── BannerType.java │ │ │ ├── CommissionOrderStatus.java │ │ │ ├── ComplaintItemType.java │ │ │ ├── ComplaintStatus.java │ │ │ ├── CouponType.java │ │ │ ├── CouponValidType.java │ │ │ ├── DeliveryType.java │ │ │ ├── DimensionType.java │ │ │ ├── EcProfileDataNodeKey.java │ │ │ ├── FundsType.java │ │ │ ├── LiveDistributionFlowType.java │ │ │ ├── LiveDistributionSceneType.java │ │ │ ├── MessageType.java │ │ │ ├── OrderScene.java │ │ │ ├── PackageAuditItemType.java │ │ │ ├── PromoteType.java │ │ │ ├── QrCheckStatus.java │ │ │ ├── RefundReason.java │ │ │ ├── SaleProfileUserType.java │ │ │ ├── SendTime.java │ │ │ ├── ShareScene.java │ │ │ ├── SharerType.java │ │ │ ├── SpuEditStatus.java │ │ │ ├── SpuStatus.java │ │ │ ├── UserCouponStatus.java │ │ │ ├── WithdrawStatus.java │ │ │ ├── WxChannelErrorMsgEnum.java │ │ │ ├── WxCouponStatus.java │ │ │ └── WxOrderStatus.java │ │ ├── executor/ │ │ │ ├── ApacheHttpChannelFileUploadRequestExecutor.java │ │ │ ├── ApacheHttpChannelMediaDownloadRequestExecutor.java │ │ │ ├── ChannelFileUploadRequestExecutor.java │ │ │ ├── ChannelMediaDownloadRequestExecutor.java │ │ │ ├── HttpComponentsChannelFileUploadRequestExecutor.java │ │ │ └── HttpComponentsChannelMediaDownloadRequestExecutor.java │ │ ├── message/ │ │ │ ├── WxChannelMessage.java │ │ │ ├── WxChannelMessageRouter.java │ │ │ ├── WxChannelMessageRouterRule.java │ │ │ └── rule/ │ │ │ ├── HandlerConsumer.java │ │ │ ├── WxChannelMessageHandler.java │ │ │ ├── WxChannelMessageInterceptor.java │ │ │ └── WxChannelMessageMatcher.java │ │ └── util/ │ │ ├── JsonUtils.java │ │ ├── ResponseUtils.java │ │ ├── WxChCryptUtils.java │ │ └── XmlUtils.java │ └── test/ │ ├── java/ │ │ └── me/ │ │ └── chanjar/ │ │ └── weixin/ │ │ └── channel/ │ │ ├── api/ │ │ │ └── impl/ │ │ │ ├── WxAssistantServiceImplTest.java │ │ │ ├── WxChannelAddressServiceImplTest.java │ │ │ ├── WxChannelAfterSaleServiceImplTest.java │ │ │ ├── WxChannelBasicServiceImplTest.java │ │ │ ├── WxChannelBrandServiceImplTest.java │ │ │ ├── WxChannelCategoryServiceImplTest.java │ │ │ ├── WxChannelCompassFinderServiceImplTest.java │ │ │ ├── WxChannelCompassShopServiceImplTest.java │ │ │ ├── WxChannelCouponServiceImplTest.java │ │ │ ├── WxChannelFreightTemplateServiceImplTest.java │ │ │ ├── WxChannelFundServiceImplTest.java │ │ │ ├── WxChannelLiveDashboardServiceImplTest.java │ │ │ ├── WxChannelOrderServiceImplTest.java │ │ │ ├── WxChannelProductServiceImplTest.java │ │ │ ├── WxChannelSharerServiceImplTest.java │ │ │ ├── WxChannelVipServiceImplTest.java │ │ │ ├── WxChannelWarehouseServiceImplTest.java │ │ │ ├── WxFinderLiveServiceImplTest.java │ │ │ ├── WxLeadComponentServiceImplTest.java │ │ │ ├── WxLeagueProductServiceImplTest.java │ │ │ ├── WxLeaguePromoterServiceImplTest.java │ │ │ ├── WxLeagueSupplierServiceImplTest.java │ │ │ ├── WxLeagueWindowServiceImplTest.java │ │ │ ├── WxStoreCooperationServiceImplTest.java │ │ │ └── WxStoreHomePageServiceImplTest.java │ │ ├── message/ │ │ │ ├── WxChannelMessageRouterRuleTest.java │ │ │ └── WxChannelMessageRouterTest.java │ │ ├── test/ │ │ │ ├── ApiTestModule.java │ │ │ └── TestConfig.java │ │ └── util/ │ │ ├── JsonUtilsTest.java │ │ └── ResponseUtilsTest.java │ └── resources/ │ ├── logback-test.xml │ ├── test-config.sample.xml │ └── testng.xml ├── weixin-java-cloudbase/ │ └── README.md ├── weixin-java-common/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── me/ │ │ │ └── chanjar/ │ │ │ └── weixin/ │ │ │ └── common/ │ │ │ ├── annotation/ │ │ │ │ └── Required.java │ │ │ ├── api/ │ │ │ │ ├── WxConsts.java │ │ │ │ ├── WxErrorExceptionHandler.java │ │ │ │ ├── WxMessageDuplicateChecker.java │ │ │ │ ├── WxMessageInMemoryDuplicateChecker.java │ │ │ │ ├── WxMessageInMemoryDuplicateCheckerSingleton.java │ │ │ │ └── WxMessageInRedisDuplicateChecker.java │ │ │ ├── bean/ │ │ │ │ ├── CommonUploadData.java │ │ │ │ ├── CommonUploadParam.java │ │ │ │ ├── ToJson.java │ │ │ │ ├── WxAccessToken.java │ │ │ │ ├── WxAccessTokenEntity.java │ │ │ │ ├── WxCardApiSignature.java │ │ │ │ ├── WxJsapiSignature.java │ │ │ │ ├── WxNetCheckResult.java │ │ │ │ ├── WxOAuth2UserInfo.java │ │ │ │ ├── imgproc/ │ │ │ │ │ ├── WxImgProcAiCropResult.java │ │ │ │ │ ├── WxImgProcQrCodeResult.java │ │ │ │ │ └── WxImgProcSuperResolutionResult.java │ │ │ │ ├── menu/ │ │ │ │ │ ├── WxMenu.java │ │ │ │ │ ├── WxMenuButton.java │ │ │ │ │ └── WxMenuRule.java │ │ │ │ ├── oauth2/ │ │ │ │ │ └── WxOAuth2AccessToken.java │ │ │ │ ├── ocr/ │ │ │ │ │ ├── WxOcrBankCardResult.java │ │ │ │ │ ├── WxOcrBizLicenseResult.java │ │ │ │ │ ├── WxOcrCommResult.java │ │ │ │ │ ├── WxOcrDrivingLicenseResult.java │ │ │ │ │ ├── WxOcrDrivingResult.java │ │ │ │ │ ├── WxOcrIdCardResult.java │ │ │ │ │ ├── WxOcrImgSize.java │ │ │ │ │ └── WxOcrPos.java │ │ │ │ ├── result/ │ │ │ │ │ ├── WxMediaUploadResult.java │ │ │ │ │ ├── WxMinishopImageUploadCustomizeResult.java │ │ │ │ │ ├── WxMinishopImageUploadResult.java │ │ │ │ │ ├── WxMinishopPicFileCustomizeResult.java │ │ │ │ │ └── WxMinishopPicFileResult.java │ │ │ │ └── subscribemsg/ │ │ │ │ ├── CategoryData.java │ │ │ │ ├── PubTemplateKeyword.java │ │ │ │ ├── PubTemplateTitleListResult.java │ │ │ │ └── TemplateInfo.java │ │ │ ├── enums/ │ │ │ │ ├── TicketType.java │ │ │ │ └── WxType.java │ │ │ ├── error/ │ │ │ │ ├── WxChannelErrorMsgEnum.java │ │ │ │ ├── WxCpErrorMsgEnum.java │ │ │ │ ├── WxError.java │ │ │ │ ├── WxErrorException.java │ │ │ │ ├── WxMaErrorMsgEnum.java │ │ │ │ ├── WxMpErrorMsgEnum.java │ │ │ │ ├── WxOpenErrorMsgEnum.java │ │ │ │ └── WxRuntimeException.java │ │ │ ├── executor/ │ │ │ │ ├── CommonUploadRequestExecutor.java │ │ │ │ ├── CommonUploadRequestExecutorApacheImpl.java │ │ │ │ ├── CommonUploadRequestExecutorHttpComponentsImpl.java │ │ │ │ ├── CommonUploadRequestExecutorJoddHttpImpl.java │ │ │ │ └── CommonUploadRequestExecutorOkHttpImpl.java │ │ │ ├── redis/ │ │ │ │ ├── BaseWxRedisOps.java │ │ │ │ ├── JedisWxRedisOps.java │ │ │ │ ├── RedisTemplateWxRedisOps.java │ │ │ │ ├── RedissonWxRedisOps.java │ │ │ │ └── WxRedisOps.java │ │ │ ├── requestexecuter/ │ │ │ │ └── ocr/ │ │ │ │ ├── OcrDiscernApacheHttpRequestExecutor.java │ │ │ │ ├── OcrDiscernHttpComponentsRequestExecutor.java │ │ │ │ └── OcrDiscernRequestExecutor.java │ │ │ ├── service/ │ │ │ │ ├── WxImgProcService.java │ │ │ │ ├── WxOAuth2Service.java │ │ │ │ ├── WxOAuth2ServiceDecorator.java │ │ │ │ ├── WxOcrService.java │ │ │ │ └── WxService.java │ │ │ ├── session/ │ │ │ │ ├── Constants.java │ │ │ │ ├── InternalSession.java │ │ │ │ ├── InternalSessionManager.java │ │ │ │ ├── LocalStrings.properties │ │ │ │ ├── StandardSession.java │ │ │ │ ├── StandardSessionFacade.java │ │ │ │ ├── StandardSessionManager.java │ │ │ │ ├── TooManyActiveSessionsException.java │ │ │ │ ├── WxSession.java │ │ │ │ └── WxSessionManager.java │ │ │ └── util/ │ │ │ ├── BeanUtils.java │ │ │ ├── DataUtils.java │ │ │ ├── LogExceptionHandler.java │ │ │ ├── RandomUtils.java │ │ │ ├── SignUtils.java │ │ │ ├── XmlUtils.java │ │ │ ├── crypto/ │ │ │ │ ├── ByteGroup.java │ │ │ │ ├── PKCS7Encoder.java │ │ │ │ ├── SHA1.java │ │ │ │ └── WxCryptUtil.java │ │ │ ├── fs/ │ │ │ │ └── FileUtils.java │ │ │ ├── http/ │ │ │ │ ├── BaseMediaDownloadRequestExecutor.java │ │ │ │ ├── HttpClientType.java │ │ │ │ ├── HttpResponseProxy.java │ │ │ │ ├── InputStreamData.java │ │ │ │ ├── MediaInputStreamUploadRequestExecutor.java │ │ │ │ ├── MediaUploadRequestExecutor.java │ │ │ │ ├── MinishopUploadRequestCustomizeExecutor.java │ │ │ │ ├── MinishopUploadRequestExecutor.java │ │ │ │ ├── RequestExecutor.java │ │ │ │ ├── RequestHttp.java │ │ │ │ ├── ResponseHandler.java │ │ │ │ ├── SimpleGetRequestExecutor.java │ │ │ │ ├── SimplePostRequestExecutor.java │ │ │ │ ├── URIUtil.java │ │ │ │ ├── WxDnsResolver.java │ │ │ │ ├── apache/ │ │ │ │ │ ├── ApacheBasicResponseHandler.java │ │ │ │ │ ├── ApacheHttpClientBuilder.java │ │ │ │ │ ├── ApacheHttpDnsClientBuilder.java │ │ │ │ │ ├── ApacheHttpResponseProxy.java │ │ │ │ │ ├── ApacheMediaDownloadRequestExecutor.java │ │ │ │ │ ├── ApacheMediaInputStreamUploadRequestExecutor.java │ │ │ │ │ ├── ApacheMediaUploadRequestExecutor.java │ │ │ │ │ ├── ApacheMinishopMediaUploadRequestCustomizeExecutor.java │ │ │ │ │ ├── ApacheMinishopMediaUploadRequestExecutor.java │ │ │ │ │ ├── ApacheSimpleGetRequestExecutor.java │ │ │ │ │ ├── ApacheSimplePostRequestExecutor.java │ │ │ │ │ ├── ByteArrayResponseHandler.java │ │ │ │ │ ├── DefaultApacheHttpClientBuilder.java │ │ │ │ │ ├── InputStreamResponseHandler.java │ │ │ │ │ └── Utf8ResponseHandler.java │ │ │ │ ├── hc/ │ │ │ │ │ ├── BasicResponseHandler.java │ │ │ │ │ ├── ByteArrayResponseHandler.java │ │ │ │ │ ├── DefaultHttpComponentsClientBuilder.java │ │ │ │ │ ├── HttpComponentsClientBuilder.java │ │ │ │ │ ├── HttpComponentsMediaDownloadRequestExecutor.java │ │ │ │ │ ├── HttpComponentsMediaInputStreamUploadRequestExecutor.java │ │ │ │ │ ├── HttpComponentsMediaUploadRequestExecutor.java │ │ │ │ │ ├── HttpComponentsMinishopMediaUploadRequestCustomizeExecutor.java │ │ │ │ │ ├── HttpComponentsMinishopMediaUploadRequestExecutor.java │ │ │ │ │ ├── HttpComponentsResponseProxy.java │ │ │ │ │ ├── HttpComponentsSimpleGetRequestExecutor.java │ │ │ │ │ ├── HttpComponentsSimplePostRequestExecutor.java │ │ │ │ │ ├── InputStreamResponseHandler.java │ │ │ │ │ ├── NoopRetryStrategy.java │ │ │ │ │ └── Utf8ResponseHandler.java │ │ │ │ ├── jodd/ │ │ │ │ │ ├── JoddHttpMediaDownloadRequestExecutor.java │ │ │ │ │ ├── JoddHttpMediaInputStreamUploadRequestExecutor.java │ │ │ │ │ ├── JoddHttpMediaUploadRequestExecutor.java │ │ │ │ │ ├── JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java │ │ │ │ │ ├── JoddHttpMinishopMediaUploadRequestExecutor.java │ │ │ │ │ ├── JoddHttpResponseProxy.java │ │ │ │ │ ├── JoddHttpSimpleGetRequestExecutor.java │ │ │ │ │ └── JoddHttpSimplePostRequestExecutor.java │ │ │ │ └── okhttp/ │ │ │ │ ├── DefaultOkHttpClientBuilder.java │ │ │ │ ├── OkHttpClientBuilder.java │ │ │ │ ├── OkHttpDnsClientBuilder.java │ │ │ │ ├── OkHttpMediaDownloadRequestExecutor.java │ │ │ │ ├── OkHttpMediaInputStreamUploadRequestExecutor.java │ │ │ │ ├── OkHttpMediaUploadRequestExecutor.java │ │ │ │ ├── OkHttpMinishopMediaUploadRequestCustomizeExecutor.java │ │ │ │ ├── OkHttpMinishopMediaUploadRequestExecutor.java │ │ │ │ ├── OkHttpProxyInfo.java │ │ │ │ ├── OkHttpResponseProxy.java │ │ │ │ ├── OkHttpSimpleGetRequestExecutor.java │ │ │ │ └── OkHttpSimplePostRequestExecutor.java │ │ │ ├── json/ │ │ │ │ ├── GsonHelper.java │ │ │ │ ├── GsonParser.java │ │ │ │ ├── WxAccessTokenAdapter.java │ │ │ │ ├── WxBooleanTypeAdapter.java │ │ │ │ ├── WxDateTypeAdapter.java │ │ │ │ ├── WxErrorAdapter.java │ │ │ │ ├── WxGsonBuilder.java │ │ │ │ ├── WxMediaUploadResultAdapter.java │ │ │ │ ├── WxMenuGsonAdapter.java │ │ │ │ └── WxNetCheckResultGsonAdapter.java │ │ │ ├── locks/ │ │ │ │ ├── JedisDistributedLock.java │ │ │ │ └── RedisTemplateSimpleDistributedLock.java │ │ │ ├── res/ │ │ │ │ └── StringManager.java │ │ │ └── xml/ │ │ │ ├── IntegerArrayConverter.java │ │ │ ├── LongArrayConverter.java │ │ │ ├── StringArrayConverter.java │ │ │ ├── XStreamCDataConverter.java │ │ │ ├── XStreamCDataListConverter.java │ │ │ ├── XStreamInitializer.java │ │ │ ├── XStreamMediaIdConverter.java │ │ │ └── XStreamReplaceNameConverter.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── native-image/ │ │ └── com.github.binarywang/ │ │ └── weixin-java-common/ │ │ ├── native-image.properties │ │ └── reflect-config.json │ └── test/ │ ├── java/ │ │ └── me/ │ │ └── chanjar/ │ │ └── weixin/ │ │ └── common/ │ │ ├── api/ │ │ │ ├── WxMessageInMemoryDuplicateCheckerSingletonTest.java │ │ │ ├── WxMessageInMemoryDuplicateCheckerTest.java │ │ │ └── WxMessageInRedisDuplicateCheckerTest.java │ │ ├── bean/ │ │ │ ├── CommonUploadParamTest.java │ │ │ ├── WxAccessTokenTest.java │ │ │ ├── WxMenuTest.java │ │ │ └── WxNetCheckResultTest.java │ │ ├── error/ │ │ │ └── WxErrorTest.java │ │ ├── redis/ │ │ │ ├── CommonWxRedisOpsTest.java │ │ │ ├── JedisWxRedisOpsTest.java │ │ │ ├── RedisTemplateWxRedisOpsTest.java │ │ │ └── RedissonWxRedisOpsTest.java │ │ ├── session/ │ │ │ └── SessionTest.java │ │ └── util/ │ │ ├── DataUtilsTest.java │ │ ├── XmlUtilsTest.java │ │ ├── crypto/ │ │ │ ├── SHA1Test.java │ │ │ └── WxCryptUtilTest.java │ │ ├── fs/ │ │ │ └── FileUtilsTest.java │ │ ├── http/ │ │ │ ├── HttpResponseProxyTest.java │ │ │ ├── apache/ │ │ │ │ ├── DefaultApacheHttpClientBuilderTest.java │ │ │ │ ├── SSLConfigurationTest.java │ │ │ │ └── SSLIntegrationTest.java │ │ │ └── okhttp/ │ │ │ └── DefaultOkHttpClientBuilderTest.java │ │ ├── json/ │ │ │ ├── GsonHelperTest.java │ │ │ └── GsonParserTest.java │ │ └── locks/ │ │ ├── RedisTemplateSimpleDistributedLockSerializationTest.java │ │ └── RedisTemplateSimpleDistributedLockTest.java │ └── resources/ │ ├── logback-test.xml │ └── testng.xml ├── weixin-java-cp/ │ ├── APPROVAL_WORKFLOW_GUIDE.md │ ├── INTELLIGENT_ROBOT.md │ ├── LICENSE │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ ├── com/ │ │ │ └── tencent/ │ │ │ └── wework/ │ │ │ └── Finance.java │ │ └── me/ │ │ └── chanjar/ │ │ └── weixin/ │ │ └── cp/ │ │ ├── api/ │ │ │ ├── WxCpAgentService.java │ │ │ ├── WxCpAgentWorkBenchService.java │ │ │ ├── WxCpChatService.java │ │ │ ├── WxCpCorpGroupService.java │ │ │ ├── WxCpDepartmentService.java │ │ │ ├── WxCpExportService.java │ │ │ ├── WxCpExternalContactService.java │ │ │ ├── WxCpGroupRobotService.java │ │ │ ├── WxCpHrService.java │ │ │ ├── WxCpIntelligentRobotService.java │ │ │ ├── WxCpKfService.java │ │ │ ├── WxCpLivingService.java │ │ │ ├── WxCpMediaService.java │ │ │ ├── WxCpMeetingService.java │ │ │ ├── WxCpMenuService.java │ │ │ ├── WxCpMessageService.java │ │ │ ├── WxCpMsgAuditService.java │ │ │ ├── WxCpOAuth2Service.java │ │ │ ├── WxCpOaAgentService.java │ │ │ ├── WxCpOaCalendarService.java │ │ │ ├── WxCpOaMailService.java │ │ │ ├── WxCpOaMeetingRoomService.java │ │ │ ├── WxCpOaScheduleService.java │ │ │ ├── WxCpOaService.java │ │ │ ├── WxCpOaWeDocService.java │ │ │ ├── WxCpOaWeDriveService.java │ │ │ ├── WxCpSchoolHealthService.java │ │ │ ├── WxCpSchoolService.java │ │ │ ├── WxCpSchoolUserService.java │ │ │ ├── WxCpService.java │ │ │ ├── WxCpTagService.java │ │ │ ├── WxCpTaskCardService.java │ │ │ ├── WxCpUserService.java │ │ │ └── impl/ │ │ │ ├── BaseWxCpServiceImpl.java │ │ │ ├── WxCpAgentServiceImpl.java │ │ │ ├── WxCpAgentWorkBenchServiceImpl.java │ │ │ ├── WxCpChatServiceImpl.java │ │ │ ├── WxCpCorpGroupServiceImpl.java │ │ │ ├── WxCpDepartmentServiceImpl.java │ │ │ ├── WxCpExportServiceImpl.java │ │ │ ├── WxCpExternalContactServiceImpl.java │ │ │ ├── WxCpGroupRobotServiceImpl.java │ │ │ ├── WxCpHrServiceImpl.java │ │ │ ├── WxCpIntelligentRobotServiceImpl.java │ │ │ ├── WxCpKfServiceImpl.java │ │ │ ├── WxCpLivingServiceImpl.java │ │ │ ├── WxCpMediaServiceImpl.java │ │ │ ├── WxCpMeetingServiceImpl.java │ │ │ ├── WxCpMenuServiceImpl.java │ │ │ ├── WxCpMessageServiceImpl.java │ │ │ ├── WxCpMsgAuditServiceImpl.java │ │ │ ├── WxCpOAuth2ServiceImpl.java │ │ │ ├── WxCpOMailServiceImpl.java │ │ │ ├── WxCpOaAgentServiceImpl.java │ │ │ ├── WxCpOaCalendarServiceImpl.java │ │ │ ├── WxCpOaMeetingRoomServiceImpl.java │ │ │ ├── WxCpOaOaScheduleServiceImpl.java │ │ │ ├── WxCpOaServiceImpl.java │ │ │ ├── WxCpOaWeDocServiceImpl.java │ │ │ ├── WxCpOaWeDriveServiceImpl.java │ │ │ ├── WxCpSchoolHealthServiceImpl.java │ │ │ ├── WxCpSchoolServiceImpl.java │ │ │ ├── WxCpSchoolUserServiceImpl.java │ │ │ ├── WxCpServiceApacheHttpClientImpl.java │ │ │ ├── WxCpServiceHttpComponentsImpl.java │ │ │ ├── WxCpServiceImpl.java │ │ │ ├── WxCpServiceJoddHttpImpl.java │ │ │ ├── WxCpServiceOkHttpImpl.java │ │ │ ├── WxCpServiceOnTpImpl.java │ │ │ ├── WxCpTagServiceImpl.java │ │ │ ├── WxCpTaskCardServiceImpl.java │ │ │ └── WxCpUserServiceImpl.java │ │ ├── bean/ │ │ │ ├── Gender.java │ │ │ ├── WxCpAgent.java │ │ │ ├── WxCpAgentJsapiSignature.java │ │ │ ├── WxCpAgentWorkBench.java │ │ │ ├── WxCpBaseResp.java │ │ │ ├── WxCpChat.java │ │ │ ├── WxCpDepart.java │ │ │ ├── WxCpInviteResult.java │ │ │ ├── WxCpMaJsCode2SessionResult.java │ │ │ ├── WxCpOauth2UserInfo.java │ │ │ ├── WxCpOpenUseridToUserid.java │ │ │ ├── WxCpOpenUseridToUseridResult.java │ │ │ ├── WxCpProviderToken.java │ │ │ ├── WxCpTag.java │ │ │ ├── WxCpTagAddOrRemoveUsersResult.java │ │ │ ├── WxCpTagGetResult.java │ │ │ ├── WxCpTaskCardUpdateResult.java │ │ │ ├── WxCpTpAdmin.java │ │ │ ├── WxCpTpAppQrcode.java │ │ │ ├── WxCpTpAuthInfo.java │ │ │ ├── WxCpTpContactSearch.java │ │ │ ├── WxCpTpContactSearchResp.java │ │ │ ├── WxCpTpConvertTmpExternalUserIdResult.java │ │ │ ├── WxCpTpCorp.java │ │ │ ├── WxCpTpCorpId2OpenCorpId.java │ │ │ ├── WxCpTpCustomizedAppDetail.java │ │ │ ├── WxCpTpDepart.java │ │ │ ├── WxCpTpOpenKfIdConvertResult.java │ │ │ ├── WxCpTpPermanentCodeInfo.java │ │ │ ├── WxCpTpPreauthCode.java │ │ │ ├── WxCpTpProlongTryResult.java │ │ │ ├── WxCpTpTag.java │ │ │ ├── WxCpTpTagAddOrRemoveUsersResult.java │ │ │ ├── WxCpTpTagGetResult.java │ │ │ ├── WxCpTpTagIdListConvertResult.java │ │ │ ├── WxCpTpTemplateList.java │ │ │ ├── WxCpTpUnionidToExternalUseridResult.java │ │ │ ├── WxCpTpUserDetail.java │ │ │ ├── WxCpTpUserInfo.java │ │ │ ├── WxCpTpXmlPackage.java │ │ │ ├── WxCpUser.java │ │ │ ├── WxCpUserDetail.java │ │ │ ├── WxCpUserExternalContactInfo.java │ │ │ ├── WxCpUseridToOpenUserid.java │ │ │ ├── WxCpUseridToOpenUseridResult.java │ │ │ ├── WxTpCustomizedAuthUrl.java │ │ │ ├── WxTpLoginInfo.java │ │ │ ├── article/ │ │ │ │ ├── MpnewsArticle.java │ │ │ │ └── NewArticle.java │ │ │ ├── corpgroup/ │ │ │ │ ├── WxCpCorpGroupCorp.java │ │ │ │ ├── WxCpCorpGroupCorpGetTokenReq.java │ │ │ │ ├── WxCpCorpGroupCorpListAppShareInfoResp.java │ │ │ │ ├── WxCpCorpGroupCorpToken.java │ │ │ │ └── WxCpMaTransferSession.java │ │ │ ├── export/ │ │ │ │ ├── WxCpExportRequest.java │ │ │ │ └── WxCpExportResult.java │ │ │ ├── external/ │ │ │ │ ├── WxCpAddMomentResult.java │ │ │ │ ├── WxCpAddMomentTask.java │ │ │ │ ├── WxCpContactWayInfo.java │ │ │ │ ├── WxCpContactWayList.java │ │ │ │ ├── WxCpContactWayResult.java │ │ │ │ ├── WxCpExternalUserIdList.java │ │ │ │ ├── WxCpGetMomentComments.java │ │ │ │ ├── WxCpGetMomentCustomerList.java │ │ │ │ ├── WxCpGetMomentList.java │ │ │ │ ├── WxCpGetMomentSendResult.java │ │ │ │ ├── WxCpGetMomentTask.java │ │ │ │ ├── WxCpGetMomentTaskResult.java │ │ │ │ ├── WxCpGroupJoinWayInfo.java │ │ │ │ ├── WxCpGroupJoinWayResult.java │ │ │ │ ├── WxCpGroupWelcomeTemplateResult.java │ │ │ │ ├── WxCpMsgTemplate.java │ │ │ │ ├── WxCpMsgTemplateAddResult.java │ │ │ │ ├── WxCpNewExternalUserIdList.java │ │ │ │ ├── WxCpProductAlbumInfo.java │ │ │ │ ├── WxCpProductAlbumListResult.java │ │ │ │ ├── WxCpProductAlbumResult.java │ │ │ │ ├── WxCpUpdateRemarkRequest.java │ │ │ │ ├── WxCpUserExternalContactList.java │ │ │ │ ├── WxCpUserExternalGroupChatInfo.java │ │ │ │ ├── WxCpUserExternalGroupChatList.java │ │ │ │ ├── WxCpUserExternalGroupChatStatistic.java │ │ │ │ ├── WxCpUserExternalGroupChatTransferResp.java │ │ │ │ ├── WxCpUserExternalTagGroupInfo.java │ │ │ │ ├── WxCpUserExternalTagGroupList.java │ │ │ │ ├── WxCpUserExternalUnassignList.java │ │ │ │ ├── WxCpUserExternalUserBehaviorStatistic.java │ │ │ │ ├── WxCpUserTransferCustomerReq.java │ │ │ │ ├── WxCpUserTransferCustomerResp.java │ │ │ │ ├── WxCpUserTransferResultResp.java │ │ │ │ ├── WxCpUserWithExternalPermission.java │ │ │ │ ├── WxCpWelcomeMsg.java │ │ │ │ ├── acquisition/ │ │ │ │ │ ├── WxCpCustomerAcquisitionCreateResult.java │ │ │ │ │ ├── WxCpCustomerAcquisitionCustomerList.java │ │ │ │ │ ├── WxCpCustomerAcquisitionInfo.java │ │ │ │ │ ├── WxCpCustomerAcquisitionList.java │ │ │ │ │ ├── WxCpCustomerAcquisitionQuota.java │ │ │ │ │ ├── WxCpCustomerAcquisitionRequest.java │ │ │ │ │ └── WxCpCustomerAcquisitionStatistic.java │ │ │ │ ├── contact/ │ │ │ │ │ ├── ExternalContact.java │ │ │ │ │ ├── FollowedUser.java │ │ │ │ │ ├── WxCpExternalContactBatchInfo.java │ │ │ │ │ ├── WxCpExternalContactInfo.java │ │ │ │ │ ├── WxCpExternalContactListInfo.java │ │ │ │ │ ├── WxCpGroupMsgListResult.java │ │ │ │ │ ├── WxCpGroupMsgResult.java │ │ │ │ │ ├── WxCpGroupMsgSendResult.java │ │ │ │ │ └── WxCpGroupMsgTaskResult.java │ │ │ │ ├── interceptrule/ │ │ │ │ │ ├── ApplicableRange.java │ │ │ │ │ ├── WxCpInterceptRule.java │ │ │ │ │ ├── WxCpInterceptRuleAddRequest.java │ │ │ │ │ ├── WxCpInterceptRuleAddResult.java │ │ │ │ │ ├── WxCpInterceptRuleInfo.java │ │ │ │ │ └── WxCpInterceptRuleList.java │ │ │ │ ├── moment/ │ │ │ │ │ ├── CustomerItem.java │ │ │ │ │ ├── ExternalContactList.java │ │ │ │ │ ├── MomentInfo.java │ │ │ │ │ ├── SenderList.java │ │ │ │ │ └── VisibleRange.java │ │ │ │ ├── msg/ │ │ │ │ │ ├── Attachment.java │ │ │ │ │ ├── AttachmentBuilder.java │ │ │ │ │ ├── File.java │ │ │ │ │ ├── Image.java │ │ │ │ │ ├── Link.java │ │ │ │ │ ├── Location.java │ │ │ │ │ ├── MiniProgram.java │ │ │ │ │ ├── TagFilter.java │ │ │ │ │ ├── TagList.java │ │ │ │ │ ├── Text.java │ │ │ │ │ └── Video.java │ │ │ │ └── product/ │ │ │ │ ├── Attachment.java │ │ │ │ └── Image.java │ │ │ ├── hr/ │ │ │ │ ├── WxCpHrEmployeeFieldData.java │ │ │ │ ├── WxCpHrEmployeeFieldDataResp.java │ │ │ │ ├── WxCpHrEmployeeFieldInfo.java │ │ │ │ ├── WxCpHrEmployeeFieldInfoResp.java │ │ │ │ ├── WxCpHrEmployeeFieldValue.java │ │ │ │ └── WxCpHrFieldType.java │ │ │ ├── intelligentrobot/ │ │ │ │ ├── WxCpIntelligentRobot.java │ │ │ │ ├── WxCpIntelligentRobotChatRequest.java │ │ │ │ ├── WxCpIntelligentRobotChatResponse.java │ │ │ │ ├── WxCpIntelligentRobotCreateRequest.java │ │ │ │ ├── WxCpIntelligentRobotCreateResponse.java │ │ │ │ ├── WxCpIntelligentRobotSendMessageRequest.java │ │ │ │ ├── WxCpIntelligentRobotSendMessageResponse.java │ │ │ │ └── WxCpIntelligentRobotUpdateRequest.java │ │ │ ├── kf/ │ │ │ │ ├── WxCpKfAccountAdd.java │ │ │ │ ├── WxCpKfAccountAddResp.java │ │ │ │ ├── WxCpKfAccountDel.java │ │ │ │ ├── WxCpKfAccountLink.java │ │ │ │ ├── WxCpKfAccountLinkResp.java │ │ │ │ ├── WxCpKfAccountListResp.java │ │ │ │ ├── WxCpKfAccountUpd.java │ │ │ │ ├── WxCpKfCustomerBatchGetResp.java │ │ │ │ ├── WxCpKfGetCorpStatisticRequest.java │ │ │ │ ├── WxCpKfGetCorpStatisticResp.java │ │ │ │ ├── WxCpKfGetServicerStatisticRequest.java │ │ │ │ ├── WxCpKfGetServicerStatisticResp.java │ │ │ │ ├── WxCpKfMsgListResp.java │ │ │ │ ├── WxCpKfMsgSendRequest.java │ │ │ │ ├── WxCpKfMsgSendResp.java │ │ │ │ ├── WxCpKfServiceStateResp.java │ │ │ │ ├── WxCpKfServiceStateTransResp.java │ │ │ │ ├── WxCpKfServiceUpgradeConfigResp.java │ │ │ │ ├── WxCpKfServicerListResp.java │ │ │ │ ├── WxCpKfServicerOpResp.java │ │ │ │ └── msg/ │ │ │ │ ├── WxCpKfBusinessCardMsg.java │ │ │ │ ├── WxCpKfChannelsMsg.java │ │ │ │ ├── WxCpKfChannelsShopOrderMsg.java │ │ │ │ ├── WxCpKfChannelsShopProductMsg.java │ │ │ │ ├── WxCpKfEventMsg.java │ │ │ │ ├── WxCpKfLinkMsg.java │ │ │ │ ├── WxCpKfLocationMsg.java │ │ │ │ ├── WxCpKfMenuMsg.java │ │ │ │ ├── WxCpKfMiniProgramMsg.java │ │ │ │ ├── WxCpKfResourceMsg.java │ │ │ │ └── WxCpKfTextMsg.java │ │ │ ├── license/ │ │ │ │ ├── WxCpTpLicenseAccount.java │ │ │ │ ├── WxCpTpLicenseAccountCount.java │ │ │ │ ├── WxCpTpLicenseAccountDuration.java │ │ │ │ ├── WxCpTpLicenseActiveAccount.java │ │ │ │ ├── WxCpTpLicenseActiveCodeInfo.java │ │ │ │ ├── WxCpTpLicenseBaseAccount.java │ │ │ │ ├── WxCpTpLicenseCorpAccount.java │ │ │ │ ├── WxCpTpLicenseInvalidAccount.java │ │ │ │ ├── WxCpTpLicenseOrder.java │ │ │ │ ├── WxCpTpLicenseSimpleOrder.java │ │ │ │ ├── WxCpTpLicenseTransfer.java │ │ │ │ ├── account/ │ │ │ │ │ ├── WxCpTpLicenseActiveInfoByUserResp.java │ │ │ │ │ ├── WxCpTpLicenseBatchActiveResultResp.java │ │ │ │ │ ├── WxCpTpLicenseBatchCodeInfoResp.java │ │ │ │ │ ├── WxCpTpLicenseBatchTransferResp.java │ │ │ │ │ ├── WxCpTpLicenseCodeInfoResp.java │ │ │ │ │ └── WxCpTpLicenseCorpAccountListResp.java │ │ │ │ └── order/ │ │ │ │ ├── WxCpTpLicenseCreateOrderResp.java │ │ │ │ ├── WxCpTpLicenseNewOrderRequest.java │ │ │ │ ├── WxCpTpLicenseOrderAccountListResp.java │ │ │ │ ├── WxCpTpLicenseOrderInfoResp.java │ │ │ │ ├── WxCpTpLicenseOrderListResp.java │ │ │ │ ├── WxCpTpLicenseRenewOrderJobRequest.java │ │ │ │ ├── WxCpTpLicenseRenewOrderJobResp.java │ │ │ │ └── WxCpTpLicenseRenewOrderRequest.java │ │ │ ├── linkedcorp/ │ │ │ │ ├── WxCpLinkedCorpAgentPerm.java │ │ │ │ ├── WxCpLinkedCorpDepartment.java │ │ │ │ └── WxCpLinkedCorpUser.java │ │ │ ├── living/ │ │ │ │ ├── WxCpLivingCreateRequest.java │ │ │ │ ├── WxCpLivingInfo.java │ │ │ │ ├── WxCpLivingModifyRequest.java │ │ │ │ ├── WxCpLivingResult.java │ │ │ │ ├── WxCpLivingShareInfo.java │ │ │ │ └── WxCpWatchStat.java │ │ │ ├── media/ │ │ │ │ ├── MediaUploadByUrlReq.java │ │ │ │ └── MediaUploadByUrlResult.java │ │ │ ├── message/ │ │ │ │ ├── TemplateCardMessage.java │ │ │ │ ├── WxCpAppChatMessage.java │ │ │ │ ├── WxCpGroupRobotMessage.java │ │ │ │ ├── WxCpLinkedCorpMessage.java │ │ │ │ ├── WxCpLinkedCorpMessageSendResult.java │ │ │ │ ├── WxCpMessage.java │ │ │ │ ├── WxCpMessageSendResult.java │ │ │ │ ├── WxCpMessageSendStatistics.java │ │ │ │ ├── WxCpSchoolContactMessage.java │ │ │ │ ├── WxCpSchoolContactMessageSendResult.java │ │ │ │ ├── WxCpTpXmlMessage.java │ │ │ │ ├── WxCpXmlApprovalInfo.java │ │ │ │ ├── WxCpXmlMessage.java │ │ │ │ ├── WxCpXmlOutEventMessage.java │ │ │ │ ├── WxCpXmlOutImageMessage.java │ │ │ │ ├── WxCpXmlOutMessage.java │ │ │ │ ├── WxCpXmlOutNewsMessage.java │ │ │ │ ├── WxCpXmlOutTaskCardMessage.java │ │ │ │ ├── WxCpXmlOutTextMessage.java │ │ │ │ ├── WxCpXmlOutUpdateBtnMessage.java │ │ │ │ ├── WxCpXmlOutVideoMessage.java │ │ │ │ └── WxCpXmlOutVoiceMessage.java │ │ │ ├── messagebuilder/ │ │ │ │ ├── BaseBuilder.java │ │ │ │ ├── FileBuilder.java │ │ │ │ ├── ImageBuilder.java │ │ │ │ ├── MarkdownMsgBuilder.java │ │ │ │ ├── MiniProgramNoticeMsgBuilder.java │ │ │ │ ├── MpnewsBuilder.java │ │ │ │ ├── NewsBuilder.java │ │ │ │ ├── TaskCardBuilder.java │ │ │ │ ├── TemplateCardBuilder.java │ │ │ │ ├── TextBuilder.java │ │ │ │ ├── TextCardBuilder.java │ │ │ │ ├── VideoBuilder.java │ │ │ │ └── VoiceBuilder.java │ │ │ ├── msgaudit/ │ │ │ │ ├── WxCpAgreeInfo.java │ │ │ │ ├── WxCpChatDatas.java │ │ │ │ ├── WxCpChatModel.java │ │ │ │ ├── WxCpCheckAgreeRequest.java │ │ │ │ ├── WxCpFileItem.java │ │ │ │ └── WxCpGroupChat.java │ │ │ ├── oa/ │ │ │ │ ├── SummaryInfo.java │ │ │ │ ├── WxCpApprovalApplier.java │ │ │ │ ├── WxCpApprovalApplyData.java │ │ │ │ ├── WxCpApprovalComment.java │ │ │ │ ├── WxCpApprovalDetailResult.java │ │ │ │ ├── WxCpApprovalInfo.java │ │ │ │ ├── WxCpApprovalInfoQueryFilter.java │ │ │ │ ├── WxCpApprovalRecord.java │ │ │ │ ├── WxCpApprovalRecordDetail.java │ │ │ │ ├── WxCpApproverAttr.java │ │ │ │ ├── WxCpCheckinData.java │ │ │ │ ├── WxCpCheckinDayData.java │ │ │ │ ├── WxCpCheckinGroupBase.java │ │ │ │ ├── WxCpCheckinMonthData.java │ │ │ │ ├── WxCpCheckinOption.java │ │ │ │ ├── WxCpCheckinSchedule.java │ │ │ │ ├── WxCpCorpConfInfo.java │ │ │ │ ├── WxCpCropCheckinOption.java │ │ │ │ ├── WxCpDialRecord.java │ │ │ │ ├── WxCpGetApprovalData.java │ │ │ │ ├── WxCpOaApplyEventRequest.java │ │ │ │ ├── WxCpOaApprovalTemplate.java │ │ │ │ ├── WxCpOaApprovalTemplateResult.java │ │ │ │ ├── WxCpOaSchedule.java │ │ │ │ ├── WxCpOperator.java │ │ │ │ ├── WxCpRecordSpStatus.java │ │ │ │ ├── WxCpSetCheckinSchedule.java │ │ │ │ ├── WxCpSpStatus.java │ │ │ │ ├── WxCpUserVacationQuota.java │ │ │ │ ├── applydata/ │ │ │ │ │ ├── ApplyDataContent.java │ │ │ │ │ ├── ContentTitle.java │ │ │ │ │ └── ContentValue.java │ │ │ │ ├── calendar/ │ │ │ │ │ └── WxCpOaCalendar.java │ │ │ │ ├── doc/ │ │ │ │ │ ├── WxCpDocAdminListResult.java │ │ │ │ │ ├── WxCpDocAdminRequest.java │ │ │ │ │ ├── WxCpDocAuthInfo.java │ │ │ │ │ ├── WxCpDocCreateData.java │ │ │ │ │ ├── WxCpDocCreateRequest.java │ │ │ │ │ ├── WxCpDocData.java │ │ │ │ │ ├── WxCpDocGetDataRequest.java │ │ │ │ │ ├── WxCpDocImageUploadResult.java │ │ │ │ │ ├── WxCpDocInfo.java │ │ │ │ │ ├── WxCpDocModifyJoinRuleRequest.java │ │ │ │ │ ├── WxCpDocModifyMemberRequest.java │ │ │ │ │ ├── WxCpDocModifyRequest.java │ │ │ │ │ ├── WxCpDocModifySafetySettingRequest.java │ │ │ │ │ ├── WxCpDocModifySaftySettingRequest.java │ │ │ │ │ ├── WxCpDocRenameRequest.java │ │ │ │ │ ├── WxCpDocShare.java │ │ │ │ │ ├── WxCpDocShareRequest.java │ │ │ │ │ ├── WxCpDocSheetBatchUpdateRequest.java │ │ │ │ │ ├── WxCpDocSheetBatchUpdateResponse.java │ │ │ │ │ ├── WxCpDocSheetData.java │ │ │ │ │ ├── WxCpDocSheetGetDataRequest.java │ │ │ │ │ ├── WxCpDocSheetProperties.java │ │ │ │ │ ├── WxCpDocSmartSheetAuth.java │ │ │ │ │ ├── WxCpDocSmartSheetAuthRequest.java │ │ │ │ │ ├── WxCpDocSmartSheetModifyAuthRequest.java │ │ │ │ │ ├── WxCpDocSmartSheetRequest.java │ │ │ │ │ ├── WxCpDocSmartSheetResult.java │ │ │ │ │ ├── WxCpFormAnswer.java │ │ │ │ │ ├── WxCpFormAnswerRequest.java │ │ │ │ │ ├── WxCpFormCreateRequest.java │ │ │ │ │ ├── WxCpFormCreateResult.java │ │ │ │ │ ├── WxCpFormInfo.java │ │ │ │ │ ├── WxCpFormInfoResult.java │ │ │ │ │ ├── WxCpFormModifyRequest.java │ │ │ │ │ ├── WxCpFormStatistic.java │ │ │ │ │ ├── WxCpFormStatisticRequest.java │ │ │ │ │ └── WxCpFormStatisticResult.java │ │ │ │ ├── mail/ │ │ │ │ │ ├── WxCpMailCommonSendRequest.java │ │ │ │ │ ├── WxCpMailMeetingSendRequest.java │ │ │ │ │ └── WxCpMailScheduleSendRequest.java │ │ │ │ ├── meeting/ │ │ │ │ │ ├── WxCpMeeting.java │ │ │ │ │ ├── WxCpMeetingUpdateResult.java │ │ │ │ │ └── WxCpUserMeetingIdResult.java │ │ │ │ ├── meetingroom/ │ │ │ │ │ ├── WxCpOaMeetingRoom.java │ │ │ │ │ ├── WxCpOaMeetingRoomBookByMeetingRequest.java │ │ │ │ │ ├── WxCpOaMeetingRoomBookByScheduleRequest.java │ │ │ │ │ ├── WxCpOaMeetingRoomBookRequest.java │ │ │ │ │ ├── WxCpOaMeetingRoomBookResult.java │ │ │ │ │ ├── WxCpOaMeetingRoomBookingInfoByBookingIdRequest.java │ │ │ │ │ ├── WxCpOaMeetingRoomBookingInfoByBookingIdResult.java │ │ │ │ │ ├── WxCpOaMeetingRoomBookingInfoRequest.java │ │ │ │ │ ├── WxCpOaMeetingRoomBookingInfoResult.java │ │ │ │ │ └── WxCpOaMeetingRoomCancelBookRequest.java │ │ │ │ ├── selfagent/ │ │ │ │ │ └── WxCpOpenApprovalData.java │ │ │ │ ├── templatedata/ │ │ │ │ │ ├── TemplateConfig.java │ │ │ │ │ ├── TemplateContent.java │ │ │ │ │ ├── TemplateControls.java │ │ │ │ │ ├── TemplateDateRange.java │ │ │ │ │ ├── TemplateLocation.java │ │ │ │ │ ├── TemplateOptions.java │ │ │ │ │ ├── TemplateProperty.java │ │ │ │ │ ├── TemplateTips.java │ │ │ │ │ ├── TemplateTipsContent.java │ │ │ │ │ ├── TemplateTipsSubText.java │ │ │ │ │ ├── TemplateTipsSubTextContent.java │ │ │ │ │ ├── TemplateTipsSubTextContentLink.java │ │ │ │ │ ├── TemplateTipsSubTextContentPlainText.java │ │ │ │ │ ├── TemplateTipsText.java │ │ │ │ │ ├── TemplateTitle.java │ │ │ │ │ ├── TemplateVacationItem.java │ │ │ │ │ └── control/ │ │ │ │ │ ├── TemplateAttendance.java │ │ │ │ │ ├── TemplateContact.java │ │ │ │ │ ├── TemplateDate.java │ │ │ │ │ ├── TemplateSelector.java │ │ │ │ │ ├── TemplateTable.java │ │ │ │ │ └── TemplateVacation.java │ │ │ │ └── wedrive/ │ │ │ │ ├── WxCpFileAclAddRequest.java │ │ │ │ ├── WxCpFileAclDelRequest.java │ │ │ │ ├── WxCpFileCreate.java │ │ │ │ ├── WxCpFileDeleteRequest.java │ │ │ │ ├── WxCpFileDownload.java │ │ │ │ ├── WxCpFileInfo.java │ │ │ │ ├── WxCpFileList.java │ │ │ │ ├── WxCpFileListRequest.java │ │ │ │ ├── WxCpFileMove.java │ │ │ │ ├── WxCpFileMoveRequest.java │ │ │ │ ├── WxCpFileRename.java │ │ │ │ ├── WxCpFileShare.java │ │ │ │ ├── WxCpFileUpload.java │ │ │ │ ├── WxCpFileUploadRequest.java │ │ │ │ ├── WxCpSpaceAclAddRequest.java │ │ │ │ ├── WxCpSpaceAclDelRequest.java │ │ │ │ ├── WxCpSpaceCreateData.java │ │ │ │ ├── WxCpSpaceCreateRequest.java │ │ │ │ ├── WxCpSpaceInfo.java │ │ │ │ ├── WxCpSpaceRenameRequest.java │ │ │ │ ├── WxCpSpaceSettingRequest.java │ │ │ │ └── WxCpSpaceShare.java │ │ │ ├── order/ │ │ │ │ ├── WxCpTpOrderDetails.java │ │ │ │ └── WxCpTpOrderListGetResult.java │ │ │ ├── outxmlbuilder/ │ │ │ │ ├── BaseBuilder.java │ │ │ │ ├── EventBuilder.java │ │ │ │ ├── ImageBuilder.java │ │ │ │ ├── NewsBuilder.java │ │ │ │ ├── TaskCardBuilder.java │ │ │ │ ├── TextBuilder.java │ │ │ │ ├── UpdateButtonBuilder.java │ │ │ │ ├── VideoBuilder.java │ │ │ │ └── VoiceBuilder.java │ │ │ ├── school/ │ │ │ │ ├── WxCpCustomizeHealthInfo.java │ │ │ │ ├── WxCpPaymentResult.java │ │ │ │ ├── WxCpResultList.java │ │ │ │ ├── WxCpSchoolLivingInfo.java │ │ │ │ ├── WxCpSchoolUnwatchStat.java │ │ │ │ ├── WxCpSchoolWatchStat.java │ │ │ │ ├── WxCpTrade.java │ │ │ │ ├── health/ │ │ │ │ │ ├── WxCpGetHealthReportStat.java │ │ │ │ │ ├── WxCpGetReportAnswer.java │ │ │ │ │ ├── WxCpGetReportJobIds.java │ │ │ │ │ └── WxCpGetReportJobInfo.java │ │ │ │ └── user/ │ │ │ │ ├── WxCpAllowScope.java │ │ │ │ ├── WxCpBatchCreateParentRequest.java │ │ │ │ ├── WxCpBatchCreateStudentRequest.java │ │ │ │ ├── WxCpBatchDeleteStudentRequest.java │ │ │ │ ├── WxCpBatchResultList.java │ │ │ │ ├── WxCpBatchUpdateParentRequest.java │ │ │ │ ├── WxCpBatchUpdateStudentRequest.java │ │ │ │ ├── WxCpCreateDepartment.java │ │ │ │ ├── WxCpCreateDepartmentRequest.java │ │ │ │ ├── WxCpCreateParentRequest.java │ │ │ │ ├── WxCpDepartmentList.java │ │ │ │ ├── WxCpExternalContact.java │ │ │ │ ├── WxCpListParentResult.java │ │ │ │ ├── WxCpSetUpgradeInfo.java │ │ │ │ ├── WxCpSubscribeQrCode.java │ │ │ │ ├── WxCpUpdateDepartmentRequest.java │ │ │ │ ├── WxCpUpdateParentRequest.java │ │ │ │ ├── WxCpUserListResult.java │ │ │ │ └── WxCpUserResult.java │ │ │ ├── taskcard/ │ │ │ │ └── TaskCardButton.java │ │ │ ├── templatecard/ │ │ │ │ ├── ActionMenuItem.java │ │ │ │ ├── CheckboxOption.java │ │ │ │ ├── HorizontalContent.java │ │ │ │ ├── MultipleSelect.java │ │ │ │ ├── QuoteArea.java │ │ │ │ ├── TemplateCardButton.java │ │ │ │ ├── TemplateCardButtonSelection.java │ │ │ │ ├── TemplateCardButtonSelectionOption.java │ │ │ │ ├── TemplateCardImageTextArea.java │ │ │ │ ├── TemplateCardJump.java │ │ │ │ └── VerticalContent.java │ │ │ ├── user/ │ │ │ │ └── WxCpDeptUserResult.java │ │ │ └── workbench/ │ │ │ ├── WorkBenchKeyData.java │ │ │ ├── WorkBenchList.java │ │ │ └── WxCpSecondVerificationInfo.java │ │ ├── config/ │ │ │ ├── WxCpConfigStorage.java │ │ │ ├── WxCpCorpGroupConfigStorage.java │ │ │ ├── WxCpTpConfigStorage.java │ │ │ └── impl/ │ │ │ ├── AbstractWxCpInRedisConfigImpl.java │ │ │ ├── AbstractWxCpTpInRedisConfigImpl.java │ │ │ ├── WxCpCorpGroupDefaultConfigImpl.java │ │ │ ├── WxCpCorpGroupRedissonConfigImpl.java │ │ │ ├── WxCpDefaultConfigImpl.java │ │ │ ├── WxCpJedisConfigImpl.java │ │ │ ├── WxCpRedisConfigImpl.java │ │ │ ├── WxCpRedisTemplateConfigImpl.java │ │ │ ├── WxCpRedissonConfigImpl.java │ │ │ ├── WxCpTpDefaultConfigImpl.java │ │ │ ├── WxCpTpJedisConfigImpl.java │ │ │ ├── WxCpTpRedisTemplateConfigImpl.java │ │ │ └── WxCpTpRedissonConfigImpl.java │ │ ├── constant/ │ │ │ ├── WxCpApiPathConsts.java │ │ │ ├── WxCpConsts.java │ │ │ └── WxCpTpConsts.java │ │ ├── corpgroup/ │ │ │ └── service/ │ │ │ ├── WxCpCgService.java │ │ │ ├── WxCpLinkedCorpService.java │ │ │ └── impl/ │ │ │ ├── BaseWxCpCgServiceImpl.java │ │ │ ├── WxCpCgServiceApacheHttpClientImpl.java │ │ │ ├── WxCpCgServiceHttpComponentsImpl.java │ │ │ └── WxCpLinkedCorpServiceImpl.java │ │ ├── message/ │ │ │ ├── WxCpMessageHandler.java │ │ │ ├── WxCpMessageInterceptor.java │ │ │ ├── WxCpMessageMatcher.java │ │ │ ├── WxCpMessageRouter.java │ │ │ └── WxCpMessageRouterRule.java │ │ ├── tp/ │ │ │ ├── message/ │ │ │ │ ├── WxCpTpMessageHandler.java │ │ │ │ ├── WxCpTpMessageInterceptor.java │ │ │ │ ├── WxCpTpMessageMatcher.java │ │ │ │ ├── WxCpTpMessageRouter.java │ │ │ │ └── WxCpTpMessageRouterRule.java │ │ │ └── service/ │ │ │ ├── WxCpTpContactService.java │ │ │ ├── WxCpTpCustomizedService.java │ │ │ ├── WxCpTpDepartmentService.java │ │ │ ├── WxCpTpEditionService.java │ │ │ ├── WxCpTpIdConvertService.java │ │ │ ├── WxCpTpLicenseService.java │ │ │ ├── WxCpTpMediaService.java │ │ │ ├── WxCpTpOAService.java │ │ │ ├── WxCpTpOAuth2Service.java │ │ │ ├── WxCpTpOrderService.java │ │ │ ├── WxCpTpService.java │ │ │ ├── WxCpTpTagService.java │ │ │ ├── WxCpTpUserService.java │ │ │ └── impl/ │ │ │ ├── BaseWxCpTpServiceImpl.java │ │ │ ├── WxCpTpContactServiceImpl.java │ │ │ ├── WxCpTpCustomizedServiceImpl.java │ │ │ ├── WxCpTpDepartmentServiceImpl.java │ │ │ ├── WxCpTpEditionServiceImpl.java │ │ │ ├── WxCpTpIdConvertServiceImpl.java │ │ │ ├── WxCpTpLicenseServiceImpl.java │ │ │ ├── WxCpTpMediaServiceImpl.java │ │ │ ├── WxCpTpOAServiceImpl.java │ │ │ ├── WxCpTpOAuth2ServiceImpl.java │ │ │ ├── WxCpTpOrderServiceImpl.java │ │ │ ├── WxCpTpServiceApacheHttpClientImpl.java │ │ │ ├── WxCpTpServiceHttpComponentsImpl.java │ │ │ ├── WxCpTpServiceImpl.java │ │ │ ├── WxCpTpServiceJoddHttpImpl.java │ │ │ ├── WxCpTpServiceOkHttpImpl.java │ │ │ ├── WxCpTpTagServiceImpl.java │ │ │ └── WxCpTpUserServiceImpl.java │ │ └── util/ │ │ ├── crypto/ │ │ │ ├── WxCpCryptUtil.java │ │ │ └── WxCpTpCryptUtil.java │ │ ├── json/ │ │ │ ├── StatisticListAdapter.java │ │ │ ├── WxCpChatGsonAdapter.java │ │ │ ├── WxCpConclusionAdapter.java │ │ │ ├── WxCpDepartGsonAdapter.java │ │ │ ├── WxCpGsonBuilder.java │ │ │ ├── WxCpMenuGsonAdapter.java │ │ │ ├── WxCpTagGsonAdapter.java │ │ │ └── WxCpUserGsonAdapter.java │ │ └── xml/ │ │ └── XStreamTransformer.java │ └── test/ │ ├── java/ │ │ └── me/ │ │ └── chanjar/ │ │ └── weixin/ │ │ └── cp/ │ │ ├── api/ │ │ │ ├── ApiTestModule.java │ │ │ ├── ApiTestModuleWithMockServer.java │ │ │ ├── TestConstants.java │ │ │ ├── WxCpBaseAPITest.java │ │ │ ├── WxCpBusyRetryTest.java │ │ │ ├── WxCpExternalContactTest.java │ │ │ ├── WxCpLivingTest.java │ │ │ ├── WxCpMessageRouterTest.java │ │ │ ├── WxCpMsgAuditTest.java │ │ │ ├── WxCpOaAgentTest.java │ │ │ ├── WxCpOaWeDriveServiceTest.java │ │ │ ├── WxCpSchoolHealthTest.java │ │ │ ├── WxCpSchoolTest.java │ │ │ ├── WxCpSchoolUserTest.java │ │ │ ├── WxCpTpMessageRouterTest.java │ │ │ └── impl/ │ │ │ ├── BaseWxCpServiceImplTest.java │ │ │ ├── WxCpAgentServiceImplTest.java │ │ │ ├── WxCpAgentWorkBenchImplTest.java │ │ │ ├── WxCpChatServiceImplTest.java │ │ │ ├── WxCpCorpGroupServiceImplTest.java │ │ │ ├── WxCpDepartmentServiceImplTest.java │ │ │ ├── WxCpExternalContactServiceImplTest.java │ │ │ ├── WxCpGroupRobotServiceImplTest.java │ │ │ ├── WxCpHrServiceImplTest.java │ │ │ ├── WxCpIntelligentRobotServiceImplTest.java │ │ │ ├── WxCpKfServiceImplTest.java │ │ │ ├── WxCpMediaServiceImplTest.java │ │ │ ├── WxCpMeetingServiceImplTest.java │ │ │ ├── WxCpMenuServiceImplTest.java │ │ │ ├── WxCpMessageServiceImplTest.java │ │ │ ├── WxCpOAuth2ServiceImplTest.java │ │ │ ├── WxCpOaCalendarServiceImplTest.java │ │ │ ├── WxCpOaMeetingRoomServiceImplTest.java │ │ │ ├── WxCpOaScheduleServiceImplTest.java │ │ │ ├── WxCpOaServiceImplTest.java │ │ │ ├── WxCpOaWeDocServiceImplTest.java │ │ │ ├── WxCpSchoolUserServiceImplTest.java │ │ │ ├── WxCpServiceGetMsgAuditAccessTokenTest.java │ │ │ ├── WxCpTagServiceImplTest.java │ │ │ ├── WxCpTaskCardServiceImplTest.java │ │ │ └── WxCpUserServiceImplTest.java │ │ ├── bean/ │ │ │ ├── WxCpAgentTest.java │ │ │ ├── WxCpTpXmlPackageTest.java │ │ │ ├── external/ │ │ │ │ ├── WxCpUpdateRemarkRequestTest.java │ │ │ │ ├── WxCpUserExternalContactInfoTest.java │ │ │ │ └── contact/ │ │ │ │ └── WxCpGroupMsgResultTest.java │ │ │ ├── message/ │ │ │ │ ├── TemplateCardMessageTest.java │ │ │ │ ├── WxCpLinkedCorpMessageTest.java │ │ │ │ ├── WxCpMessageTest.java │ │ │ │ ├── WxCpSchoolContactMessageTest.java │ │ │ │ ├── WxCpTpXmlMessageTest.java │ │ │ │ ├── WxCpXmlMessageTest.java │ │ │ │ ├── WxCpXmlOutImageMessageTest.java │ │ │ │ ├── WxCpXmlOutNewsMessageTest.java │ │ │ │ ├── WxCpXmlOutTaskCardMessageTest.java │ │ │ │ ├── WxCpXmlOutTextMessageTest.java │ │ │ │ ├── WxCpXmlOutVideoMessageTest.java │ │ │ │ └── WxCpXmlOutVoiceMessageTest.java │ │ │ └── oa/ │ │ │ ├── WxCpOaApplyEventRequestTest.java │ │ │ ├── WxCpOaApprovalTemplateResultTest.java │ │ │ ├── calendar/ │ │ │ │ └── WxCpOaCalendarTest.java │ │ │ └── doc/ │ │ │ └── WxCpOaWeDocJsonTest.java │ │ ├── config/ │ │ │ └── impl/ │ │ │ ├── DemoToStringFix.java │ │ │ ├── WxCpRedisConfigImplTest.java │ │ │ └── WxCpTpDefaultConfigImplTest.java │ │ ├── corpgroup/ │ │ │ └── service/ │ │ │ └── impl/ │ │ │ ├── WxCpCgServiceApacheHttpClientImplTest.java │ │ │ └── WxCpLinkedCorpServiceImplTest.java │ │ ├── demo/ │ │ │ ├── WxCpApprovalWorkflowDemo.java │ │ │ ├── WxCpDemoInMemoryConfigStorage.java │ │ │ ├── WxCpDemoServer.java │ │ │ ├── WxCpEndpointServlet.java │ │ │ └── WxCpOAuth2Servlet.java │ │ ├── tp/ │ │ │ └── service/ │ │ │ └── impl/ │ │ │ ├── BaseWxCpTpServiceImplTest.java │ │ │ ├── WxCpTpCustomizedServiceImplTest.java │ │ │ ├── WxCpTpEditionServiceImplTest.java │ │ │ ├── WxCpTpLicenseServiceImplTest.java │ │ │ ├── WxCpTpOrderServiceImplTest.java │ │ │ ├── WxCpTpServiceApacheHttpClientImplTest.java │ │ │ ├── WxCpTpTagServiceImplTest.java │ │ │ └── WxCpTpUserServiceImplTest.java │ │ └── util/ │ │ ├── crypto/ │ │ │ └── WxCpCryptUtilTest.java │ │ └── json/ │ │ ├── WxCpUserGsonAdapterForPrivatizedVersionTest.java │ │ └── WxCpUserGsonAdapterTest.java │ └── resources/ │ ├── logback-test.xml │ ├── mm.amr │ ├── moco/ │ │ └── message.json │ ├── test-config.sample.xml │ └── testng.xml ├── weixin-java-miniapp/ │ ├── api-signature-readme.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── cn/ │ │ └── binarywang/ │ │ └── wx/ │ │ └── miniapp/ │ │ ├── api/ │ │ │ ├── WxMaAnalysisService.java │ │ │ ├── WxMaCloudService.java │ │ │ ├── WxMaCodeService.java │ │ │ ├── WxMaComplaintService.java │ │ │ ├── WxMaCustomserviceWorkService.java │ │ │ ├── WxMaDeviceSubscribeService.java │ │ │ ├── WxMaEmployeeRelationService.java │ │ │ ├── WxMaExpressDeliveryReturnService.java │ │ │ ├── WxMaExpressService.java │ │ │ ├── WxMaFaceService.java │ │ │ ├── WxMaImmediateDeliveryService.java │ │ │ ├── WxMaInternetService.java │ │ │ ├── WxMaIntracityService.java │ │ │ ├── WxMaJsapiService.java │ │ │ ├── WxMaKefuService.java │ │ │ ├── WxMaLinkService.java │ │ │ ├── WxMaLiveGoodsService.java │ │ │ ├── WxMaLiveMemberService.java │ │ │ ├── WxMaLiveService.java │ │ │ ├── WxMaMarketingService.java │ │ │ ├── WxMaMediaService.java │ │ │ ├── WxMaMsgService.java │ │ │ ├── WxMaOpenApiService.java │ │ │ ├── WxMaOrderManagementService.java │ │ │ ├── WxMaOrderShippingService.java │ │ │ ├── WxMaPluginService.java │ │ │ ├── WxMaProductOrderService.java │ │ │ ├── WxMaProductService.java │ │ │ ├── WxMaPromotionService.java │ │ │ ├── WxMaQrcodeService.java │ │ │ ├── WxMaReimburseInvoiceService.java │ │ │ ├── WxMaRunService.java │ │ │ ├── WxMaSchemeService.java │ │ │ ├── WxMaSecurityService.java │ │ │ ├── WxMaService.java │ │ │ ├── WxMaSettingService.java │ │ │ ├── WxMaShareService.java │ │ │ ├── WxMaShopAccountService.java │ │ │ ├── WxMaShopAfterSaleService.java │ │ │ ├── WxMaShopAuditService.java │ │ │ ├── WxMaShopCatService.java │ │ │ ├── WxMaShopCouponService.java │ │ │ ├── WxMaShopDeliveryService.java │ │ │ ├── WxMaShopImgService.java │ │ │ ├── WxMaShopOrderService.java │ │ │ ├── WxMaShopPayService.java │ │ │ ├── WxMaShopRegisterService.java │ │ │ ├── WxMaShopSharerService.java │ │ │ ├── WxMaShopSpuService.java │ │ │ ├── WxMaSubscribeService.java │ │ │ ├── WxMaUserService.java │ │ │ ├── WxMaVodService.java │ │ │ ├── WxMaXPayService.java │ │ │ └── impl/ │ │ │ ├── BaseWxMaServiceImpl.java │ │ │ ├── WxMaAnalysisServiceImpl.java │ │ │ ├── WxMaCloudServiceImpl.java │ │ │ ├── WxMaCodeServiceImpl.java │ │ │ ├── WxMaComplaintServiceImpl.java │ │ │ ├── WxMaCustomserviceWorkServiceImpl.java │ │ │ ├── WxMaDeviceSubscribeServiceImpl.java │ │ │ ├── WxMaEmployeeRelationServiceImpl.java │ │ │ ├── WxMaExpressDeliveryReturnServiceImpl.java │ │ │ ├── WxMaExpressServiceImpl.java │ │ │ ├── WxMaFaceServiceImpl.java │ │ │ ├── WxMaImgProcServiceImpl.java │ │ │ ├── WxMaImmediateDeliveryServiceImpl.java │ │ │ ├── WxMaInternetServiceImpl.java │ │ │ ├── WxMaIntracityServiceImpl.java │ │ │ ├── WxMaJsapiServiceImpl.java │ │ │ ├── WxMaKefuServiceImpl.java │ │ │ ├── WxMaLinkServiceImpl.java │ │ │ ├── WxMaLiveGoodsServiceImpl.java │ │ │ ├── WxMaLiveMemberServiceImpl.java │ │ │ ├── WxMaLiveServiceImpl.java │ │ │ ├── WxMaMarketingServiceImpl.java │ │ │ ├── WxMaMediaServiceImpl.java │ │ │ ├── WxMaMsgServiceImpl.java │ │ │ ├── WxMaOcrServiceImpl.java │ │ │ ├── WxMaOpenApiServiceImpl.java │ │ │ ├── WxMaOrderManagementServiceImpl.java │ │ │ ├── WxMaOrderShippingServiceImpl.java │ │ │ ├── WxMaPluginServiceImpl.java │ │ │ ├── WxMaProductOrderServiceImpl.java │ │ │ ├── WxMaProductServiceImpl.java │ │ │ ├── WxMaPromotionServiceImpl.java │ │ │ ├── WxMaQrcodeServiceImpl.java │ │ │ ├── WxMaReimburseInvoiceServiceImpl.java │ │ │ ├── WxMaRunServiceImpl.java │ │ │ ├── WxMaSchemeServiceImpl.java │ │ │ ├── WxMaSecurityServiceImpl.java │ │ │ ├── WxMaServiceHttpClientImpl.java │ │ │ ├── WxMaServiceHttpComponentsImpl.java │ │ │ ├── WxMaServiceImpl.java │ │ │ ├── WxMaServiceJoddHttpImpl.java │ │ │ ├── WxMaServiceOkHttpImpl.java │ │ │ ├── WxMaSettingServiceImpl.java │ │ │ ├── WxMaShareServiceImpl.java │ │ │ ├── WxMaShopAccountServiceImpl.java │ │ │ ├── WxMaShopAfterSaleServiceImpl.java │ │ │ ├── WxMaShopAuditServiceImpl.java │ │ │ ├── WxMaShopCatServiceImpl.java │ │ │ ├── WxMaShopCouponServiceImpl.java │ │ │ ├── WxMaShopDeliveryServiceImpl.java │ │ │ ├── WxMaShopImgServiceImpl.java │ │ │ ├── WxMaShopOrderServiceImpl.java │ │ │ ├── WxMaShopPayServiceImpl.java │ │ │ ├── WxMaShopRegisterServiceImpl.java │ │ │ ├── WxMaShopSharerServiceImpl.java │ │ │ ├── WxMaShopSpuServiceImpl.java │ │ │ ├── WxMaSubscribeServiceImpl.java │ │ │ ├── WxMaUserServiceImpl.java │ │ │ ├── WxMaVodServiceImpl.java │ │ │ └── WxMaXPayServiceImpl.java │ │ ├── bean/ │ │ │ ├── AbstractWxMaQrcodeWrapper.java │ │ │ ├── Watermark.java │ │ │ ├── WxMaApiResponse.java │ │ │ ├── WxMaAuditMediaUploadResult.java │ │ │ ├── WxMaBaseResponse.java │ │ │ ├── WxMaCode2VerifyInfoResult.java │ │ │ ├── WxMaCodeLineColor.java │ │ │ ├── WxMaDomainAction.java │ │ │ ├── WxMaGroupEnterInfo.java │ │ │ ├── WxMaJscode2SessionResult.java │ │ │ ├── WxMaKefuMessage.java │ │ │ ├── WxMaMediaAsyncCheckResult.java │ │ │ ├── WxMaMessage.java │ │ │ ├── WxMaPhoneNumberInfo.java │ │ │ ├── WxMaPluginListResult.java │ │ │ ├── WxMaQrcode.java │ │ │ ├── WxMaRunStepInfo.java │ │ │ ├── WxMaShareInfo.java │ │ │ ├── WxMaStableAccessTokenRequest.java │ │ │ ├── WxMaSubscribeMessage.java │ │ │ ├── WxMaSubscribeMsgEvent.java │ │ │ ├── WxMaTemplateData.java │ │ │ ├── WxMaUniformMessage.java │ │ │ ├── WxMaUpdatableMsg.java │ │ │ ├── WxMaUploadAuthMaterialResult.java │ │ │ ├── WxMaUserInfo.java │ │ │ ├── WxaCode.java │ │ │ ├── WxaCodeUnlimit.java │ │ │ ├── analysis/ │ │ │ │ ├── WxMaRetainInfo.java │ │ │ │ ├── WxMaSummaryTrend.java │ │ │ │ ├── WxMaUserPortrait.java │ │ │ │ ├── WxMaVisitDistribution.java │ │ │ │ ├── WxMaVisitPage.java │ │ │ │ ├── WxMaVisitTrend.java │ │ │ │ └── package-info.java │ │ │ ├── cloud/ │ │ │ │ ├── WxCloudBatchDeleteFileResult.java │ │ │ │ ├── WxCloudBatchDownloadFileResult.java │ │ │ │ ├── WxCloudCloudDatabaseMigrateQueryInfoResult.java │ │ │ │ ├── WxCloudDatabaseCollectionGetResult.java │ │ │ │ ├── WxCloudDatabaseCreateIndexRequest.java │ │ │ │ ├── WxCloudDatabaseQueryResult.java │ │ │ │ ├── WxCloudDatabaseUpdateResult.java │ │ │ │ ├── WxCloudGetQcloudTokenResult.java │ │ │ │ ├── WxCloudSendSmsV2Result.java │ │ │ │ ├── WxCloudUploadFileResult.java │ │ │ │ └── request/ │ │ │ │ └── WxCloudSendSmsV2Request.java │ │ │ ├── code/ │ │ │ │ ├── WxMaCodeAuditStatus.java │ │ │ │ ├── WxMaCodeCommitRequest.java │ │ │ │ ├── WxMaCodeExtConfig.java │ │ │ │ ├── WxMaCodeSubmitAuditItem.java │ │ │ │ ├── WxMaCodeSubmitAuditPreviewInfo.java │ │ │ │ ├── WxMaCodeSubmitAuditRequest.java │ │ │ │ ├── WxMaCodeSubmitAuditUgcDeclare.java │ │ │ │ ├── WxMaCodeVersionDistribution.java │ │ │ │ ├── WxMaCodeVersionInfo.java │ │ │ │ └── package-info.java │ │ │ ├── complaint/ │ │ │ │ ├── WxMaComplaintDetailRequest.java │ │ │ │ ├── WxMaComplaintDetailResult.java │ │ │ │ ├── WxMaComplaintNotifyUrlRequest.java │ │ │ │ ├── WxMaComplaintNotifyUrlResult.java │ │ │ │ ├── WxMaComplaintRequest.java │ │ │ │ ├── WxMaComplaintResult.java │ │ │ │ ├── WxMaCompleteRequest.java │ │ │ │ ├── WxMaNegotiationHistoryRequest.java │ │ │ │ ├── WxMaNegotiationHistoryResult.java │ │ │ │ └── WxMaResponseRequest.java │ │ │ ├── customservice/ │ │ │ │ └── WxMaCustomserviceResult.java │ │ │ ├── delivery/ │ │ │ │ ├── AbnormalConfirmRequest.java │ │ │ │ ├── AbnormalConfirmResponse.java │ │ │ │ ├── AddOrderRequest.java │ │ │ │ ├── AddOrderResponse.java │ │ │ │ ├── BindAccountResponse.java │ │ │ │ ├── CancelOrderRequest.java │ │ │ │ ├── CancelOrderResponse.java │ │ │ │ ├── FollowWaybillRequest.java │ │ │ │ ├── FollowWaybillResponse.java │ │ │ │ ├── GetDeliveryListResponse.java │ │ │ │ ├── GetOrderRequest.java │ │ │ │ ├── GetOrderResponse.java │ │ │ │ ├── MockUpdateOrderRequest.java │ │ │ │ ├── MockUpdateOrderResponse.java │ │ │ │ ├── QueryFollowTraceRequest.java │ │ │ │ ├── QueryFollowTraceResponse.java │ │ │ │ ├── QueryWaybillTraceRequest.java │ │ │ │ ├── QueryWaybillTraceResponse.java │ │ │ │ ├── TraceWaybillRequest.java │ │ │ │ ├── TraceWaybillResponse.java │ │ │ │ ├── UpdateWaybillGoodsRequest.java │ │ │ │ ├── WaybillGoodsInfo.java │ │ │ │ └── base/ │ │ │ │ ├── WxMaDeliveryBaseRequest.java │ │ │ │ └── WxMaDeliveryBaseResponse.java │ │ │ ├── device/ │ │ │ │ ├── WxMaCreateIotGroupIdRequest.java │ │ │ │ ├── WxMaDeviceSubscribeMessageRequest.java │ │ │ │ ├── WxMaDeviceTicketRequest.java │ │ │ │ ├── WxMaGetIotGroupInfoRequest.java │ │ │ │ ├── WxMaIotGroupDeviceInfoResponse.java │ │ │ │ └── WxMaIotGroupDeviceRequest.java │ │ │ ├── employee/ │ │ │ │ ├── WxMaSendEmployeeMsgRequest.java │ │ │ │ └── WxMaUnbindEmployeeRequest.java │ │ │ ├── express/ │ │ │ │ ├── WxMaExpressAccount.java │ │ │ │ ├── WxMaExpressDelivery.java │ │ │ │ ├── WxMaExpressPath.java │ │ │ │ ├── WxMaExpressPrinter.java │ │ │ │ ├── request/ │ │ │ │ │ ├── WxMaExpressAddOrderRequest.java │ │ │ │ │ ├── WxMaExpressBindAccountRequest.java │ │ │ │ │ ├── WxMaExpressDeliveryReturnAddRequest.java │ │ │ │ │ ├── WxMaExpressGetOrderRequest.java │ │ │ │ │ ├── WxMaExpressOrderCargo.java │ │ │ │ │ ├── WxMaExpressOrderCargoDetail.java │ │ │ │ │ ├── WxMaExpressOrderInsured.java │ │ │ │ │ ├── WxMaExpressOrderPerson.java │ │ │ │ │ ├── WxMaExpressOrderShop.java │ │ │ │ │ ├── WxMaExpressOrderShopDetail.java │ │ │ │ │ ├── WxMaExpressPrinterUpdateRequest.java │ │ │ │ │ ├── WxMaExpressReturnOrder.java │ │ │ │ │ └── WxMaExpressTestUpdateOrderRequest.java │ │ │ │ └── result/ │ │ │ │ ├── WxMaExpressInfoResult.java │ │ │ │ ├── WxMaExpressOrderInfoResult.java │ │ │ │ └── WxMaExpressReturnInfoResult.java │ │ │ ├── face/ │ │ │ │ ├── WxMaFaceGetVerifyIdRequest.java │ │ │ │ ├── WxMaFaceGetVerifyIdResponse.java │ │ │ │ ├── WxMaFaceQueryVerifyInfoRequest.java │ │ │ │ └── WxMaFaceQueryVerifyInfoResponse.java │ │ │ ├── internet/ │ │ │ │ ├── WxMaInternetResponse.java │ │ │ │ └── WxMaInternetUserKeyInfo.java │ │ │ ├── intractiy/ │ │ │ │ ├── BasicWxMaOrder.java │ │ │ │ ├── BasicWxMaStoreChargeRefundRequest.java │ │ │ │ ├── PayMode.java │ │ │ │ ├── WxMaAddOrderRequest.java │ │ │ │ ├── WxMaAddOrderResponse.java │ │ │ │ ├── WxMaCancelOrderResponse.java │ │ │ │ ├── WxMaGetPayModeResponse.java │ │ │ │ ├── WxMaOrder.java │ │ │ │ ├── WxMaPreAddOrderRequest.java │ │ │ │ ├── WxMaPreAddOrderResponse.java │ │ │ │ ├── WxMaQueryFlowRequest.java │ │ │ │ ├── WxMaStore.java │ │ │ │ ├── WxMaStoreBalance.java │ │ │ │ ├── WxMaStoreChargeRequest.java │ │ │ │ ├── WxMaStoreFlowResponse.java │ │ │ │ ├── WxMaStoreRefundRequest.java │ │ │ │ └── WxMaTransCity.java │ │ │ ├── invoice/ │ │ │ │ └── reimburse/ │ │ │ │ ├── InvoiceBatchRequest.java │ │ │ │ ├── InvoiceCommodityInfo.java │ │ │ │ ├── InvoiceInfoRequest.java │ │ │ │ ├── InvoiceInfoResponse.java │ │ │ │ ├── InvoiceUserInfo.java │ │ │ │ ├── UpdateInvoiceStatusRequest.java │ │ │ │ └── UpdateStatusBatchRequest.java │ │ │ ├── kefu/ │ │ │ │ ├── WxMaKfInfo.java │ │ │ │ ├── WxMaKfList.java │ │ │ │ ├── WxMaKfSession.java │ │ │ │ ├── WxMaKfSessionList.java │ │ │ │ └── request/ │ │ │ │ ├── WxMaKfAccountRequest.java │ │ │ │ └── WxMaKfSessionRequest.java │ │ │ ├── live/ │ │ │ │ ├── WxMaAssistantResult.java │ │ │ │ ├── WxMaCreateRoomResult.java │ │ │ │ ├── WxMaLiveAssistantInfo.java │ │ │ │ ├── WxMaLiveGoodInfo.java │ │ │ │ ├── WxMaLiveResult.java │ │ │ │ ├── WxMaLiveRoomInfo.java │ │ │ │ └── WxMaLiveSharedCode.java │ │ │ ├── marketing/ │ │ │ │ └── WxMaUserAction.java │ │ │ ├── openapi/ │ │ │ │ ├── WxMiniGetApiQuotaResult.java │ │ │ │ └── WxMiniGetRidInfoResult.java │ │ │ ├── order/ │ │ │ │ ├── WxMaOrderManagementGetOrderDetailPath.java │ │ │ │ └── WxMaOrderManagementResult.java │ │ │ ├── product/ │ │ │ │ ├── MinishopShopCat.java │ │ │ │ ├── WxMiniAfterSaleDetail.java │ │ │ │ ├── WxMiniAfterSaleOrder.java │ │ │ │ ├── WxMiniBatchGetAfterSaleOrderResponse.java │ │ │ │ ├── WxMiniGetAfterSaleOrderResponse.java │ │ │ │ ├── WxMiniOrderAfterSaleDetail.java │ │ │ │ ├── WxMiniOrderDeliveryRequest.java │ │ │ │ ├── WxMinishopAddGoodsSkuData.java │ │ │ │ ├── WxMinishopAddGoodsSpuData.java │ │ │ │ ├── WxMinishopAddressInfo.java │ │ │ │ ├── WxMinishopDeliveryCompany.java │ │ │ │ ├── WxMinishopDeliveryInfo.java │ │ │ │ ├── WxMinishopGetBrandResponse.java │ │ │ │ ├── WxMinishopGetCategoryResponse.java │ │ │ │ ├── WxMinishopGetFrightTemplateResponse.java │ │ │ │ ├── WxMinishopGoodsSkuAttr.java │ │ │ │ ├── WxMinishopOrderDetail.java │ │ │ │ ├── WxMinishopOrderDetailResponse.java │ │ │ │ ├── WxMinishopOrderListResponse.java │ │ │ │ ├── WxMinishopOrderResult.java │ │ │ │ ├── WxMinishopPayInfo.java │ │ │ │ ├── WxMinishopPriceInfo.java │ │ │ │ ├── WxMinishopProductInfo.java │ │ │ │ ├── WxMinishopResult.java │ │ │ │ ├── WxMinishopSku.java │ │ │ │ ├── WxMinishopSkuListResponse.java │ │ │ │ ├── WxMinishopSpu.java │ │ │ │ ├── WxMinishopSpuGet.java │ │ │ │ ├── WxMinishopSpuGetResponse.java │ │ │ │ ├── WxMinishopSpuListResponse.java │ │ │ │ └── WxMinishopUpdateGoodsSkuData.java │ │ │ ├── promoter/ │ │ │ │ ├── request/ │ │ │ │ │ ├── WxMaPromoterUpdateRoleRequest.java │ │ │ │ │ ├── WxMaPromotionAddPromoterRequest.java │ │ │ │ │ ├── WxMaPromotionAddRoleRequest.java │ │ │ │ │ ├── WxMaPromotionGetInvitationMaterialRequest.java │ │ │ │ │ ├── WxMaPromotionGetMsgClickDataRequest.java │ │ │ │ │ ├── WxMaPromotionGetMsgRequest.java │ │ │ │ │ ├── WxMaPromotionGetOrderRequest.java │ │ │ │ │ ├── WxMaPromotionGetPromoterRequest.java │ │ │ │ │ ├── WxMaPromotionGetRelationRequest.java │ │ │ │ │ ├── WxMaPromotionGetRoleRequest.java │ │ │ │ │ ├── WxMaPromotionGetShareMaterialRequest.java │ │ │ │ │ ├── WxMaPromotionSendMsgRequest.java │ │ │ │ │ ├── WxMaPromotionSingleSendMsgRequest.java │ │ │ │ │ └── WxMaPromotionUpdatePromoterRequest.java │ │ │ │ └── response/ │ │ │ │ ├── WxMaPromotionAddPromoterResponse.java │ │ │ │ ├── WxMaPromotionAddRoleResponse.java │ │ │ │ ├── WxMaPromotionGetInvitationMaterialResponse.java │ │ │ │ ├── WxMaPromotionGetMsgClickDataResponse.java │ │ │ │ ├── WxMaPromotionGetMsgResponse.java │ │ │ │ ├── WxMaPromotionGetOrderResponse.java │ │ │ │ ├── WxMaPromotionGetPromoterResponse.java │ │ │ │ ├── WxMaPromotionGetRelationResponse.java │ │ │ │ ├── WxMaPromotionGetRoleResponse.java │ │ │ │ ├── WxMaPromotionGetShareMaterialResponse.java │ │ │ │ ├── WxMaPromotionSendMsgResponse.java │ │ │ │ ├── WxMaPromotionSingleSendMsgResponse.java │ │ │ │ ├── WxMaPromotionUpdatePromoterResponse.java │ │ │ │ └── WxMaPromotionUpdateRoleResponse.java │ │ │ ├── safety/ │ │ │ │ ├── request/ │ │ │ │ │ └── WxMaUserSafetyRiskRankRequest.java │ │ │ │ └── response/ │ │ │ │ └── WxMaUserSafetyRiskRankResponse.java │ │ │ ├── scheme/ │ │ │ │ ├── WxMaGenerateNfcSchemeRequest.java │ │ │ │ └── WxMaGenerateSchemeRequest.java │ │ │ ├── security/ │ │ │ │ ├── WxMaMediaSecCheckCheckRequest.java │ │ │ │ ├── WxMaMsgSecCheckCheckRequest.java │ │ │ │ └── WxMaMsgSecCheckCheckResponse.java │ │ │ ├── shop/ │ │ │ │ ├── WxMaPromotionInfo.java │ │ │ │ ├── WxMaShopAccountGetBrandListItem.java │ │ │ │ ├── WxMaShopAccountGetCategoryListItem.java │ │ │ │ ├── WxMaShopAccountGetInfo.java │ │ │ │ ├── WxMaShopAddOrderResult.java │ │ │ │ ├── WxMaShopAddSpuResult.java │ │ │ │ ├── WxMaShopAddressInfo.java │ │ │ │ ├── WxMaShopCatGetDetail.java │ │ │ │ ├── WxMaShopCouponInfo.java │ │ │ │ ├── WxMaShopDeliveryDetail.java │ │ │ │ ├── WxMaShopDeliveryItem.java │ │ │ │ ├── WxMaShopGetSpuResult.java │ │ │ │ ├── WxMaShopOrderDetail.java │ │ │ │ ├── WxMaShopOrderInfo.java │ │ │ │ ├── WxMaShopOrderResult.java │ │ │ │ ├── WxMaShopPayInfo.java │ │ │ │ ├── WxMaShopPriceInfo.java │ │ │ │ ├── WxMaShopProductInfo.java │ │ │ │ ├── WxMaShopPromotionInfo.java │ │ │ │ ├── WxMaShopSkuAttribute.java │ │ │ │ ├── WxMaShopSkuInfo.java │ │ │ │ ├── WxMaShopSkuResult.java │ │ │ │ ├── WxMaShopSkuWithoutAuditInfo.java │ │ │ │ ├── WxMaShopSpuAudit.java │ │ │ │ ├── WxMaShopSpuDescInfo.java │ │ │ │ ├── WxMaShopSpuInfo.java │ │ │ │ ├── WxMaShopSpuWithoutAuditInfo.java │ │ │ │ ├── request/ │ │ │ │ │ ├── WxMaOrderShippingIsTradeManagedRequest.java │ │ │ │ │ ├── WxMaShopAcceptReturnRequest.java │ │ │ │ │ ├── WxMaShopAccountUpdateInfoRequest.java │ │ │ │ │ ├── WxMaShopAfterSaleAddRequest.java │ │ │ │ │ ├── WxMaShopAfterSaleGetRequest.java │ │ │ │ │ ├── WxMaShopAfterSaleListRequest.java │ │ │ │ │ ├── WxMaShopAfterSaleUpdateRequest.java │ │ │ │ │ ├── WxMaShopAfterSaleUploadReturnInfoRequest.java │ │ │ │ │ ├── WxMaShopAuditBrandRequest.java │ │ │ │ │ ├── WxMaShopAuditCategoryRequest.java │ │ │ │ │ ├── WxMaShopDeliveryRecieveRequest.java │ │ │ │ │ ├── WxMaShopDeliverySendRequest.java │ │ │ │ │ ├── WxMaShopEcAfterSaleGetRequest.java │ │ │ │ │ ├── WxMaShopEcAfterSaleUpdateRequest.java │ │ │ │ │ ├── WxMaShopOrderPayRequest.java │ │ │ │ │ ├── WxMaShopPayCreateOrderRequest.java │ │ │ │ │ ├── WxMaShopPayOrderRefundRequest.java │ │ │ │ │ ├── WxMaShopRegisterApplySceneRequest.java │ │ │ │ │ ├── WxMaShopRegisterFinishAccessInfoRequest.java │ │ │ │ │ ├── WxMaShopSpuPageRequest.java │ │ │ │ │ ├── WxMaShopUploadCerficatesRequest.java │ │ │ │ │ └── shipping/ │ │ │ │ │ ├── ContactBean.java │ │ │ │ │ ├── OrderKeyBean.java │ │ │ │ │ ├── PayerBean.java │ │ │ │ │ ├── ShippingListBean.java │ │ │ │ │ ├── WxMaOrderCombinedShippingInfoUploadRequest.java │ │ │ │ │ ├── WxMaOrderShippingInfoGetListRequest.java │ │ │ │ │ ├── WxMaOrderShippingInfoGetRequest.java │ │ │ │ │ ├── WxMaOrderShippingInfoNotifyConfirmRequest.java │ │ │ │ │ └── WxMaOrderShippingInfoUploadRequest.java │ │ │ │ └── response/ │ │ │ │ ├── WxMaOrderShippingITMCCompletedResult.java │ │ │ │ ├── WxMaOrderShippingInfoBaseResponse.java │ │ │ │ ├── WxMaOrderShippingInfoGetListResponse.java │ │ │ │ ├── WxMaOrderShippingInfoGetResponse.java │ │ │ │ ├── WxMaOrderShippingIsTradeManagedResponse.java │ │ │ │ ├── WxMaShopAccountGetBrandListResponse.java │ │ │ │ ├── WxMaShopAccountGetCategoryListResponse.java │ │ │ │ ├── WxMaShopAccountGetInfoResponse.java │ │ │ │ ├── WxMaShopAddOrderResponse.java │ │ │ │ ├── WxMaShopAddSpuResponse.java │ │ │ │ ├── WxMaShopAfterSaleAddResponse.java │ │ │ │ ├── WxMaShopAfterSaleGetResponse.java │ │ │ │ ├── WxMaShopAfterSaleListResponse.java │ │ │ │ ├── WxMaShopAuditBrandResponse.java │ │ │ │ ├── WxMaShopAuditCategoryResponse.java │ │ │ │ ├── WxMaShopAuditResultResponse.java │ │ │ │ ├── WxMaShopBaseResponse.java │ │ │ │ ├── WxMaShopCatGetResponse.java │ │ │ │ ├── WxMaShopCouponListResponse.java │ │ │ │ ├── WxMaShopCouponResponse.java │ │ │ │ ├── WxMaShopDeliveryGetCompanyListResponse.java │ │ │ │ ├── WxMaShopEcAfterSaleGetResponse.java │ │ │ │ ├── WxMaShopGetOrderListResponse.java │ │ │ │ ├── WxMaShopGetOrderResponse.java │ │ │ │ ├── WxMaShopGetPaymentParamsResponse.java │ │ │ │ ├── WxMaShopGetSpuListRes
Showing preview only (1,689K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (18700 symbols across 3878 files)
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/AbstractWxChannelConfiguration.java
class AbstractWxChannelConfiguration (line 29) | @RequiredArgsConstructor
method wxChannelMultiServices (line 32) | protected WxChannelMultiServices wxChannelMultiServices(WxChannelMulti...
method wxChannelConfigStorage (line 75) | protected abstract WxChannelDefaultConfigImpl wxChannelConfigStorage(W...
method wxChannelService (line 77) | public WxChannelService wxChannelService(WxChannelConfig wxChannelConf...
method configApp (line 110) | private void configApp(WxChannelDefaultConfigImpl config, WxChannelSin...
method configHttp (line 128) | private void configHttp(WxChannelDefaultConfigImpl config, WxChannelMu...
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/WxChannelInJedisConfiguration.java
class WxChannelInJedisConfiguration (line 24) | @Configuration
method wxChannelMultiServices (line 34) | @Bean
method wxChannelConfigStorage (line 39) | @Override
method configRedis (line 44) | private WxChannelDefaultConfigImpl configRedis(WxChannelMultiPropertie...
method getJedisPool (line 55) | private JedisPool getJedisPool(WxChannelMultiProperties wxChannelMulti...
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/WxChannelInMemoryConfiguration.java
class WxChannelInMemoryConfiguration (line 18) | @Configuration
method wxChannelMultiServices (line 27) | @Bean
method wxChannelConfigStorage (line 32) | @Override
method configInMemory (line 37) | private WxChannelDefaultConfigImpl configInMemory() {
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/WxChannelInRedissonConfiguration.java
class WxChannelInRedissonConfiguration (line 25) | @Configuration
method wxChannelMultiServices (line 35) | @Bean
method wxChannelConfigStorage (line 40) | @Override
method configRedisson (line 45) | private WxChannelDefaultConfigImpl configRedisson(WxChannelMultiProper...
method getRedissonClient (line 56) | private RedissonClient getRedissonClient(WxChannelMultiProperties wxCh...
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/HttpClientType.java
type HttpClientType (line 9) | public enum HttpClientType {
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/StorageType.java
type StorageType (line 9) | public enum StorageType {
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/integration/WxChannelMultiPluginImpl.java
class WxChannelMultiPluginImpl (line 16) | public class WxChannelMultiPluginImpl implements Plugin {
method start (line 17) | @Override
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelMultiProperties.java
class WxChannelMultiProperties (line 20) | @Data
class ConfigStorage (line 35) | @Data
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelMultiRedisProperties.java
class WxChannelMultiRedisProperties (line 14) | @Data
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelSingleProperties.java
class WxChannelSingleProperties (line 14) | @Data
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/service/WxChannelMultiServices.java
type WxChannelMultiServices (line 11) | public interface WxChannelMultiServices {
method getWxChannelService (line 18) | WxChannelService getWxChannelService(String tenantId);
method removeWxChannelService (line 25) | void removeWxChannelService(String tenantId);
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/service/WxChannelMultiServicesImpl.java
class WxChannelMultiServicesImpl (line 14) | public class WxChannelMultiServicesImpl implements WxChannelMultiServices {
method getWxChannelService (line 17) | @Override
method addWxChannelService (line 28) | public void addWxChannelService(String tenantId, WxChannelService wxCh...
method removeWxChannelService (line 32) | @Override
FILE: solon-plugins/wx-java-channel-multi-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/WxChannelServiceAutoConfiguration.java
class WxChannelServiceAutoConfiguration (line 18) | @Configuration
method wxChannelService (line 28) | @Bean
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/AbstractWxChannelConfigStorageConfiguration.java
class AbstractWxChannelConfigStorageConfiguration (line 10) | public abstract class AbstractWxChannelConfigStorageConfiguration {
method config (line 12) | protected WxChannelDefaultConfigImpl config(WxChannelDefaultConfigImpl...
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/WxChannelInJedisConfigStorageConfiguration.java
class WxChannelInJedisConfigStorageConfiguration (line 23) | @Configuration
method wxChannelConfig (line 33) | @Bean
method getWxChannelRedisConfig (line 40) | private WxChannelRedisConfigImpl getWxChannelRedisConfig() {
method getJedisPool (line 52) | private JedisPool getJedisPool() {
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/WxChannelInMemoryConfigStorageConfiguration.java
class WxChannelInMemoryConfigStorageConfiguration (line 15) | @Configuration
method wxChannelConfig (line 23) | @Bean
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/WxChannelInRedissonConfigStorageConfiguration.java
class WxChannelInRedissonConfigStorageConfiguration (line 22) | @Configuration
method wxChannelConfig (line 32) | @Bean
method getWxChannelRedissonConfig (line 39) | private WxChannelRedissonConfigImpl getWxChannelRedissonConfig() {
method getRedissonClient (line 50) | private RedissonClient getRedissonClient() {
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/HttpClientType.java
type HttpClientType (line 8) | public enum HttpClientType {
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/StorageType.java
type StorageType (line 8) | public enum StorageType {
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/integration/WxChannelPluginImpl.java
class WxChannelPluginImpl (line 15) | public class WxChannelPluginImpl implements Plugin {
method start (line 16) | @Override
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/RedisProperties.java
class RedisProperties (line 10) | @Data
FILE: solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelProperties.java
class WxChannelProperties (line 14) | @Data
class ConfigStorage (line 55) | @Data
FILE: solon-plugins/wx-java-channel-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/AbstractWxCpConfiguration.java
class AbstractWxCpConfiguration (line 27) | @RequiredArgsConstructor
method wxCpMultiServices (line 31) | protected WxCpMultiServices wxCpMultiServices(WxCpMultiProperties wxCp...
method wxCpConfigStorage (line 81) | protected abstract WxCpDefaultConfigImpl wxCpConfigStorage(WxCpMultiPr...
method wxCpService (line 83) | private WxCpService wxCpService(WxCpConfigStorage wxCpConfigStorage, W...
method configCorp (line 117) | private void configCorp(WxCpDefaultConfigImpl config, WxCpSingleProper...
method configHttp (line 144) | private void configHttp(WxCpDefaultConfigImpl config, WxCpMultiPropert...
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/WxCpInJedisConfiguration.java
class WxCpInJedisConfiguration (line 23) | @Configuration
method wxCpMultiServices (line 33) | @Bean
method wxCpConfigStorage (line 38) | @Override
method configRedis (line 43) | private WxCpDefaultConfigImpl configRedis(WxCpMultiProperties wxCpMult...
method getJedisPool (line 54) | private JedisPool getJedisPool(WxCpMultiProperties wxCpMultiProperties) {
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/WxCpInMemoryConfiguration.java
class WxCpInMemoryConfiguration (line 17) | @Configuration
method wxCpMultiServices (line 25) | @Bean
method wxCpConfigStorage (line 30) | @Override
method configInMemory (line 35) | private WxCpDefaultConfigImpl configInMemory() {
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/WxCpInRedissonConfiguration.java
class WxCpInRedissonConfiguration (line 25) | @Configuration
method wxCpMultiServices (line 35) | @Bean
method wxCpConfigStorage (line 40) | @Override
method configRedisson (line 45) | private WxCpDefaultConfigImpl configRedisson(WxCpMultiProperties wxCpM...
method getRedissonClient (line 56) | private RedissonClient getRedissonClient(WxCpMultiProperties wxCpMulti...
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/integration/WxCpMultiPluginImpl.java
class WxCpMultiPluginImpl (line 13) | public class WxCpMultiPluginImpl implements Plugin {
method start (line 14) | @Override
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/properties/WxCpMultiProperties.java
class WxCpMultiProperties (line 18) | @Data
class ConfigStorage (line 33) | @Data
type StorageType (line 96) | public enum StorageType {
type HttpClientType (line 115) | public enum HttpClientType {
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/properties/WxCpMultiRedisProperties.java
class WxCpMultiRedisProperties (line 14) | @Data
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/properties/WxCpSingleProperties.java
class WxCpSingleProperties (line 14) | @Data
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/service/WxCpMultiServices.java
type WxCpMultiServices (line 11) | public interface WxCpMultiServices {
method getWxCpService (line 18) | WxCpService getWxCpService(String tenantId);
method removeWxCpService (line 25) | void removeWxCpService(String tenantId);
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/service/WxCpMultiServicesImpl.java
class WxCpMultiServicesImpl (line 14) | public class WxCpMultiServicesImpl implements WxCpMultiServices {
method getWxCpService (line 23) | @Override
method addWxCpService (line 34) | public void addWxCpService(String tenantId, WxCpService wxCpService) {
method removeWxCpService (line 38) | @Override
FILE: solon-plugins/wx-java-cp-multi-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/config/WxCpServiceAutoConfiguration.java
class WxCpServiceAutoConfiguration (line 18) | @Configuration
method wxCpService (line 23) | @Bean
FILE: solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/integration/WxCpPluginImpl.java
class WxCpPluginImpl (line 14) | public class WxCpPluginImpl implements Plugin {
method start (line 15) | @Override
FILE: solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/properties/WxCpProperties.java
class WxCpProperties (line 16) | @Data
class ConfigStorage (line 57) | @Data
type StorageType (line 115) | public enum StorageType {
FILE: solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/properties/WxCpRedisProperties.java
class WxCpRedisProperties (line 13) | @Data
FILE: solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/storage/AbstractWxCpConfigStorageConfiguration.java
class AbstractWxCpConfigStorageConfiguration (line 13) | public abstract class AbstractWxCpConfigStorageConfiguration {
method config (line 15) | protected WxCpDefaultConfigImpl config(WxCpDefaultConfigImpl config, W...
FILE: solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/storage/WxCpInJedisConfigStorageConfiguration.java
class WxCpInJedisConfigStorageConfiguration (line 23) | @Configuration
method wxCpConfigStorage (line 33) | @Bean
method getConfigStorage (line 40) | private WxCpJedisConfigImpl getConfigStorage() {
method getJedisPool (line 51) | private JedisPool getJedisPool() {
FILE: solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/storage/WxCpInMemoryConfigStorageConfiguration.java
class WxCpInMemoryConfigStorageConfiguration (line 17) | @Configuration
method wxCpConfigStorage (line 25) | @Bean
FILE: solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/storage/WxCpInRedissonConfigStorageConfiguration.java
class WxCpInRedissonConfigStorageConfiguration (line 25) | @Configuration
method wxCpConfigStorage (line 35) | @Bean
method getConfigStorage (line 42) | private WxCpRedissonConfigImpl getConfigStorage() {
method getRedissonClient (line 53) | private RedissonClient getRedissonClient() {
FILE: solon-plugins/wx-java-cp-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/configuration/services/AbstractWxMaConfiguration.java
class AbstractWxMaConfiguration (line 30) | @RequiredArgsConstructor
method wxMaMultiServices (line 34) | protected WxMaMultiServices wxMaMultiServices(WxMaMultiProperties wxMa...
method wxMaConfigStorage (line 77) | protected abstract WxMaDefaultConfigImpl wxMaConfigStorage(WxMaMultiPr...
method wxMaService (line 79) | public WxMaService wxMaService(WxMaConfig wxMaConfig, WxMaMultiPropert...
method configApp (line 115) | private void configApp(WxMaDefaultConfigImpl config, WxMaSinglePropert...
method configHttp (line 133) | private void configHttp(WxMaDefaultConfigImpl config, WxMaMultiPropert...
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/configuration/services/WxMaInJedisConfiguration.java
class WxMaInJedisConfiguration (line 23) | @Configuration
method wxMaMultiServices (line 33) | @Bean
method wxMaConfigStorage (line 38) | @Override
method configRedis (line 43) | private WxMaDefaultConfigImpl configRedis(WxMaMultiProperties wxMaMult...
method getJedisPool (line 54) | private JedisPool getJedisPool(WxMaMultiProperties wxMaMultiProperties) {
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/configuration/services/WxMaInMemoryConfiguration.java
class WxMaInMemoryConfiguration (line 17) | @Configuration
method wxMaMultiServices (line 25) | @Bean
method wxMaConfigStorage (line 30) | @Override
method configInMemory (line 35) | private WxMaDefaultConfigImpl configInMemory() {
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/configuration/services/WxMaInRedissonConfiguration.java
class WxMaInRedissonConfiguration (line 25) | @Configuration
method wxMaMultiServices (line 35) | @Bean
method wxMaConfigStorage (line 40) | @Override
method configRedisson (line 45) | private WxMaDefaultConfigImpl configRedisson(WxMaMultiProperties wxMaM...
method getRedissonClient (line 56) | private RedissonClient getRedissonClient(WxMaMultiProperties wxMaMulti...
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/integration/WxMiniappMultiPluginImpl.java
class WxMiniappMultiPluginImpl (line 13) | public class WxMiniappMultiPluginImpl implements Plugin {
method start (line 14) | @Override
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/properties/WxMaMultiProperties.java
class WxMaMultiProperties (line 16) | @Data
class HostConfig (line 36) | @Data
class ConfigStorage (line 57) | @Data
type StorageType (line 121) | public enum StorageType {
type HttpClientType (line 140) | public enum HttpClientType {
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/properties/WxMaMultiRedisProperties.java
class WxMaMultiRedisProperties (line 12) | @Data
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/properties/WxMaSingleProperties.java
class WxMaSingleProperties (line 12) | @Data
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/service/WxMaMultiServices.java
type WxMaMultiServices (line 12) | public interface WxMaMultiServices {
method getWxMaService (line 19) | WxMaService getWxMaService(String tenantId);
method removeWxMaService (line 26) | void removeWxMaService(String tenantId);
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/service/WxMaMultiServicesImpl.java
class WxMaMultiServicesImpl (line 14) | public class WxMaMultiServicesImpl implements WxMaMultiServices {
method getWxMaService (line 17) | @Override
method addWxMaService (line 28) | public void addWxMaService(String tenantId, WxMaService wxMaService) {
method removeWxMaService (line 32) | @Override
FILE: solon-plugins/wx-java-miniapp-multi-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/config/WxMaServiceAutoConfiguration.java
class WxMaServiceAutoConfiguration (line 22) | @Configuration
method wxMaService (line 33) | @Bean
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/config/storage/AbstractWxMaConfigStorageConfiguration.java
class AbstractWxMaConfigStorageConfiguration (line 10) | public abstract class AbstractWxMaConfigStorageConfiguration {
method config (line 12) | protected WxMaDefaultConfigImpl config(WxMaDefaultConfigImpl config, W...
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/config/storage/WxMaInJedisConfigStorageConfiguration.java
class WxMaInJedisConfigStorageConfiguration (line 21) | @Configuration
method wxMaConfig (line 31) | @Bean
method getWxMaRedisBetterConfigImpl (line 38) | private WxMaRedisBetterConfigImpl getWxMaRedisBetterConfigImpl() {
method getJedisPool (line 50) | private JedisPool getJedisPool() {
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/config/storage/WxMaInMemoryConfigStorageConfiguration.java
class WxMaInMemoryConfigStorageConfiguration (line 14) | @Configuration
method wxMaConfig (line 22) | @Bean
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/config/storage/WxMaInRedissonConfigStorageConfiguration.java
class WxMaInRedissonConfigStorageConfiguration (line 21) | @Configuration
method wxMaConfig (line 31) | @Bean
method getWxMaInRedissonConfigStorage (line 38) | private WxMaRedissonConfigImpl getWxMaInRedissonConfigStorage() {
method getRedissonClient (line 49) | private RedissonClient getRedissonClient() {
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/enums/HttpClientType.java
type HttpClientType (line 9) | public enum HttpClientType {
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/enums/StorageType.java
type StorageType (line 9) | public enum StorageType {
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/integration/WxMiniappPluginImpl.java
class WxMiniappPluginImpl (line 14) | public class WxMiniappPluginImpl implements Plugin {
method start (line 15) | @Override
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/properties/RedisProperties.java
class RedisProperties (line 11) | @Data
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/properties/WxMaProperties.java
class WxMaProperties (line 17) | @Data
class ConfigStorage (line 58) | @Data
FILE: solon-plugins/wx-java-miniapp-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/configuration/services/AbstractWxMpConfiguration.java
class AbstractWxMpConfiguration (line 31) | @RequiredArgsConstructor
method wxMpMultiServices (line 35) | protected WxMpMultiServices wxMpMultiServices(WxMpMultiProperties wxCp...
method wxMpConfigStorage (line 79) | protected abstract WxMpDefaultConfigImpl wxMpConfigStorage(WxMpMultiPr...
method wxMpService (line 81) | public WxMpService wxMpService(WxMpConfigStorage configStorage, WxMpMu...
method configApp (line 117) | private void configApp(WxMpDefaultConfigImpl config, WxMpSinglePropert...
method configHttp (line 135) | private void configHttp(WxMpDefaultConfigImpl config, WxMpMultiPropert...
method configHost (line 157) | private void configHost(WxMpDefaultConfigImpl config, WxMpMultiPropert...
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/configuration/services/WxMpInJedisConfiguration.java
class WxMpInJedisConfiguration (line 24) | @Configuration
method wxMpMultiServices (line 34) | @Bean
method wxMpConfigStorage (line 39) | @Override
method configRedis (line 44) | private WxMpDefaultConfigImpl configRedis(WxMpMultiProperties wxCpMult...
method getJedisPool (line 55) | private JedisPool getJedisPool(WxMpMultiProperties wxCpMultiProperties) {
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/configuration/services/WxMpInMemoryConfiguration.java
class WxMpInMemoryConfiguration (line 18) | @Configuration
method wxCpMultiServices (line 26) | @Bean
method wxMpConfigStorage (line 31) | @Override
method configInMemory (line 36) | private WxMpDefaultConfigImpl configInMemory() {
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/configuration/services/WxMpInRedissonConfiguration.java
class WxMpInRedissonConfiguration (line 25) | @Configuration
method wxMpMultiServices (line 35) | @Bean
method wxMpConfigStorage (line 40) | @Override
method configRedisson (line 45) | private WxMpDefaultConfigImpl configRedisson(WxMpMultiProperties wxCpM...
method getRedissonClient (line 56) | private RedissonClient getRedissonClient(WxMpMultiProperties wxCpMulti...
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/integration/WxMpMultiPluginImpl.java
class WxMpMultiPluginImpl (line 13) | public class WxMpMultiPluginImpl implements Plugin {
method start (line 14) | @Override
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/properties/WxMpMultiProperties.java
class WxMpMultiProperties (line 16) | @Data
class HostConfig (line 36) | @Data
class ConfigStorage (line 57) | @Data
type StorageType (line 121) | public enum StorageType {
type HttpClientType (line 140) | public enum HttpClientType {
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/properties/WxMpMultiRedisProperties.java
class WxMpMultiRedisProperties (line 12) | @Data
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/properties/WxMpSingleProperties.java
class WxMpSingleProperties (line 12) | @Data
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/service/WxMpMultiServices.java
type WxMpMultiServices (line 12) | public interface WxMpMultiServices {
method getWxMpService (line 19) | WxMpService getWxMpService(String tenantId);
method removeWxMpService (line 26) | void removeWxMpService(String tenantId);
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/service/WxMpMultiServicesImpl.java
class WxMpMultiServicesImpl (line 14) | public class WxMpMultiServicesImpl implements WxMpMultiServices {
method getWxMpService (line 17) | @Override
method addWxMpService (line 28) | public void addWxMpService(String tenantId, WxMpService wxMpService) {
method removeWxMpService (line 32) | @Override
FILE: solon-plugins/wx-java-mp-multi-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/config/WxMpServiceAutoConfiguration.java
class WxMpServiceAutoConfiguration (line 21) | @Configuration
method wxMpService (line 24) | @Bean
method newWxMpServiceImpl (line 51) | private WxMpService newWxMpServiceImpl() {
method newWxMpServiceHttpClientImpl (line 55) | private WxMpService newWxMpServiceHttpClientImpl() {
method newWxMpServiceOkHttpImpl (line 59) | private WxMpService newWxMpServiceOkHttpImpl() {
method newWxMpServiceJoddHttpImpl (line 63) | private WxMpService newWxMpServiceJoddHttpImpl() {
method newWxMpServiceHttpComponentsImpl (line 67) | private WxMpService newWxMpServiceHttpComponentsImpl() {
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/config/storage/AbstractWxMpConfigStorageConfiguration.java
class AbstractWxMpConfigStorageConfiguration (line 9) | public abstract class AbstractWxMpConfigStorageConfiguration {
method config (line 11) | protected WxMpDefaultConfigImpl config(WxMpDefaultConfigImpl config, W...
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/config/storage/WxMpInJedisConfigStorageConfiguration.java
class WxMpInJedisConfigStorageConfiguration (line 22) | @Configuration
method wxMpConfigStorage (line 32) | @Bean
method getWxMpRedisConfigImpl (line 39) | private WxMpRedisConfigImpl getWxMpRedisConfigImpl() {
method wxMpJedisPool (line 51) | @Bean
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/config/storage/WxMpInMemoryConfigStorageConfiguration.java
class WxMpInMemoryConfigStorageConfiguration (line 14) | @Configuration
method wxMpConfigStorage (line 22) | @Bean
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/config/storage/WxMpInRedissonConfigStorageConfiguration.java
class WxMpInRedissonConfigStorageConfiguration (line 21) | @Configuration
method wxMaConfig (line 31) | @Bean
method getWxMpInRedissonConfigStorage (line 38) | private WxMpRedissonConfigImpl getWxMpInRedissonConfigStorage() {
method wxMpRedissonClient (line 49) | @Bean
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/enums/HttpClientType.java
type HttpClientType (line 9) | public enum HttpClientType {
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/enums/StorageType.java
type StorageType (line 9) | public enum StorageType {
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/integration/WxMpPluginImpl.java
class WxMpPluginImpl (line 15) | public class WxMpPluginImpl implements Plugin {
method start (line 16) | @Override
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/properties/HostConfig.java
class HostConfig (line 7) | @Data
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/properties/RedisProperties.java
class RedisProperties (line 13) | @Data
FILE: solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/properties/WxMpProperties.java
class WxMpProperties (line 19) | @Data
class ConfigStorage (line 60) | @Data
FILE: solon-plugins/wx-java-mp-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/config/WxOpenServiceAutoConfiguration.java
class WxOpenServiceAutoConfiguration (line 17) | @Configuration
method wxOpenService (line 20) | @Bean
method wxOpenMessageRouter (line 28) | @Bean
method wxOpenComponentService (line 33) | @Bean
FILE: solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/config/storage/AbstractWxOpenConfigStorageConfiguration.java
class AbstractWxOpenConfigStorageConfiguration (line 9) | public abstract class AbstractWxOpenConfigStorageConfiguration {
method config (line 11) | protected WxOpenInMemoryConfigStorage config(WxOpenInMemoryConfigStora...
FILE: solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/config/storage/WxOpenInJedisConfigStorageConfiguration.java
class WxOpenInJedisConfigStorageConfiguration (line 20) | @Configuration
method wxOpenConfigStorage (line 30) | @Bean
method getWxOpenInRedisConfigStorage (line 37) | private WxOpenInRedisConfigStorage getWxOpenInRedisConfigStorage() {
method getJedisPool (line 48) | private JedisPool getJedisPool() {
FILE: solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/config/storage/WxOpenInMemoryConfigStorageConfiguration.java
class WxOpenInMemoryConfigStorageConfiguration (line 14) | @Configuration
method wxOpenConfigStorage (line 22) | @Bean
FILE: solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/config/storage/WxOpenInRedissonConfigStorageConfiguration.java
class WxOpenInRedissonConfigStorageConfiguration (line 22) | @Configuration
method wxOpenConfigStorage (line 32) | @Bean
method getWxOpenInRedissonConfigStorage (line 39) | private WxOpenInRedissonConfigStorage getWxOpenInRedissonConfigStorage...
method getRedissonClient (line 50) | private RedissonClient getRedissonClient() {
FILE: solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/integration/WxOpenPluginImpl.java
class WxOpenPluginImpl (line 14) | public class WxOpenPluginImpl implements Plugin {
method start (line 15) | @Override
FILE: solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/properties/WxOpenProperties.java
class WxOpenProperties (line 18) | @Data
class ConfigStorage (line 50) | @Data
type StorageType (line 113) | public enum StorageType {
type HttpClientType (line 132) | public enum HttpClientType {
FILE: solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/properties/WxOpenRedisProperties.java
class WxOpenRedisProperties (line 12) | @Data
FILE: solon-plugins/wx-java-open-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: solon-plugins/wx-java-pay-solon-plugin/src/main/java/com/binarywang/solon/wxjava/pay/config/WxPayAutoConfiguration.java
class WxPayAutoConfiguration (line 20) | @Configuration
method WxPayAutoConfiguration (line 28) | public WxPayAutoConfiguration(WxPayProperties properties) {
method wxPayService (line 37) | @Bean
FILE: solon-plugins/wx-java-pay-solon-plugin/src/main/java/com/binarywang/solon/wxjava/pay/integration/WxPayPluginImpl.java
class WxPayPluginImpl (line 11) | public class WxPayPluginImpl implements Plugin {
method start (line 12) | @Override
FILE: solon-plugins/wx-java-pay-solon-plugin/src/main/java/com/binarywang/solon/wxjava/pay/properties/WxPayProperties.java
class WxPayProperties (line 15) | @Data
FILE: solon-plugins/wx-java-pay-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/config/WxQidianServiceAutoConfiguration.java
class WxQidianServiceAutoConfiguration (line 21) | @Configuration
method wxQidianService (line 24) | @Bean
method newWxQidianServiceImpl (line 51) | private WxQidianService newWxQidianServiceImpl() {
method newWxQidianServiceHttpClientImpl (line 55) | private WxQidianService newWxQidianServiceHttpClientImpl() {
method newWxQidianServiceOkHttpImpl (line 59) | private WxQidianService newWxQidianServiceOkHttpImpl() {
method newWxQidianServiceJoddHttpImpl (line 63) | private WxQidianService newWxQidianServiceJoddHttpImpl() {
method newWxQidianServiceHttpComponentsImpl (line 67) | private WxQidianService newWxQidianServiceHttpComponentsImpl() {
FILE: solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/config/WxQidianStorageAutoConfiguration.java
class WxQidianStorageAutoConfiguration (line 35) | @Slf4j
method wxQidianConfigStorage (line 49) | @Bean
method defaultConfigStorage (line 73) | private WxQidianConfigStorage defaultConfigStorage() {
method jedisConfigStorage (line 79) | private WxQidianConfigStorage jedisConfigStorage() {
method setWxMpInfo (line 93) | private void setWxMpInfo(WxQidianDefaultConfigImpl config) {
method getJedisPool (line 109) | private Pool<Jedis> getJedisPool() {
FILE: solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/enums/HttpClientType.java
type HttpClientType (line 9) | public enum HttpClientType {
FILE: solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/enums/StorageType.java
type StorageType (line 9) | public enum StorageType {
FILE: solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/integration/WxQidianPluginImpl.java
class WxQidianPluginImpl (line 12) | public class WxQidianPluginImpl implements Plugin{
method start (line 13) | @Override
FILE: solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/properties/HostConfig.java
class HostConfig (line 7) | @Data
FILE: solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/properties/RedisProperties.java
class RedisProperties (line 13) | @Data
FILE: solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/properties/WxQidianProperties.java
class WxQidianProperties (line 19) | @Data
class ConfigStorage (line 55) | @Data
FILE: solon-plugins/wx-java-qidian-solon-plugin/src/test/java/features/test/LoadTest.java
class LoadTest (line 9) | @SolonTest
method load (line 11) | @Test
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/autoconfigure/WxChannelMultiAutoConfiguration.java
class WxChannelMultiAutoConfiguration (line 13) | @Configuration
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/WxChannelMultiServiceConfiguration.java
class WxChannelMultiServiceConfiguration (line 18) | @Configuration
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/services/AbstractWxChannelConfiguration.java
class AbstractWxChannelConfiguration (line 29) | @RequiredArgsConstructor
method wxChannelMultiServices (line 32) | protected WxChannelMultiServices wxChannelMultiServices(WxChannelMulti...
method wxChannelConfigStorage (line 75) | protected abstract WxChannelDefaultConfigImpl wxChannelConfigStorage(W...
method wxChannelService (line 77) | public WxChannelService wxChannelService(WxChannelConfig wxChannelConf...
method configApp (line 110) | private void configApp(WxChannelDefaultConfigImpl config, WxChannelSin...
method configHttp (line 130) | private void configHttp(WxChannelDefaultConfigImpl config, WxChannelMu...
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/services/WxChannelInJedisConfiguration.java
class WxChannelInJedisConfiguration (line 24) | @Configuration
method wxChannelMultiServices (line 31) | @Bean
method wxChannelConfigStorage (line 36) | @Override
method configRedis (line 41) | private WxChannelDefaultConfigImpl configRedis(WxChannelMultiPropertie...
method getJedisPool (line 52) | private JedisPool getJedisPool(WxChannelMultiProperties wxChannelMulti...
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/services/WxChannelInMemoryConfiguration.java
class WxChannelInMemoryConfiguration (line 17) | @Configuration
method wxChannelMultiServices (line 23) | @Bean
method wxChannelConfigStorage (line 28) | @Override
method configInMemory (line 33) | private WxChannelDefaultConfigImpl configInMemory() {
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/services/WxChannelInRedisTemplateConfiguration.java
class WxChannelInRedisTemplateConfiguration (line 21) | @Configuration
method wxChannelMultiServices (line 28) | @Bean
method wxChannelConfigStorage (line 33) | @Override
method configRedisTemplate (line 38) | private WxChannelDefaultConfigImpl configRedisTemplate(WxChannelMultiP...
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/services/WxChannelInRedissonConfiguration.java
class WxChannelInRedissonConfiguration (line 25) | @Configuration
method wxChannelMultiServices (line 32) | @Bean
method wxChannelConfigStorage (line 37) | @Override
method configRedisson (line 42) | private WxChannelDefaultConfigImpl configRedisson(WxChannelMultiProper...
method getRedissonClient (line 53) | private RedissonClient getRedissonClient(WxChannelMultiProperties wxCh...
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/enums/HttpClientType.java
type HttpClientType (line 9) | public enum HttpClientType {
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/enums/StorageType.java
type StorageType (line 9) | public enum StorageType {
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/properties/WxChannelMultiProperties.java
class WxChannelMultiProperties (line 20) | @Data
class ConfigStorage (line 34) | @Data
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/properties/WxChannelMultiRedisProperties.java
class WxChannelMultiRedisProperties (line 14) | @Data
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/properties/WxChannelSingleProperties.java
class WxChannelSingleProperties (line 14) | @Data
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/service/WxChannelMultiServices.java
type WxChannelMultiServices (line 11) | public interface WxChannelMultiServices {
method getWxChannelService (line 18) | WxChannelService getWxChannelService(String tenantId);
method removeWxChannelService (line 25) | void removeWxChannelService(String tenantId);
FILE: spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/service/WxChannelMultiServicesImpl.java
class WxChannelMultiServicesImpl (line 14) | public class WxChannelMultiServicesImpl implements WxChannelMultiServices {
method getWxChannelService (line 17) | @Override
method addWxChannelService (line 28) | public void addWxChannelService(String tenantId, WxChannelService wxCh...
method removeWxChannelService (line 32) | @Override
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/config/WxChannelAutoConfiguration.java
class WxChannelAutoConfiguration (line 13) | @Configuration
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/config/WxChannelServiceAutoConfiguration.java
class WxChannelServiceAutoConfiguration (line 19) | @Configuration
method wxChannelService (line 29) | @Bean
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/config/WxChannelStorageAutoConfiguration.java
class WxChannelStorageAutoConfiguration (line 15) | @Configuration
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/config/storage/AbstractWxChannelConfigStorageConfiguration.java
class AbstractWxChannelConfigStorageConfiguration (line 10) | public abstract class AbstractWxChannelConfigStorageConfiguration {
method config (line 12) | protected WxChannelDefaultConfigImpl config(WxChannelDefaultConfigImpl...
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/config/storage/WxChannelInJedisConfigStorageConfiguration.java
class WxChannelInJedisConfigStorageConfiguration (line 24) | @Configuration
method wxChannelConfig (line 32) | @Bean
method getWxChannelRedisConfig (line 39) | private WxChannelRedisConfigImpl getWxChannelRedisConfig() {
method getJedisPool (line 51) | private JedisPool getJedisPool() {
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/config/storage/WxChannelInMemoryConfigStorageConfiguration.java
class WxChannelInMemoryConfigStorageConfiguration (line 16) | @Configuration
method wxChannelConfig (line 23) | @Bean
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/config/storage/WxChannelInRedisTemplateConfigStorageConfiguration.java
class WxChannelInRedisTemplateConfigStorageConfiguration (line 20) | @Configuration
method wxChannelConfig (line 28) | @Bean
method getWxChannelInRedisTemplateConfig (line 35) | private WxChannelRedisConfigImpl getWxChannelInRedisTemplateConfig() {
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/config/storage/WxChannelInRedissonConfigStorageConfiguration.java
class WxChannelInRedissonConfigStorageConfiguration (line 24) | @Configuration
method wxChannelConfig (line 32) | @Bean
method getWxChannelRedissonConfig (line 39) | private WxChannelRedissonConfigImpl getWxChannelRedissonConfig() {
method getRedissonClient (line 50) | private RedissonClient getRedissonClient() {
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/enums/HttpClientType.java
type HttpClientType (line 8) | public enum HttpClientType {
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/enums/StorageType.java
type StorageType (line 8) | public enum StorageType {
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/properties/RedisProperties.java
class RedisProperties (line 10) | @Data
FILE: spring-boot-starters/wx-java-channel-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/properties/WxChannelProperties.java
class WxChannelProperties (line 14) | @Data
class ConfigStorage (line 66) | @Data
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/autoconfigure/WxCpMultiAutoConfiguration.java
class WxCpMultiAutoConfiguration (line 13) | @Configuration
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/WxCpMultiServicesAutoConfiguration.java
class WxCpMultiServicesAutoConfiguration (line 18) | @Configuration
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/services/AbstractWxCpConfiguration.java
class AbstractWxCpConfiguration (line 30) | @RequiredArgsConstructor
method wxCpMultiServices (line 34) | protected WxCpMultiServices wxCpMultiServices(WxCpMultiProperties wxCp...
method wxCpConfigStorage (line 84) | protected abstract WxCpDefaultConfigImpl wxCpConfigStorage(WxCpMultiPr...
method wxCpService (line 86) | private WxCpService wxCpService(WxCpConfigStorage wxCpConfigStorage, W...
method configCorp (line 117) | private void configCorp(WxCpDefaultConfigImpl config, WxCpSingleProper...
method configHttp (line 147) | private void configHttp(WxCpDefaultConfigImpl config, WxCpMultiPropert...
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/services/WxCpInJedisConfiguration.java
class WxCpInJedisConfiguration (line 23) | @Configuration
method wxCpMultiServices (line 32) | @Bean
method wxCpConfigStorage (line 37) | @Override
method configRedis (line 42) | private WxCpDefaultConfigImpl configRedis(WxCpMultiProperties wxCpMult...
method getJedisPool (line 53) | private JedisPool getJedisPool(WxCpMultiProperties wxCpMultiProperties) {
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/services/WxCpInMemoryConfiguration.java
class WxCpInMemoryConfiguration (line 17) | @Configuration
method wxCpMultiServices (line 25) | @Bean
method wxCpConfigStorage (line 30) | @Override
method configInMemory (line 35) | private WxCpDefaultConfigImpl configInMemory() {
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/services/WxCpInRedisTemplateConfiguration.java
class WxCpInRedisTemplateConfiguration (line 20) | @Configuration
method wxCpMultiServices (line 29) | @Bean
method wxCpConfigStorage (line 34) | @Override
method configRedisTemplate (line 39) | private WxCpDefaultConfigImpl configRedisTemplate(WxCpMultiProperties ...
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/services/WxCpInRedissonConfiguration.java
class WxCpInRedissonConfiguration (line 25) | @Configuration
method wxCpMultiServices (line 34) | @Bean
method wxCpConfigStorage (line 39) | @Override
method configRedisson (line 44) | private WxCpDefaultConfigImpl configRedisson(WxCpMultiProperties wxCpM...
method getRedissonClient (line 55) | private RedissonClient getRedissonClient(WxCpMultiProperties wxCpMulti...
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpMultiProperties.java
class WxCpMultiProperties (line 18) | @Data
class ConfigStorage (line 32) | @Data
type StorageType (line 96) | public enum StorageType {
type HttpClientType (line 115) | public enum HttpClientType {
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpMultiRedisProperties.java
class WxCpMultiRedisProperties (line 14) | @Data
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpSingleProperties.java
class WxCpSingleProperties (line 14) | @Data
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/service/WxCpMultiServices.java
type WxCpMultiServices (line 11) | public interface WxCpMultiServices {
method getWxCpService (line 18) | WxCpService getWxCpService(String tenantId);
method removeWxCpService (line 25) | void removeWxCpService(String tenantId);
FILE: spring-boot-starters/wx-java-cp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/service/WxCpMultiServicesImpl.java
class WxCpMultiServicesImpl (line 14) | public class WxCpMultiServicesImpl implements WxCpMultiServices {
method getWxCpService (line 23) | @Override
method addWxCpService (line 34) | public void addWxCpService(String tenantId, WxCpService wxCpService) {
method removeWxCpService (line 38) | @Override
FILE: spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/config/WxCpAutoConfiguration.java
class WxCpAutoConfiguration (line 14) | @Configuration
FILE: spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/config/WxCpServiceAutoConfiguration.java
class WxCpServiceAutoConfiguration (line 19) | @Configuration
method wxCpService (line 24) | @Bean
FILE: spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/config/WxCpStorageAutoConfiguration.java
class WxCpStorageAutoConfiguration (line 16) | @Configuration
FILE: spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpProperties.java
class WxCpProperties (line 16) | @Data
class ConfigStorage (line 62) | @Data
type StorageType (line 121) | public enum StorageType {
FILE: spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpRedisProperties.java
class WxCpRedisProperties (line 13) | @Data
FILE: spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/storage/AbstractWxCpConfigStorageConfiguration.java
class AbstractWxCpConfigStorageConfiguration (line 13) | public abstract class AbstractWxCpConfigStorageConfiguration {
method config (line 15) | protected WxCpDefaultConfigImpl config(WxCpDefaultConfigImpl config, W...
FILE: spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/storage/WxCpInJedisConfigStorageConfiguration.java
class WxCpInJedisConfigStorageConfiguration (line 24) | @Configuration
method wxCpConfigStorage (line 33) | @Bean
method getConfigStorage (line 40) | private WxCpJedisConfigImpl getConfigStorage() {
method getJedisPool (line 51) | private JedisPool getJedisPool() {
FILE: spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/storage/WxCpInMemoryConfigStorageConfiguration.java
class WxCpInMemoryConfigStorageConfiguration (line 18) | @Configuration
method wxCpConfigStorage (line 27) | @Bean
FILE: spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/storage/WxCpInRedisTemplateConfigStorageConfiguration.java
class WxCpInRedisTemplateConfigStorageConfiguration (line 21) | @Configuration
method wxCpConfigStorage (line 30) | @Bean
method getConfigStorage (line 37) | private WxCpRedisTemplateConfigImpl getConfigStorage() {
FILE: spring-boot-starters/wx-java-cp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/storage/WxCpInRedissonConfigStorageConfiguration.java
class WxCpInRedissonConfigStorageConfiguration (line 26) | @Configuration
method wxCpConfigStorage (line 35) | @Bean
method getConfigStorage (line 42) | private WxCpRedissonConfigImpl getConfigStorage() {
method getRedissonClient (line 53) | private RedissonClient getRedissonClient() {
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/autoconfigure/WxCpTpMultiAutoConfiguration.java
class WxCpTpMultiAutoConfiguration (line 13) | @Configuration
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/WxCpTpMultiServicesAutoConfiguration.java
class WxCpTpMultiServicesAutoConfiguration (line 18) | @Configuration
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/services/AbstractWxCpTpConfiguration.java
class AbstractWxCpTpConfiguration (line 30) | @RequiredArgsConstructor
method wxCpMultiServices (line 40) | public WxCpTpMultiServices wxCpMultiServices(WxCpTpMultiProperties wxC...
method wxCpTpConfigStorage (line 73) | protected abstract WxCpTpDefaultConfigImpl wxCpTpConfigStorage(WxCpTpM...
method wxCpTpService (line 75) | private WxCpTpService wxCpTpService(WxCpTpConfigStorage wxCpTpConfigSt...
method configCorp (line 106) | private void configCorp(WxCpTpDefaultConfigImpl config, WxCpTpSinglePr...
method configHttp (line 121) | private void configHttp(WxCpTpDefaultConfigImpl config, WxCpTpMultiPro...
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/services/WxCpTpInJedisTpConfiguration.java
class WxCpTpInJedisTpConfiguration (line 25) | @Configuration
method wxCpMultiServices (line 34) | @Bean
method wxCpTpConfigStorage (line 39) | @Override
method configRedis (line 44) | private WxCpTpDefaultConfigImpl configRedis(WxCpTpMultiProperties wxCp...
method getJedisPool (line 55) | private JedisPool getJedisPool(WxCpTpMultiProperties wxCpTpMultiProper...
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/services/WxCpTpInMemoryTpConfiguration.java
class WxCpTpInMemoryTpConfiguration (line 18) | @Configuration
method wxCpMultiServices (line 26) | @Bean
method wxCpTpConfigStorage (line 31) | @Override
method configInMemory (line 36) | private WxCpTpDefaultConfigImpl configInMemory() {
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/services/WxCpTpInRedisTemplateTpConfiguration.java
class WxCpTpInRedisTemplateTpConfiguration (line 22) | @Configuration
method wxCpMultiServices (line 31) | @Bean
method wxCpTpConfigStorage (line 36) | @Override
method configRedisTemplate (line 41) | private WxCpTpDefaultConfigImpl configRedisTemplate(WxCpTpMultiPropert...
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/configuration/services/WxCpTpInRedissonTpConfiguration.java
class WxCpTpInRedissonTpConfiguration (line 26) | @Configuration
method wxCpMultiServices (line 35) | @Bean
method wxCpTpConfigStorage (line 40) | @Override
method configRedisson (line 45) | private WxCpTpDefaultConfigImpl configRedisson(WxCpTpMultiProperties w...
method getRedissonClient (line 56) | private RedissonClient getRedissonClient(WxCpTpMultiProperties wxCpTpM...
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpTpMultiProperties.java
class WxCpTpMultiProperties (line 18) | @Data
class ConfigStorage (line 32) | @Data
type StorageType (line 96) | public enum StorageType {
type HttpClientType (line 115) | public enum HttpClientType {
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpTpMultiRedisProperties.java
class WxCpTpMultiRedisProperties (line 14) | @Data
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/properties/WxCpTpSingleProperties.java
class WxCpTpSingleProperties (line 14) | @Data
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/service/WxCpTpMultiServices.java
type WxCpTpMultiServices (line 12) | public interface WxCpTpMultiServices {
method getWxCpTpService (line 19) | WxCpTpService getWxCpTpService(String tenantId);
method addWxCpTpService (line 21) | void addWxCpTpService(String tenantId, WxCpTpService wxCpService);
method removeWxCpTpService (line 28) | void removeWxCpTpService(String tenantId);
FILE: spring-boot-starters/wx-java-cp-tp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/cp/service/WxCpTpMultiServicesImpl.java
class WxCpTpMultiServicesImpl (line 15) | public class WxCpTpMultiServicesImpl implements WxCpTpMultiServices {
method getWxCpTpService (line 24) | @Override
method addWxCpTpService (line 35) | @Override
method removeWxCpTpService (line 40) | @Override
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/autoconfigure/WxMaMultiAutoConfiguration.java
class WxMaMultiAutoConfiguration (line 11) | @Configuration
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/configuration/WxMaMultiServiceConfiguration.java
class WxMaMultiServiceConfiguration (line 18) | @Configuration
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/configuration/services/AbstractWxMaConfiguration.java
class AbstractWxMaConfiguration (line 32) | @RequiredArgsConstructor
method wxMaMultiServices (line 36) | protected WxMaMultiServices wxMaMultiServices(WxMaMultiProperties wxMa...
method createIsolatedMultiServices (line 72) | private WxMaMultiServices createIsolatedMultiServices(
method createSharedMultiServices (line 96) | private WxMaMultiServices createSharedMultiServices(
method createWxMaServiceByType (line 128) | private WxMaService createWxMaServiceByType(WxMaMultiProperties.HttpCl...
method configureWxMaService (line 144) | private void configureWxMaService(WxMaService wxMaService, WxMaMultiPr...
method wxMaConfigStorage (line 163) | protected abstract WxMaDefaultConfigImpl wxMaConfigStorage(WxMaMultiPr...
method wxMaService (line 165) | public WxMaService wxMaService(WxMaConfig wxMaConfig, WxMaMultiPropert...
method configApp (line 173) | private void configApp(WxMaDefaultConfigImpl config, WxMaSinglePropert...
method configHttp (line 194) | private void configHttp(WxMaDefaultConfigImpl config, WxMaMultiPropert...
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/configuration/services/WxMaInJedisConfiguration.java
class WxMaInJedisConfiguration (line 23) | @Configuration
method wxMaMultiServices (line 32) | @Bean
method wxMaConfigStorage (line 37) | @Override
method configRedis (line 42) | private WxMaDefaultConfigImpl configRedis(WxMaMultiProperties wxMaMult...
method getJedisPool (line 53) | private JedisPool getJedisPool(WxMaMultiProperties wxMaMultiProperties) {
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/configuration/services/WxMaInMemoryConfiguration.java
class WxMaInMemoryConfiguration (line 17) | @Configuration
method wxMaMultiServices (line 25) | @Bean
method wxMaConfigStorage (line 30) | @Override
method configInMemory (line 35) | private WxMaDefaultConfigImpl configInMemory() {
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/configuration/services/WxMaInRedisTemplateConfiguration.java
class WxMaInRedisTemplateConfiguration (line 20) | @Configuration
method wxMaMultiServices (line 27) | @Bean
method wxMaConfigStorage (line 32) | @Override
method configRedisTemplate (line 37) | private WxMaDefaultConfigImpl configRedisTemplate(WxMaMultiProperties ...
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/configuration/services/WxMaInRedissonConfiguration.java
class WxMaInRedissonConfiguration (line 25) | @Configuration
method wxMaMultiServices (line 34) | @Bean
method wxMaConfigStorage (line 39) | @Override
method configRedisson (line 44) | private WxMaDefaultConfigImpl configRedisson(WxMaMultiProperties wxMaM...
method getRedissonClient (line 55) | private RedissonClient getRedissonClient(WxMaMultiProperties wxMaMulti...
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/properties/WxMaMultiProperties.java
class WxMaMultiProperties (line 16) | @Data
class HostConfig (line 35) | @Data
class ConfigStorage (line 56) | @Data
type StorageType (line 130) | public enum StorageType {
type HttpClientType (line 149) | public enum HttpClientType {
type MultiTenantMode (line 164) | public enum MultiTenantMode {
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/properties/WxMaMultiRedisProperties.java
class WxMaMultiRedisProperties (line 12) | @Data
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/properties/WxMaSingleProperties.java
class WxMaSingleProperties (line 12) | @Data
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/service/WxMaMultiServices.java
type WxMaMultiServices (line 12) | public interface WxMaMultiServices {
method getWxMaService (line 19) | WxMaService getWxMaService(String tenantId);
method removeWxMaService (line 26) | void removeWxMaService(String tenantId);
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/service/WxMaMultiServicesImpl.java
class WxMaMultiServicesImpl (line 14) | public class WxMaMultiServicesImpl implements com.binarywang.spring.star...
method getWxMaService (line 17) | @Override
method addWxMaService (line 28) | public void addWxMaService(String tenantId, WxMaService wxMaService) {
method removeWxMaService (line 32) | @Override
FILE: spring-boot-starters/wx-java-miniapp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/service/WxMaMultiServicesSharedImpl.java
class WxMaMultiServicesSharedImpl (line 19) | @RequiredArgsConstructor
method getWxMaService (line 23) | @Override
method removeWxMaService (line 35) | @Override
method addWxMaService (line 48) | public void addWxMaService(String tenantId, WxMaService wxMaService) {
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/config/WxMaAutoConfiguration.java
class WxMaAutoConfiguration (line 14) | @Configuration
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/config/WxMaServiceAutoConfiguration.java
class WxMaServiceAutoConfiguration (line 23) | @Configuration
method wxMaService (line 34) | @Bean
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/config/WxMaStorageAutoConfiguration.java
class WxMaStorageAutoConfiguration (line 15) | @Configuration
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/config/storage/AbstractWxMaConfigStorageConfiguration.java
class AbstractWxMaConfigStorageConfiguration (line 12) | public abstract class AbstractWxMaConfigStorageConfiguration {
method config (line 14) | protected WxMaDefaultConfigImpl config(WxMaDefaultConfigImpl config, W...
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/config/storage/WxMaInJedisConfigStorageConfiguration.java
class WxMaInJedisConfigStorageConfiguration (line 23) | @Configuration
method wxMaConfig (line 31) | @Bean
method getWxMaRedisBetterConfigImpl (line 38) | private WxMaRedisBetterConfigImpl getWxMaRedisBetterConfigImpl() {
method getJedisPool (line 50) | private JedisPool getJedisPool() {
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/config/storage/WxMaInMemoryConfigStorageConfiguration.java
class WxMaInMemoryConfigStorageConfiguration (line 15) | @Configuration
method wxMaConfig (line 22) | @Bean
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/config/storage/WxMaInRedisTemplateConfigStorageConfiguration.java
class WxMaInRedisTemplateConfigStorageConfiguration (line 20) | @Configuration
method wxMaConfig (line 28) | @Bean
method getWxMaInRedisTemplateConfigStorage (line 35) | private WxMaRedisBetterConfigImpl getWxMaInRedisTemplateConfigStorage() {
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/config/storage/WxMaInRedissonConfigStorageConfiguration.java
class WxMaInRedissonConfigStorageConfiguration (line 23) | @Configuration
method wxMaConfig (line 31) | @Bean
method getWxMaInRedissonConfigStorage (line 38) | private WxMaRedissonConfigImpl getWxMaInRedissonConfigStorage() {
method getRedissonClient (line 49) | private RedissonClient getRedissonClient() {
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/enums/HttpClientType.java
type HttpClientType (line 9) | public enum HttpClientType {
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/enums/StorageType.java
type StorageType (line 9) | public enum StorageType {
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/properties/RedisProperties.java
class RedisProperties (line 11) | @Data
FILE: spring-boot-starters/wx-java-miniapp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/miniapp/properties/WxMaProperties.java
class WxMaProperties (line 17) | @Data
class ConfigStorage (line 69) | @Data
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/autoconfigure/WxMpMultiAutoConfiguration.java
class WxMpMultiAutoConfiguration (line 11) | @Configuration
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/configuration/WxMpMultiServiceConfiguration.java
class WxMpMultiServiceConfiguration (line 18) | @Configuration
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/configuration/services/AbstractWxMpConfiguration.java
class AbstractWxMpConfiguration (line 34) | @RequiredArgsConstructor
method wxMpMultiServices (line 38) | protected WxMpMultiServices wxMpMultiServices(WxMpMultiProperties wxMp...
method createIsolatedMultiServices (line 74) | private WxMpMultiServices createIsolatedMultiServices(
method createSharedMultiServices (line 99) | private WxMpMultiServices createSharedMultiServices(
method createWxMpServiceByType (line 132) | private WxMpService createWxMpServiceByType(WxMpMultiProperties.HttpCl...
method configureWxMpService (line 150) | private void configureWxMpService(WxMpService wxMpService, WxMpMultiPr...
method wxMpConfigStorage (line 169) | protected abstract WxMpDefaultConfigImpl wxMpConfigStorage(WxMpMultiPr...
method wxMpService (line 171) | public WxMpService wxMpService(WxMpConfigStorage configStorage, WxMpMu...
method configApp (line 179) | private void configApp(WxMpDefaultConfigImpl config, WxMpSinglePropert...
method configHttp (line 197) | private void configHttp(WxMpDefaultConfigImpl config, WxMpMultiPropert...
method configHost (line 219) | private void configHost(WxMpDefaultConfigImpl config, WxMpMultiPropert...
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/configuration/services/WxMpInJedisConfiguration.java
class WxMpInJedisConfiguration (line 24) | @Configuration
method wxMpMultiServices (line 33) | @Bean
method wxMpConfigStorage (line 38) | @Override
method configRedis (line 43) | private WxMpDefaultConfigImpl configRedis(WxMpMultiProperties wxMpMult...
method getJedisPool (line 54) | private JedisPool getJedisPool(WxMpMultiProperties wxMpMultiProperties) {
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/configuration/services/WxMpInMemoryConfiguration.java
class WxMpInMemoryConfiguration (line 18) | @Configuration
method wxMpMultiServices (line 26) | @Bean
method wxMpConfigStorage (line 31) | @Override
method configInMemory (line 36) | private WxMpDefaultConfigImpl configInMemory() {
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/configuration/services/WxMpInRedisTemplateConfiguration.java
class WxMpInRedisTemplateConfiguration (line 21) | @Configuration
method wxMpMultiServices (line 30) | @Bean
method wxMpConfigStorage (line 35) | @Override
method configRedisTemplate (line 40) | private WxMpDefaultConfigImpl configRedisTemplate(WxMpMultiProperties ...
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/configuration/services/WxMpInRedissonConfiguration.java
class WxMpInRedissonConfiguration (line 25) | @Configuration
method wxMpMultiServices (line 34) | @Bean
method wxMpConfigStorage (line 39) | @Override
method configRedisson (line 44) | private WxMpDefaultConfigImpl configRedisson(WxMpMultiProperties wxMpM...
method getRedissonClient (line 55) | private RedissonClient getRedissonClient(WxMpMultiProperties wxMpMulti...
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/WxMpMultiProperties.java
class WxMpMultiProperties (line 16) | @Data
class HostConfig (line 35) | @Data
class ConfigStorage (line 56) | @Data
type StorageType (line 130) | public enum StorageType {
type HttpClientType (line 149) | public enum HttpClientType {
type MultiTenantMode (line 168) | public enum MultiTenantMode {
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/WxMpMultiRedisProperties.java
class WxMpMultiRedisProperties (line 12) | @Data
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/WxMpSingleProperties.java
class WxMpSingleProperties (line 12) | @Data
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/service/WxMpMultiServices.java
type WxMpMultiServices (line 12) | public interface WxMpMultiServices {
method getWxMpService (line 19) | WxMpService getWxMpService(String tenantId);
method removeWxMpService (line 26) | void removeWxMpService(String tenantId);
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/service/WxMpMultiServicesImpl.java
class WxMpMultiServicesImpl (line 14) | public class WxMpMultiServicesImpl implements WxMpMultiServices {
method getWxMpService (line 17) | @Override
method addWxMpService (line 28) | public void addWxMpService(String tenantId, WxMpService wxMpService) {
method removeWxMpService (line 32) | @Override
FILE: spring-boot-starters/wx-java-mp-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/service/WxMpMultiServicesSharedImpl.java
class WxMpMultiServicesSharedImpl (line 19) | @RequiredArgsConstructor
method getWxMpService (line 23) | @Override
method removeWxMpService (line 35) | @Override
method addWxMpService (line 48) | public void addWxMpService(String tenantId, WxMpService wxMpService) {
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpAutoConfiguration.java
class WxMpAutoConfiguration (line 13) | @Configuration
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpServiceAutoConfiguration.java
class WxMpServiceAutoConfiguration (line 21) | @Configuration
method wxMpService (line 24) | @Bean
method newWxMpServiceImpl (line 51) | private WxMpService newWxMpServiceImpl() {
method newWxMpServiceHttpClientImpl (line 55) | private WxMpService newWxMpServiceHttpClientImpl() {
method newWxMpServiceOkHttpImpl (line 59) | private WxMpService newWxMpServiceOkHttpImpl() {
method newWxMpServiceJoddHttpImpl (line 63) | private WxMpService newWxMpServiceJoddHttpImpl() {
method newWxMpServiceHttpComponentsImpl (line 67) | private WxMpService newWxMpServiceHttpComponentsImpl() {
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java
class WxMpStorageAutoConfiguration (line 16) | @Configuration
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/storage/AbstractWxMpConfigStorageConfiguration.java
class AbstractWxMpConfigStorageConfiguration (line 13) | public abstract class AbstractWxMpConfigStorageConfiguration {
method config (line 15) | protected WxMpDefaultConfigImpl config(WxMpDefaultConfigImpl config, W...
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/storage/WxMpInJedisConfigStorageConfiguration.java
class WxMpInJedisConfigStorageConfiguration (line 24) | @Configuration
method wxMpConfigStorage (line 36) | @Bean
method getWxMpRedisConfigImpl (line 43) | private WxMpRedisConfigImpl getWxMpRedisConfigImpl() {
method wxMpJedisPool (line 55) | @Bean
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/storage/WxMpInMemoryConfigStorageConfiguration.java
class WxMpInMemoryConfigStorageConfiguration (line 15) | @Configuration
method wxMpConfigStorage (line 26) | @Bean
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/storage/WxMpInRedisTemplateConfigStorageConfiguration.java
class WxMpInRedisTemplateConfigStorageConfiguration (line 21) | @Slf4j
method wxMpConfigStorage (line 34) | @Bean
method getWxMpInRedisTemplateConfigStorage (line 41) | private WxMpRedisConfigImpl getWxMpInRedisTemplateConfigStorage() {
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/storage/WxMpInRedissonConfigStorageConfiguration.java
class WxMpInRedissonConfigStorageConfiguration (line 23) | @Configuration
method wxMpConfigStorage (line 35) | @Bean
method getWxMpInRedissonConfigStorage (line 42) | private WxMpRedissonConfigImpl getWxMpInRedissonConfigStorage() {
method wxMpRedissonClient (line 53) | @Bean
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/HttpClientType.java
type HttpClientType (line 9) | public enum HttpClientType {
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/StorageType.java
type StorageType (line 9) | public enum StorageType {
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/HostConfig.java
class HostConfig (line 7) | @Data
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/RedisProperties.java
class RedisProperties (line 13) | @Data
FILE: spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/WxMpProperties.java
class WxMpProperties (line 19) | @Data
class ConfigStorage (line 60) | @Data
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/autoconfigure/WxOpenMultiAutoConfiguration.java
class WxOpenMultiAutoConfiguration (line 12) | @Configuration
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/configuration/WxOpenMultiServiceConfiguration.java
class WxOpenMultiServiceConfiguration (line 17) | @Configuration
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/configuration/services/AbstractWxOpenConfiguration.java
class AbstractWxOpenConfiguration (line 27) | @RequiredArgsConstructor
method wxOpenMultiServices (line 31) | protected WxOpenMultiServices wxOpenMultiServices(WxOpenMultiPropertie...
method wxOpenConfigStorage (line 73) | protected abstract WxOpenInMemoryConfigStorage wxOpenConfigStorage(WxO...
method wxOpenService (line 75) | public WxOpenService wxOpenService(WxOpenConfigStorage configStorage, ...
method configApp (line 81) | private void configApp(WxOpenInMemoryConfigStorage config, WxOpenSingl...
method configHttp (line 110) | private void configHttp(WxOpenInMemoryConfigStorage config, WxOpenMult...
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/configuration/services/WxOpenInJedisConfiguration.java
class WxOpenInJedisConfiguration (line 24) | @Configuration
method wxOpenMultiServices (line 34) | @Bean
method wxOpenConfigStorage (line 39) | @Override
method configJedis (line 44) | private WxOpenInRedisConfigStorage configJedis(WxOpenMultiProperties w...
method getJedisPool (line 55) | private JedisPool getJedisPool(WxOpenMultiProperties wxOpenMultiProper...
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/configuration/services/WxOpenInMemoryConfiguration.java
class WxOpenInMemoryConfiguration (line 16) | @Configuration
method wxOpenMultiServices (line 24) | @Bean
method wxOpenConfigStorage (line 29) | @Override
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/configuration/services/WxOpenInRedisTemplateConfiguration.java
class WxOpenInRedisTemplateConfiguration (line 20) | @Configuration
method wxOpenMultiServices (line 30) | @Bean
method wxOpenConfigStorage (line 35) | @Override
method configRedisTemplate (line 40) | private WxOpenInRedisTemplateConfigStorage configRedisTemplate() {
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/configuration/services/WxOpenInRedissonConfiguration.java
class WxOpenInRedissonConfiguration (line 25) | @Configuration
method wxOpenMultiServices (line 35) | @Bean
method wxOpenConfigStorage (line 40) | @Override
method configRedisson (line 45) | private WxOpenInRedissonConfigStorage configRedisson(WxOpenMultiProper...
method getRedissonClient (line 56) | private RedissonClient getRedissonClient(WxOpenMultiProperties wxOpenM...
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenMultiProperties.java
class WxOpenMultiProperties (line 17) | @Data
class ConfigStorage (line 31) | @Data
type StorageType (line 106) | public enum StorageType {
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenMultiRedisProperties.java
class WxOpenMultiRedisProperties (line 13) | @Data
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenSingleProperties.java
class WxOpenSingleProperties (line 13) | @Data
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/service/WxOpenMultiServices.java
type WxOpenMultiServices (line 11) | public interface WxOpenMultiServices {
method getWxOpenService (line 18) | WxOpenService getWxOpenService(String tenantId);
method removeWxOpenService (line 25) | void removeWxOpenService(String tenantId);
FILE: spring-boot-starters/wx-java-open-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/service/WxOpenMultiServicesImpl.java
class WxOpenMultiServicesImpl (line 13) | public class WxOpenMultiServicesImpl implements WxOpenMultiServices {
method getWxOpenService (line 16) | @Override
method addWxOpenService (line 27) | public void addWxOpenService(String tenantId, WxOpenService wxOpenServ...
method removeWxOpenService (line 31) | @Override
FILE: spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/WxOpenAutoConfiguration.java
class WxOpenAutoConfiguration (line 13) | @Configuration
FILE: spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/WxOpenServiceAutoConfiguration.java
class WxOpenServiceAutoConfiguration (line 18) | @Configuration
method wxOpenService (line 21) | @Bean
method wxOpenMessageRouter (line 30) | @Bean
method wxOpenComponentService (line 36) | @Bean
FILE: spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/WxOpenStorageAutoConfiguration.java
class WxOpenStorageAutoConfiguration (line 15) | @Configuration
FILE: spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/storage/AbstractWxOpenConfigStorageConfiguration.java
class AbstractWxOpenConfigStorageConfiguration (line 12) | public abstract class AbstractWxOpenConfigStorageConfiguration {
method config (line 14) | protected WxOpenInMemoryConfigStorage config(WxOpenInMemoryConfigStora...
FILE: spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/storage/WxOpenInJedisConfigStorageConfiguration.java
class WxOpenInJedisConfigStorageConfiguration (line 22) | @Configuration
method wxOpenConfigStorage (line 32) | @Bean
method getWxOpenInRedisConfigStorage (line 39) | private WxOpenInRedisConfigStorage getWxOpenInRedisConfigStorage() {
method getJedisPool (line 50) | private JedisPool getJedisPool() {
FILE: spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/storage/WxOpenInMemoryConfigStorageConfiguration.java
class WxOpenInMemoryConfigStorageConfiguration (line 15) | @Configuration
method wxOpenConfigStorage (line 24) | @Bean
FILE: spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/storage/WxOpenInRedisTemplateConfigStorageConfiguration.java
class WxOpenInRedisTemplateConfigStorageConfiguration (line 20) | @Configuration
method wxOpenConfigStorage (line 30) | @Bean
method getWxOpenInRedisTemplateConfigStorage (line 37) | private WxOpenInRedisTemplateConfigStorage getWxOpenInRedisTemplateCon...
FILE: spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/storage/WxOpenInRedissonConfigStorageConfiguration.java
class WxOpenInRedissonConfigStorageConfiguration (line 24) | @Configuration
method wxOpenConfigStorage (line 34) | @Bean
method getWxOpenInRedissonConfigStorage (line 41) | private WxOpenInRedissonConfigStorage getWxOpenInRedissonConfigStorage...
method getRedissonClient (line 52) | private RedissonClient getRedissonClient() {
FILE: spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenProperties.java
class WxOpenProperties (line 18) | @Data
class ConfigStorage (line 61) | @Data
type StorageType (line 140) | public enum StorageType {
type HttpClientType (line 159) | public enum HttpClientType {
FILE: spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenRedisProperties.java
class WxOpenRedisProperties (line 12) | @Data
FILE: spring-boot-starters/wx-java-pay-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/pay/config/WxPayMultiAutoConfiguration.java
class WxPayMultiAutoConfiguration (line 20) | @Slf4j
method wxPayMultiServices (line 33) | @Bean
FILE: spring-boot-starters/wx-java-pay-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/pay/properties/WxPayMultiProperties.java
class WxPayMultiProperties (line 16) | @Data
FILE: spring-boot-starters/wx-java-pay-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/pay/properties/WxPaySingleProperties.java
class WxPaySingleProperties (line 13) | @Data
FILE: spring-boot-starters/wx-java-pay-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/pay/service/WxPayMultiServices.java
type WxPayMultiServices (line 10) | public interface WxPayMultiServices {
method getWxPayService (line 21) | WxPayService getWxPayService(String configKey);
method removeWxPayService (line 32) | void removeWxPayService(String configKey);
FILE: spring-boot-starters/wx-java-pay-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/pay/service/WxPayMultiServicesImpl.java
class WxPayMultiServicesImpl (line 19) | @Slf4j
method WxPayMultiServicesImpl (line 24) | public WxPayMultiServicesImpl(WxPayMultiProperties wxPayMultiPropertie...
method getWxPayService (line 28) | @Override
method removeWxPayService (line 46) | @Override
method buildWxPayService (line 61) | private WxPayService buildWxPayService(WxPaySingleProperties propertie...
FILE: spring-boot-starters/wx-java-pay-multi-spring-boot-starter/src/test/java/com/binarywang/spring/starter/wxjava/pay/WxPayMultiServicesTest.java
class WxPayMultiServicesTest (line 21) | @SpringBootTest(classes = {WxPayMultiAutoConfiguration.class, WxPayMulti...
method testConfiguration (line 42) | @Test
method testGetWxPayService (line 63) | @Test
method testGetWxPayServiceWithInvalidKey (line 80) | @Test
method testRemoveWxPayService (line 86) | @Test
class TestApplication (line 101) | @SpringBootApplication
FILE: spring-boot-starters/wx-java-pay-multi-spring-boot-starter/src/test/java/com/binarywang/spring/starter/wxjava/pay/example/WxPayMultiExample.java
class WxPayMultiExample (line 23) | @Slf4j
method createJsapiOrder (line 42) | public WxPayUnifiedOrderV3Result.JsapiResult createJsapiOrder(String a...
method createPartnerOrder (line 86) | public WxPayUnifiedOrderV3Result.JsapiResult createPartnerOrder(String...
method queryOrderStatus (line 133) | public String queryOrderStatus(String appId, String outTradeNo) {
method refund (line 168) | public String refund(String appId, String outTradeNo, Integer refundFee,
method reloadConfig (line 214) | public void reloadConfig(String configKey) {
method generateOutTradeNo (line 237) | private String generateOutTradeNo() {
method generateRefundNo (line 246) | private String generateRefundNo() {
FILE: spring-boot-starters/wx-java-pay-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/pay/config/WxPayAutoConfiguration.java
class WxPayAutoConfiguration (line 24) | @Configuration
method WxPayAutoConfiguration (line 31) | @Autowired
method wxPayService (line 41) | @Bean
FILE: spring-boot-starters/wx-java-pay-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/pay/properties/WxPayProperties.java
class WxPayProperties (line 14) | @Data
FILE: spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/config/WxQidianAutoConfiguration.java
class WxQidianAutoConfiguration (line 13) | @Configuration
FILE: spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/config/WxQidianServiceAutoConfiguration.java
class WxQidianServiceAutoConfiguration (line 20) | @Configuration
method wxQidianService (line 23) | @Bean
method newWxQidianServiceImpl (line 47) | private WxQidianService newWxQidianServiceImpl() {
method newWxQidianServiceHttpClientImpl (line 51) | private WxQidianService newWxQidianServiceHttpClientImpl() {
method newWxQidianServiceOkHttpImpl (line 55) | private WxQidianService newWxQidianServiceOkHttpImpl() {
method newWxQidianServiceJoddHttpImpl (line 59) | private WxQidianService newWxQidianServiceJoddHttpImpl() {
FILE: spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/config/WxQidianStorageAutoConfiguration.java
class WxQidianStorageAutoConfiguration (line 36) | @Slf4j
method wxQidianConfigStorage (line 50) | @Bean
method defaultConfigStorage (line 77) | private WxQidianConfigStorage defaultConfigStorage() {
method jedisConfigStorage (line 83) | private WxQidianConfigStorage jedisConfigStorage() {
method redisTemplateConfigStorage (line 97) | private WxQidianConfigStorage redisTemplateConfigStorage() {
method setWxMpInfo (line 124) | private void setWxMpInfo(WxQidianDefaultConfigImpl config) {
method getJedisPool (line 140) | private Pool<Jedis> getJedisPool() {
FILE: spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/enums/HttpClientType.java
type HttpClientType (line 9) | public enum HttpClientType {
FILE: spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/enums/StorageType.java
type StorageType (line 9) | public enum StorageType {
FILE: spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/properties/HostConfig.java
class HostConfig (line 7) | @Data
FILE: spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/properties/RedisProperties.java
class RedisProperties (line 13) | @Data
FILE: spring-boot-starters/wx-java-qidian-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/qidian/properties/WxQidianProperties.java
class WxQidianProperties (line 18) | @Data
class ConfigStorage (line 53) | @Data
FILE: weixin-graal/src/main/java/com/github/binarywang/wx/graal/GraalProcessor.java
class GraalProcessor (line 28) | @SupportedAnnotationTypes("lombok.Data")
method process (line 37) | @Override
method setShortestPackageName (line 65) | private void setShortestPackageName(String packageName) {
method getPackageName (line 79) | private String getPackageName(String fullClassName) {
method writeFiles (line 92) | private void writeFiles() {
method assetGraalJsonElement (line 138) | private String assetGraalJsonElement(String className) {
method registerClass (line 153) | private void registerClass(String className) {
method handleSuperClass (line 163) | private void handleSuperClass(TypeElement typeElement) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/BaseWxChannelMessageService.java
type BaseWxChannelMessageService (line 37) | public interface BaseWxChannelMessageService {
method route (line 48) | Object route(final WxChannelMessage message, final String content, fin...
method addRule (line 56) | void addRule(WxChannelMessageRouterRule<? extends WxChannelMessage> ru...
method orderNew (line 67) | void orderNew(final OrderIdMessage message, final String content, fina...
method orderCancel (line 79) | void orderCancel(OrderCancelMessage message, final String content, fin...
method orderPay (line 91) | void orderPay(OrderPayMessage message, final String content, final Str...
method orderWaitShipping (line 103) | void orderWaitShipping(OrderIdMessage message, final String content, f...
method orderDelivery (line 115) | void orderDelivery(OrderDeliveryMessage message, final String content,...
method orderConfirm (line 127) | void orderConfirm(OrderConfirmMessage message, final String content, f...
method orderSettle (line 139) | void orderSettle(OrderSettleMessage message, final String content, fin...
method orderExtInfoUpdate (line 151) | void orderExtInfoUpdate(OrderExtMessage message, final String content,...
method orderStatusUpdate (line 163) | void orderStatusUpdate(OrderStatusMessage message, final String conten...
method spuAudit (line 175) | void spuAudit(SpuAuditMessage message, final String content, final Str...
method spuStatusUpdate (line 187) | void spuStatusUpdate(SpuAuditMessage message, final String content, fi...
method spuUpdate (line 199) | void spuUpdate(SpuAuditMessage message, final String content, final St...
method stockNoEnough (line 211) | void stockNoEnough(SpuStockMessage message, final String content, fina...
method categoryAudit (line 223) | void categoryAudit(CategoryAuditMessage message, final String content,...
method brandUpdate (line 235) | void brandUpdate(BrandMessage message, final String content, final Str...
method afterSaleStatusUpdate (line 247) | void afterSaleStatusUpdate(AfterSaleMessage message, final String cont...
method complaintNotify (line 259) | void complaintNotify(ComplaintMessage message, final String content, f...
method couponReceive (line 271) | void couponReceive(CouponReceiveMessage message, final String content,...
method couponCreate (line 283) | void couponCreate(CouponActionMessage message, final String content, f...
method couponDelete (line 295) | void couponDelete(CouponActionMessage message, final String content, f...
method couponExpire (line 307) | void couponExpire(CouponActionMessage message, final String content, f...
method couponUpdate (line 319) | void couponUpdate(CouponActionMessage message, final String content, f...
method couponInvalid (line 331) | void couponInvalid(CouponActionMessage message, final String content, ...
method userCouponExpire (line 343) | void userCouponExpire(UserCouponExpireMessage message, final String co...
method userCouponUse (line 355) | void userCouponUse(UserCouponExpireMessage message, final String conte...
method userCouponUnuse (line 367) | void userCouponUnuse(UserCouponExpireMessage message, final String con...
method voucherSendSucc (line 379) | void voucherSendSucc(VoucherMessage message, final String content, fin...
method accountNotify (line 390) | void accountNotify(AccountNotifyMessage message, final String content,...
method withdrawNotify (line 402) | void withdrawNotify(WithdrawNotifyMessage message, final String conten...
method qrNotify (line 414) | void qrNotify(QrNotifyMessage message, final String content, final Str...
method supplierItemUpdate (line 426) | void supplierItemUpdate(SupplierItemMessage message, final String cont...
method vipJoin (line 439) | public void vipJoin(UserInfoMessage message, final String content, fin...
method vipClose (line 451) | void vipClose(UserInfoMessage message, final String content, final Str...
method vipGradeUpdate (line 463) | void vipGradeUpdate(UserInfoMessage message, final String content, fin...
method vipScoreUpdate (line 475) | void vipScoreUpdate(UserInfoMessage message, final String content, fin...
method vipScoreExchange (line 487) | void vipScoreExchange(ExchangeInfoMessage message, final String conten...
method closeStore (line 499) | void closeStore(CloseStoreMessage message, final String content, final...
method updateNickname (line 512) | void updateNickname(NicknameUpdateMessage message, final String conten...
method defaultMessageHandler (line 525) | Object defaultMessageHandler(WxChannelMessage message, final String co...
method sharerChange (line 538) | void sharerChange(WxChannelMessage message, final String content, fina...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/BaseWxChannelService.java
type BaseWxChannelService (line 15) | public interface BaseWxChannelService extends WxService {
method checkSignature (line 28) | boolean checkSignature(String timestamp, String nonce, String signature);
method getAccessToken (line 38) | String getAccessToken() throws WxErrorException;
method getAccessToken (line 56) | String getAccessToken(boolean forceRefresh) throws WxErrorException;
method execute (line 74) | <T, E> T execute(RequestExecutor<T, E> executor, String uri, E data) t...
method executeWithoutLog (line 88) | <T, E> T executeWithoutLog(RequestExecutor<T, E> executor, String uri,...
method setRetrySleepMillis (line 98) | void setRetrySleepMillis(int retrySleepMillis);
method setMaxRetryTimes (line 108) | void setMaxRetryTimes(int maxRetryTimes);
method getConfig (line 115) | WxChannelConfig getConfig();
method setConfig (line 122) | void setConfig(WxChannelConfig config);
method initHttp (line 127) | void initHttp();
method getRequestHttp (line 134) | RequestHttp<?, ?> getRequestHttp();
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxAssistantService.java
type WxAssistantService (line 23) | public interface WxAssistantService {
method addWindowProduct (line 30) | WxChannelBaseResponse addWindowProduct(AddWindowProductRequest req) th...
method getWindowProduct (line 38) | GetWindowProductResponse getWindowProduct(WindowProductRequest req) th...
method getWindowProductList (line 46) | GetWindowProductListResponse getWindowProductList(GetWindowProductList...
method offWindowProduct (line 53) | WxChannelBaseResponse offWindowProduct(WindowProductRequest req) throw...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelAddressService.java
type WxChannelAddressService (line 16) | public interface WxChannelAddressService {
method listAddress (line 27) | AddressListResponse listAddress(Integer offset, Integer limit) throws ...
method getAddress (line 37) | AddressInfoResponse getAddress(String addressId) throws WxErrorException;
method addAddress (line 47) | AddressIdResponse addAddress(AddressDetail addressDetail) throws WxErr...
method updateAddress (line 57) | WxChannelBaseResponse updateAddress(AddressDetail addressDetail) throw...
method deleteAddress (line 67) | WxChannelBaseResponse deleteAddress(String addressId) throws WxErrorEx...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelAfterSaleService.java
type WxChannelAfterSaleService (line 16) | public interface WxChannelAfterSaleService {
method listIds (line 29) | @Deprecated
method listIds (line 41) | AfterSaleListResponse listIds(AfterSaleListParam param) throws WxError...
method get (line 51) | AfterSaleInfoResponse get(String afterSaleOrderId) throws WxErrorExcep...
method accept (line 64) | WxChannelBaseResponse accept(String afterSaleOrderId, String addressId...
method reject (line 78) | WxChannelBaseResponse reject(String afterSaleOrderId, String rejectRea...
method uploadRefundEvidence (line 90) | WxChannelBaseResponse uploadRefundEvidence(String afterSaleOrderId, St...
method addComplaintMaterial (line 103) | WxChannelBaseResponse addComplaintMaterial(String complaintId, String ...
method addComplaintEvidence (line 116) | WxChannelBaseResponse addComplaintEvidence(String complaintId, String ...
method getComplaint (line 127) | ComplaintOrderResponse getComplaint(String complaintId) throws WxError...
method getAllReason (line 138) | AfterSaleReasonResponse getAllReason() throws WxErrorException;
method getRejectReason (line 148) | AfterSaleRejectReasonResponse getRejectReason() throws WxErrorException;
method acceptExchangeReship (line 161) | WxChannelBaseResponse acceptExchangeReship(String afterSaleOrderId, St...
method rejectExchangeReship (line 175) | WxChannelBaseResponse rejectExchangeReship(String afterSaleOrderId, St...
method merchantUpdateAfterSale (line 185) | WxChannelBaseResponse merchantUpdateAfterSale(AfterSaleMerchantUpdateP...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelBasicService.java
type WxChannelBasicService (line 16) | public interface WxChannelBasicService {
method getShopInfo (line 23) | ShopInfoResponse getShopInfo() throws WxErrorException;
method uploadImg (line 34) | ChannelImageInfo uploadImg(int respType, String imgUrl) throws WxError...
method uploadImg (line 47) | ChannelImageInfo uploadImg(int respType, File file, int height, int wi...
method uploadQualificationFile (line 57) | QualificationFileResponse uploadQualificationFile(File file) throws Wx...
method getImg (line 64) | ChannelImageResponse getImg(String mediaId) throws WxErrorException;
method getAddressCode (line 72) | AddressCodeResponse getAddressCode(Integer code) throws WxErrorException;
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelBrandService.java
type WxChannelBrandService (line 17) | public interface WxChannelBrandService {
method listAllBrand (line 28) | BrandListResponse listAllBrand(Integer pageSize, String nextKey) throw...
method addBrandApply (line 38) | AuditApplyResponse addBrandApply(Brand brand) throws WxErrorException;
method updateBrandApply (line 48) | AuditApplyResponse updateBrandApply(Brand brand) throws WxErrorException;
method cancelBrandApply (line 59) | WxChannelBaseResponse cancelBrandApply(String brandId, String auditId)...
method deleteBrandApply (line 69) | WxChannelBaseResponse deleteBrandApply(String brandId) throws WxErrorE...
method getBrandApply (line 79) | BrandInfoResponse getBrandApply(String brandId) throws WxErrorException;
method listBrandApply (line 91) | BrandApplyListResponse listBrandApply(Integer pageSize, String nextKey...
method listValidBrandApply (line 102) | BrandApplyListResponse listValidBrandApply(Integer pageSize, String ne...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelCategoryService.java
type WxChannelCategoryService (line 18) | public interface WxChannelCategoryService {
method listAllCategory (line 27) | CategoryQualificationResponse listAllCategory() throws WxErrorException;
method listAvailableCategory (line 38) | @Deprecated
method listAvailableCategories (line 52) | ShopCategoryResponse listAvailableCategories(String fCatId) throws WxE...
method getCategoryDetail (line 62) | CategoryDetailResult getCategoryDetail(String id) throws WxErrorExcept...
method addCategory (line 77) | @Deprecated
method addCategory (line 90) | AuditApplyResponse addCategory(CategoryAuditInfo info) throws WxErrorE...
method cancelCategoryAudit (line 100) | WxChannelBaseResponse cancelCategoryAudit(String auditId) throws WxErr...
method getAudit (line 110) | AuditResponse getAudit(String auditId) throws WxErrorException;
method listPassCategory (line 119) | PassCategoryResponse listPassCategory() throws WxErrorException;
method listRelationCategory (line 130) | RelationCategoryResponse listRelationCategory(Boolean isFilterStatus, ...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelCompassFinderService.java
type WxChannelCompassFinderService (line 14) | public interface WxChannelCompassFinderService {
method getOverall (line 24) | OverallResponse getOverall(String ds) throws WxErrorException;
method getProductData (line 35) | ProductDataResponse getProductData(String ds, String productId) throws...
method getProductList (line 45) | ProductListResponse getProductList(String ds) throws WxErrorException;
method getSaleProfileData (line 56) | SaleProfileDataResponse getSaleProfileData(String ds, Integer type) th...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelCompassShopService.java
type WxChannelCompassShopService (line 20) | public interface WxChannelCompassShopService {
method getShopOverall (line 30) | ShopOverallResponse getShopOverall(String ds) throws WxErrorException;
method getFinderAuthorizationList (line 39) | FinderAuthListResponse getFinderAuthorizationList() throws WxErrorExce...
method getFinderList (line 49) | FinderListResponse getFinderList(String ds) throws WxErrorException;
method getFinderOverall (line 59) | FinderOverallResponse getFinderOverall(String ds) throws WxErrorExcept...
method getFinderProductList (line 70) | FinderProductListResponse getFinderProductList(String ds, String finde...
method getFinderProductOverall (line 81) | FinderProductOverallResponse getFinderProductOverall(String ds, String...
method getShopLiveList (line 92) | ShopLiveListResponse getShopLiveList(String ds, String finderId) throw...
method getShopProductData (line 103) | ShopProductDataResponse getShopProductData(String ds, String productId...
method getShopProductList (line 113) | ShopProductListResponse getShopProductList(String ds) throws WxErrorEx...
method getShopSaleProfileData (line 124) | ShopSaleProfileDataResponse getShopSaleProfileData(String ds, Integer ...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelCouponService.java
type WxChannelCouponService (line 19) | public interface WxChannelCouponService {
method createCoupon (line 29) | CouponIdResponse createCoupon(CouponParam coupon) throws WxErrorExcept...
method updateCoupon (line 39) | CouponIdResponse updateCoupon(CouponParam coupon) throws WxErrorExcept...
method updateCouponStatus (line 50) | WxChannelBaseResponse updateCouponStatus(String couponId, Integer stat...
method getCoupon (line 60) | CouponInfoResponse getCoupon(String couponId) throws WxErrorException;
method getCouponList (line 70) | CouponListResponse getCouponList(CouponListParam param) throws WxError...
method getUserCoupon (line 81) | UserCouponResponse getUserCoupon(String openId, String userCouponId) t...
method getUserCouponList (line 91) | UserCouponListResponse getUserCouponList(UserCouponListParam param) th...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelFreightTemplateService.java
type WxChannelFreightTemplateService (line 15) | public interface WxChannelFreightTemplateService {
method listTemplate (line 26) | TemplateListResponse listTemplate(Integer offset, Integer limit) throw...
method getTemplate (line 36) | TemplateInfoResponse getTemplate(String templateId) throws WxErrorExce...
method addTemplate (line 46) | TemplateIdResponse addTemplate(FreightTemplate template) throws WxErro...
method updateTemplate (line 56) | TemplateIdResponse updateTemplate(FreightTemplate template) throws WxE...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelFundService.java
type WxChannelFundService (line 28) | public interface WxChannelFundService {
method getBalance (line 37) | BalanceInfoResponse getBalance() throws WxErrorException;
method getBankAccount (line 46) | AccountInfoResponse getBankAccount() throws WxErrorException;
method getFundsFlowDetail (line 56) | FundsFlowResponse getFundsFlowDetail(String flowId) throws WxErrorExce...
method listFundsFlow (line 66) | FlowListResponse listFundsFlow(FundsListParam param) throws WxErrorExc...
method getWithdrawDetail (line 76) | WithdrawDetailResponse getWithdrawDetail(String withdrawId) throws WxE...
method listWithdraw (line 89) | WithdrawListResponse listWithdraw(Integer pageNum, Integer pageSize, L...
method setBankAccount (line 100) | WxChannelBaseResponse setBankAccount(AccountInfo accountInfo) throws W...
method submitWithdraw (line 111) | WithdrawSubmitResponse submitWithdraw(Integer amount, String remark, S...
method getBankInfoByCardNo (line 121) | BankInfoResponse getBankInfoByCardNo(String accountNumber) throws WxEr...
method searchBankList (line 134) | BankListResponse searchBankList(Integer offset, Integer limit, String ...
method searchCityList (line 145) | BankCityResponse searchCityList(String provinceCode) throws WxErrorExc...
method getProvinceList (line 154) | BankProvinceResponse getProvinceList() throws WxErrorException;
method searchBranchList (line 167) | BranchInfoResponse searchBranchList(String bankCode, String cityCode, ...
method getQrCode (line 178) | QrCodeResponse getQrCode(String qrcodeTicket) throws WxErrorException;
method checkQrStatus (line 188) | QrCheckResponse checkQrStatus(String qrcodeTicket) throws WxErrorExcep...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelLiveDashboardService.java
type WxChannelLiveDashboardService (line 12) | public interface WxChannelLiveDashboardService {
method getLiveList (line 22) | LiveListResponse getLiveList(Long ds) throws WxErrorException;
method getLiveData (line 32) | LiveDataResponse getLiveData(String exportId) throws WxErrorException;
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelOrderService.java
type WxChannelOrderService (line 25) | public interface WxChannelOrderService {
method getOrder (line 35) | OrderInfoResponse getOrder(String orderId) throws WxErrorException;
method getOrder (line 46) | OrderInfoResponse getOrder(String orderId, Boolean encodeSensitiveInfo...
method getOrders (line 56) | OrderListResponse getOrders(OrderListParam param) throws WxErrorExcept...
method searchOrder (line 66) | OrderListResponse searchOrder(OrderSearchParam param) throws WxErrorEx...
method updatePrice (line 78) | WxChannelBaseResponse updatePrice(String orderId, Integer expressFee, ...
method updateRemark (line 90) | WxChannelBaseResponse updateRemark(String orderId, String merchantNote...
method updateAddress (line 101) | WxChannelBaseResponse updateAddress(String orderId, AddressInfo userAd...
method updateDelivery (line 111) | WxChannelBaseResponse updateDelivery(DeliveryUpdateParam param) throws...
method acceptAddressModify (line 121) | WxChannelBaseResponse acceptAddressModify(String orderId) throws WxErr...
method rejectAddressModify (line 131) | WxChannelBaseResponse rejectAddressModify(String orderId) throws WxErr...
method closeOrder (line 139) | WxChannelBaseResponse closeOrder(String orderId);
method listDeliveryCompany (line 148) | DeliveryCompanyResponse listDeliveryCompany() throws WxErrorException;
method listDeliveryCompany (line 158) | DeliveryCompanyResponse listDeliveryCompany(Boolean ewaybillOnly) thro...
method deliveryOrder (line 169) | WxChannelBaseResponse deliveryOrder(String orderId, List<DeliveryInfo>...
method uploadFreshInspect (line 184) | WxChannelBaseResponse uploadFreshInspect(String orderId, List<PackageA...
method getVirtualTelNumber (line 193) | VirtualTelNumberResponse getVirtualTelNumber(String orderId) throws Wx...
method decodeSensitiveInfo (line 202) | DecodeSensitiveInfoResponse decodeSensitiveInfo(String orderId) throws...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelProductService.java
type WxChannelProductService (line 28) | public interface WxChannelProductService {
method addProduct (line 38) | SpuUpdateResponse addProduct(SpuUpdateInfo info) throws WxErrorException;
method updateProduct (line 48) | SpuUpdateResponse updateProduct(SpuUpdateInfo info) throws WxErrorExce...
method addProduct (line 59) | @Deprecated
method updateProduct (line 71) | @Deprecated
method updateProductAuditFree (line 82) | WxChannelBaseResponse updateProductAuditFree(SpuFastInfo info) throws ...
method updateStock (line 96) | WxChannelBaseResponse updateStock(String productId, String skuId, Inte...
method deleteProduct (line 107) | WxChannelBaseResponse deleteProduct(String productId) throws WxErrorEx...
method cancelProductAudit (line 117) | WxChannelBaseResponse cancelProductAudit(String productId) throws WxEr...
method getProduct (line 128) | SpuGetResponse getProduct(String productId, Integer dataType) throws W...
method listProduct (line 140) | SpuListResponse listProduct(Integer pageSize, String nextKey, Integer ...
method upProduct (line 150) | WxChannelBaseResponse upProduct(String productId) throws WxErrorExcept...
method downProduct (line 160) | WxChannelBaseResponse downProduct(String productId) throws WxErrorExce...
method getSkuStock (line 171) | SkuStockResponse getSkuStock(String productId, String skuId) throws Wx...
method getSkuStockBatch (line 180) | SkuStockBatchResponse getSkuStockBatch(List<String> productIds) throws...
method getProductH5Url (line 189) | ProductH5UrlResponse getProductH5Url(String productId) throws WxErrorE...
method getProductQrCode (line 198) | ProductQrCodeResponse getProductQrCode(String productId) throws WxErro...
method getProductTagLink (line 207) | ProductTagLinkResponse getProductTagLink(String productId) throws WxEr...
method addLimitTask (line 217) | LimitTaskAddResponse addLimitTask(LimitTaskParam param) throws WxError...
method listLimitTask (line 229) | LimitTaskListResponse listLimitTask(Integer pageSize, String nextKey, ...
method stopLimitTask (line 239) | WxChannelBaseResponse stopLimitTask(String taskId) throws WxErrorExcep...
method deleteLimitTask (line 249) | WxChannelBaseResponse deleteLimitTask(String taskId) throws WxErrorExc...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelService.java
type WxChannelService (line 8) | public interface WxChannelService extends BaseWxChannelService {
method getBasicService (line 15) | WxChannelBasicService getBasicService();
method getCategoryService (line 22) | WxChannelCategoryService getCategoryService();
method getBrandService (line 29) | WxChannelBrandService getBrandService();
method getProductService (line 36) | WxChannelProductService getProductService();
method getWarehouseService (line 43) | WxChannelWarehouseService getWarehouseService();
method getOrderService (line 50) | WxChannelOrderService getOrderService();
method getAfterSaleService (line 57) | WxChannelAfterSaleService getAfterSaleService();
method getFreightTemplateService (line 64) | WxChannelFreightTemplateService getFreightTemplateService();
method getAddressService (line 71) | WxChannelAddressService getAddressService();
method getCouponService (line 78) | WxChannelCouponService getCouponService();
method getSharerService (line 85) | WxChannelSharerService getSharerService();
method getFundService (line 92) | WxChannelFundService getFundService();
method getHomePageService (line 99) | WxStoreHomePageService getHomePageService();
method getCooperationService (line 106) | WxStoreCooperationService getCooperationService();
method getCompassShopService (line 113) | WxChannelCompassShopService getCompassShopService();
method getLeagueWindowService (line 120) | WxLeagueWindowService getLeagueWindowService();
method getLeagueSupplierService (line 127) | WxLeagueSupplierService getLeagueSupplierService();
method getLeaguePromoterService (line 134) | WxLeaguePromoterService getLeaguePromoterService();
method getLeagueProductService (line 141) | WxLeagueProductService getLeagueProductService();
method getLeadComponentService (line 148) | WxLeadComponentService getLeadComponentService();
method getFinderLiveService (line 155) | WxFinderLiveService getFinderLiveService();
method getAssistantService (line 162) | WxAssistantService getAssistantService();
method getVipService (line 169) | WxChannelVipService getVipService();
method getCompassFinderService (line 176) | WxChannelCompassFinderService getCompassFinderService();
method getLiveDashboardService (line 183) | WxChannelLiveDashboardService getLiveDashboardService();
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelSharerService.java
type WxChannelSharerService (line 17) | public interface WxChannelSharerService {
method bindSharer (line 27) | SharerBindResponse bindSharer(String username) throws WxErrorException;
method searchSharer (line 38) | SharerSearchResponse searchSharer(String openid, String username) thro...
method listSharer (line 50) | SharerInfoResponse listSharer(Integer page, Integer pageSize, Integer ...
method listSharerOrder (line 60) | SharerOrderResponse listSharerOrder(SharerOrderParam param) throws WxE...
method unbindSharer (line 70) | SharerUnbindResponse unbindSharer(List<String> openIds) throws WxError...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelVipService.java
type WxChannelVipService (line 15) | public interface WxChannelVipService {
method getVipInfo (line 40) | VipInfoResponse getVipInfo(String openId, Boolean needPhoneNumber) thr...
method getVipList (line 52) | VipListResponse getVipList(Boolean needPhoneNumber, Integer pageNum, I...
method getVipScore (line 61) | VipScoreResponse getVipScore(String openId) throws WxErrorException;
method increaseVipScore (line 73) | WxChannelBaseResponse increaseVipScore(String openId, String score, St...
method decreaseVipScore (line 85) | WxChannelBaseResponse decreaseVipScore(String openId, String score, St...
method updateVipGrade (line 95) | WxChannelBaseResponse updateVipGrade(String openId, Integer score) thr...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelWarehouseService.java
type WxChannelWarehouseService (line 22) | public interface WxChannelWarehouseService {
method createWarehouse (line 32) | WxChannelBaseResponse createWarehouse(WarehouseParam param) throws WxE...
method listWarehouse (line 43) | WarehouseIdsResponse listWarehouse(Integer pageSize, String nextKey) t...
method getWarehouse (line 53) | WarehouseResponse getWarehouse(String outWarehouseId) throws WxErrorEx...
method updateWarehouse (line 65) | WxChannelBaseResponse updateWarehouse(String outWarehouseId, String na...
method addWarehouseArea (line 76) | WxChannelBaseResponse addWarehouseArea(String outWarehouseId, List<War...
method deleteWarehouseArea (line 88) | WxChannelBaseResponse deleteWarehouseArea(String outWarehouseId, List<...
method setWarehousePriority (line 99) | WxChannelBaseResponse setWarehousePriority(PriorityLocationParam param...
method getWarehousePriority (line 112) | LocationPriorityResponse getWarehousePriority(Integer addressId1, Inte...
method updateWarehouseStock (line 123) | WxChannelBaseResponse updateWarehouseStock(WarehouseStockParam param) ...
method getWarehouseStock (line 135) | WarehouseStockResponse getWarehouseStock(String productId, String skuI...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxFinderLiveService.java
type WxFinderLiveService (line 15) | public interface WxFinderLiveService {
method getFinderAttrByAppid (line 22) | FinderAttrResponse getFinderAttrByAppid() throws WxErrorException;
method getFinderLiveDataList (line 30) | GetFinderLiveDataListResponse getFinderLiveDataList(GetFinderLiveDataL...
method getFinderLiveLeadsData (line 39) | GetFinderLiveLeadsDataResponse getFinderLiveLeadsData(GetFinderLiveLea...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxLeadComponentService.java
type WxLeadComponentService (line 19) | public interface WxLeadComponentService {
method getLeadsInfoByComponentId (line 27) | LeadInfoResponse getLeadsInfoByComponentId(GetLeadInfoByComponentReque...
method getLeadsInfoByRequestId (line 35) | LeadInfoResponse getLeadsInfoByRequestId(GetLeadsInfoByRequestIdReques...
method getLeadsRequestId (line 43) | GetLeadsRequestIdResponse getLeadsRequestId(GetLeadsRequestIdRequest r...
method getLeadsComponentPromoteRecord (line 51) | GetLeadsComponentPromoteRecordResponse getLeadsComponentPromoteRecord(...
method getLeadsComponentId (line 59) | GetLeadsComponentIdResponse getLeadsComponentId(GetLeadsComponentIdReq...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxLeagueProductService.java
type WxLeagueProductService (line 19) | public interface WxLeagueProductService {
method batchAddProduct (line 27) | BatchAddResponse batchAddProduct(BatchAddParam param) throws WxErrorEx...
method updateProduct (line 35) | ProductUpdateResponse updateProduct(ProductUpdateParam param) throws W...
method deleteProduct (line 45) | WxChannelBaseResponse deleteProduct(Integer type, String productId, St...
method getProductDetail (line 53) | ProductDetailResponse getProductDetail(ProductDetailParam param) throw...
method listProduct (line 61) | ProductListResponse listProduct(ProductListParam param) throws WxError...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxLeaguePromoterService.java
type WxLeaguePromoterService (line 13) | public interface WxLeaguePromoterService {
method addPromoter (line 22) | @Deprecated
method updatePromoter (line 33) | @Deprecated
method deletePromoter (line 43) | @Deprecated
method getPromoterInfo (line 53) | @Deprecated
method addPromoterV2 (line 62) | WxChannelBaseResponse addPromoterV2(String promoterId) throws WxErrorE...
method updatePromoterV2 (line 71) | WxChannelBaseResponse updatePromoterV2(String promoterId, int type) th...
method deletePromoterV2 (line 79) | WxChannelBaseResponse deletePromoterV2(String promoterId) throws WxErr...
method getPromoterInfoV2 (line 87) | PromoterInfoResponse getPromoterInfoV2(String promoterId) throws WxErr...
method listPromoter (line 97) | PromoterListResponse listPromoter(Integer pageIndex, Integer pageSize,...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxLeagueSupplierService.java
type WxLeagueSupplierService (line 21) | public interface WxLeagueSupplierService {
method getBalanceInfo (line 28) | SupplierBalanceResponse getBalanceInfo() throws WxErrorException;
method getFlowDetail (line 36) | SupplierFlowDetailResponse getFlowDetail(String flowId) throws WxError...
method getFlowList (line 44) | SupplierFlowListResponse getFlowList(FlowListParam param) throws WxErr...
method getProductDetail (line 53) | CoopProductResponse getProductDetail(String productId, String appId) t...
method getProductList (line 63) | CoopProductListResponse getProductList(String appid, Integer pageSize,...
method getCommissionOrder (line 72) | CommissionOrderResponse getCommissionOrder(String orderId, String skuI...
method getCommissionOrderList (line 80) | CommissionOrderListResponse getCommissionOrderList(CommissionOrderList...
method getShopDetail (line 88) | ShopDetailResponse getShopDetail(String appid) throws WxErrorException;
method getShopList (line 97) | ShopListResponse getShopList(Integer pageSize, String nextKey) throws ...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxLeagueWindowService.java
type WxLeagueWindowService (line 16) | public interface WxLeagueWindowService {
method addProduct (line 26) | WxChannelBaseResponse addProduct(String appid, String openfinderid, S...
method listProduct (line 34) | WindowProductListResponse listProduct(ProductSearchParam param) throws...
method removeProduct (line 44) | WxChannelBaseResponse removeProduct(String appid, String openfinderid...
method getProductDetail (line 54) | WindowProductResponse getProductDetail(String appid, String openfinde...
method getWindowAuthInfo (line 63) | AuthInfoResponse getWindowAuthInfo(String finderId) throws WxErrorExce...
method getWindowAuthStatus (line 71) | AuthStatusResponse getWindowAuthStatus(String finderId) throws WxError...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxStoreCooperationService.java
type WxStoreCooperationService (line 15) | public interface WxStoreCooperationService {
method listCooperation (line 25) | CooperationListResponse listCooperation(Integer sharerType) throws WxE...
method getCooperationStatus (line 36) | CooperationStatusResponse getCooperationStatus(String sharerId, Intege...
method generateQrCode (line 47) | CooperationQrCodeResponse generateQrCode(String sharerId, Integer shar...
method cancelInvitation (line 58) | WxChannelBaseResponse cancelInvitation(String sharerId, Integer sharer...
method unbind (line 69) | WxChannelBaseResponse unbind(String sharerId, Integer sharerType) thro...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxStoreHomePageService.java
type WxStoreHomePageService (line 23) | public interface WxStoreHomePageService {
method addTreeProduct (line 33) | WxChannelBaseResponse addTreeProduct(TreeProductEditInfo info) throws ...
method delTreeProduct (line 43) | WxChannelBaseResponse delTreeProduct(TreeProductEditInfo info) throws ...
method getTreeProductList (line 53) | TreeProductListResponse getTreeProductList(TreeProductListInfo info) t...
method setShowTree (line 63) | TreeShowSetResponse setShowTree(TreeShowInfo info) throws WxErrorExcep...
method getShowTree (line 72) | TreeShowGetResponse getShowTree() throws WxErrorException;
method listWindowProduct (line 83) | WindowProductSettingResponse listWindowProduct(Integer pageSize, Strin...
method reorderWindowProduct (line 94) | WxChannelBaseResponse reorderWindowProduct(String productId, Integer i...
method hideWindowProduct (line 105) | WxChannelBaseResponse hideWindowProduct(String productId, Integer setH...
method topWindowProduct (line 116) | WxChannelBaseResponse topWindowProduct(String productId, Integer setTo...
method applyBackground (line 128) | BackgroundApplyResponse applyBackground(String imgUrl) throws WxErrorE...
method getBackground (line 136) | BackgroundGetResponse getBackground() throws WxErrorException;
method cancelBackground (line 145) | WxChannelBaseResponse cancelBackground(Integer applyId) throws WxError...
method removeBackground (line 153) | WxChannelBaseResponse removeBackground() throws WxErrorException;
method applyBanner (line 162) | BannerApplyResponse applyBanner(BannerInfo info) throws WxErrorException;
method getBanner (line 170) | BannerGetResponse getBanner() throws WxErrorException;
method cancelBanner (line 179) | WxChannelBaseResponse cancelBanner(Integer applyId) throws WxErrorExce...
method removeBanner (line 187) | WxChannelBaseResponse removeBanner() throws WxErrorException;
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/BaseWxChannelMessageServiceImpl.java
class BaseWxChannelMessageServiceImpl (line 46) | @Slf4j
method BaseWxChannelMessageServiceImpl (line 52) | public BaseWxChannelMessageServiceImpl(WxChannelMessageRouter router) {
method addDefaultRule (line 60) | protected void addDefaultRule() {
method addRule (line 152) | protected <T extends WxChannelMessage> void addRule(Class<T> clazz, St...
method addRule (line 164) | protected <T extends WxChannelMessage> void addRule(Class<T> clazz, St...
method addRule (line 169) | @Override
method route (line 174) | @Override
method orderNew (line 180) | @Override
method orderCancel (line 186) | @Override
method orderPay (line 192) | @Override
method orderWaitShipping (line 198) | @Override
method orderDelivery (line 204) | @Override
method orderConfirm (line 210) | @Override
method orderSettle (line 216) | @Override
method orderExtInfoUpdate (line 222) | @Override
method orderStatusUpdate (line 228) | @Override
method spuAudit (line 234) | @Override
method spuStatusUpdate (line 240) | @Override
method spuUpdate (line 246) | @Override
method stockNoEnough (line 252) | @Override
method categoryAudit (line 258) | @Override
method brandUpdate (line 264) | @Override
method afterSaleStatusUpdate (line 270) | @Override
method complaintNotify (line 276) | @Override
method couponReceive (line 282) | @Override
method couponCreate (line 288) | @Override
method couponDelete (line 294) | @Override
method couponExpire (line 300) | @Override
method couponUpdate (line 306) | @Override
method couponInvalid (line 312) | @Override
method userCouponExpire (line 318) | @Override
method userCouponUse (line 324) | @Override
method userCouponUnuse (line 330) | @Override
method voucherSendSucc (line 336) | @Override
method accountNotify (line 342) | @Override
method withdrawNotify (line 348) | @Override
method qrNotify (line 354) | @Override
method supplierItemUpdate (line 360) | @Override
method defaultMessageHandler (line 366) | @Override
method sharerChange (line 373) | @Override
method vipJoin (line 378) | @Override
method vipClose (line 384) | @Override
method vipGradeUpdate (line 390) | @Override
method vipScoreUpdate (line 396) | @Override
method vipScoreExchange (line 402) | @Override
method closeStore (line 408) | @Override
method updateNickname (line 414) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/BaseWxChannelServiceImpl.java
class BaseWxChannelServiceImpl (line 34) | @Slf4j
method getRequestHttp (line 68) | @Override
method checkSignature (line 73) | @Override
method getAccessToken (line 83) | @Override
method getAccessToken (line 88) | @Override
method doGetAccessTokenRequest (line 125) | protected abstract String doGetAccessTokenRequest() throws IOException;
method doGetStableAccessTokenRequest (line 133) | protected abstract String doGetStableAccessTokenRequest(boolean forceR...
method get (line 135) | @Override
method post (line 140) | @Override
method post (line 145) | @Override
method post (line 151) | @Override
method upload (line 156) | @Override
method post (line 162) | @Override
method execute (line 170) | @Override
method executeWithoutLog (line 175) | @Override
method execute0 (line 180) | protected <T, E> T execute0(RequestExecutor<T, E> executor, String uri...
method executeInternal (line 216) | protected <T, E> T executeInternal(RequestExecutor<T, E> executor, Str...
method extractAccessToken (line 278) | protected String extractAccessToken(String resultContent) throws WxErr...
method getConfig (line 290) | @Override
method setConfig (line 295) | @Override
method setRetrySleepMillis (line 301) | @Override
method setMaxRetryTimes (line 306) | @Override
method getBasicService (line 311) | @Override
method getCategoryService (line 316) | @Override
method getBrandService (line 321) | @Override
method getProductService (line 326) | @Override
method getWarehouseService (line 331) | @Override
method getOrderService (line 336) | @Override
method getAfterSaleService (line 341) | @Override
method getFreightTemplateService (line 346) | @Override
method getAddressService (line 351) | @Override
method getCouponService (line 356) | @Override
method getSharerService (line 361) | @Override
method getFundService (line 366) | @Override
method getHomePageService (line 371) | @Override
method getCooperationService (line 379) | @Override
method getCompassShopService (line 387) | @Override
method getLeagueWindowService (line 395) | @Override
method getLeagueSupplierService (line 403) | @Override
method getLeaguePromoterService (line 411) | @Override
method getLeagueProductService (line 419) | @Override
method getLeadComponentService (line 427) | @Override
method getFinderLiveService (line 435) | @Override
method getAssistantService (line 443) | @Override
method getVipService (line 452) | @Override
method getCompassFinderService (line 460) | @Override
method getLiveDashboardService (line 468) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxAssistantServiceImpl.java
class WxAssistantServiceImpl (line 26) | @RequiredArgsConstructor
method addWindowProduct (line 32) | @Override
method getWindowProduct (line 38) | @Override
method getWindowProductList (line 44) | @Override
method offWindowProduct (line 50) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelAddressServiceImpl.java
class WxChannelAddressServiceImpl (line 28) | @Slf4j
method WxChannelAddressServiceImpl (line 34) | public WxChannelAddressServiceImpl(BaseWxChannelServiceImpl<?, ?> shop...
method listAddress (line 38) | @Override
method getAddress (line 45) | @Override
method addAddress (line 52) | @Override
method updateAddress (line 59) | @Override
method deleteAddress (line 66) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelAfterSaleServiceImpl.java
class WxChannelAfterSaleServiceImpl (line 22) | @Slf4j
method WxChannelAfterSaleServiceImpl (line 30) | public WxChannelAfterSaleServiceImpl(BaseWxChannelServiceImpl<?, ?> sh...
method listIds (line 34) | @Override
method listIds (line 42) | @Override
method get (line 48) | @Override
method accept (line 55) | @Override
method reject (line 62) | @Override
method uploadRefundEvidence (line 69) | @Override
method addComplaintMaterial (line 77) | @Override
method addComplaintEvidence (line 86) | @Override
method getComplaint (line 94) | @Override
method getAllReason (line 101) | @Override
method getRejectReason (line 107) | @Override
method acceptExchangeReship (line 113) | @Override
method rejectExchangeReship (line 120) | @Override
method merchantUpdateAfterSale (line 127) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelBasicServiceImpl.java
class WxChannelBasicServiceImpl (line 30) | @Slf4j
method WxChannelBasicServiceImpl (line 36) | public WxChannelBasicServiceImpl(BaseWxChannelServiceImpl<?, ?> shopSe...
method getShopInfo (line 40) | @Override
method uploadImg (line 46) | @Override
method uploadImg (line 55) | @Override
method uploadQualificationFile (line 64) | @Override
method getImg (line 71) | @Override
method getAddressCode (line 89) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelBrandServiceImpl.java
class WxChannelBrandServiceImpl (line 32) | @Slf4j
method WxChannelBrandServiceImpl (line 38) | public WxChannelBrandServiceImpl(BaseWxChannelServiceImpl<?, ?> shopSe...
method listAllBrand (line 42) | @Override
method addBrandApply (line 49) | @Override
method updateBrandApply (line 56) | @Override
method cancelBrandApply (line 63) | @Override
method deleteBrandApply (line 70) | @Override
method getBrandApply (line 77) | @Override
method listBrandApply (line 84) | @Override
method listValidBrandApply (line 92) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelCategoryServiceImpl.java
class WxChannelCategoryServiceImpl (line 26) | @Slf4j
method WxChannelCategoryServiceImpl (line 32) | public WxChannelCategoryServiceImpl(BaseWxChannelServiceImpl<?, ?> sho...
method listAllCategory (line 36) | @Override
method listAvailableCategory (line 44) | public List<ShopCategory> listAvailableCategory(String parentId) throw...
method listAvailableCategories (line 59) | @Override
method getCategoryDetail (line 67) | @Override
method addCategory (line 82) | @Override
method addCategory (line 103) | @Override
method cancelCategoryAudit (line 110) | @Override
method getAudit (line 116) | @Override
method listPassCategory (line 122) | @Override
method listRelationCategory (line 128) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelCompassFinderServiceImpl.java
class WxChannelCompassFinderServiceImpl (line 17) | @Slf4j
method WxChannelCompassFinderServiceImpl (line 25) | public WxChannelCompassFinderServiceImpl(BaseWxChannelServiceImpl<?, ?...
method getOverall (line 27) | @Override
method getProductData (line 34) | @Override
method getProductList (line 41) | @Override
method getSaleProfileData (line 48) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelCompassShopServiceImpl.java
class WxChannelCompassShopServiceImpl (line 38) | @Slf4j
method WxChannelCompassShopServiceImpl (line 46) | public WxChannelCompassShopServiceImpl(BaseWxChannelServiceImpl<?, ?> ...
method getShopOverall (line 48) | @Override
method getFinderAuthorizationList (line 55) | @Override
method getFinderList (line 61) | @Override
method getFinderOverall (line 68) | @Override
method getFinderProductList (line 75) | @Override
method getFinderProductOverall (line 82) | @Override
method getShopLiveList (line 89) | @Override
method getShopProductData (line 96) | @Override
method getShopProductList (line 103) | @Override
method getShopSaleProfileData (line 110) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelCouponServiceImpl.java
class WxChannelCouponServiceImpl (line 34) | @Slf4j
method WxChannelCouponServiceImpl (line 40) | public WxChannelCouponServiceImpl(BaseWxChannelServiceImpl<?, ?> shopS...
method createCoupon (line 44) | @Override
method updateCoupon (line 50) | @Override
method updateCouponStatus (line 56) | @Override
method getCoupon (line 63) | @Override
method getCouponList (line 70) | @Override
method getUserCoupon (line 76) | @Override
method getUserCouponList (line 83) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelFreightTemplateServiceImpl.java
class WxChannelFreightTemplateServiceImpl (line 24) | @Slf4j
method WxChannelFreightTemplateServiceImpl (line 29) | public WxChannelFreightTemplateServiceImpl(BaseWxChannelServiceImpl<?,...
method listTemplate (line 33) | @Override
method getTemplate (line 41) | @Override
method addTemplate (line 48) | @Override
method updateTemplate (line 55) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelFundServiceImpl.java
class WxChannelFundServiceImpl (line 52) | @Slf4j
method WxChannelFundServiceImpl (line 59) | public WxChannelFundServiceImpl(BaseWxChannelServiceImpl<?, ?> shopSer...
method getBalance (line 63) | @Override
method getBankAccount (line 69) | @Override
method getFundsFlowDetail (line 75) | @Override
method listFundsFlow (line 82) | @Override
method getWithdrawDetail (line 88) | @Override
method listWithdraw (line 95) | @Override
method setBankAccount (line 103) | @Override
method submitWithdraw (line 110) | @Override
method getBankInfoByCardNo (line 118) | @Override
method searchBankList (line 125) | @Override
method searchCityList (line 133) | @Override
method getProvinceList (line 140) | @Override
method searchBranchList (line 146) | @Override
method getQrCode (line 154) | @Override
method checkQrStatus (line 161) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelLiveDashboardServiceImpl.java
class WxChannelLiveDashboardServiceImpl (line 24) | @Slf4j
method WxChannelLiveDashboardServiceImpl (line 33) | public WxChannelLiveDashboardServiceImpl(BaseWxChannelServiceImpl<?, ?...
method getLiveList (line 35) | @Override
method getLiveData (line 42) | @Override
method convertLiveDataResponse (line 60) | private LiveDataResponse convertLiveDataResponse(String resJson) throw...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelOrderServiceImpl.java
class WxChannelOrderServiceImpl (line 51) | @Slf4j
method WxChannelOrderServiceImpl (line 57) | public WxChannelOrderServiceImpl(BaseWxChannelServiceImpl<?, ?> shopSe...
method getOrder (line 61) | @Override
method getOrder (line 68) | @Override
method getOrders (line 75) | @Override
method searchOrder (line 81) | @Override
method updatePrice (line 87) | @Override
method updateRemark (line 96) | @Override
method updateAddress (line 103) | @Override
method updateDelivery (line 110) | @Override
method acceptAddressModify (line 116) | @Override
method rejectAddressModify (line 123) | @Override
method closeOrder (line 130) | @Override
method listDeliveryCompany (line 136) | @Override
method listDeliveryCompany (line 142) | @Override
method deliveryOrder (line 152) | @Override
method uploadFreshInspect (line 160) | @Override
method getVirtualTelNumber (line 168) | @Override
method decodeSensitiveInfo (line 175) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelProductServiceImpl.java
class WxChannelProductServiceImpl (line 55) | @Slf4j
method WxChannelProductServiceImpl (line 61) | public WxChannelProductServiceImpl(BaseWxChannelServiceImpl<?, ?> shop...
method addProduct (line 65) | @Override
method updateProduct (line 72) | @Override
method addProduct (line 79) | @Override
method updateProduct (line 86) | @Override
method updateProductAuditFree (line 93) | @Override
method updateStock (line 100) | @Override
method generateProductIdJson (line 116) | protected String generateProductIdJson(String productId, Integer dataT...
method simpleProductRequest (line 137) | protected WxChannelBaseResponse simpleProductRequest(String url, Strin...
method deleteProduct (line 143) | @Override
method cancelProductAudit (line 148) | @Override
method getProduct (line 153) | @Override
method listProduct (line 160) | @Override
method upProduct (line 168) | @Override
method downProduct (line 173) | @Override
method getSkuStock (line 178) | @Override
method getSkuStockBatch (line 185) | @Override
method getProductH5Url (line 193) | @Override
method getProductQrCode (line 200) | @Override
method getProductTagLink (line 207) | @Override
method addLimitTask (line 214) | @Override
method listLimitTask (line 221) | @Override
method stopLimitTask (line 230) | @Override
method deleteLimitTask (line 237) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelServiceHttpClientImpl.java
class WxChannelServiceHttpClientImpl (line 29) | @Slf4j
method initHttp (line 35) | @Override
method getRequestHttpClient (line 55) | @Override
method getRequestHttpProxy (line 60) | @Override
method getRequestType (line 65) | @Override
method doGetAccessTokenRequest (line 70) | @Override
method doGetStableAccessTokenRequest (line 94) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelServiceHttpComponentsImpl.java
class WxChannelServiceHttpComponentsImpl (line 29) | @Slf4j
method initHttp (line 35) | @Override
method getRequestHttpClient (line 52) | @Override
method getRequestHttpProxy (line 57) | @Override
method getRequestType (line 62) | @Override
method doGetAccessTokenRequest (line 67) | @Override
method doGetStableAccessTokenRequest (line 91) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelServiceImpl.java
class WxChannelServiceImpl (line 10) | @Slf4j
method WxChannelServiceImpl (line 13) | public WxChannelServiceImpl() {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelServiceOkHttpImpl.java
class WxChannelServiceOkHttpImpl (line 29) | @Slf4j
method WxChannelServiceOkHttpImpl (line 34) | public WxChannelServiceOkHttpImpl() {
method initHttp (line 37) | @Override
method getRequestHttpClient (line 57) | @Override
method getRequestHttpProxy (line 62) | @Override
method getRequestType (line 67) | @Override
method doGetAccessTokenRequest (line 72) | @Override
method doGetStableAccessTokenRequest (line 87) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelSharerServiceImpl.java
class WxChannelSharerServiceImpl (line 32) | @Slf4j
method WxChannelSharerServiceImpl (line 38) | public WxChannelSharerServiceImpl(BaseWxChannelServiceImpl<?, ?> shopS...
method bindSharer (line 42) | @Override
method searchSharer (line 50) | @Override
method listSharer (line 57) | @Override
method listSharerOrder (line 64) | @Override
method unbindSharer (line 70) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelVipServiceImpl.java
class WxChannelVipServiceImpl (line 19) | @Slf4j
method WxChannelVipServiceImpl (line 23) | public WxChannelVipServiceImpl(BaseWxChannelServiceImpl<?, ?> shopServ...
method getVipInfo (line 27) | @Override
method getVipList (line 34) | @Override
method getVipScore (line 41) | @Override
method increaseVipScore (line 48) | @Override
method decreaseVipScore (line 55) | @Override
method updateVipGrade (line 62) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelWarehouseServiceImpl.java
class WxChannelWarehouseServiceImpl (line 39) | @Slf4j
method WxChannelWarehouseServiceImpl (line 45) | public WxChannelWarehouseServiceImpl(BaseWxChannelServiceImpl<?, ?> sh...
method createWarehouse (line 49) | @Override
method listWarehouse (line 55) | @Override
method getWarehouse (line 62) | @Override
method updateWarehouse (line 69) | @Override
method addWarehouseArea (line 78) | @Override
method deleteWarehouseArea (line 86) | @Override
method setWarehousePriority (line 95) | @Override
method getWarehousePriority (line 102) | @Override
method updateWarehouseStock (line 110) | @Override
method getWarehouseStock (line 116) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxFinderLiveServiceImpl.java
class WxFinderLiveServiceImpl (line 24) | @RequiredArgsConstructor
method getFinderAttrByAppid (line 30) | @Override
method getFinderLiveDataList (line 36) | @Override
method getFinderLiveLeadsData (line 42) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxLeadComponentServiceImpl.java
class WxLeadComponentServiceImpl (line 36) | @RequiredArgsConstructor
method getLeadsInfoByComponentId (line 43) | @Override
method getLeadsInfoByRequestId (line 50) | @Override
method getLeadsRequestId (line 57) | @Override
method getLeadsComponentPromoteRecord (line 63) | @Override
method getLeadsComponentId (line 69) | @Override
method convertLeadInfoResponse (line 78) | private LeadInfoResponse convertLeadInfoResponse(String resJson) throw...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxLeagueProductServiceImpl.java
class WxLeagueProductServiceImpl (line 31) | @Slf4j
method WxLeagueProductServiceImpl (line 37) | public WxLeagueProductServiceImpl(BaseWxChannelServiceImpl<?, ?>shopSe...
method batchAddProduct (line 41) | @Override
method updateProduct (line 47) | @Override
method deleteProduct (line 53) | @Override
method getProductDetail (line 60) | @Override
method listProduct (line 66) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxLeaguePromoterServiceImpl.java
class WxLeaguePromoterServiceImpl (line 23) | @Slf4j
method WxLeaguePromoterServiceImpl (line 29) | public WxLeaguePromoterServiceImpl(BaseWxChannelServiceImpl<?, ?> shop...
method addPromoter (line 33) | @Override
method updatePromoter (line 40) | @Override
method deletePromoter (line 47) | @Override
method getPromoterInfo (line 54) | @Override
method addPromoterV2 (line 61) | @Override
method updatePromoterV2 (line 68) | @Override
method deletePromoterV2 (line 75) | @Override
method getPromoterInfoV2 (line 82) | @Override
method listPromoter (line 89) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxLeagueSupplierServiceImpl.java
class WxLeagueSupplierServiceImpl (line 37) | @Slf4j
method WxLeagueSupplierServiceImpl (line 43) | public WxLeagueSupplierServiceImpl(BaseWxChannelServiceImpl<?, ?> shop...
method getBalanceInfo (line 47) | @Override
method getFlowDetail (line 53) | @Override
method getFlowList (line 60) | @Override
method getProductDetail (line 66) | @Override
method getProductList (line 73) | @Override
method getCommissionOrder (line 81) | @Override
method getCommissionOrderList (line 88) | @Override
method getShopDetail (line 94) | @Override
method getShopList (line 101) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxLeagueWindowServiceImpl.java
class WxLeagueWindowServiceImpl (line 28) | @Slf4j
method WxLeagueWindowServiceImpl (line 34) | public WxLeagueWindowServiceImpl(BaseWxChannelServiceImpl<?, ?> shopSe...
method addProduct (line 38) | @Override
method listProduct (line 46) | @Override
method removeProduct (line 52) | @Override
method getProductDetail (line 60) | @Override
method getWindowAuthInfo (line 68) | @Override
method getWindowAuthStatus (line 75) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxStoreCooperationServiceImpl.java
class WxStoreCooperationServiceImpl (line 24) | @Slf4j
method WxStoreCooperationServiceImpl (line 30) | public WxStoreCooperationServiceImpl(BaseWxChannelServiceImpl<?, ?> st...
method listCooperation (line 34) | @Override
method getCooperationStatus (line 41) | @Override
method generateQrCode (line 48) | @Override
method cancelInvitation (line 55) | @Override
method unbind (line 62) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxStoreHomePageServiceImpl.java
class WxStoreHomePageServiceImpl (line 36) | @Slf4j
method WxStoreHomePageServiceImpl (line 42) | public WxStoreHomePageServiceImpl(BaseWxChannelServiceImpl<?, ?> store...
method addTreeProduct (line 47) | @Override
method delTreeProduct (line 54) | @Override
method getTreeProductList (line 61) | @Override
method setShowTree (line 68) | @Override
method getShowTree (line 75) | @Override
method listWindowProduct (line 81) | @Override
method reorderWindowProduct (line 88) | @Override
method hideWindowProduct (line 95) | @Override
method topWindowProduct (line 104) | @Override
method applyBackground (line 113) | @Override
method getBackground (line 120) | @Override
method cancelBackground (line 126) | @Override
method removeBackground (line 133) | @Override
method applyBanner (line 139) | @Override
method getBanner (line 146) | @Override
method cancelBanner (line 152) | @Override
method removeBanner (line 159) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/address/AddressAddParam.java
class AddressAddParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/address/AddressCode.java
class AddressCode (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/address/AddressCodeResponse.java
class AddressCodeResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/address/AddressDetail.java
class AddressDetail (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/address/AddressIdParam.java
class AddressIdParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/address/AddressIdResponse.java
class AddressIdResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/address/AddressInfoResponse.java
class AddressInfoResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/address/AddressListParam.java
class AddressListParam (line 15) | @Data
method AddressListParam (line 23) | public AddressListParam(Integer offset, Integer limit) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/address/AddressListResponse.java
class AddressListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/address/OfflineAddressType.java
class OfflineAddressType (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleAcceptExchangeReshipParam.java
class AfterSaleAcceptExchangeReshipParam (line 12) | @Data
method AfterSaleAcceptExchangeReshipParam (line 25) | public AfterSaleAcceptExchangeReshipParam() {
method AfterSaleAcceptExchangeReshipParam (line 29) | public AfterSaleAcceptExchangeReshipParam(String afterSaleOrderId, Str...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleAcceptParam.java
class AfterSaleAcceptParam (line 13) | @Data
method AfterSaleAcceptParam (line 26) | public AfterSaleAcceptParam() {
method AfterSaleAcceptParam (line 29) | public AfterSaleAcceptParam(String afterSaleOrderId, String addressId) {
method AfterSaleAcceptParam (line 34) | public AfterSaleAcceptParam(String afterSaleOrderId, String addressId,...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleDetail.java
class AfterSaleDetail (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleExchangeDeliveryInfo.java
class AfterSaleExchangeDeliveryInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleExchangeProductInfo.java
class AfterSaleExchangeProductInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleIdParam.java
class AfterSaleIdParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleInfo.java
class AfterSaleInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleInfoResponse.java
class AfterSaleInfoResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleListParam.java
class AfterSaleListParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleListResponse.java
class AfterSaleListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleMerchantUpdateParam.java
class AfterSaleMerchantUpdateParam (line 14) | @Data
method AfterSaleMerchantUpdateParam (line 43) | public AfterSaleMerchantUpdateParam() {
method AfterSaleMerchantUpdateParam (line 46) | public AfterSaleMerchantUpdateParam(String afterSaleOrderId, Integer t...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleProductInfo.java
class AfterSaleProductInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleReason.java
class AfterSaleReason (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleReasonResponse.java
class AfterSaleReasonResponse (line 17) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleRejectExchangeReshipParam.java
class AfterSaleRejectExchangeReshipParam (line 14) | @Data
method AfterSaleRejectExchangeReshipParam (line 31) | public AfterSaleRejectExchangeReshipParam() {
method AfterSaleRejectExchangeReshipParam (line 34) | public AfterSaleRejectExchangeReshipParam(String afterSaleOrderId, Str...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleRejectParam.java
class AfterSaleRejectParam (line 13) | @Data
method AfterSaleRejectParam (line 30) | public AfterSaleRejectParam() {
method AfterSaleRejectParam (line 33) | public AfterSaleRejectParam(String afterSaleOrderId, String rejectReas...
method AfterSaleRejectParam (line 38) | public AfterSaleRejectParam(String afterSaleOrderId, String rejectReas...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleRejectReason.java
class AfterSaleRejectReason (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleRejectReasonResponse.java
class AfterSaleRejectReasonResponse (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleReturnParam.java
class AfterSaleReturnParam (line 13) | @Data
method AfterSaleReturnParam (line 29) | public AfterSaleReturnParam() {
method AfterSaleReturnParam (line 32) | public AfterSaleReturnParam(Long afterSaleId, String outAfterSaleId) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleVirtualNumberInfo.java
class AfterSaleVirtualNumberInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/MerchantUploadInfo.java
class MerchantUploadInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/RefundEvidenceParam.java
class RefundEvidenceParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/RefundInfo.java
class RefundInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/RefundResp.java
class RefundResp (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/ReturnInfo.java
class ReturnInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/audit/AuditApplyResponse.java
class AuditApplyResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/audit/AuditResponse.java
class AuditResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/audit/AuditResult.java
class AuditResult (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/audit/CategoryAuditInfo.java
class CategoryAuditInfo (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/audit/CategoryAuditRequest.java
class CategoryAuditRequest (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/audit/CategoryBrand.java
class CategoryBrand (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/audit/CatsV2.java
class CatsV2 (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/audit/ProductAuditInfo.java
class ProductAuditInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/base/AddressInfo.java
class AddressInfo (line 14) | @Data
method AddressInfo (line 65) | public AddressInfo(String provinceName, String cityName, String county...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/base/AttrInfo.java
class AttrInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/base/OffsetParam.java
class OffsetParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/base/PageParam.java
class PageParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/base/StreamPageParam.java
class StreamPageParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/base/TimeRange.java
class TimeRange (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/base/WxChannelBaseResponse.java
class WxChannelBaseResponse (line 12) | public class WxChannelBaseResponse implements Serializable {
method errorMessage (line 37) | public String errorMessage() {
method isSuccess (line 41) | public boolean isSuccess() {
method getErrCode (line 45) | public int getErrCode() {
method setErrCode (line 49) | public void setErrCode(int errCode) {
method getErrMsg (line 53) | public String getErrMsg() {
method setErrMsg (line 57) | public void setErrMsg(String errMsg) {
method toString (line 61) | @Override
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/BasicBrand.java
class BasicBrand (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/Brand.java
class Brand (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/BrandApplicationDetail.java
class BrandApplicationDetail (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/BrandApplyListResponse.java
class BrandApplyListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/BrandGrantDetail.java
class BrandGrantDetail (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/BrandInfo.java
class BrandInfo (line 14) | @Data
class AuditResult (line 38) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/BrandInfoResponse.java
class BrandInfoResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/BrandListResponse.java
class BrandListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/BrandParam.java
class BrandParam (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/BrandRegisterDetail.java
class BrandRegisterDetail (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/brand/BrandSearchParam.java
class BrandSearchParam (line 14) | @Data
method BrandSearchParam (line 24) | public BrandSearchParam() {
method BrandSearchParam (line 27) | public BrandSearchParam(Integer pageSize, String nextKey, Integer stat...
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/AccountCategoryResponse.java
class AccountCategoryResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/CategoryAndQualificationList.java
class CategoryAndQualificationList (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/CategoryDetailResult.java
class CategoryDetailResult (line 13) | @Data
class Info (line 29) | @Data
class Attr (line 41) | @Data
class BrandInfo (line 114) | @Data
class ProductAttr (line 123) | @Data
class FeeInfo (line 168) | @Data
class CouponRule (line 185) | @Data
class ProductRequirement (line 198) | @Data
class SizeChart (line 214) | @Data
class SizeChartItem (line 227) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/CategoryQualification.java
class CategoryQualification (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/CategoryQualificationResponse.java
class CategoryQualificationResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/PassCategoryInfo.java
class PassCategoryInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/PassCategoryResponse.java
class PassCategoryResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/QualificationInfo.java
class QualificationInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/RelationCategoryItem.java
class RelationCategoryItem (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/RelationCategoryRequest.java
class RelationCategoryRequest (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/RelationCategoryResponse.java
class RelationCategoryResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/ShopCategory.java
class ShopCategory (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/category/ShopCategoryResponse.java
class ShopCategoryResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/CompassFinderBaseParam.java
class CompassFinderBaseParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/Field.java
class Field (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/FieldData.java
class FieldData (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/Overall.java
class Overall (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/OverallResponse.java
class OverallResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/ProductCompassData.java
class ProductCompassData (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/ProductDataParam.java
class ProductDataParam (line 15) | @Data
method ProductDataParam (line 29) | public ProductDataParam(String ds, String productId) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/ProductDataResponse.java
class ProductDataResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/ProductInfo.java
class ProductInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/ProductListResponse.java
class ProductListResponse (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/SaleProfileData.java
class SaleProfileData (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/SaleProfileDataParam.java
class SaleProfileDataParam (line 15) | @Data
method SaleProfileDataParam (line 29) | public SaleProfileDataParam(String ds, Integer type) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/finder/SaleProfileDataResponse.java
class SaleProfileDataResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/CompassFinderIdParam.java
class CompassFinderIdParam (line 15) | @Data
method CompassFinderIdParam (line 27) | public CompassFinderIdParam(String ds, String finderId) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/FinderAuthListResponse.java
class FinderAuthListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/FinderGmvData.java
class FinderGmvData (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/FinderGmvItem.java
class FinderGmvItem (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/FinderListResponse.java
class FinderListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/FinderOverallData.java
class FinderOverallData (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/FinderOverallResponse.java
class FinderOverallResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/FinderProductListItem.java
class FinderProductListItem (line 13) | @Data
class GmvData (line 52) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/FinderProductListResponse.java
class FinderProductListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/FinderProductOverallResponse.java
class FinderProductOverallResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/FinderProductSimpleGmvData.java
class FinderProductSimpleGmvData (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopField.java
class ShopField (line 14) | @Data
class FieldDetail (line 29) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopLiveData.java
class ShopLiveData (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopLiveListResponse.java
class ShopLiveListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopOverall.java
class ShopOverall (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopOverallResponse.java
class ShopOverallResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopProductCompassData.java
class ShopProductCompassData (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopProductDataParam.java
class ShopProductDataParam (line 15) | @Data
method ShopProductDataParam (line 27) | public ShopProductDataParam(String ds, String productId) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopProductDataResponse.java
class ShopProductDataResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopProductInfo.java
class ShopProductInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopProductListResponse.java
class ShopProductListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopSaleProfileData.java
class ShopSaleProfileData (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopSaleProfileDataParam.java
class ShopSaleProfileDataParam (line 15) | @Data
method ShopSaleProfileDataParam (line 27) | public ShopSaleProfileDataParam(String ds, Integer type) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/compass/shop/ShopSaleProfileDataResponse.java
class ShopSaleProfileDataResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/complaint/ComplaintHistory.java
class ComplaintHistory (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/complaint/ComplaintOrderResponse.java
class ComplaintOrderResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/complaint/ComplaintParam.java
class ComplaintParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/cooperation/CooperationData.java
class CooperationData (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/cooperation/CooperationListResponse.java
class CooperationListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/cooperation/CooperationQrCode.java
class CooperationQrCode (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/cooperation/CooperationQrCodeResponse.java
class CooperationQrCodeResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/cooperation/CooperationSharerParam.java
class CooperationSharerParam (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/cooperation/CooperationStatus.java
class CooperationStatus (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/cooperation/CooperationStatusResponse.java
class CooperationStatusResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/AutoValidInfo.java
class AutoValidInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/CouponDetailInfo.java
class CouponDetailInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/CouponIdInfo.java
class CouponIdInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/CouponIdResponse.java
class CouponIdResponse (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/CouponInfo.java
class CouponInfo (line 10) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/CouponInfoResponse.java
class CouponInfoResponse (line 12) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/CouponListParam.java
class CouponListParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/CouponListResponse.java
class CouponListResponse (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/CouponParam.java
class CouponParam (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/CouponStatusParam.java
class CouponStatusParam (line 11) | @Data
method CouponStatusParam (line 21) | public CouponStatusParam() {
method CouponStatusParam (line 24) | public CouponStatusParam(String couponId, Integer status) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/DiscountCondition.java
class DiscountCondition (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/DiscountInfo.java
class DiscountInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/ExtInfo.java
class ExtInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/PromoteInfo.java
class PromoteInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/ReceiveInfo.java
class ReceiveInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/StockInfo.java
class StockInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/UserCoupon.java
class UserCoupon (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/UserCouponIdInfo.java
class UserCouponIdInfo (line 12) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/UserCouponIdParam.java
class UserCouponIdParam (line 10) | @Data
method UserCouponIdParam (line 22) | public UserCouponIdParam() {
method UserCouponIdParam (line 25) | public UserCouponIdParam(String openid, String userCouponId) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/UserCouponListParam.java
class UserCouponListParam (line 12) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/UserCouponListResponse.java
class UserCouponListResponse (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/UserCouponResponse.java
class UserCouponResponse (line 12) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/UserExtInfo.java
class UserExtInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/coupon/ValidInfo.java
class ValidInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/delivery/DeliveryCompanyInfo.java
class DeliveryCompanyInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/delivery/DeliveryCompanyResponse.java
class DeliveryCompanyResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/delivery/DeliveryInfo.java
class DeliveryInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/delivery/DeliverySendParam.java
class DeliverySendParam (line 17) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/delivery/FreightProductInfo.java
class FreightProductInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/delivery/FreshInspectParam.java
class FreshInspectParam (line 17) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/delivery/PackageAuditInfo.java
class PackageAuditInfo (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/AddressInfoList.java
class AddressInfoList (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/AllConditionFreeDetail.java
class AllConditionFreeDetail (line 16) | @Data
method addDetail (line 25) | @JsonIgnore
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/AllFreightCalcMethod.java
class AllFreightCalcMethod (line 14) | @Data
method AllFreightCalcMethod (line 22) | public AllFreightCalcMethod() {
method addDetail (line 25) | public void addDetail(FreightCalcMethod detail) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/ConditionFreeDetail.java
class ConditionFreeDetail (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/FreightCalcMethod.java
class FreightCalcMethod (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/FreightTemplate.java
class FreightTemplate (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/NotSendArea.java
class NotSendArea (line 12) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/TemplateAddParam.java
class TemplateAddParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/TemplateIdResponse.java
class TemplateIdResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/TemplateInfoResponse.java
class TemplateInfoResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/TemplateListParam.java
class TemplateListParam (line 14) | @Data
method TemplateListParam (line 21) | public TemplateListParam() {
method TemplateListParam (line 24) | public TemplateListParam(Integer offset, Integer limit) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/freight/TemplateListResponse.java
class TemplateListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/AccountInfo.java
class AccountInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/AccountInfoParam.java
class AccountInfoParam (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/AccountInfoResponse.java
class AccountInfoResponse (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/BalanceInfoResponse.java
class BalanceInfoResponse (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/FlowListResponse.java
class FlowListResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/FlowRelatedInfo.java
class FlowRelatedInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/FundsFlow.java
class FundsFlow (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/FundsFlowResponse.java
class FundsFlowResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/FundsListParam.java
class FundsListParam (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/WithdrawDetailResponse.java
class WithdrawDetailResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/WithdrawListParam.java
class WithdrawListParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/WithdrawListResponse.java
class WithdrawListResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/WithdrawSubmitParam.java
class WithdrawSubmitParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/WithdrawSubmitResponse.java
class WithdrawSubmitResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BankCityInfo.java
class BankCityInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BankCityResponse.java
class BankCityResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BankInfo.java
class BankInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BankInfoResponse.java
class BankInfoResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BankListResponse.java
class BankListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BankProvinceInfo.java
class BankProvinceInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BankProvinceResponse.java
class BankProvinceResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BankSearchParam.java
class BankSearchParam (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BranchInfo.java
class BranchInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BranchInfoResponse.java
class BranchInfoResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/bank/BranchSearchParam.java
class BranchSearchParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/qrcode/QrCheckResponse.java
class QrCheckResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/fund/qrcode/QrCodeResponse.java
class QrCodeResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/background/BackgroundApplyResponse.java
class BackgroundApplyResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/background/BackgroundApplyResult.java
class BackgroundApplyResult (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/background/BackgroundGetResponse.java
class BackgroundGetResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerApplyDetail.java
class BannerApplyDetail (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerApplyInfo.java
class BannerApplyInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerApplyParam.java
class BannerApplyParam (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerApplyResponse.java
class BannerApplyResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerGetResponse.java
class BannerGetResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerInfo.java
class BannerInfo (line 16) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerItem.java
class BannerItem (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerItemDetail.java
class BannerItemDetail (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerItemFinder.java
class BannerItemFinder (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerItemOfficialAccount.java
class BannerItemOfficialAccount (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/banner/BannerItemProduct.java
class BannerItemProduct (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/CatTreeNode.java
class CatTreeNode (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/LevelTreeInfo.java
class LevelTreeInfo (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/OneLevelTreeNode.java
class OneLevelTreeNode (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeAuditResult.java
class TreeAuditResult (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeAuditResultDetail.java
class TreeAuditResultDetail (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeProductEditInfo.java
class TreeProductEditInfo (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeProductEditParam.java
class TreeProductEditParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeProductListInfo.java
class TreeProductListInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeProductListParam.java
class TreeProductListParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeProductListResponse.java
class TreeProductListResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeProductListResult.java
class TreeProductListResult (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeShowGetResponse.java
class TreeShowGetResponse (line 12) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeShowInfo.java
class TreeShowInfo (line 15) | @Data
method createTree (line 39) | protected LevelTreeInfo createTree() {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeShowParam.java
class TreeShowParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/tree/TreeShowSetResponse.java
class TreeShowSetResponse (line 12) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/window/WindowProductIndexParam.java
class WindowProductIndexParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/window/WindowProductListParam.java
class WindowProductListParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/window/WindowProductSetting.java
class WindowProductSetting (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/home/window/WindowProductSettingResponse.java
class WindowProductSettingResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/image/ChannelImageInfo.java
class ChannelImageInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/image/ChannelImageResponse.java
class ChannelImageResponse (line 12) | @Data
method ChannelImageResponse (line 23) | public ChannelImageResponse() {
method ChannelImageResponse (line 26) | public ChannelImageResponse(File file, String contentType) {
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/image/QualificationFileId.java
class QualificationFileId (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/image/QualificationFileResponse.java
class QualificationFileResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/image/UploadImageResponse.java
class UploadImageResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/request/GetFinderLiveDataListRequest.java
class GetFinderLiveDataListRequest (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/request/GetFinderLiveLeadsDataRequest.java
class GetFinderLiveLeadsDataRequest (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/request/GetLeadInfoByComponentRequest.java
class GetLeadInfoByComponentRequest (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/request/GetLeadsComponentIdRequest.java
class GetLeadsComponentIdRequest (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/request/GetLeadsComponentPromoteRecordRequest.java
class GetLeadsComponentPromoteRecordRequest (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/request/GetLeadsInfoByRequestIdRequest.java
class GetLeadsInfoByRequestIdRequest (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/request/GetLeadsRequestIdRequest.java
class GetLeadsRequestIdRequest (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/response/FinderAttrResponse.java
class FinderAttrResponse (line 15) | @Data
class FinderAttr (line 29) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/response/GetFinderLiveDataListResponse.java
class GetFinderLiveDataListResponse (line 17) | @Data
class LiveStatisticsItem (line 43) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/response/GetFinderLiveLeadsDataResponse.java
class GetFinderLiveLeadsDataResponse (line 17) | @Data
class LeadCountItem (line 31) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/response/GetLeadsComponentIdResponse.java
class GetLeadsComponentIdResponse (line 17) | @Data
class LeadComponentItem (line 43) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/response/GetLeadsComponentPromoteRecordResponse.java
class GetLeadsComponentPromoteRecordResponse (line 17) | @Data
class RecordData (line 43) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/response/GetLeadsRequestIdResponse.java
class GetLeadsRequestIdResponse (line 17) | @Data
class LiveLeadItem (line 43) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/lead/component/response/LeadInfoResponse.java
class LeadInfoResponse (line 17) | @Data
class UserData (line 43) | @Data
class LeadsData (line 73) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/AddressInfo.java
class AddressInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/CatInfo.java
class CatInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/DescInfo.java
class DescInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/ExpressInfo.java
class ExpressInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/SimpleProductInfo.java
class SimpleProductInfo (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/product/BatchAddParam.java
class BatchAddParam (line 16) | @Data
class Product (line 47) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/product/BatchAddResponse.java
class BatchAddResponse (line 15) | @Data
class ResultInfo (line 26) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/product/ProductDeleteParam.java
class ProductDeleteParam (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/product/ProductDetailParam.java
class ProductDetailParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/product/ProductDetailResponse.java
class ProductDetailResponse (line 15) | @Data
class Item (line 25) | @Data
class ExclusiveInfo (line 55) | @Data
class ExtInfo (line 82) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/product/ProductListParam.java
class ProductListParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/product/ProductListResponse.java
class ProductListResponse (line 16) | @Data
class Item (line 38) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/product/ProductUpdateParam.java
class ProductUpdateParam (line 15) | @Data
class ExclusiveInfo (line 47) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/product/ProductUpdateResponse.java
class ProductUpdateResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/promoter/PromoterInfo.java
class PromoterInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/promoter/PromoterInfoResponse.java
class PromoterInfoResponse (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/promoter/PromoterListParam.java
class PromoterListParam (line 14) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/promoter/PromoterListResponse.java
class PromoterListResponse (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/supplier/BizBaseInfo.java
class BizBaseInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/supplier/CommissionInfo.java
class CommissionInfo (line 13) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/supplier/CommissionOrderListParam.java
class CommissionOrderListParam (line 15) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/supplier/CommissionOrderListResponse.java
class CommissionOrderListResponse (line 17) | @Data
class ProductIdInfo (line 36) | @Data
FILE: weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/league/supplier/CommissionOrderResponse.java
class CommissionOrderResponse (line 15)
Copy disabled (too large)
Download .json
Condensed preview — 4071 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (11,509K chars).
[
{
"path": ".circleci/config.yml",
"chars": 212,
"preview": "version: 2.1\njobs:\n build:\n docker:\n - image: cimg/openjdk:11.0\n steps:\n - checkout\n - run:\n "
},
{
"path": ".editorconfig",
"chars": 231,
"preview": "# EditorConfig: http://editorconfig.org/\n\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset"
},
{
"path": ".gitee/ISSUE_TEMPLATE.md",
"chars": 468,
"preview": "强烈建议大家到 `github` 相关页面提交问题,方便统一查询管理,具体页面地址:https://github.com/binarywang/WxJava/issues\n\n当然如果必须在这里提问,请务必按以下格式填写,谢谢配合~\n\n# 提"
},
{
"path": ".github/FUNDING.yml",
"chars": 161,
"preview": "# These are supported funding model platforms\n\ngithub: [binarywang]\ncustom: https://github.com/Wechat-Group/WxJava/blob/"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 548,
"preview": "---\nname: Bug报告\nabout: 本项目仅对最新版本进行维护,使用老版本出现问题的盆友,请先升级到最新版本,升级完后如果发现bug依然存在,请继续填写此issue。\ntitle: ''\nlabels: ''\nassignees:"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 216,
"preview": "---\nname: 请求添加新功能\nabout: 如果有什么新功能需要添加,请告诉我们\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n# 提问前,请确保阅读过项目首页说明以及wiki开发文档相关内容,完成"
},
{
"path": ".github/agents/my-agent.agent.md",
"chars": 508,
"preview": "---\n# Fill in the fields below to create a basic custom agent for your repository.\n# The Copilot CLI can be used for loc"
},
{
"path": ".github/copilot-instructions.md",
"chars": 4309,
"preview": "# Copilot Instruction\n请始终使用中文生成 Pull Request 的标题、描述和提交信息\n\n\n# WxJava - 微信 Java SDK 开发说明\n\nWxJava 是一个支持多种微信平台的完整 Java SDK,包"
},
{
"path": ".github/stale.yml",
"chars": 682,
"preview": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 60\n# Number of days of inactivity before a "
},
{
"path": ".github/workflows/maven-publish.yml",
"chars": 3710,
"preview": "name: Publish to Maven Central\non:\n push:\n branches:\n - develop\n\npermissions:\n contents: write\n\nconcurrency:\n "
},
{
"path": ".gitignore",
"chars": 622,
"preview": ".bash\n.history\n\n*.class\ntest-output\n\n# Package Files #\n*.jar\n*.war\n*.ear\n\n# virtual machine crash logs, see http://www.j"
},
{
"path": ".travis.yml",
"chars": 235,
"preview": "language: java\n\njdk:\n - openjdk8\nscript: \"mvn clean package -DskipTests=true -Dcheckstyle.skip=true\"\n\nbranches:\n only:"
},
{
"path": "CONTRIBUTING.md",
"chars": 1332,
"preview": "# 代码贡献指南\n1. 首先非常欢迎和感谢对本项目发起 `Pull Request` 的热心小伙伴们。\n1. **特别提示:请务必在 `develop` 分支提交 `PR`,`release` 分支目前仅是正式版的代码,即发布正式版本后才会"
},
{
"path": "LICENSE",
"chars": 9138,
"preview": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, "
},
{
"path": "README.md",
"chars": 11287,
"preview": "## WxJava - 微信开发 Java SDK\n[ at pc=0x00007fcd50460d93\nProb"
},
{
"path": "docs/CommonUploadParam-FormFields-Usage.md",
"chars": 4667,
"preview": "# CommonUploadParam 额外表单字段功能使用示例\n\n## 背景\n\n微信公众号在上传永久视频素材时,需要在POST请求中同时提交文件和一个名为`description`的表单字段,该字段包含视频的描述信息(JSON格式)。\n\n"
},
{
"path": "docs/HTTPCLIENT_UPGRADE_GUIDE.md",
"chars": 4855,
"preview": "# HttpClient 升级指南\n\n## 概述\n\n从 WxJava 4.7.x 版本开始,项目开始支持并推荐使用 **Apache HttpClient 5.x**(HttpComponents Client 5),同时保持对 HttpC"
},
{
"path": "docs/MINIAPP_KEFU_SERVICE.md",
"chars": 3059,
"preview": "# WeChat Mini Program Customer Service Management\n\nThis document describes the new customer service management functiona"
},
{
"path": "docs/NEW_TRANSFER_API_SUPPORT.md",
"chars": 3753,
"preview": "# 微信支付新版商户转账API支持\n\n## 问题解答\n\n**问题**: 新开通的商户号只能使用最新版本的商户转账接口,WxJava是否支持?\n\n**答案**: **WxJava 已经完整支持新版商户转账API!** 从2025年1月15日开"
},
{
"path": "docs/NEW_TRANSFER_API_USAGE.md",
"chars": 6576,
"preview": "# 微信支付新版商户转账API使用指南\n\n## 概述\n\n从2025年1月15日开始,微信支付推出了新版的商户转账API。新开通的商户号只能使用最新版本的商户转账接口。WxJava 已经完整支持新版转账API。\n\n## API对比\n\n### "
},
{
"path": "docs/QUARKUS_SUPPORT.md",
"chars": 2514,
"preview": "# WxJava Quarkus/GraalVM Native Image Support\n\n## 概述\n\n从 4.7.8.B 版本开始,WxJava 提供了对 Quarkus 和 GraalVM Native Image 的支持。这允许您"
},
{
"path": "others/.mvn/wrapper/maven-wrapper.properties",
"chars": 109,
"preview": "distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.2/apache-maven-3.5.2-bin.zip"
},
{
"path": "others/check-dependency-updates.sh",
"chars": 94,
"preview": "#!/usr/bin/env bash\n./mvnw org.codehaus.mojo:versions-maven-plugin:display-dependency-updates\n"
},
{
"path": "others/check-plugin-updates.sh",
"chars": 90,
"preview": "#!/usr/bin/env bash\n./mvnw org.codehaus.mojo:versions-maven-plugin:display-plugin-updates\n"
},
{
"path": "others/check-property-updates.sh",
"chars": 92,
"preview": "#!/usr/bin/env bash\n./mvnw org.codehaus.mojo:versions-maven-plugin:display-property-updates\n"
},
{
"path": "others/mvnw",
"chars": 7272,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": "others/mvnw.cmd",
"chars": 5127,
"preview": "@REM ----------------------------------------------------------------------------\n@REM Licensed to the Apache Software F"
},
{
"path": "others/weixin-java-config/README.md",
"chars": 13834,
"preview": "# weixin-java-config\n1.目录说明:多配置文件目录\n\n2.项目多配置集锦\n```yml\nwechat:\n pay: #微信服务商支付\n configs:\n - appId: wxe97b2x9c2b3d #"
},
{
"path": "others/weixin-java-osgi/pom.xml",
"chars": 4877,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"ht"
},
{
"path": "pom.xml",
"chars": 15429,
"preview": "<?xml version=\"1.0\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.ap"
},
{
"path": "quality-checks/google_checks.xml",
"chars": 7957,
"preview": "<?xml version=\"1.0\"?>\n<!DOCTYPE module PUBLIC\n \"-//Puppy Crawl//DTD Check Configuration 1.3//EN\"\n \"http://checkstyle.s"
},
{
"path": "solon-plugins/pom.xml",
"chars": 1756,
"preview": "<?xml version=\"1.0\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http:/"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/README.md",
"chars": 4070,
"preview": "# wx-java-channel-multi-solon-plugin\n\n## 快速开始\n\n1. 引入依赖\n ```xml\n <dependencies>\n <dependency>\n <g"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/pom.xml",
"chars": 1427,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/AbstractWxChannelConfiguration.java",
"chars": 6091,
"preview": "package com.binarywang.solon.wxjava.channel.configuration.services;\n\nimport com.binarywang.solon.wxjava.channel.enums.Ht"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/WxChannelInJedisConfiguration.java",
"chars": 3191,
"preview": "package com.binarywang.solon.wxjava.channel.configuration.services;\n\nimport com.binarywang.solon.wxjava.channel.properti"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/WxChannelInMemoryConfiguration.java",
"chars": 1360,
"preview": "package com.binarywang.solon.wxjava.channel.configuration.services;\n\nimport com.binarywang.solon.wxjava.channel.properti"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/configuration/services/WxChannelInRedissonConfiguration.java",
"chars": 2851,
"preview": "package com.binarywang.solon.wxjava.channel.configuration.services;\n\nimport com.binarywang.solon.wxjava.channel.properti"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/HttpClientType.java",
"chars": 390,
"preview": "package com.binarywang.solon.wxjava.channel.enums;\n\n/**\n * httpclient类型\n *\n * @author <a href=\"https://github.com/Winnie"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/StorageType.java",
"chars": 362,
"preview": "package com.binarywang.solon.wxjava.channel.enums;\n\n/**\n * storage类型\n *\n * @author <a href=\"https://github.com/Winnie-by"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/integration/WxChannelMultiPluginImpl.java",
"chars": 1015,
"preview": "package com.binarywang.solon.wxjava.channel.integration;\n\nimport com.binarywang.solon.wxjava.channel.configuration.servi"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelMultiProperties.java",
"chars": 2380,
"preview": "package com.binarywang.solon.wxjava.channel.properties;\n\nimport com.binarywang.solon.wxjava.channel.enums.HttpClientType"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelMultiRedisProperties.java",
"chars": 893,
"preview": "package com.binarywang.solon.wxjava.channel.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport ja"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelSingleProperties.java",
"chars": 742,
"preview": "package com.binarywang.solon.wxjava.channel.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport ja"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/service/WxChannelMultiServices.java",
"chars": 588,
"preview": "package com.binarywang.solon.wxjava.channel.service;\n\nimport me.chanjar.weixin.channel.api.WxChannelService;\n\n/**\n * 视频号"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/service/WxChannelMultiServicesImpl.java",
"chars": 992,
"preview": "package com.binarywang.solon.wxjava.channel.service;\n\nimport me.chanjar.weixin.channel.api.WxChannelService;\n\nimport jav"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/main/resources/META-INF/solon/wx-java-multi-channel-solon-plugin.properties",
"chars": 111,
"preview": "solon.plugin=com.binarywang.solon.wxjava.channel.integration.WxChannelMultiPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-channel-multi-solon-plugin/src/test/resources/app.properties",
"chars": 1247,
"preview": "# 视频号配置\n## 应用 1 配置(必填)\nwx.channel.apps.tenantId1.app-id=appId\nwx.channel.apps.tenantId1.secret=secret\n## 选填\nwx.channel.a"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/README.md",
"chars": 2737,
"preview": "# wx-java-channel-solon-plugin\n\n## 快速开始\n1. 引入依赖\n ```xml\n <dependencies>\n <dependency>\n <groupId>"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/pom.xml",
"chars": 1066,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/WxChannelServiceAutoConfiguration.java",
"chars": 1082,
"preview": "package com.binarywang.solon.wxjava.channel.config;\n\n\nimport com.binarywang.solon.wxjava.channel.properties.WxChannelPro"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/AbstractWxChannelConfigStorageConfiguration.java",
"chars": 1828,
"preview": "package com.binarywang.solon.wxjava.channel.config.storage;\n\nimport com.binarywang.solon.wxjava.channel.properties.WxCha"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/WxChannelInJedisConfigStorageConfiguration.java",
"chars": 2784,
"preview": "package com.binarywang.solon.wxjava.channel.config.storage;\n\n\nimport com.binarywang.solon.wxjava.channel.properties.Redi"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/WxChannelInMemoryConfigStorageConfiguration.java",
"chars": 1041,
"preview": "package com.binarywang.solon.wxjava.channel.config.storage;\n\n\nimport com.binarywang.solon.wxjava.channel.properties.WxCh"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/config/storage/WxChannelInRedissonConfigStorageConfiguration.java",
"chars": 2407,
"preview": "package com.binarywang.solon.wxjava.channel.config.storage;\n\n\nimport com.binarywang.solon.wxjava.channel.properties.Redi"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/HttpClientType.java",
"chars": 261,
"preview": "package com.binarywang.solon.wxjava.channel.enums;\n\n/**\n * httpclient类型\n *\n * @author <a href=\"https://github.com/lixize"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/enums/StorageType.java",
"chars": 335,
"preview": "package com.binarywang.solon.wxjava.channel.enums;\n\n/**\n * storage类型\n *\n * @author <a href=\"https://github.com/lixize\">Z"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/integration/WxChannelPluginImpl.java",
"chars": 1111,
"preview": "package com.binarywang.solon.wxjava.channel.integration;\n\n\nimport com.binarywang.solon.wxjava.channel.config.WxChannelSe"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/RedisProperties.java",
"chars": 582,
"preview": "package com.binarywang.solon.wxjava.channel.properties;\n\nimport lombok.Data;\n\n/**\n * redis 配置\n *\n * @author <a href=\"htt"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/java/com/binarywang/solon/wxjava/channel/properties/WxChannelProperties.java",
"chars": 2106,
"preview": "package com.binarywang.solon.wxjava.channel.properties;\n\nimport com.binarywang.solon.wxjava.channel.enums.HttpClientType"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/main/resources/META-INF/solon/wx-java-channel-solon-plugin.properties",
"chars": 106,
"preview": "solon.plugin=com.binarywang.solon.wxjava.channel.integration.WxChannelPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-channel-solon-plugin/src/test/resources/app.yml",
"chars": 0,
"preview": ""
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/README.md",
"chars": 3042,
"preview": "# wx-java-cp-multi-solon-plugin\n\n企业微信多账号配置\n\n- 实现多 WxCpService 初始化。\n- 未实现 WxCpTpService 初始化,需要的小伙伴可以参考多 WxCpService 配置的实现"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/pom.xml",
"chars": 1116,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/AbstractWxCpConfiguration.java",
"chars": 6290,
"preview": "package com.binarywang.solon.wxjava.cp_multi.configuration.services;\n\nimport com.binarywang.solon.wxjava.cp_multi.proper"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/WxCpInJedisConfiguration.java",
"chars": 2888,
"preview": "package com.binarywang.solon.wxjava.cp_multi.configuration.services;\n\nimport com.binarywang.solon.wxjava.cp_multi.proper"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/WxCpInMemoryConfiguration.java",
"chars": 1156,
"preview": "package com.binarywang.solon.wxjava.cp_multi.configuration.services;\n\nimport com.binarywang.solon.wxjava.cp_multi.proper"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/configuration/services/WxCpInRedissonConfiguration.java",
"chars": 2654,
"preview": "package com.binarywang.solon.wxjava.cp_multi.configuration.services;\n\nimport com.binarywang.solon.wxjava.cp_multi.proper"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/integration/WxCpMultiPluginImpl.java",
"chars": 882,
"preview": "package com.binarywang.solon.wxjava.cp_multi.integration;\n\nimport com.binarywang.solon.wxjava.cp_multi.configuration.ser"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/properties/WxCpMultiProperties.java",
"chars": 2583,
"preview": "package com.binarywang.solon.wxjava.cp_multi.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\nimport or"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/properties/WxCpMultiRedisProperties.java",
"chars": 731,
"preview": "package com.binarywang.solon.wxjava.cp_multi.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport j"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/properties/WxCpSingleProperties.java",
"chars": 791,
"preview": "package com.binarywang.solon.wxjava.cp_multi.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport j"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/service/WxCpMultiServices.java",
"chars": 496,
"preview": "package com.binarywang.solon.wxjava.cp_multi.service;\n\nimport me.chanjar.weixin.cp.api.WxCpService;\n\n/**\n * 企业微信 {@link "
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp_multi/service/WxCpMultiServicesImpl.java",
"chars": 964,
"preview": "package com.binarywang.solon.wxjava.cp_multi.service;\n\nimport me.chanjar.weixin.cp.api.WxCpService;\n\nimport java.util.Ma"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/main/resources/META-INF/solon/wx-java-cp-multi-solon-plugin.properties",
"chars": 107,
"preview": "solon.plugin=com.binarywang.solon.wxjava.cp_multi.integration.WxCpMultiPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-cp-multi-solon-plugin/src/test/resources/app.properties",
"chars": 705,
"preview": "# ?? 1 ??\nwx.cp.corps.tenantId1.corp-id = @corp-id\nwx.cp.corps.tenantId1.corp-secret = @corp-secret\n ## ??\nwx.cp.corps."
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/README.md",
"chars": 1160,
"preview": "# wx-java-cp-solon-plugin\n\n## 快速开始\n\n1. 引入依赖\n ```xml\n <dependency>\n <groupId>com.github.binarywang</groupId>"
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/pom.xml",
"chars": 1032,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/config/WxCpServiceAutoConfiguration.java",
"chars": 1377,
"preview": "package com.binarywang.solon.wxjava.cp.config;\n\nimport com.binarywang.solon.wxjava.cp.properties.WxCpProperties;\nimport "
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/integration/WxCpPluginImpl.java",
"chars": 1005,
"preview": "package com.binarywang.solon.wxjava.cp.integration;\n\nimport com.binarywang.solon.wxjava.cp.config.WxCpServiceAutoConfigu"
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/properties/WxCpProperties.java",
"chars": 2423,
"preview": "package com.binarywang.solon.wxjava.cp.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\nimport org.noea"
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/properties/WxCpRedisProperties.java",
"chars": 669,
"preview": "package com.binarywang.solon.wxjava.cp.properties;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * Redis配置.\n "
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/storage/AbstractWxCpConfigStorageConfiguration.java",
"chars": 2086,
"preview": "package com.binarywang.solon.wxjava.cp.storage;\n\nimport com.binarywang.solon.wxjava.cp.properties.WxCpProperties;\nimport"
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/storage/WxCpInJedisConfigStorageConfiguration.java",
"chars": 2638,
"preview": "package com.binarywang.solon.wxjava.cp.storage;\n\nimport com.binarywang.solon.wxjava.cp.properties.WxCpProperties;\nimport"
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/storage/WxCpInMemoryConfigStorageConfiguration.java",
"chars": 984,
"preview": "package com.binarywang.solon.wxjava.cp.storage;\n\nimport com.binarywang.solon.wxjava.cp.properties.WxCpProperties;\nimport"
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/cp/storage/WxCpInRedissonConfigStorageConfiguration.java",
"chars": 2416,
"preview": "package com.binarywang.solon.wxjava.cp.storage;\n\nimport com.binarywang.solon.wxjava.cp.properties.WxCpProperties;\nimport"
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/main/resources/META-INF/solon/wx-java-cp-solon-plugin.properties",
"chars": 96,
"preview": "solon.plugin=com.binarywang.solon.wxjava.cp.integration.WxCpPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-cp-solon-plugin/src/test/resources/app.properties",
"chars": 673,
"preview": "# ???????(??)\nwx.cp.corp-id = @corp-id\nwx.cp.corp-secret = @corp-secret\n# ??\nwx.cp.agent-id = @agent-id\nwx.cp.token = @t"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/README.md",
"chars": 3002,
"preview": "# wx-java-miniapp-multi-solon-plugin\n\n## 快速开始\n\n1. 引入依赖\n ```xml\n <dependency>\n <groupId>com.github.binarywan"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/pom.xml",
"chars": 1427,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/configuration/services/AbstractWxMaConfiguration.java",
"chars": 5762,
"preview": "package com.binarywang.solon.wxjava.miniapp.configuration.services;\n\nimport cn.binarywang.wx.miniapp.api.WxMaService;\nim"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/configuration/services/WxMaInJedisConfiguration.java",
"chars": 2838,
"preview": "package com.binarywang.solon.wxjava.miniapp.configuration.services;\n\nimport cn.binarywang.wx.miniapp.config.impl.WxMaDef"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/configuration/services/WxMaInMemoryConfiguration.java",
"chars": 1201,
"preview": "package com.binarywang.solon.wxjava.miniapp.configuration.services;\n\nimport cn.binarywang.wx.miniapp.config.impl.WxMaDef"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/configuration/services/WxMaInRedissonConfiguration.java",
"chars": 2659,
"preview": "package com.binarywang.solon.wxjava.miniapp.configuration.services;\n\nimport cn.binarywang.wx.miniapp.config.impl.WxMaDef"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/integration/WxMiniappMultiPluginImpl.java",
"chars": 884,
"preview": "package com.binarywang.solon.wxjava.miniapp.integration;\n\nimport com.binarywang.solon.wxjava.miniapp.configuration.servi"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/properties/WxMaMultiProperties.java",
"chars": 3077,
"preview": "package com.binarywang.solon.wxjava.miniapp.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\nimport org"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/properties/WxMaMultiRedisProperties.java",
"chars": 854,
"preview": "package com.binarywang.solon.wxjava.miniapp.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport ja"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/properties/WxMaSingleProperties.java",
"chars": 682,
"preview": "package com.binarywang.solon.wxjava.miniapp.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport ja"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/service/WxMaMultiServices.java",
"chars": 502,
"preview": "package com.binarywang.solon.wxjava.miniapp.service;\n\n\nimport cn.binarywang.wx.miniapp.api.WxMaService;\n\n/**\n * 微信小程序 {@"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/service/WxMaMultiServicesImpl.java",
"chars": 872,
"preview": "package com.binarywang.solon.wxjava.miniapp.service;\n\nimport cn.binarywang.wx.miniapp.api.WxMaService;\n\nimport java.util"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/main/resources/META-INF/solon/wx-java-miniapp-multi-solon-plugin.properties",
"chars": 111,
"preview": "solon.plugin=com.binarywang.solon.wxjava.miniapp.integration.WxMiniappMultiPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-miniapp-multi-solon-plugin/src/test/resources/app.properties",
"chars": 1319,
"preview": "# 公众号配置\n## 应用 1 配置(必填)\nwx.ma.apps.tenantId1.app-id=appId\nwx.ma.apps.tenantId1.app-secret=@secret\n## 选填\nwx.ma.apps.tenant"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/README.md",
"chars": 1246,
"preview": "# wx-java-miniapp-solon-plugin\n## 快速开始\n1. 引入依赖\n ```xml\n <dependency>\n <groupId>com.github.binarywang</group"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/pom.xml",
"chars": 1395,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/config/WxMaServiceAutoConfiguration.java",
"chars": 1836,
"preview": "package com.binarywang.solon.wxjava.miniapp.config;\n\nimport cn.binarywang.wx.miniapp.api.WxMaService;\nimport cn.binarywa"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/config/storage/AbstractWxMaConfigStorageConfiguration.java",
"chars": 1755,
"preview": "package com.binarywang.solon.wxjava.miniapp.config.storage;\n\nimport cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConf"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/config/storage/WxMaInJedisConfigStorageConfiguration.java",
"chars": 2691,
"preview": "package com.binarywang.solon.wxjava.miniapp.config.storage;\n\nimport cn.binarywang.wx.miniapp.config.WxMaConfig;\nimport c"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/config/storage/WxMaInMemoryConfigStorageConfiguration.java",
"chars": 935,
"preview": "package com.binarywang.solon.wxjava.miniapp.config.storage;\n\nimport cn.binarywang.wx.miniapp.config.WxMaConfig;\nimport c"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/config/storage/WxMaInRedissonConfigStorageConfiguration.java",
"chars": 2305,
"preview": "package com.binarywang.solon.wxjava.miniapp.config.storage;\n\nimport cn.binarywang.wx.miniapp.config.WxMaConfig;\nimport c"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/enums/HttpClientType.java",
"chars": 372,
"preview": "package com.binarywang.solon.wxjava.miniapp.enums;\n\n/**\n * httpclient类型.\n *\n * @author <a href=\"https://github.com/binar"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/enums/StorageType.java",
"chars": 376,
"preview": "package com.binarywang.solon.wxjava.miniapp.enums;\n\n/**\n * storage类型.\n *\n * @author <a href=\"https://github.com/binarywa"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/integration/WxMiniappPluginImpl.java",
"chars": 1061,
"preview": "package com.binarywang.solon.wxjava.miniapp.integration;\n\nimport com.binarywang.solon.wxjava.miniapp.config.WxMaServiceA"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/properties/RedisProperties.java",
"chars": 623,
"preview": "package com.binarywang.solon.wxjava.miniapp.properties;\n\nimport lombok.Data;\n\n/**\n * redis 配置.\n *\n * @author <a href=\"ht"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/miniapp/properties/WxMaProperties.java",
"chars": 2213,
"preview": "package com.binarywang.solon.wxjava.miniapp.properties;\n\nimport com.binarywang.solon.wxjava.miniapp.enums.HttpClientType"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/main/resources/META-INF/solon/wx-java-miniapp-solon-plugin.properties",
"chars": 106,
"preview": "solon.plugin=com.binarywang.solon.wxjava.miniapp.integration.WxMiniappPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-miniapp-solon-plugin/src/test/resources/app.properties",
"chars": 831,
"preview": "# ?????(??)\nwx.miniapp.appid = appId\nwx.miniapp.secret = @secret\nwx.miniapp.token = @token\nwx.miniapp.aesKey = @aesKey\nw"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/README.md",
"chars": 3156,
"preview": "# wx-java-mp-multi-solon-plugin\n\n## 快速开始\n\n1. 引入依赖\n ```xml\n <dependency>\n <groupId>com.github.binarywang</gr"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/pom.xml",
"chars": 1413,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/configuration/services/AbstractWxMpConfiguration.java",
"chars": 6545,
"preview": "package com.binarywang.solon.wxjava.mp_multi.configuration.services;\n\nimport com.binarywang.solon.wxjava.mp_multi.proper"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/configuration/services/WxMpInJedisConfiguration.java",
"chars": 2963,
"preview": "package com.binarywang.solon.wxjava.mp_multi.configuration.services;\n\nimport com.binarywang.solon.wxjava.mp_multi.proper"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/configuration/services/WxMpInMemoryConfiguration.java",
"chars": 1253,
"preview": "package com.binarywang.solon.wxjava.mp_multi.configuration.services;\n\nimport com.binarywang.solon.wxjava.mp_multi.proper"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/configuration/services/WxMpInRedissonConfiguration.java",
"chars": 2653,
"preview": "package com.binarywang.solon.wxjava.mp_multi.configuration.services;\n\nimport com.binarywang.solon.wxjava.mp_multi.proper"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/integration/WxMpMultiPluginImpl.java",
"chars": 884,
"preview": "package com.binarywang.solon.wxjava.mp_multi.integration;\n\nimport com.binarywang.solon.wxjava.mp_multi.configuration.ser"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/properties/WxMpMultiProperties.java",
"chars": 3042,
"preview": "package com.binarywang.solon.wxjava.mp_multi.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\nimport or"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/properties/WxMpMultiRedisProperties.java",
"chars": 853,
"preview": "package com.binarywang.solon.wxjava.mp_multi.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport j"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/properties/WxMpSingleProperties.java",
"chars": 681,
"preview": "package com.binarywang.solon.wxjava.mp_multi.properties;\n\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport j"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/service/WxMpMultiServices.java",
"chars": 496,
"preview": "package com.binarywang.solon.wxjava.mp_multi.service;\n\n\nimport me.chanjar.weixin.mp.api.WxMpService;\n\n/**\n * 企业微信 {@link"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp_multi/service/WxMpMultiServicesImpl.java",
"chars": 866,
"preview": "package com.binarywang.solon.wxjava.mp_multi.service;\n\nimport me.chanjar.weixin.mp.api.WxMpService;\n\nimport java.util.Ma"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/main/resources/META-INF/solon/wx-java-mp-multi-solon-plugin.properties",
"chars": 107,
"preview": "solon.plugin=com.binarywang.solon.wxjava.mp_multi.integration.WxMpMultiPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-mp-multi-solon-plugin/src/test/resources/app.properties",
"chars": 741,
"preview": "# ?????\n## ?? 1 ??(??)\nwx.mp.apps.tenantId1.app-id=appId\nwx.mp.apps.tenantId1.app-secret=@secret\n## ??\nwx.mp.apps.tenant"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/README.md",
"chars": 1458,
"preview": "# wx-java-mp-solon-plugin\n\n## 快速开始\n\n1. 引入依赖\n ```xml\n <dependency>\n <groupId>com.github.binarywang</groupId>"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/pom.xml",
"chars": 1389,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/config/WxMpServiceAutoConfiguration.java",
"chars": 2153,
"preview": "package com.binarywang.solon.wxjava.mp.config;\n\nimport com.binarywang.solon.wxjava.mp.enums.HttpClientType;\nimport com.b"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/config/storage/AbstractWxMpConfigStorageConfiguration.java",
"chars": 1164,
"preview": "package com.binarywang.solon.wxjava.mp.config.storage;\n\nimport com.binarywang.solon.wxjava.mp.properties.WxMpProperties;"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/config/storage/WxMpInJedisConfigStorageConfiguration.java",
"chars": 2866,
"preview": "package com.binarywang.solon.wxjava.mp.config.storage;\n\nimport com.binarywang.solon.wxjava.mp.properties.RedisProperties"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/config/storage/WxMpInMemoryConfigStorageConfiguration.java",
"chars": 997,
"preview": "package com.binarywang.solon.wxjava.mp.config.storage;\n\nimport com.binarywang.solon.wxjava.mp.properties.WxMpProperties;"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/config/storage/WxMpInRedissonConfigStorageConfiguration.java",
"chars": 2559,
"preview": "package com.binarywang.solon.wxjava.mp.config.storage;\n\nimport com.binarywang.solon.wxjava.mp.properties.RedisProperties"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/enums/HttpClientType.java",
"chars": 367,
"preview": "package com.binarywang.solon.wxjava.mp.enums;\n\n/**\n * httpclient类型.\n *\n * @author <a href=\"https://github.com/binarywang"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/enums/StorageType.java",
"chars": 371,
"preview": "package com.binarywang.solon.wxjava.mp.enums;\n\n/**\n * storage类型.\n *\n * @author <a href=\"https://github.com/binarywang\">B"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/integration/WxMpPluginImpl.java",
"chars": 1227,
"preview": "package com.binarywang.solon.wxjava.mp.integration;\n\nimport com.binarywang.solon.wxjava.mp.config.WxMpServiceAutoConfigu"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/properties/HostConfig.java",
"chars": 455,
"preview": "package com.binarywang.solon.wxjava.mp.properties;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n@Data\npublic clas"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/properties/RedisProperties.java",
"chars": 859,
"preview": "package com.binarywang.solon.wxjava.mp.properties;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * redis 配置属性"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/java/com/binarywang/solon/wxjava/mp/properties/WxMpProperties.java",
"chars": 1892,
"preview": "package com.binarywang.solon.wxjava.mp.properties;\n\nimport com.binarywang.solon.wxjava.mp.enums.HttpClientType;\nimport c"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/main/resources/META-INF/solon/wx-java-mp-solon-plugin.properties",
"chars": 96,
"preview": "solon.plugin=com.binarywang.solon.wxjava.mp.integration.WxMpPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-mp-solon-plugin/src/test/resources/app.properties",
"chars": 349,
"preview": "# ?????(??)\nwx.mp.app-id=appId\nwx.mp.secret=@secret\nwx.mp.token=@token\nwx.mp.aes-key=@aesKey\nwx.mp.use-stable-access-tok"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/README.md",
"chars": 1447,
"preview": "# wx-java-open-solon-plugin\n## 快速开始\n1. 引入依赖\n ```xml\n <dependency>\n <groupId>com.github.binarywang</groupId>"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/pom.xml",
"chars": 1049,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/config/WxOpenServiceAutoConfiguration.java",
"chars": 1201,
"preview": "package com.binarywang.solon.wxjava.open.config;\n\nimport me.chanjar.weixin.open.api.WxOpenComponentService;\nimport me.ch"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/config/storage/AbstractWxOpenConfigStorageConfiguration.java",
"chars": 1280,
"preview": "package com.binarywang.solon.wxjava.open.config.storage;\n\nimport com.binarywang.solon.wxjava.open.properties.WxOpenPrope"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/config/storage/WxOpenInJedisConfigStorageConfiguration.java",
"chars": 2669,
"preview": "package com.binarywang.solon.wxjava.open.config.storage;\n\nimport com.binarywang.solon.wxjava.open.properties.WxOpenPrope"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/config/storage/WxOpenInMemoryConfigStorageConfiguration.java",
"chars": 977,
"preview": "package com.binarywang.solon.wxjava.open.config.storage;\n\nimport com.binarywang.solon.wxjava.open.properties.WxOpenPrope"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/config/storage/WxOpenInRedissonConfigStorageConfiguration.java",
"chars": 2462,
"preview": "package com.binarywang.solon.wxjava.open.config.storage;\n\nimport com.binarywang.solon.wxjava.open.properties.WxOpenPrope"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/integration/WxOpenPluginImpl.java",
"chars": 1060,
"preview": "package com.binarywang.solon.wxjava.open.integration;\n\nimport com.binarywang.solon.wxjava.open.config.WxOpenServiceAutoC"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/properties/WxOpenProperties.java",
"chars": 2543,
"preview": "package com.binarywang.solon.wxjava.open.properties;\n\nimport lombok.Data;\nimport org.noear.solon.annotation.Configuratio"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/main/java/com/binarywang/solon/wxjava/open/properties/WxOpenRedisProperties.java",
"chars": 652,
"preview": "package com.binarywang.solon.wxjava.open.properties;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * Redis配置."
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/main/resources/META-INF/solon/wx-java-open-solon-plugin.properties",
"chars": 100,
"preview": "solon.plugin=com.binarywang.solon.wxjava.open.integration.WxOpenPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-open-solon-plugin/src/test/resources/app.properties",
"chars": 504,
"preview": "# ?????(??)\nwx.open.appId = appId\nwx.open.secret = @secret\nwx.open.token = @token\nwx.open.aesKey = @aesKey\n# ????redis(?"
},
{
"path": "solon-plugins/wx-java-pay-solon-plugin/README.md",
"chars": 1193,
"preview": "# 使用说明\n1. 在自己的Solon项目里,引入maven依赖\n```xml\n <dependency>\n <groupId>com.github.binarywang</groupId>\n <artif"
},
{
"path": "solon-plugins/wx-java-pay-solon-plugin/pom.xml",
"chars": 820,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "solon-plugins/wx-java-pay-solon-plugin/src/main/java/com/binarywang/solon/wxjava/pay/config/WxPayAutoConfiguration.java",
"chars": 3093,
"preview": "package com.binarywang.solon.wxjava.pay.config;\n\nimport com.binarywang.solon.wxjava.pay.properties.WxPayProperties;\nimpo"
},
{
"path": "solon-plugins/wx-java-pay-solon-plugin/src/main/java/com/binarywang/solon/wxjava/pay/integration/WxPayPluginImpl.java",
"chars": 534,
"preview": "package com.binarywang.solon.wxjava.pay.integration;\n\nimport com.binarywang.solon.wxjava.pay.config.WxPayAutoConfigurati"
},
{
"path": "solon-plugins/wx-java-pay-solon-plugin/src/main/java/com/binarywang/solon/wxjava/pay/properties/WxPayProperties.java",
"chars": 2034,
"preview": "package com.binarywang.solon.wxjava.pay.properties;\n\nimport lombok.Data;\nimport org.noear.solon.annotation.Configuration"
},
{
"path": "solon-plugins/wx-java-pay-solon-plugin/src/main/resources/META-INF/solon/wx-java-pay-solon-plugin.properties",
"chars": 98,
"preview": "solon.plugin=com.binarywang.solon.wxjava.pay.integration.WxPayPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-pay-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-pay-solon-plugin/src/test/resources/app.yml",
"chars": 58,
"preview": "wx:\n pay:\n appId:\n mchId:\n mchKey:\n keyPath:\n"
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/README.md",
"chars": 1480,
"preview": "# wx-java-qidian-solon-plugin\n\n## 快速开始\n\n1. 引入依赖\n ```xml\n <dependency>\n <groupId>com.github.binarywang</groupId"
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/pom.xml",
"chars": 1267,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/config/WxQidianServiceAutoConfiguration.java",
"chars": 2372,
"preview": "package com.binarywang.solon.wxjava.qidian.config;\n\nimport com.binarywang.solon.wxjava.qidian.enums.HttpClientType;\nimpo"
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/config/WxQidianStorageAutoConfiguration.java",
"chars": 5120,
"preview": "package com.binarywang.solon.wxjava.qidian.config;\n\nimport com.binarywang.solon.wxjava.qidian.enums.StorageType;\nimport "
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/enums/HttpClientType.java",
"chars": 371,
"preview": "package com.binarywang.solon.wxjava.qidian.enums;\n\n/**\n * httpclient类型.\n *\n * @author <a href=\"https://github.com/binary"
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/enums/StorageType.java",
"chars": 375,
"preview": "package com.binarywang.solon.wxjava.qidian.enums;\n\n/**\n * storage类型.\n *\n * @author <a href=\"https://github.com/binarywan"
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/integration/WxQidianPluginImpl.java",
"chars": 716,
"preview": "package com.binarywang.solon.wxjava.qidian.integration;\n\nimport com.binarywang.solon.wxjava.qidian.config.WxQidianServic"
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/properties/HostConfig.java",
"chars": 322,
"preview": "package com.binarywang.solon.wxjava.qidian.properties;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n@Data\npublic "
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/properties/RedisProperties.java",
"chars": 863,
"preview": "package com.binarywang.solon.wxjava.qidian.properties;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * redis "
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/main/java/com/binarywang/solon/wxjava/qidian/properties/WxQidianProperties.java",
"chars": 1821,
"preview": "package com.binarywang.solon.wxjava.qidian.properties;\n\nimport com.binarywang.solon.wxjava.qidian.enums.HttpClientType;\n"
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/main/resources/META-INF/solon/wx-java-qidian-solon-plugin.properties",
"chars": 104,
"preview": "solon.plugin=com.binarywang.solon.wxjava.qidian.integration.WxQidianPluginImpl\nsolon.plugin.priority=10\n"
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/test/java/features/test/LoadTest.java",
"chars": 213,
"preview": "package features.test;\n\nimport org.junit.jupiter.api.Test;\nimport org.noear.solon.test.SolonTest;\n\n/**\n * @author noear "
},
{
"path": "solon-plugins/wx-java-qidian-solon-plugin/src/test/resources/app.yml",
"chars": 0,
"preview": ""
},
{
"path": "spring-boot-starters/MULTI_TENANT_MODE_IMPROVEMENT.md",
"chars": 3353,
"preview": "# 多租户模式配置改进说明\n\n## 问题背景\n\n用户在 issue #3835 中提出了一个架构设计问题:\n\n> 基础 Wx 实现类中已经有 configMap 了,可以用 configMap 来存储不同的小程序配置。不同的配置,都是复用同"
},
{
"path": "spring-boot-starters/pom.xml",
"chars": 2140,
"preview": "<?xml version=\"1.0\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http:/"
},
{
"path": "spring-boot-starters/wx-java-channel-multi-spring-boot-starter/README.md",
"chars": 4543,
"preview": "# wx-java-channel-multi-spring-boot-starter\n\n## 快速开始\n\n1. 引入依赖\n ```xml\n <dependencies>\n <dependency>\n "
},
{
"path": "spring-boot-starters/wx-java-channel-multi-spring-boot-starter/pom.xml",
"chars": 2234,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/autoconfigure/WxChannelMultiAutoConfiguration.java",
"chars": 507,
"preview": "package com.binarywang.spring.starter.wxjava.channel.autoconfigure;\n\nimport com.binarywang.spring.starter.wxjava.channel"
},
{
"path": "spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/WxChannelMultiServiceConfiguration.java",
"chars": 1202,
"preview": "package com.binarywang.spring.starter.wxjava.channel.configuration;\n\nimport com.binarywang.spring.starter.wxjava.channel"
},
{
"path": "spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/services/AbstractWxChannelConfiguration.java",
"chars": 6331,
"preview": "package com.binarywang.spring.starter.wxjava.channel.configuration.services;\n\nimport com.binarywang.spring.starter.wxjav"
},
{
"path": "spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/services/WxChannelInJedisConfiguration.java",
"chars": 3295,
"preview": "package com.binarywang.spring.starter.wxjava.channel.configuration.services;\n\nimport com.binarywang.spring.starter.wxjav"
},
{
"path": "spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/services/WxChannelInMemoryConfiguration.java",
"chars": 1417,
"preview": "package com.binarywang.spring.starter.wxjava.channel.configuration.services;\n\nimport com.binarywang.spring.starter.wxjav"
},
{
"path": "spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/services/WxChannelInRedisTemplateConfiguration.java",
"chars": 2008,
"preview": "package com.binarywang.spring.starter.wxjava.channel.configuration.services;\n\nimport com.binarywang.spring.starter.wxjav"
},
{
"path": "spring-boot-starters/wx-java-channel-multi-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/channel/configuration/services/WxChannelInRedissonConfiguration.java",
"chars": 2956,
"preview": "package com.binarywang.spring.starter.wxjava.channel.configuration.services;\n\nimport com.binarywang.spring.starter.wxjav"
}
]
// ... and 3871 more files (download for full content)
About this extraction
This page contains the full source code of the binarywang/WxJava GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 4071 files (10.0 MB), approximately 2.9M tokens, and a symbol index with 18700 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.