使用 Spring Boot Starter 封装 微信 SDK

微信对外提供了很多 API,但是这些 API 使用起来非常不方便,用户需要实现非常底层的操作;所以我以 spring-boot-starter 的形式对其做了一次封装,形成了 wechat-spring-boot-starters 这个项目,尽量做到“零”配置运行;目前实现了消息部分的封装,完成所有类型消息的统一处理,自动执行消息加解密而无需用户参与。以下将介绍 wechat-spring-boot-starters 的基本情况。

配置

前提

  • 此项目基于 Spring Boot,所以要使用本项目,必须引入 Spring Boot 的相关依赖
  • JDK 1.8 及以上

引入 maven 依赖


    me.javaroad.openapi.wechat
    wechat-spring-boot-starters
    1.0-SNAPSHOT

因为目前是 snapshot 版本,所以还需要引入 snapshot repository :


  
      
      sonatype snapshots
      https://oss.sonatype.org/content/repositories/snapshots/
  

基础配置

在 application.yml 中新增以下配置:

weixin:
  mp:
    endpoint:
      # 微信回调地址,默认为 /weixin/callback,如需自定义,请修改以下配置项
      callback-url: /weixin/callback
    security:
      # 微信后台配置的 token
      token: 1234567890
      # 微信后台配置的消息加解密 aeskey
      encodingAesKey: abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG
      # #############################################################
      # 微信 access token 过期刷新阈值,计算方法:
      # 当前时间 - (获得token时间 + token 有效期 + 阈值) < 0 则刷新 token
      # 默认为 token 失效前 5 分钟刷新
      # #############################################################
      refresh-token-threshold: 300
    auth:
      # APPID
      appid: appid
      # APP secret
      secret: secret

关于消息加密解密

系统会自动判断微信服务器推送给用户的消息是否经过加密,如果经过加密,将会自动解密,并在用户服务器返回给微信服务器时自动加密数据,这个过程不需要用户做任何操作。

消息处理 - MessageHandler

当系统接收到微信服务器推送的消息之后,做了两件事情:

  1. 发布了 ReceiveMessageEvent 类型的事件
  2. 将收到的消息分发到 MessageHandler

所以用户可以通过以上两种方式获取微信服务器推送的消息。

第一种方式:

@Component
public class ReceiveMessageEventListener implements ApplicationListener {

    @Async
    @Override
    public void onApplicationEvent(ReceiveMessageEvent event) {
        System.out.println(event.getSource());
    }
}

这里是通过监听系统事件获取对应的消息,此处 强烈建议 以异步的方式处理消息,如需同步处理消息,请参考第二种方式。

第二种方式

@Component
public class TextMessageHandler extends AbstractMessageHandler {

    public TextMessageHandler(MessageHandlerFactory messageHandlerFactory) {
        super(messageHandlerFactory);
    }

    @Override
    public ResponseMessage handleMessage(TextMessage message) {
        // 此处根据业务对收到的消息做处理,注意,处理时间不能超过 5s,否则会导致微信对用户给出严重错误的提示
        // 如果时间很可能超过 5s, 需要在新线程中处理
        // 如果不需要对用户返回任何消息,则请在此处返回 EmptyResponseMessage
        return new TextResponseMessage();
    }

}

这种方式会同步执行,所以处理时间必须不能超过 5 s .

系统中提供了以下类型的消息,其中 普通消息事件推送消息 是微信服务器推送给用户服务器的消息,它将作为 MessageHandler 的参数传给对应的 Handler, 被动回复消息特殊消息 为用户服务器返回给微信服务器的消息, 它将作为 MessageHandler 的返回值。

普通消息

  • TextMessage 文本消息

  • ImageMessage 图片消息

  • VoiceMessage 语音消息

  • VideoMessage 视频消息

  • ShortVideoMessage 小视频消息

  • LocationMessage 地理位置消息

  • LinkMessage 链接消息

事件推送消息

  • SubscribeEventMessage 关注/取消关注 事件
  • QrCodeEventMessage 扫二维码事件
  • CustomMenuEventMessage 自定义菜单事件
  • LocationEventMessage 上报地理位置事件

被动回复消息

  • TextResponseMessage 文本消息

  • ImageResponseMessage 图片消息

  • VoiceResponseMessage 语音消息

  • VideoResponseMessage 视频消息

  • MusicResponseMessage 音乐消息

  • NewsResponseMessage 图文消息

特殊消息

  • EmptyResponseMessage 这个消息仅用于被动回复用户时,如果接收了用户的消息而不希望给用户回复的话,请返回此消息

结语

以上就是目前实现的消息管理的部分接口,后续会继续完善。

最后附上源码:GitHub

你可能感兴趣的:(使用 Spring Boot Starter 封装 微信 SDK)