微信推送应用总结

总结了之前 差评提醒黑马词订阅 两个项目的相关操作流程和基本实现,给后面类似的项目提供参考。

一、 用户订阅

用户订阅是通过微信扫描二维码实现的。用户扫描二维码之后,关注”名不虚传”的服务号,并将用户信息及订阅配置传递给后端服务。

扫码时序图如下:

用户微信绑定时序图

注:用户提交的配置数据实际上统一存放在了Wechat-Service 的数据库中,微信提醒应用服务 不存储用户配置数据;当 应用服务 需要用户配置数据的时候,需要通过 Wechat-Service 提供的接口获取。

用户订阅信息可以封装成一个抽象数据类,具体的订阅配置由子类添加:

1
2
3
4
5
6
7
8
9
@Data
public abstract class Subscription {
protected String nick;
protected String subNick;
protected String openid;
protected String uuid;
protected LocalDateTime createTime;
protected LocalDateTime updateTime;
}

Subscription 子类示例:

1
2
3
4
public class DarkHorseWordsSubscription extends Subscription {
private List<Long> cids;
private List<String> names;
}

注:前端请求的 Json 数据格式需要匹配具体的 Subscription 子类;后面的修改也基于这个子类。

应用服务 发送订阅信息到 Wechat-Service 的数据类示例:

1
2
3
4
5
6
7
8
9
@Data
public class WechatBindRequest {
private String serviceName;
private String nick;
private String subNick;
private String uuid;
private Subscription extra;
private TemplateMsg welcome; // 绑定成功服务号推送的消息
}

参考文档

Wechat-Service 绑定操作接口文档:

Wechat-Service 绑定信息查询接口文档:

二、ONS消息处理

阿里云提供了ONS消息处理的SDK,使用比较方便。

开启ONS消息订阅示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void createConsumer() {
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, getConsumerId());
properties.put(PropertyKeyConst.AccessKey, getAccessKey());
properties.put(PropertyKeyConst.SecretKey, getSecretKey());
return ONSFactory.createConsumer(properties);
}
public void subscribe() {
Consumer consumer = createConsumer();
consumer.subscribe(getTopic, getTag(), (message, context) -> {
handle(message); // 具体处理消息的方法
});
consumer.start(); // 此处启动消费者线程
}

三、发送微信提醒消息

提醒消息在微信中为 模板消息 ,需要绑定微信公众号后台提供的消息模板。

模板消息 类示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Data
public class TemplateMessage {
private String toUser; // 接受消息的用户,openid
private String templateId; // 绑定的模板ID
private String url; // 消息点击后跳转的地址
private String topColor; // 全局字体颜色
private Map<String, TemplateParam> data; // 模板对应字段的数据
}
@Data
public class TemplateParam {
private String value; // 字段值
private String color; // 指定字体颜色
}

注:模板消息发送是直接调用微信后台接口,Wechat-Service 只做转发,参考文档

四、对外接口

  1. 新增配置信息接口[POST]。此接口包含了二维码 ticket 和绑定状态,也是二维码获取和绑定状态查询接口。
  2. 更改配置信息接口[PUT]。
  3. 获取用户及配置列表接口[GET]。
  4. 删除配置信息接口[DELETE]。
  5. 微信消息详情页数据接口[GET]。根据具体业务提供数据。