轻量的微信公众号组件(A Lightweight Wechat Component)
包引入
<dependency>
<groupId>me.hao0</groupId>
<artifactId>wechat</artifactId>
<version>1.9.3</version>
</dependency>
依赖包,注意引入项目时是否需要exclude:
<dependency>
<groupId>me.hao0</groupId>
<artifactId>common</artifactId>
<version>1.1.3</version>
</dependency>
<!-- 1.3.0之后引入 -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
业务系统与微信公众号交互图阐述:
API基本用法:
Wechat wechat =
WechatBuilder.newBuilder("appId", "appSecret")
.conf1() // 其他可选配置
...
.build();
// 同步调用
wechat.module().api();
// 异步调用
wechat.module().api(Callback<T>);
Wechat已实现以下组件:
API使用文档见这里
组件扩展: 如果想自己扩展组件,可以继承Component
,调用register
:
public class MyComponent extends Component {
// ...
}
MyComponent myComp = new MyComponent();
wechat.register(myComp);
AccessToken管理:
由于微信服务器限制AccessToken请求次数,并且频繁请求AccessToken并不是一个明智之举,需要将获取的AccessToken保存下来,待过期时,再去请求新的AccessToken,所以以上API均提供了无accessToken版本,如:
List<String> ip();
List<String> ip(String accessToken);
实现AccessTokenLoader
:
默认的AccessTokenLoader实现(生产环境不推荐使用):
public class DefaultAccessTokenLoader implements AccessTokenLoader {
private volatile AccessToken validToken;
@Override
public String get() {
return (validToken == null
|| Strings.isNullOrEmpty(validToken.getAccessToken())
|| System.currentTimeMillis() > validToken.getExpiredAt()) ? null : validToken.getAccessToken();
}
@Override
public void refresh(AccessToken token) {
validToken = token;
}
}
Ticket管理: 同AccessToken类似,需自己实现接口TicketLoader
:
默认的TicketLoader实现(生产环境不推荐使用):
public class DefaultTicketLoader implements TicketLoader {
private final Map<TicketType, Ticket> tickets = new ConcurrentHashMap<>();
@Override
public String get(TicketType type) {
Ticket t = tickets.get(type);
return (t == null
|| Strings.isNullOrEmpty(t.getTicket())
|| System.currentTimeMillis() > t.getExpireAt()) ? null : t.getTicket();
}
@Override
public void refresh(Ticket ticket) {
tickets.put(ticket.getType(), ticket);
}
}
具体例子,可见测试用例。
历史版本
1.0.0:
1.1.0:
1.2.0:
Wechat.newWechat
WechatBuilder
方式。*Loader
设置过期时刻。1.3.0:
1.4.0:
1.5.0:
1.6.0:
1.6.1:
1.6.2:
1.6.3:
1.6.4:
1.6.5
1.6.6
1.6.7
1.6.8
1.6.9
1.6.10
1.7.0
Users.getUsers()
。 1.8.0
QrCodes.getPermQrcodeBySceneStr()
。 1.9.0
1.9.1
1.9.2
RecvTemplateSendJobFinishEvent
;RecvUnknownEvent
。1.9.3
1.1.3
,修复XmlReaders
线程安全问题。微信相关文档
支付宝:
微信: